/** 
 * flowplayer.js 3.0.5. The Flowplayer API
 * 
 * Copyright 2009 Flowplayer Oy
 * 
 * This file is part of Flowplayer.
 * 
 * Flowplayer is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Flowplayer is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY;
 without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Flowplayer.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Version: 3.0.5 - Tue Feb 03 2009 13:14:17 GMT-0000 (GMT+00:00)
 */
(function(){
function log(args){
console.log("$f.fireEvent",[].slice.call(args));
}
function clone(obj){
if(!obj||typeof obj!='object'){
return obj;
}
var temp=new obj.constructor();
for(var key in obj){
if(obj.hasOwnProperty(key)){
temp[key]=clone(obj[key]);
}
}
return temp;
}
function each(obj,fn){
if(!obj){
return;
}
var name,i=0,length=obj.length;
if(length===undefined){
for(name in obj){
if(fn.call(obj[name],name,obj[name])===false){
break;
}
}
}
else{
for(var value=obj[0];
i<length&&fn.call(value,i,value)!==false;
value=obj[++i]){
}
}
return obj;
}
function el(id){
return document.getElementById(id);
}
function extend(to,from,skipFuncs){
if(to&&from){
each(from,function(name,value){
if(!skipFuncs||typeof value!='function'){
to[name]=value;
}
}
);
}
}
function select(query){
var index=query.indexOf(".");
if(index!=-1){
var tag=query.substring(0,index)||"*";
var klass=query.substring(index+1,query.length);
var els=[];
each(document.getElementsByTagName(tag),function(){
if(this.className&&this.className.indexOf(klass)!=-1){
els.push(this);
}
}
);
return els;
}
}
function stopEvent(e){
e=e||window.event;
if(e.preventDefault){
e.stopPropagation();
e.preventDefault();
}
else{
e.returnValue=false;
e.cancelBubble=true;
}
return false;
}
function bind(to,evt,fn){
to[evt]=to[evt]||[];
to[evt].push(fn);
}
function makeId(){
return"_"+(""+Math.random()).substring(2,10);
}
var Clip=function(json,index,player){
var self=this;
var cuepoints={
}
;
var listeners={
}
;
self.index=index;
if(typeof json=='string'){
json={
url:json}
;
}
extend(this,json,true);
each(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","),function(){
var evt="on"+this;
if(evt.indexOf("*")!=-1){
evt=evt.substring(0,evt.length-1);
var before="onBefore"+evt.substring(2);
self[before]=function(fn){
bind(listeners,before,fn);
return self;
}
;
}
self[evt]=function(fn){
bind(listeners,evt,fn);
return self;
}
;
if(index==-1){
if(self[before]){
player[before]=self[before];
}
if(self[evt]){
player[evt]=self[evt];
}
}
}
);
extend(this,{
onCuepoint:function(points,fn){
if(arguments.length==1){
cuepoints.embedded=[null,points];
return self;
}
if(typeof points=='number'){
points=[points];
}
var fnId=makeId();
cuepoints[fnId]=[points,fn];
if(player.isLoaded()){
player._api().fp_addCuepoints(points,index,fnId);
}
return self;
}
,update:function(json){
extend(self,json);
if(player.isLoaded()){
player._api().fp_updateClip(json,index);
}
var conf=player.getConfig();
var clip=(index==-1)?conf.clip:conf.playlist[index];
extend(clip,json,true);
}
,_fireEvent:function(evt,arg1,arg2,target){
if(evt=='onLoad'){
each(cuepoints,function(key,val){
if(val[0]){
player._api().fp_addCuepoints(val[0],index,key);
}
}
);
return false;
}
target=target||self;
if(evt=='onCuepoint'){
var fn=cuepoints[arg1];
if(fn){
return fn[1].call(player,target,arg2);
}
}
if(evt=='onStart'||evt=='onUpdate'){
extend(target,arg1);
if(!target.duration){
target.duration=arg1.metaData.duration;
}
else{
target.fullDuration=arg1.metaData.duration;
}
}
var ret=true;
each(listeners[evt],function(){
ret=this.call(player,target,arg1,arg2);
}
);
return ret;
}
}
);
if(json.onCuepoint){
var arg=json.onCuepoint;
self.onCuepoint.apply(self,typeof arg=='function'?[arg]:arg);
delete json.onCuepoint;
}
each(json,function(key,val){
if(typeof val=='function'){
bind(listeners,key,val);
delete json[key];
}
}
);
if(index==-1){
player.onCuepoint=this.onCuepoint;
}
}
;
var Plugin=function(name,json,player,fn){
var listeners={
}
;
var self=this;
var hasMethods=false;
if(fn){
extend(listeners,fn);
}
each(json,function(key,val){
if(typeof val=='function'){
listeners[key]=val;
delete json[key];
}
}
);
extend(this,{
animate:function(props,speed,fn){
if(!props){
return self;
}
if(typeof speed=='function'){
fn=speed;
speed=500;
}
if(typeof props=='string'){
var key=props;
props={
}
;
props[key]=speed;
speed=500;
}
if(fn){
var fnId=makeId();
listeners[fnId]=fn;
}
if(speed===undefined){
speed=500;
}
json=player._api().fp_animate(name,props,speed,fnId);
return self;
}
,css:function(props,val){
if(val!==undefined){
var css={
}
;
css[props]=val;
props=css;
}
json=player._api().fp_css(name,props);
extend(self,json);
return self;
}
,show:function(){
this.display='block';
player._api().fp_showPlugin(name);
return self;
}
,hide:function(){
this.display='none';
player._api().fp_hidePlugin(name);
return self;
}
,toggle:function(){
this.display=player._api().fp_togglePlugin(name);
return self;
}
,fadeTo:function(o,speed,fn){
if(typeof speed=='function'){
fn=speed;
speed=500;
}
if(fn){
var fnId=makeId();
listeners[fnId]=fn;
}
this.display=player._api().fp_fadeTo(name,o,speed,fnId);
this.opacity=o;
return self;
}
,fadeIn:function(speed,fn){
return self.fadeTo(1,speed,fn);
}
,fadeOut:function(speed,fn){
return self.fadeTo(0,speed,fn);
}
,getName:function(){
return name;
}
,_fireEvent:function(evt,arg){
if(evt=='onUpdate'){
var json=player._api().fp_getPlugin(name);
if(!json){
return;
}
extend(self,json);
delete self.methods;
if(!hasMethods){
each(json.methods,function(){
var method=""+this;
self[method]=function(){
var a=[].slice.call(arguments);
var ret=player._api().fp_invoke(name,method,a);
return ret=='undefined'?self:ret;
}
;
}
);
hasMethods=true;
}
}
var fn=listeners[evt];
if(fn){
fn.call(self,arg);
if(evt.substring(0,1)=="_"){
delete listeners[evt];
}
}
}
}
);
}
;
function Player(wrapper,params,conf){
var
self=this,api=null,html,commonClip,playlist=[],plugins={
}
,listeners={
}
,playerId,apiId,playerIndex,activeIndex,swfHeight,wrapperHeight;
extend(self,{
id:function(){
return playerId;
}
,isLoaded:function(){
return(api!==null);
}
,getParent:function(){
return wrapper;
}
,hide:function(all){
if(all){
wrapper.style.height="0px";
}
if(api){
api.style.height="0px";
}
return self;
}
,show:function(){
wrapper.style.height=wrapperHeight+"px";
if(api){
api.style.height=swfHeight+"px";
}
return self;
}
,isHidden:function(){
return api&&parseInt(api.style.height,10)===0;
}
,load:function(fn){
if(!api&&self._fireEvent("onBeforeLoad")!==false){
each(players,function(){
this.unload();
}
);
html=wrapper.innerHTML;
flashembed(wrapper,params,{
config:conf}
);
if(fn){
fn.cached=true;
bind(listeners,"onLoad",fn);
}
}
return self;
}
,unload:function(){
try{
if(api&&api.fp_isFullscreen()){
}
}
catch(error){
return;
}
if(api&&html.replace(/\s/g,'')!==''&&!api.fp_isFullscreen()&&self._fireEvent("onBeforeUnload")!==false){
api.fp_close();
wrapper.innerHTML=html;
self._fireEvent("onUnload");
api=null;
}
return self;
}
,getClip:function(index){
if(index===undefined){
index=activeIndex;
}
return playlist[index];
}
,getCommonClip:function(){
return commonClip;
}
,getPlaylist:function(){
return playlist;
}
,getPlugin:function(name){
var plugin=plugins[name];
if(!plugin&&self.isLoaded()){
var json=self._api().fp_getPlugin(name);
if(json){
plugin=new Plugin(name,json,self);
plugins[name]=plugin;
}
}
return plugin;
}
,getScreen:function(){
return self.getPlugin("screen");
}
,getControls:function(){
return self.getPlugin("controls");
}
,getConfig:function(copy){
return copy?clone(conf):conf;
}
,getFlashParams:function(){
return params;
}
,loadPlugin:function(name,url,props,fn){
if(typeof props=='function'){
fn=props;
props={
}
;
}
var fnId=fn?makeId():"_";
self._api().fp_loadPlugin(name,url,props,fnId);
var arg={
}
;
arg[fnId]=fn;
var p=new Plugin(name,null,self,arg);
plugins[name]=p;
return p;
}
,getState:function(){
return api?api.fp_getState():-1;
}
,play:function(clip){
function play(){
if(clip!==undefined){
self._api().fp_play(clip);
}
else{
self._api().fp_play();
}
}
if(api){
play();
}
else{
self.load(function(){
play();
}
);
}
return self;
}
,getVersion:function(){
var js="flowplayer.js 3.0.5";
if(api){
var ver=api.fp_getVersion();
ver.push(js);
return ver;
}
return js;
}
,_api:function(){
if(!api){
throw"Flowplayer "+self.id()+" not loaded. Try moving your call to player's onLoad event";
}
return api;
}
,_dump:function(){
console.log(listeners);
}
,setClip:function(clip){
self.setPlaylist([clip]);
}
,getIndex:function(){
return playerIndex;
}
}
);
each(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,Fullscreen*,FullscreenExit,Error").split(","),function(){
var name="on"+this;
if(name.indexOf("*")!=-1){
name=name.substring(0,name.length-1);
var name2="onBefore"+name.substring(2);
self[name2]=function(fn){
bind(listeners,name2,fn);
return self;
}
;
}
self[name]=function(fn){
bind(listeners,name,fn);
return self;
}
;
}
);
each(("pause,resume,mute,unmute,stop,toggle,seek,getStatus,getVolume,setVolume,getTime,isPaused,isPlaying,startBuffering,stopBuffering,isFullscreen,reset,close,setPlaylist").split(","),function(){
var name=this;
self[name]=function(arg){
if(!api){
return self;
}
var ret=(arg===undefined)?api["fp_"+name]():api["fp_"+name](arg);
return ret=='undefined'?self:ret;
}
;
}
);
self._fireEvent=function(evt,arg0,arg1,arg2){
if(conf.debug){
log(arguments);
}
if(!api&&evt=='onLoad'&&arg0=='player'){
api=api||el(apiId);
swfHeight=api.clientHeight;
each(playlist,function(){
this._fireEvent("onLoad");
}
);
each(plugins,function(name,p){
p._fireEvent("onUpdate");
}
);
commonClip._fireEvent("onLoad");
}
if(evt=='onLoad'&&arg0!='player'){
return;
}
if(evt=='onError'){
if(typeof arg0=='string'||(typeof arg0=='number'&&typeof arg1=='number')){
arg0=arg1;
arg1=arg2;
}
}
if(evt=='onContextMenu'){
each(conf.contextMenu[arg0],function(key,fn){
fn.call(self);
}
);
return;
}
if(evt=='onPluginEvent'){
var name=arg0.name||arg0;
var p=plugins[name];
if(p){
p._fireEvent("onUpdate",arg0);
p._fireEvent(arg1);
}
return;
}
if(evt=='onPlaylistReplace'){
playlist=[];
var index=0;
each(arg0,function(){
playlist.push(new Clip(this,index++,self));
}
);
}
var ret=true;
if(typeof arg0=='number'&&arg0<playlist.length){
activeIndex=arg0;
var clip=playlist[arg0];
if(clip){
ret=clip._fireEvent(evt,arg1,arg2);
}
if(!clip||ret!==false){
ret=commonClip._fireEvent(evt,arg1,arg2,clip);
}
}
var i=0;
each(listeners[evt],function(){
ret=this.call(self,arg0,arg1);
if(this.cached){
listeners[evt].splice(i,1);
}
if(ret===false){
return false;
}
i++;
}
);
return ret;
}
;
function init(){
if($f(wrapper)){
$f(wrapper).getParent().innerHTML="";
playerIndex=$f(wrapper).getIndex();
players[playerIndex]=self;
}
else{
players.push(self);
playerIndex=players.length-1;
}
wrapperHeight=parseInt(wrapper.style.height,10)||wrapper.clientHeight;
if(typeof params=='string'){
params={
src:params}
;
}
playerId=wrapper.id||"fp"+makeId();
apiId=params.id||playerId+"_api";
params.id=apiId;
conf.playerId=playerId;
if(typeof conf=='string'){
conf={
clip:{
url:conf}
}
;
}
if(typeof conf.clip=='string'){
conf.clip={
url:conf.clip}
;
}
conf.clip=conf.clip||{
}
;
if(wrapper.getAttribute("href",2)&&!conf.clip.url){
conf.clip.url=wrapper.getAttribute("href",2);
}
commonClip=new Clip(conf.clip,-1,self);
conf.playlist=conf.playlist||[conf.clip];
var index=0;
each(conf.playlist,function(){
var clip=this;
if(typeof clip=='object'&&clip.length){
clip=""+clip;
}
if(typeof clip=='string'){
clip={
url:clip}
;
}
each(conf.clip,function(key,val){
if(conf.clip[key]!==undefined&&typeof val!='function'){
clip[key]=val;
}
}
);
conf.playlist[index]=clip;
clip=new Clip(clip,index,self);
playlist.push(clip);
index++;
}
);
each(conf,function(key,val){
if(typeof val=='function'){
bind(listeners,key,val);
delete conf[key];
}
}
);
each(conf.plugins,function(name,val){
if(val){
plugins[name]=new Plugin(name,val,self);
}
}
);
if(!conf.plugins||conf.plugins.controls===undefined){
plugins.controls=new Plugin("controls",null,self);
}
params.bgcolor=params.bgcolor||"#000000";
params.version=params.version||[9,0];
params.expressInstall='http://www.flowplayer.org/swf/expressinstall.swf';
function doClick(e){
if(!self.isLoaded()&&self._fireEvent("onBeforeClick")!==false){
self.load();
}
return stopEvent(e);
}
html=wrapper.innerHTML;
if(html.replace(/\s/g,'')!==''){
if(wrapper.addEventListener){
wrapper.addEventListener("click",doClick,false);
}
else if(wrapper.attachEvent){
wrapper.attachEvent("onclick",doClick);
}
}
else{
if(wrapper.addEventListener){
wrapper.addEventListener("click",stopEvent,false);
}
self.load();
}
}
if(typeof wrapper=='string'){
flashembed.domReady(function(){
var node=el(wrapper);
if(!node){
throw"Flowplayer cannot access element: "+wrapper;
}
else{
wrapper=node;
init();
}
}
);
}
else{
init();
}
}
var players=[];
function Iterator(arr){
this.length=arr.length;
this.each=function(fn){
each(arr,fn);
}
;
this.size=function(){
return arr.length;
}
;
}
window.flowplayer=window.$f=function(){
var instance=null;
var arg=arguments[0];
if(!arguments.length){
each(players,function(){
if(this.isLoaded()){
instance=this;
return false;
}
}
);
return instance||players[0];
}
if(arguments.length==1){
if(typeof arg=='number'){
return players[arg];
}
else{
if(arg=='*'){
return new Iterator(players);
}
each(players,function(){
if(this.id()==arg.id||this.id()==arg||this.getParent()==arg){
instance=this;
return false;
}
}
);
return instance;
}
}
if(arguments.length>1){
var swf=arguments[1];
var conf=(arguments.length==3)?arguments[2]:{
}
;
if(typeof arg=='string'){
if(arg.indexOf(".")!=-1){
var instances=[];
each(select(arg),function(){
instances.push(new Player(this,clone(swf),clone(conf)));
}
);
return new Iterator(instances);
}
else{
var node=el(arg);
return new Player(node!==null?node:arg,swf,conf);
}
}
else if(arg){
return new Player(arg,swf,conf);
}
}
return null;
}
;
extend(window.$f,{
fireEvent:function(id,evt,a0,a1,a2){
var p=$f(id);
return p?p._fireEvent(evt,a0,a1,a2):null;
}
,addPlugin:function(name,fn){
Player.prototype[name]=fn;
return $f;
}
,each:each,extend:extend}
);
if(document.all){
window.onbeforeunload=function(){
$f("*").each(function(){
if(this.isLoaded()){
this.close();
}
}
);
}
;
}
if(typeof jQuery=='function'){
jQuery.prototype.flowplayer=function(params,conf){
if(!arguments.length||typeof arguments[0]=='number'){
var arr=[];
this.each(function(){
var p=$f(this);
if(p){
arr.push(p);
}
}
);
return arguments.length?arr[arguments[0]]:new Iterator(arr);
}
return this.each(function(){
$f(this,clone(params),conf?clone(conf):{
}
);
}
);
}
;
}
}
)();
(function(){
var jQ=typeof jQuery=='function';
function isDomReady(){
if(domReady.done){
return false;
}
var d=document;
if(d&&d.getElementsByTagName&&d.getElementById&&d.body){
clearInterval(domReady.timer);
domReady.timer=null;
for(var i=0;
i<domReady.ready.length;
i++){
domReady.ready[i].call();
}
domReady.ready=null;
domReady.done=true;
}
}
var domReady=jQ?jQuery:function(f){
if(domReady.done){
return f();
}
if(domReady.timer){
domReady.ready.push(f);
}
else{
domReady.ready=[f];
domReady.timer=setInterval(isDomReady,13);
}
}
;
function extend(to,from){
if(from){
for(key in from){
if(from.hasOwnProperty(key)){
to[key]=from[key];
}
}
}
return to;
}
function asString(obj){
switch(typeOf(obj)){
case'string':obj=obj.replace(new RegExp('(["\\\\])','g'),'\\$1');
obj=obj.replace(/^\s?(\d+)%/,"$1pct");
return'"'+obj+'"';
case'array':return'['+map(obj,function(el){
return asString(el);
}
).join(',')+']';
case'function':return'"function()"';
case'object':var str=[];
for(var prop in obj){
if(obj.hasOwnProperty(prop)){
str.push('"'+prop+'":'+asString(obj[prop]));
}
}
return'{'+str.join(',')+'}';
}
return String(obj).replace(/\s/g," ").replace(/\'/g,"\"");
}
function typeOf(obj){
if(obj===null||obj===undefined){
return false;
}
var type=typeof obj;
return(type=='object'&&obj.push)?'array':type;
}
if(window.attachEvent){
window.attachEvent("onbeforeunload",function(){
__flash_unloadHandler=function(){
}
;
__flash_savedUnloadHandler=function(){
}
;
}
);
}
function map(arr,func){
var newArr=[];
for(var i in arr){
if(arr.hasOwnProperty(i)){
newArr[i]=func(arr[i]);
}
}
return newArr;
}
function getHTML(p,c){
var ie=document.all;
var html='<object width="'+p.width+'" height="'+p.height+'"';
if(ie&&!p.id){
p.id="_"+(""+Math.random()).substring(9);
}
if(p.id){
html+=' id="'+p.id+'"';
}
if(p.w3c||!ie){
html+=' data="'+p.src+'" type="application/x-shockwave-flash"';
}
else{
html+=' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
}
html+='>';
if(p.w3c||ie){
html+='<param name="movie" value="'+p.src+'" />';
}
var e=extend({
}
,p);
e.width=e.height=e.id=e.w3c=e.src=null;
for(var k in e){
if(e[k]!==null){
html+='<param name="'+k+'" value="'+e[k]+'" />';
}
}
var vars="";
if(c){
for(var key in c){
if(c[key]!==null){
vars+=key+'='+(typeof c[key]=='object'?asString(c[key]):c[key])+'&';
}
}
vars=vars.substring(0,vars.length-1);
html+='<param name="flashvars" value=\''+vars+'\' />';
}
html+="</object>";
return html;
}
function Flash(root,opts,flashvars){
var version=flashembed.getVersion();
extend(this,{
getContainer:function(){
return root;
}
,getConf:function(){
return conf;
}
,getVersion:function(){
return version;
}
,getFlashvars:function(){
return flashvars;
}
,getApi:function(){
return root.firstChild;
}
,getHTML:function(){
return getHTML(opts,flashvars);
}
}
);
var required=opts.version;
var express=opts.expressInstall;
var ok=!required||flashembed.isSupported(required);
if(ok){
opts.onFail=opts.version=opts.expressInstall=null;
root.innerHTML=getHTML(opts,flashvars);
}
else if(required&&express&&flashembed.isSupported([6,65])){
extend(opts,{
src:express}
);
flashvars={
MMredirectURL:location.href,MMplayerType:'PlugIn',MMdoctitle:document.title}
;
root.innerHTML=getHTML(opts,flashvars);
}
else{
if(root.innerHTML.replace(/\s/g,'')!==''){
}
else{
root.innerHTML="<h2>Flash version "+required+" or greater is required</h2>"+"<h3>"+(version[0]>0?"Your version is "+version:"You have no flash plugin installed")+"</h3>"+"<p>Download latest version from <a href='http://www.adobe.com/go/getflashplayer'>here</a></p>";
}
}
if(!ok&&opts.onFail){
var ret=opts.onFail.call(this);
if(typeof ret=='string'){
root.innerHTML=ret;
}
}
}
window.flashembed=function(root,conf,flashvars){
if(typeof root=='string'){
var el=document.getElementById(root);
if(el){
root=el;
}
else{
domReady(function(){
flashembed(root,conf,flashvars);
}
);
return;
}
}
if(!root){
return;
}
var opts={
width:'100%',height:'100%',allowfullscreen:true,allowscriptaccess:'always',quality:'high',version:null,onFail:null,expressInstall:null,w3c:false}
;
if(typeof conf=='string'){
conf={
src:conf}
;
}
extend(opts,conf);
return new Flash(root,opts,flashvars);
}
;
extend(window.flashembed,{
getVersion:function(){
var version=[0,0];
if(navigator.plugins&&typeof navigator.plugins["Shockwave Flash"]=="object"){
var _d=navigator.plugins["Shockwave Flash"].description;
if(typeof _d!="undefined"){
_d=_d.replace(/^.*\s+(\S+\s+\S+$)/,"$1");
var _m=parseInt(_d.replace(/^(.*)\..*$/,"$1"),10);
var _r=/r/.test(_d)?parseInt(_d.replace(/^.*r(.*)$/,"$1"),10):0;
version=[_m,_r];
}
}
else if(window.ActiveXObject){
try{
var _a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
}
catch(e){
try{
_a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
version=[6,0];
_a.AllowScriptAccess="always";
}
catch(ee){
if(version[0]==6){
return;
}
}
try{
_a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
}
catch(eee){
}
}
if(typeof _a=="object"){
_d=_a.GetVariable("$version");
if(typeof _d!="undefined"){
_d=_d.replace(/^\S+\s+(.*)$/,"$1").split(",");
version=[parseInt(_d[0],10),parseInt(_d[2],10)];
}
}
}
return version;
}
,isSupported:function(version){
var now=flashembed.getVersion();
var ret=(now[0]>version[0])||(now[0]==version[0]&&now[1]>=version[1]);
return ret;
}
,domReady:domReady,asString:asString,getHTML:getHTML}
);
if(jQ){
jQuery.prototype.flashembed=function(conf,flashvars){
return this.each(function(){
flashembed(this,conf,flashvars);
}
);
}
;
}
}
)();

