STORY   LOOP   FURRY   PORN   GAMES
• C •   SERVICES [?] [R] RND   POPULAR
Archived flashes:
228095
/disc/ · /res/     /show/ · /fap/ · /gg/ · /swf/P0001 · P2561 · P5121

<div style="position:absolute;top:-99px;left:-99px;"><img src="http://swfchan.com:57475/68036040?noj=FRM68036040-5DC" width="1" height="1"></div>

clintonsonic.swf

This is the info page for
Flash #81214

(Click the ID number above for more basic data on this flash file.)


ActionScript [AS3]
Section 1
//animatedgif1 (doc_fun.animatedgif1) package doc_fun { import flash.display.*; import flash.net.*; import org.gif.events.*; import org.gif.player.*; public dynamic class animatedgif1 extends MovieClip { public var myGIFPlayer:GIFPlayer; public function animatedgif1(){ addFrameScript(0, frame1); } public function onGIFLoadComplete(_arg1:GIFPlayerEvent):void{ myGIFPlayer.x = 0; myGIFPlayer.y = 0; } function frame1(){ myGIFPlayer = new GIFPlayer(); myGIFPlayer.addEventListener(GIFPlayerEvent.COMPLETE, onGIFLoadComplete); myGIFPlayer.load(new URLRequest("C:\\Dokumente und Einstellungen\\HP_Besitzer.NAME-CD5FDA878D\\Eigene Dateien\\Eigene Bilder\\clinton.gif")); addChild(myGIFPlayer); } } }//package doc_fun
Section 2
//MainTimeline (doc_fun.MainTimeline) package doc_fun { import flash.display.*; import flash.text.*; import flash.filters.*; public dynamic class MainTimeline extends MovieClip { public var animatedgif1:MovieClip; public function MainTimeline(){ var _local1:TextField; trace("** Created with KoolMoves **"); if ((parent is Loader) == false){ _local1 = new TextField(); _local1.autoSize = "left"; _local1.mouseEnabled = false; _local1.htmlText = "<font face=\"_sans\" size=\"60\"><b> KM</b></font>"; _local1.filters = [new GlowFilter(0xFFFFFF, 1, 2, 2, 16), new DropShadowFilter(4, 45, 0xFFFFFF)]; _local1.alpha = 0.15; parent.addChild(_local1); }; } } }//package doc_fun
Section 3
//GIFDecoder (org.gif.decoder.GIFDecoder) package org.gif.decoder { import org.gif.frames.*; import flash.display.*; import flash.geom.*; import flash.utils.*; import org.gif.errors.*; public class GIFDecoder { private var inStream:ByteArray; private var status:int; private var width:int; private var height:int; private var gctFlag:Boolean; private var gctSize:int; private var loopCount:int;// = 1 private var gct:Array; private var lct:Array; private var act:Array; private var bgIndex:int; private var bgColor:int; private var lastBgColor:int; private var pixelAspect:int; private var lctFlag:Boolean; private var interlace:Boolean; private var lctSize:int; private var ix:int; private var iy:int; private var iw:int; private var ih:int; private var lastRect:Rectangle; private var image:BitmapData; private var bitmap:BitmapData; private var lastImage:BitmapData; private var block:ByteArray; private var blockSize:int;// = 0 private var dispose:int;// = 0 private var lastDispose:int;// = 0 private var transparency:Boolean;// = false private var delay:int;// = 0 private var transIndex:int; private var prefix:Array; private var suffix:Array; private var pixelStack:Array; private var pixels:Array; private var frames:Array; private var frameCount:int; private static var STATUS_OK:int = 0; private static var STATUS_FORMAT_ERROR:int = 1; private static var STATUS_OPEN_ERROR:int = 2; private static var frameRect:Rectangle = new Rectangle(); private static var MaxStackSize:int = 0x1000; public function GIFDecoder(){ loopCount = 1; blockSize = 0; dispose = 0; lastDispose = 0; transparency = false; delay = 0; super(); block = new ByteArray(); } public function get disposeValue():int{ return (dispose); } public function getDelay(_arg1:int):int{ delay = -1; if ((((_arg1 >= 0)) && ((_arg1 < frameCount)))){ delay = frames[_arg1].delay; }; return (delay); } public function getFrameCount():int{ return (frameCount); } public function getImage():GIFFrame{ return (getFrame(0)); } public function getLoopCount():int{ return (loopCount); } private function getPixels(_arg1:BitmapData):Array{ var _local2:Array; var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:int; _local2 = new Array(((4 * image.width) * image.height)); _local3 = 0; _local4 = image.width; _local5 = image.height; _local7 = 0; while (_local7 < _local5) { _local8 = 0; while (_local8 < _local4) { _local6 = _arg1.getPixel(_local7, _local8); var _temp1 = _local3; _local3 = (_local3 + 1); _local2[_temp1] = ((_local6 & 0xFF0000) >> 16); var _temp2 = _local3; _local3 = (_local3 + 1); _local2[_temp2] = ((_local6 & 0xFF00) >> 8); var _temp3 = _local3; _local3 = (_local3 + 1); _local2[_temp3] = (_local6 & 0xFF); _local8++; }; _local7++; }; return (_local2); } private function setPixels(_arg1:Array):void{ var _local2:int; var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; _local2 = 0; _arg1.position = 0; _local4 = image.width; _local5 = image.height; bitmap.lock(); _local6 = 0; while (_local6 < _local5) { _local7 = 0; while (_local7 < _local4) { var _temp1 = _local2; _local2 = (_local2 + 1); _local3 = _arg1[int(_temp1)]; bitmap.setPixel32(_local7, _local6, _local3); _local7++; }; _local6++; }; bitmap.unlock(); } private function transferPixels():void{ var _local1:Array; var _local2:int; var _local3:Array; var _local4:Number; var _local5:int; var _local6:int; var _local7:int; var _local8:int; var _local9:int; var _local10:int; var _local11:int; var _local12:int; var _local13:int; var _local14:int; var _local15:int; _local1 = getPixels(bitmap); if (lastDispose > 0){ if (lastDispose == 3){ _local2 = (frameCount - 2); lastImage = ((_local2)>0) ? getFrame((_local2 - 1)).bitmapData : null; }; if (lastImage != null){ _local3 = getPixels(lastImage); _local1 = _local3.slice(); if (lastDispose == 2){ _local4 = (transparency) ? 0 : lastBgColor; image.fillRect(lastRect, _local4); }; }; }; _local5 = 1; _local6 = 8; _local7 = 0; _local8 = 0; while (_local8 < ih) { _local9 = _local8; if (interlace){ if (_local7 >= ih){ _local5++; switch (_local5){ case 2: _local7 = 4; break; case 3: _local7 = 2; _local6 = 4; break; case 4: _local7 = 1; _local6 = 2; break; }; }; _local9 = _local7; _local7 = (_local7 + _local6); }; _local9 = (_local9 + iy); if (_local9 < height){ _local10 = (_local9 * width); _local11 = (_local10 + ix); _local12 = (_local11 + iw); if ((_local10 + width) < _local12){ _local12 = (_local10 + width); }; _local13 = (_local8 * iw); while (_local11 < _local12) { var _temp1 = _local13; _local13 = (_local13 + 1); _local14 = (pixels[_temp1] & 0xFF); _local15 = act[_local14]; if (_local15 != 0){ _local1[_local11] = _local15; }; _local11++; }; }; _local8++; }; setPixels(_local1); } public function getFrame(_arg1:int):GIFFrame{ var _local2:GIFFrame; _local2 = null; if ((((_arg1 >= 0)) && ((_arg1 < frameCount)))){ _local2 = frames[_arg1]; } else { throw (new RangeError("Wrong frame number passed")); }; return (_local2); } public function getFrameSize():Rectangle{ var _local1:Rectangle; _local1 = GIFDecoder.frameRect; _local1.x = (_local1.y = 0); _local1.width = width; _local1.height = height; return (_local1); } public function read(_arg1:ByteArray):int{ init(); if (_arg1 != null){ this.inStream = _arg1; readHeader(); if (!hasError()){ readContents(); if (frameCount < 0){ status = STATUS_FORMAT_ERROR; }; }; } else { status = STATUS_OPEN_ERROR; }; return (status); } private function decodeImageData():void{ var _local1:int; var _local2:int; var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:int; var _local9:int; var _local10:int; var _local11:int; var _local12:int; var _local13:int; var _local14:int; var _local15:int; var _local16:int; var _local17:int; var _local18:int; var _local19:int; _local1 = -1; _local2 = (iw * ih); if ((((pixels == null)) || ((pixels.length < _local2)))){ pixels = new Array(_local2); }; if (prefix == null){ prefix = new Array(MaxStackSize); }; if (suffix == null){ suffix = new Array(MaxStackSize); }; if (pixelStack == null){ pixelStack = new Array((MaxStackSize + 1)); }; _local15 = readSingleByte(); _local4 = (1 << _local15); _local7 = (_local4 + 1); _local3 = (_local4 + 2); _local9 = _local1; _local6 = (_local15 + 1); _local5 = ((1 << _local6) - 1); _local11 = 0; while (_local11 < _local4) { prefix[int(_local11)] = 0; suffix[int(_local11)] = _local11; _local11++; }; var _local20:int; _local18 = _local20; _local19 = _local20; _local17 = _local20; _local16 = _local20; _local12 = _local20; _local10 = _local20; _local14 = _local20; _local13 = 0; while (_local13 < _local2) { if (_local17 == 0){ if (_local10 < _local6){ if (_local12 == 0){ _local12 = readBlock(); if (_local12 <= 0){ break; }; _local18 = 0; }; _local14 = (_local14 + ((int(block[int(_local18)]) & 0xFF) << _local10)); _local10 = (_local10 + 8); _local18++; _local12--; continue; }; _local11 = (_local14 & _local5); _local14 = (_local14 >> _local6); _local10 = (_local10 - _local6); if ((((_local11 > _local3)) || ((_local11 == _local7)))){ break; }; if (_local11 == _local4){ _local6 = (_local15 + 1); _local5 = ((1 << _local6) - 1); _local3 = (_local4 + 2); _local9 = _local1; continue; }; if (_local9 == _local1){ var _temp1 = _local17; _local17 = (_local17 + 1); pixelStack[int(_temp1)] = suffix[int(_local11)]; _local9 = _local11; _local16 = _local11; continue; }; _local8 = _local11; if (_local11 == _local3){ var _temp2 = _local17; _local17 = (_local17 + 1); pixelStack[int(_temp2)] = _local16; _local11 = _local9; }; while (_local11 > _local4) { var _temp3 = _local17; _local17 = (_local17 + 1); pixelStack[int(_temp3)] = suffix[int(_local11)]; _local11 = prefix[int(_local11)]; }; _local16 = (suffix[int(_local11)] & 0xFF); if (_local3 >= MaxStackSize){ break; }; var _temp4 = _local17; _local17 = (_local17 + 1); pixelStack[int(_temp4)] = _local16; prefix[int(_local3)] = _local9; suffix[int(_local3)] = _local16; _local3++; if (((((_local3 & _local5) == 0)) && ((_local3 < MaxStackSize)))){ _local6++; _local5 = (_local5 + _local3); }; _local9 = _local8; }; _local17--; var _temp5 = _local19; _local19 = (_local19 + 1); pixels[int(_temp5)] = pixelStack[int(_local17)]; _local13++; }; _local13 = _local19; while (_local13 < _local2) { pixels[int(_local13)] = 0; _local13++; }; } private function hasError():Boolean{ return (!((status == STATUS_OK))); } private function init():void{ status = STATUS_OK; frameCount = 0; frames = new Array(); gct = null; lct = null; } private function readSingleByte():int{ var curByte:int; curByte = 0; try { curByte = inStream.readUnsignedByte(); } catch(e:Error) { status = STATUS_FORMAT_ERROR; }; return (curByte); } private function readBlock():int{ var n:int; var count:int; blockSize = readSingleByte(); n = 0; if (blockSize > 0){ try { count = 0; while (n < blockSize) { inStream.readBytes(block, n, (blockSize - n)); if ((blockSize - n) == -1){ break; }; n = (n + (blockSize - n)); }; } catch(e:Error) { }; if (n < blockSize){ status = STATUS_FORMAT_ERROR; }; }; return (n); } private function readColorTable(_arg1:int):Array{ var nbytes:int; var tab:Array; var c:ByteArray; var n:int; var i:int; var j:int; var r:int; var g:int; var b:int; var ncolors = _arg1; nbytes = (3 * ncolors); tab = null; c = new ByteArray(); n = 0; try { inStream.readBytes(c, 0, nbytes); n = nbytes; } catch(e:Error) { }; if (n < nbytes){ status = STATUS_FORMAT_ERROR; } else { tab = new Array(0x0100); i = 0; j = 0; while (i < ncolors) { j = (j + 1); r = (c[j] & 0xFF); j = (j + 1); g = (c[j] & 0xFF); j = (j + 1); b = (c[j] & 0xFF); i = (i + 1); tab[i] = (((4278190080 | (r << 16)) | (g << 8)) | b); }; }; return (tab); } private function readContents():void{ var _local1:Boolean; var _local2:int; var _local3:String; var _local4:int; _local1 = false; while (!(((_local1) || (hasError())))) { _local2 = readSingleByte(); switch (_local2){ case 44: readImage(); break; case 33: _local2 = readSingleByte(); switch (_local2){ case 249: readGraphicControlExt(); break; case 0xFF: readBlock(); _local3 = ""; _local4 = 0; while (_local4 < 11) { _local3 = (_local3 + block[int(_local4)]); _local4++; }; if (_local3 == "NETSCAPE2.0"){ readNetscapeExt(); } else { skip(); }; break; default: skip(); break; }; break; case 59: _local1 = true; break; case 0: break; default: status = STATUS_FORMAT_ERROR; break; }; }; } private function readGraphicControlExt():void{ var _local1:int; readSingleByte(); _local1 = readSingleByte(); dispose = ((_local1 & 28) >> 2); if (dispose == 0){ dispose = 1; }; transparency = !(((_local1 & 1) == 0)); delay = (readShort() * 10); transIndex = readSingleByte(); readSingleByte(); } private function readHeader():void{ var _local1:String; var _local2:int; _local1 = ""; _local2 = 0; while (_local2 < 6) { _local1 = (_local1 + String.fromCharCode(readSingleByte())); _local2++; }; if (!(_local1.indexOf("GIF") == 0)){ status = STATUS_FORMAT_ERROR; throw (new FileTypeError("Invalid file type")); return; }; readLSD(); if (((gctFlag) && (!(hasError())))){ gct = readColorTable(gctSize); bgColor = gct[bgIndex]; }; } private function readImage():void{ var _local1:int; var _local2:int; ix = readShort(); iy = readShort(); iw = readShort(); ih = readShort(); _local1 = readSingleByte(); lctFlag = !(((_local1 & 128) == 0)); interlace = !(((_local1 & 64) == 0)); lctSize = (2 << (_local1 & 7)); if (lctFlag){ lct = readColorTable(lctSize); act = lct; } else { act = gct; if (bgIndex == transIndex){ bgColor = 0; }; }; _local2 = 0; if (transparency){ _local2 = act[transIndex]; act[transIndex] = 0; }; if (act == null){ status = STATUS_FORMAT_ERROR; }; if (hasError()){ return; }; decodeImageData(); skip(); if (hasError()){ return; }; frameCount++; bitmap = new BitmapData(width, height); image = bitmap; transferPixels(); frames.push(new GIFFrame(bitmap, delay)); if (transparency){ act[transIndex] = _local2; }; resetFrame(); } private function readLSD():void{ var _local1:int; width = readShort(); height = readShort(); _local1 = readSingleByte(); gctFlag = !(((_local1 & 128) == 0)); gctSize = (2 << (_local1 & 7)); bgIndex = readSingleByte(); pixelAspect = readSingleByte(); } private function readNetscapeExt():void{ var _local1:int; var _local2:int; do { readBlock(); if (block[0] == 1){ _local1 = (block[1] & 0xFF); _local2 = (block[2] & 0xFF); loopCount = ((_local2 << 8) | _local1); }; } while ((((blockSize > 0)) && (!(hasError())))); } private function readShort():int{ return ((readSingleByte() | (readSingleByte() << 8))); } private function resetFrame():void{ var _local1:Boolean; var _local2:int; lastDispose = dispose; lastRect = new Rectangle(ix, iy, iw, ih); lastImage = image; lastBgColor = bgColor; _local1 = false; _local2 = 0; lct = null; } private function skip():void{ do { readBlock(); } while ((((blockSize > 0)) && (!(hasError())))); } } }//package org.gif.decoder
Section 4
//FileTypeError (org.gif.errors.FileTypeError) package org.gif.errors { public class FileTypeError extends Error { public function FileTypeError(_arg1:String){ super(_arg1); } } }//package org.gif.errors
Section 5
//FileTypeEvent (org.gif.events.FileTypeEvent) package org.gif.events { import flash.events.*; public class FileTypeEvent extends Event { public static const INVALID:String = "invalid"; public function FileTypeEvent(_arg1:String){ super(_arg1, false, false); } } }//package org.gif.events
Section 6
//FrameEvent (org.gif.events.FrameEvent) package org.gif.events { import org.gif.frames.*; import flash.events.*; public class FrameEvent extends Event { public var frame:GIFFrame; public static const FRAME_RENDERED:String = "rendered"; public function FrameEvent(_arg1:String, _arg2:GIFFrame){ super(_arg1, false, false); frame = _arg2; } } }//package org.gif.events
Section 7
//GIFPlayerEvent (org.gif.events.GIFPlayerEvent) package org.gif.events { import flash.geom.*; import flash.events.*; public class GIFPlayerEvent extends Event { public var rect:Rectangle; public static const COMPLETE:String = "complete"; public function GIFPlayerEvent(_arg1:String, _arg2:Rectangle){ super(_arg1, false, false); rect = _arg2; } } }//package org.gif.events
Section 8
//TimeoutEvent (org.gif.events.TimeoutEvent) package org.gif.events { import flash.events.*; public class TimeoutEvent extends Event { public static const TIME_OUT:String = "timeout"; public function TimeoutEvent(_arg1:String){ super(_arg1, false, false); } } }//package org.gif.events
Section 9
//GIFFrame (org.gif.frames.GIFFrame) package org.gif.frames { import flash.display.*; public class GIFFrame { public var bitmapData:BitmapData; public var delay:int; public function GIFFrame(_arg1:BitmapData, _arg2:int){ bitmapData = _arg1; delay = _arg2; } } }//package org.gif.frames
Section 10
//GIFPlayer (org.gif.player.GIFPlayer) package org.gif.player { import org.gif.frames.*; import flash.display.*; import flash.utils.*; import flash.events.*; import flash.net.*; import org.gif.events.*; import org.gif.decoder.*; import org.gif.errors.*; import flash.errors.*; import flash.system.*; public class GIFPlayer extends Bitmap { private var urlLoader:URLLoader; private var gifDecoder:GIFDecoder; private var aFrames:Array; private var myTimer:Timer; private var iInc:int; private var iIndex:int; private var auto:Boolean; private var arrayLng:uint; public function GIFPlayer(_arg1:Boolean=true){ auto = _arg1; iIndex = (iInc = 0); myTimer = new Timer(0, 0); aFrames = new Array(); urlLoader = new URLLoader(); urlLoader.dataFormat = URLLoaderDataFormat.BINARY; urlLoader.addEventListener(Event.COMPLETE, onComplete); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError); myTimer.addEventListener(TimerEvent.TIMER, update); gifDecoder = new GIFDecoder(); } private function onIOError(_arg1:IOErrorEvent):void{ dispatchEvent(_arg1); } private function onComplete(_arg1:Event):void{ readStream(_arg1.target.data); } private function readStream(_arg1:ByteArray):void{ var gifStream:ByteArray; var lng:int; var i:int; var pBytes = _arg1; gifStream = pBytes; aFrames = new Array(); iInc = 0; try { gifDecoder.read(gifStream); lng = gifDecoder.getFrameCount(); i = 0; while (i < lng) { aFrames[int(i)] = gifDecoder.getFrame(i); i = (i + 1); }; arrayLng = aFrames.length; if (auto){ play(); } else { gotoAndStop(1); }; dispatchEvent(new GIFPlayerEvent(GIFPlayerEvent.COMPLETE, aFrames[0].bitmapData.rect)); } catch(e:ScriptTimeoutError) { dispatchEvent(new TimeoutEvent(TimeoutEvent.TIME_OUT)); } catch(e:FileTypeError) { dispatchEvent(new FileTypeEvent(FileTypeEvent.INVALID)); } catch(e:Error) { throw (new Error(("An unknown error occured, make sure the GIF file contains at least one frame\nNumber of frames : " + aFrames.length))); }; } private function update(_arg1:TimerEvent):void{ var _local2:int; _local2 = aFrames[(iIndex = (iInc++ % arrayLng))].delay; _arg1.target.delay = ((_local2)>0) ? _local2 : 100; switch (gifDecoder.disposeValue){ case 1: if (!iIndex){ bitmapData = aFrames[0].bitmapData.clone(); }; bitmapData.draw(aFrames[iIndex].bitmapData); break; case 2: bitmapData = aFrames[iIndex].bitmapData; break; }; dispatchEvent(new FrameEvent(FrameEvent.FRAME_RENDERED, aFrames[iIndex])); } private function concat(_arg1:int):int{ var _local2:int; bitmapData.lock(); _local2 = 0; while (_local2 < _arg1) { bitmapData.draw(aFrames[_local2].bitmapData); _local2++; }; bitmapData.unlock(); return (_local2); } public function load(_arg1:URLRequest):void{ stop(); urlLoader.load(_arg1); } public function loadBytes(_arg1:ByteArray):void{ readStream(_arg1); } public function play():void{ if (aFrames.length){ if (!myTimer.running){ myTimer.start(); }; } else { throw (new Error("Nothing to play")); }; } public function stop():void{ if (myTimer.running){ myTimer.stop(); }; } public function get currentFrame():int{ return ((iIndex + 1)); } public function get totalFrames():int{ return (aFrames.length); } public function get loopCount():int{ return (gifDecoder.getLoopCount()); } public function get autoPlay():Boolean{ return (auto); } public function get frames():Array{ return (aFrames); } public function gotoAndStop(_arg1:int):void{ if ((((_arg1 >= 1)) && ((_arg1 <= aFrames.length)))){ iInc = int((int(_arg1) - 1)); switch (gifDecoder.disposeValue){ case 1: bitmapData = aFrames[0].bitmapData.clone(); bitmapData.draw(aFrames[concat(iInc)].bitmapData); break; case 2: bitmapData = aFrames[iInc].bitmapData; break; }; if (myTimer.running){ myTimer.stop(); }; } else { throw (new RangeError(("Frame out of range, please specify a frame between 1 and " + aFrames.length))); }; } public function gotoAndPlay(_arg1:int):void{ if ((((_arg1 >= 1)) && ((_arg1 <= aFrames.length)))){ iInc = int((int(_arg1) - 1)); switch (gifDecoder.disposeValue){ case 1: bitmapData = aFrames[0].bitmapData.clone(); bitmapData.draw(aFrames[concat(iInc)].bitmapData); break; case 2: bitmapData = aFrames[iInc].bitmapData; break; }; if (!myTimer.running){ myTimer.start(); }; } else { throw (new RangeError(("Frame out of range, please specify a frame between 1 and " + aFrames.length))); }; } public function getFrame(_arg1:int):GIFFrame{ var _local2:GIFFrame; if ((((_arg1 >= 1)) && ((_arg1 <= aFrames.length)))){ _local2 = aFrames[(_arg1 - 1)]; } else { throw (new RangeError(("Frame out of range, please specify a frame between 1 and " + aFrames.length))); }; return (_local2); } public function getDelay(_arg1:int):int{ var _local2:int; if ((((_arg1 >= 1)) && ((_arg1 <= aFrames.length)))){ _local2 = aFrames[(_arg1 - 1)].delay; } else { throw (new RangeError(("Frame out of range, please specify a frame between 1 and " + aFrames.length))); }; return (_local2); } } }//package org.gif.player

Library Items

Symbol 1 MovieClip {doc_fun.animatedgif1}Used by:Timeline
Symbol 2 SoundUsed by:Timeline
Symbol 3 GraphicUsed by:Timeline
Symbol 4 GraphicUsed by:Timeline

Instance Names

"animatedgif1"Frame 1Symbol 1 MovieClip {doc_fun.animatedgif1}

Special Tags

FileAttributes (69)Timeline Frame 1Access local files only, Metadata not present, AS3.




http://swfchan.com/17/81214/info.shtml
Created: 2/4 -2019 02:13:25 Last modified: 2/4 -2019 02:13:25 Server time: 05/05 -2024 08:03:45