Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Smokescreen

By: a guest on Jun 1st, 2010  |  syntax: JavaScript  |  size: 307.07 KB  |  views: 653  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /**
  2.  * Smokescreen v0.1.2 - Chris Smoak <chris.smoak@gmail.com>
  3.  * A Flash player written in JavaScript.
  4.  *
  5.  * Copyright 2010, RevShock
  6.  *
  7.  * Date: 2010-05-27
  8.  */
  9. var Smokescreen = function (url, element, width, height, name, params) {
  10.     goog = {};
  11.     goog.global = this;
  12.     goog.provide = function (a) {
  13.         a = a.split(".");
  14.         var b = goog.global;
  15.         for (var c in a) {
  16.             var d = a[c];
  17.             d in b || (b[d] = {});
  18.             b = b[d]
  19.         }
  20.     };
  21.     goog.require = function () {};
  22.     var fljs = {},
  23.         BrowserDetect = {
  24.             init: function () {
  25.                 this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
  26.                 this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version";
  27.                 this.OS = this.searchString(this.dataOS) || "an unknown OS"
  28.             },
  29.             searchString: function (a) {
  30.                 for (var b = 0; b < a.length; b++) {
  31.                     var c = a[b].string,
  32.                         d = a[b].prop;
  33.                     this.versionSearchString = a[b].versionSearch || a[b].identity;
  34.                     if (c) {
  35.                         if (c.indexOf(a[b].subString) != -1) return a[b].identity
  36.                     } else if (d) return a[b].identity
  37.                 }
  38.             },
  39.             searchVersion: function (a) {
  40.                 var b = a.indexOf(this.versionSearchString);
  41.                 if (b != -1) return parseFloat(a.substring(b + this.versionSearchString.length + 1))
  42.             },
  43.             dataBrowser: [{
  44.                 string: navigator.userAgent,
  45.                 subString: "Chrome",
  46.                 identity: "Chrome"},{
  47.                 string: navigator.vendor,
  48.                 subString: "Apple",
  49.                 identity: "Safari",
  50.                 versionSearch: "Version"},{
  51.                 prop: window.opera,
  52.                 identity: "Opera"},{
  53.                 string: navigator.userAgent,
  54.                 subString: "Firefox",
  55.                 identity: "Firefox"},{
  56.                 string: navigator.userAgent,
  57.                 subString: "MSIE",
  58.                 identity: "Explorer",
  59.                 versionSearch: "MSIE"}],
  60.             dataOS: [{
  61.                 string: navigator.platform,
  62.                 subString: "Win",
  63.                 identity: "Windows"},{
  64.                 string: navigator.userAgent,
  65.                 subString: "iPad",
  66.                 identity: "iPad"},{
  67.                 string: navigator.userAgent,
  68.                 subString: "iPhone",
  69.                 identity: "iPhone"},{
  70.                 string: navigator.platform,
  71.                 subString: "Mac",
  72.                 identity: "Mac"}]
  73.         };
  74.     BrowserDetect.init();
  75.     fljs.agent = BrowserDetect;
  76.     fljs.addConstants = function (a, b) {
  77.         for (var c in b) a[c] = b[c]
  78.     };
  79.     fljs.addMethods = function (a, b) {
  80.         for (var c in b) a.prototype[c] = b[c]
  81.     };
  82.     fljs.addStaticMethods = function (a, b) {
  83.         for (var c in b) a[c] = b[c]
  84.     };
  85.     fljs.addEvents = function (a, b) {
  86.         for (var c in b) {
  87.             var d = b[c],
  88.                 e = d[0],
  89.                 f = d[2];
  90.             a.prototype["__add" + e] = d[1];
  91.             a.prototype["__remove" + e] = f
  92.         }
  93.     };
  94.     fljs.now = function () {
  95.         return +new Date
  96.     };
  97.     fljs.inherits = function (a, b) {
  98.         function c() {}
  99.         c.prototype = b.prototype;
  100.         a.superClass_ = b.prototype;
  101.         a.prototype = new c;
  102.         a.prototype.constructor = a
  103.     };
  104.     fljs.base = function (a, b) {
  105.         var c = arguments.callee.caller;
  106.         if (c.superClass_) return c.superClass_.constructor.apply(a, Array.prototype.slice.call(arguments, 1));
  107.         for (var d = Array.prototype.slice.call(arguments, 2), e = false, f = a.constructor; f; f = f.superClass_ && f.superClass_.constructor) if (f.prototype[b] === c) e = true;
  108.         else if (e) return f.prototype[b].apply(a, d);
  109.         if (a[b] === c) return a.constructor.prototype[b].apply(a, d);
  110.         else throw Error("invalid base call");
  111.     };
  112.     fljs.bind = function (a, b) {
  113.         var c = b || this;
  114.         if (arguments.length > 2) {
  115.             var d = Array.prototype.slice.call(arguments, 2);
  116.             return function () {
  117.                 var e = Array.prototype.slice.call(arguments);
  118.                 Array.prototype.unshift.apply(e, d);
  119.                 return a.apply(c, e)
  120.             }
  121.         } else return function () {
  122.             return a.apply(c, arguments)
  123.         }
  124.     };
  125.     fljs.DummyConsole = function () {};
  126.     fljs.addMethods(fljs.DummyConsole, {
  127.         info: function () {}
  128.     });
  129.     fljs.DummyConsole._instance = new fljs.DummyConsole;
  130.     fljs.console = function () {
  131.         return fljs.debug ? console : fljs.DummyConsole._instance
  132.     };
  133.     fljs.ext = {};
  134.     var flash = {};
  135.     flash.display = {};
  136.     flash.display.BlendMode = function () {};
  137.     fljs.addConstants(flash.display.BlendMode, {
  138.         ADD: "add",
  139.         ALPHA: "alpha",
  140.         DARKEN: "darken",
  141.         DIFFERENCE: "difference",
  142.         ERASE: "erase",
  143.         HARDLIGHT: "hardlight",
  144.         INVERT: "invert",
  145.         LAYER: "layer",
  146.         LIGHTEN: "lighten",
  147.         MULTIPLY: "multiply",
  148.         NORMAL: "normal",
  149.         OVERLAY: "overlay",
  150.         SCREEN: "screen",
  151.         SUBTRACT: "subtract"
  152.     });
  153.     flash.events = {};
  154.     flash.events.Event = function (a, b, c) {
  155.         this.type = a;
  156.         this.bubbles = b;
  157.         this.cancelable = c
  158.     };
  159.     fljs.addConstants(flash.events.Event, {
  160.         ACTIVATE: "activate",
  161.         ADDED: "added",
  162.         ADDED_TO_STAGE: "addedToStage",
  163.         CANCEL: "cancel",
  164.         CHANGE: "change",
  165.         CLOSE: "close",
  166.         COMPLETE: "complete",
  167.         CONNECT: "connect",
  168.         DEACTIVATE: "deactivate",
  169.         DISPLAYING: "displaying",
  170.         ENTER_FRAME: "enterFrame",
  171.         FULLSCREEN: "fullscreen",
  172.         ID3: "id3",
  173.         INIT: "init",
  174.         MOUSE_LEAVE: "mouseLeave",
  175.         OPEN: "open",
  176.         REMOVED: "removed",
  177.         REMOVED_FROM_STAGE: "removedFromStage",
  178.         RENDER: "render",
  179.         RESIZE: "resize",
  180.         SCROLL: "scroll",
  181.         SELECT: "select",
  182.         SOUND_COMPLETE: "soundComplete",
  183.         TAB_CHILDREN_CHANGE: "tabChildrenChange",
  184.         TAB_ENABLED_CHANGE: "tabEnabledChange",
  185.         TAB_INDEX_CHANGE: "tabIndexChange",
  186.         UNLOAD: "unload"
  187.     });
  188.     fljs.addMethods(flash.events.Event, {
  189.         clone: function () {},
  190.         formatToString: function (a) {
  191.             return "[" + a + this.buildPropertiesString_(arguments) + "]"
  192.         },
  193.         buildPropertiesString_: function (a) {
  194.             for (var b = [], c = 0; c < a.length; c++) c > 0 && b.push(a[c] + "=" + this[a[c]]);
  195.             return b.join(" ")
  196.         },
  197.         isDefaultPrevented: function () {
  198.             return this.returnValue_
  199.         },
  200.         stopImmediatePropagation: function () {
  201.             this.stopPropagation()
  202.         },
  203.         toString: function () {
  204.             return this.formatToString("Event", "type", "bubbles", "cancelable")
  205.         }
  206.     });
  207.     flash.events.MouseEvent = function (a, b, c, d, e, f, g, j, h, m, k, l, n, p) {
  208.         flash.events.Event.call(this, a, b, c);
  209.         this.localX = d;
  210.         this.localY = e;
  211.         this.relatedObject = f;
  212.         this.ctrlKey = g;
  213.         this.altKey = j;
  214.         this.shiftKey = h;
  215.         this.buttonDown = m;
  216.         this.delta = k;
  217.         this.commandKey = l;
  218.         this.controlKey = n;
  219.         this.clickCount = p
  220.     };
  221.     fljs.inherits(flash.events.MouseEvent, flash.events.Event);
  222.     fljs.addConstants(flash.events.MouseEvent, {
  223.         CLICK: "click",
  224.         DOUBLE_CLICK: "doubleClick",
  225.         MOUSE_DOWN: "mouseDown",
  226.         MOUSE_MOVE: "mouseMove",
  227.         MOUSE_OUT: "mouseOut",
  228.         MOUSE_OVER: "mouseOver",
  229.         MOUSE_UP: "mouseUp",
  230.         MOUSE_WHEEL: "mouseWheel",
  231.         ROLL_OUT: "rollOut",
  232.         ROLL_OVER: "rollOver"
  233.     });
  234.     flash.events.FullScreenEvent = function () {};
  235.     fljs.addConstants(flash.events.FullScreenEvent, {
  236.         FULL_SCREEN: "fullScreen"
  237.     });
  238.     flash.events.KeyboardEvent = function (a, b, c, d, e, f, g, j, h) {
  239.         flash.events.Event(a, b, c);
  240.         this.charCode = d;
  241.         this.keyCode = e;
  242.         this.keyLocation = f;
  243.         this.ctrlKey = g;
  244.         this.altKey = j;
  245.         this.shiftKey = h
  246.     };
  247.     fljs.inherits(flash.events.KeyboardEvent, flash.events.Event);
  248.     fljs.addConstants(flash.events.KeyboardEvent, {
  249.         KEY_DOWN: "keyDown",
  250.         KEY_UP: "keyUp"
  251.     });
  252.     flash.events.FocusEvent = function () {};
  253.     fljs.addConstants(flash.events.FocusEvent, {
  254.         KEY_FOCUS_CHANGE: "keyFocusChange",
  255.         MOUSE_FOCUS_CHANGE: "mouseFocusChange"
  256.     });
  257.     flash.events.IEventDispatcher = function () {};
  258.     fljs.addMethods(flash.events.IEventDispatcher, {
  259.         addEventListener: function () {},
  260.         dispatchEvent: function () {},
  261.         hasEventListener: function () {},
  262.         removeEventListener: function () {},
  263.         willTrigger: function () {}
  264.     });
  265.     flash.events.EventDispatcher = function () {
  266.         this._listenerCount = {};
  267.         this._listeners = {}
  268.     };
  269.     fljs.addMethods(flash.events.EventDispatcher, {
  270.         addEventListener: function (a, b, c, d, e) {
  271.             a in this._listeners || (this._listeners[a] = []);
  272.             this._listeners[a].push([b, c, d, e]);
  273.             if (!this._listenerCount[a]) {
  274.                 this["__add" + a] && this["__add" + a]();
  275.                 this._listenerCount[a] = 0
  276.             }
  277.             this._listenerCount[a] += 1
  278.         },
  279.         dispatchEvent: function (a) {
  280.             var b = this._listeners[a.type];
  281.             for (var c in b) b[c][0](a)
  282.         },
  283.         hasEventListener: function (a) {
  284.             return this._listeners[a] && this._listeners[a].length > 0
  285.         },
  286.         removeEventListener: function (a, b, c) {
  287.             var d = this._listeners[a];
  288.             for (var e in d) d[e][0] == b && d[e][1] == c && d.splice(e, 1);
  289.             this._listenerCount[a] -= 1;
  290.             if (!this._listenerCount[a]) {
  291.                 this["__remove" + a] && this["__remove" + a]();
  292.                 this._listenerCount[a] = 0
  293.             }
  294.         },
  295.         willTrigger: function (a) {
  296.             return this.hasEventListener(a)
  297.         }
  298.     });
  299.     flash.geom = {};
  300.     flash.geom.ColorTransform = function (a, b, c, d, e, f, g, j) {
  301.         if (typeof a == "undefined") a = 1;
  302.         if (typeof b == "undefined") b = 1;
  303.         if (typeof c == "undefined") c = 1;
  304.         if (typeof d == "undefined") d = 1;
  305.         if (typeof e == "undefined") e = 0;
  306.         if (typeof f == "undefined") f = 0;
  307.         if (typeof g == "undefined") g = 0;
  308.         if (typeof j == "undefined") j = 0;
  309.         this.alphaMultiplier = d;
  310.         this.alphaOffset = j;
  311.         this.blueMultiplier = c;
  312.         this.blueOffset = g;
  313.         this.greenMultiplier = b;
  314.         this.greenOffset = f;
  315.         this.redMultiplier = a;
  316.         this.redOffset = e;
  317.         this.__default = this.alphaMultiplier == 1 && this.blueMultiplier == 1 && this.greenMultiplier == 1 && this.redMultiplier == 1 && this.alphaOffset == 0 && this.blueOffset == 0 && this.greenOffset == 0 && this.redOffset == 0;
  318.         fljs.console("cxform")
  319.     };
  320.     fljs.addMethods(flash.geom.ColorTransform, {
  321.         concat: function (a) {
  322.             return new flash.geom.ColorTransform(this.redMultiplier * a.redMultiplier, this.greenMultiplier * a.greenMultiplier, this.blueMultiplier * a.blueMultiplier, this.alphaMultiplier * a.alphaMultiplier, Math.min(255, this.redOffset + a.redOffset), Math.min(255, this.greenOffset + a.greenOffset), Math.min(255, this.blueOffset + a.blueOffset), Math.min(255, this.alphaOffset + a.alphaOffset))
  323.         },
  324.         toString: function () {},
  325.         __toSvgString: function () {
  326.             return [this.redMultiplier, 0, 0, 0, this.redOffset, 0, this.greenMultiplier, 0, 0, this.greenOffset, 0, 0, this.blueMultiplier, 0, this.blueOffset, 0, 0, 0, this.alphaMultiplier, this.alphaOffset].toString()
  327.         }
  328.     });
  329.     flash.geom.ColorTransform.identity = new flash.geom.ColorTransform;
  330.     flash.geom.Matrix = function (a, b, c, d, e, f) {
  331.         if (typeof a == "undefined") a = 1;
  332.         if (typeof b == "undefined") b = 0;
  333.         if (typeof c == "undefined") c = 0;
  334.         if (typeof d == "undefined") d = 1;
  335.         if (typeof e == "undefined") e = 0;
  336.         if (typeof f == "undefined") f = 0;
  337.         this.a = a;
  338.         this.b = b;
  339.         this.c = c;
  340.         this.d = d;
  341.         this.tx = e;
  342.         this.ty = f;
  343.         this.__default = this.a == 1 && this.b == 0 && this.c == 0 && this.d == 1 && this.tx == 0 && this.ty == 0
  344.     };
  345.     fljs.addMethods(flash.geom.Matrix, {
  346.         clone: function () {
  347.             return new flash.geom.Matrix(this.a, this.b, this.c, this.d, this.tx, this.ty)
  348.         },
  349.         concat: function (a) {
  350.             var b = this.a * a.b + this.b * a.d,
  351.                 c = this.c * a.a + this.d * a.c,
  352.                 d = this.c * a.b + this.d * a.d,
  353.                 e = this.tx * a.a + this.ty * a.c + a.tx,
  354.                 f = this.tx * a.b + this.ty * a.d + a.ty;
  355.             this.a = this.a * a.a + this.b * a.c;
  356.             this.b = b;
  357.             this.c = c;
  358.             this.d = d;
  359.             this.tx = e;
  360.             this.ty = f
  361.         },
  362.         createBox: function () {},
  363.         createGradientBox: function () {},
  364.         deltaTransformPoint: function () {},
  365.         identity: function () {},
  366.         invert: function () {},
  367.         rotate: function () {},
  368.         scale: function (a, b) {
  369.             this.a *= a;
  370.             this.d *= b;
  371.             this.tx *= a;
  372.             this.ty *= b
  373.         },
  374.         toString: function () {},
  375.         transformPoint: function () {},
  376.         translate: function () {},
  377.         __toSvgString: function () {
  378.             return "matrix(" + [this.a, this.b, this.c, this.d, this.tx, this.ty] + ")"
  379.         }
  380.     });
  381.     flash.geom.Transform = function (a) {
  382.         this._target = a;
  383.         this._colorTransform = new flash.geom.ColorTransform;
  384.         this._matrix = new flash.geom.Matrix
  385.     };
  386.     fljs.addMethods(flash.geom.Transform, {
  387.         setTarget: function (a) {
  388.             this._target = a
  389.         },
  390.         getColorTransform: function () {
  391.             return this._colorTransform
  392.         },
  393.         setColorTransform: function (a) {
  394.             this._colorTransform = a;
  395.             this._target.__setColorTransform(a)
  396.         },
  397.         getConcatenatedColorTransform: function () {
  398.             for (var a = this._colorTransform, b = this._target, c = fljs.Player.getInstance(); b && b != c;) {
  399.                 var d = b.getTransform().getColorTransform();
  400.                 if (!d.__default) {
  401.                     a = d;
  402.                     break
  403.                 }
  404.                 b = b.getParent()
  405.             }
  406.             return a
  407.         },
  408.         getMatrix: function () {
  409.             return this._matrix
  410.         },
  411.         setMatrix: function (a) {
  412.             this._matrix =
  413.             a;
  414.             this._target.__setMatrix(a)
  415.         },
  416.         notify: function () {
  417.             this._target.__setMatrix(this._matrix);
  418.             this._target.__setColorTransform(this._colorTransform)
  419.         }
  420.     });
  421.     flash.display.DisplayObject = function () {
  422.         flash.events.EventDispatcher.call(this);
  423.         this._alpha = 1;
  424.         this.blendMode_ = flash.display.BlendMode.NORMAL;
  425.         this._transform = new flash.geom.Transform(this);
  426.         this.enterFrameListener = fljs.bind(this.onEnterFrame_, this);
  427.         fljs.Player.getInstance().dispatcher.addEventListener(flash.events.Event.ENTER_FRAME, this.enterFrameListener);
  428.         this.__simpleColorTransform = true;
  429.         this.__asContext = null;
  430.         (this._clipElement = new fljs.dom.Element).create(fljs.dom.Namespace.Svg, "g");
  431.         this.id = "clip" + flash.display.DisplayObject.id++;
  432.         this._mouseEventHandler = fljs.bind(this.dispatchMouseEvent, this)
  433.     };
  434.     fljs.inherits(flash.display.DisplayObject, flash.events.EventDispatcher);
  435.     fljs.addMethods(flash.display.DisplayObject, {
  436.         getBounds: function (a) {
  437.             var b = this.element_.getElement().getBBox();
  438.             if (a == this) return new flash.geom.Rectangle(b.x, b.y, b.width, b.height);
  439.             else {
  440.                 var c = new flash.geom.Point(b.x, b.y);
  441.                 c = a.globalToLocal(this.localToGlobal(c));
  442.                 b = new flash.geom.Point(b.x + b.width, b.y + b.height);
  443.                 b = a.globalToLocal(this.localToGlobal(b));
  444.                 return new flash.geom.Rectangle(c.x, c.y, b.x - c.x, b.y - c.y)
  445.             }
  446.         },
  447.         getRect: function () {},
  448.         globalToLocal: function (a) {
  449.             var b = this._svgCtm();
  450.             a = this._SvgApplyMatrixToPoint(a, b);
  451.             return new flash.geom.Point(a.x, a.y)
  452.         },
  453.         hitTestObject: function (a) {
  454.             a = a.getBounds(this);
  455.             var b = this.getBounds(this);
  456.             return a.x + a.width <= b.x && a.x >= b.x + b.width && a.y + a.height <= b.y && a.y >= b.y + b.height
  457.         },
  458.         hitTestPoint: function (a, b) {
  459.             a = new flash.geom.Point(a, b);
  460.             a = this.globalToLocal(a);
  461.             b = this.getBounds(this);
  462.             return a.x >= b.x && a.x <= b.x + b.width && a.y > b.y && a.y <= b.y + b.height
  463.         },
  464.         _svgApplyMatrixToPoint: function (a, b) {
  465.             var c = fljs.Player.getInstance().element.getElement().createSVGPoint();
  466.             c.x = a.x;
  467.             c.y = a.y;
  468.             return c = c.matrixTransform(b)
  469.         },
  470.         _svgCtm: function () {
  471.             var a = this.element_.getElement(),
  472.                 b;
  473.             try {
  474.                 b = a.parentNode.getScreenCTM()
  475.             } catch (c) {
  476.                 b = getScreenCTM(a.parentNode)
  477.             }
  478.             return b
  479.         },
  480.         localToGlobal: function (a) {
  481.             var b = this._svgCtm();
  482.             a = this._SvgApplyMatrixToPoint(a, b.inverse());
  483.             return new flash.geom.Point(a.x, a.y)
  484.         },
  485.         onEnterFrame_: function () {},
  486.         __setColorTransform: function (a) {
  487.             this.element_.getElement().setAttributeNS(null, "opacity", a.alphaMultiplier);
  488.             this.element_.getElement().setAttributeNS(null, "stroke-opacity", a.alphaMultiplier);
  489.             this.element_.getElement().setAttributeNS(null, "fill-opacity", a.alphaMultiplier);
  490.             this.__simpleColorTransform = true
  491.         },
  492.         setColorTransform: function () {},
  493.         __setHitTarget: function (a) {
  494.             this.setVisible(false);
  495.             this.element_.getElement().setAttributeNS(null, "pointer-events", "all");
  496.             this._hitTargetFor = a;
  497.             this.addEventListeners()
  498.         },
  499.         makeClipPath: function () {
  500.             this.getClipPath()
  501.         },
  502.         getClipPath: function () {
  503.             this._clipPath || this.buildClipPath();
  504.             return this._clipPath
  505.         },
  506.         buildClipPath: function () {
  507.             var a = new fljs.dom.Element;
  508.             a.create(fljs.dom.Namespace.Svg, "clipPath");
  509.             var b = "clip" + flash.display.DisplayObject.id++;
  510.             a.sets([["id", b], [null, "clipPathUnits", "userSpaceOnUse"]]);
  511.             a.update();
  512.             this.__clipElement = a;
  513.             a = this._clipPath = new fljs.dom.Element;
  514.             a.create(fljs.dom.Namespace.Svg, "g");
  515.             a.set(null, "clip-path", "url(#" + b + ")");
  516.             a.update();
  517.             this._clipElement.element.parentNode.replaceChild(a.element, this._clipElement.element);
  518.             this._clipElement = a;
  519.             this.buildClipParts(this);
  520.             fljs.Player.getInstance().defs.append(this.__clipElement)
  521.         },
  522.         buildClipParts: function (a) {
  523.             if (!this._parentClipPaths) this._parentClipPaths = {};
  524.             this._parentClipPaths[a.id] = a
  525.         },
  526.         __setMatrix: function (a) {
  527.             this.element_.getElement().setAttributeNS(null, "transform", a.__toSvgString());
  528.             if (this._parentClipPaths) for (var b in this._parentClipPaths) {
  529.                 a = this._parentClipPaths[b];
  530.                 this.updateClipParts && this.updateClipParts(a)
  531.             }
  532.         },
  533.         addEventListeners: function () {
  534.             var a = this._buttonEventHandler = fljs.bind(this._hitTargetFor.updateButtonState, this._hitTargetFor),
  535.                 b = flash.events.MouseEvent;
  536.             this.addEventListener(b.CLICK, a, true);
  537.             this.addEventListener(b.MOUSE_OVER, a, true);
  538.             this.addEventListener(b.MOUSE_OUT, a, true);
  539.             this.addEventListener(b.MOUSE_DOWN, a, true);
  540.             this.addEventListener(b.MOUSE_UP, a, true)
  541.         },
  542.         removeFromStage: function () {
  543.             fljs.Player.getInstance().dispatcher.removeEventListener(flash.events.Event.ENTER_FRAME, this.enterFrameListener)
  544.         },
  545.         updateClipDepth: function (a) {
  546.             if (this.__clipDepth) {
  547.                 if (a != this.__clipDepth) if (a < this.__clipDepth) {;
  548.                 } else if (a > this.__clipDepth) {}
  549.             } else {
  550.                 this.makeClipPath();
  551.                 this.__clipDepth = a;
  552.                 var b = this._parent;
  553.                 b.element_.getElement();
  554.                 var c = b.clipPathForDepth(this._depth);
  555.                 c && c.getClipPath();
  556.                 var d = document.createDocumentFragment();
  557.                 for (var e in b.displayList_) {
  558.                     var f = b.displayList_[e].displayObject;
  559.                     if (e > this._depth && e <= a && f._mask == c) {
  560.                         d.appendChild(f._clipElement.element);
  561.                         f._mask = this
  562.                     }
  563.                 }
  564.                 this.getClipPath().element.appendChild(d)
  565.             }
  566.         },
  567.         getName: function () {
  568.             return this._name
  569.         },
  570.         setName: function (a) {
  571.             this._parent && this._parent.setChildName(this, a);
  572.             this._name = a
  573.         },
  574.         getStage: function () {
  575.             return this._parent && this._parent.getStage ? this._parent.getStage() : null
  576.         },
  577.         getTransform: function () {
  578.             return this._transform
  579.         },
  580.         setTransform: function (a) {
  581.             this._transform = a;
  582.             this._transform.setTarget(this);
  583.             this._transform.notify()
  584.         },
  585.         getMatrix: function () {
  586.             return this._transform._matrix
  587.         },
  588.         setMatrix: function (a) {
  589.             this._transform.setMatrix(a)
  590.         },
  591.         getVisible: function () {
  592.             return this._visible
  593.         },
  594.         setVisible: function (a) {
  595.             a = (this._visible = !! a) ? "visible" : "hidden";
  596.             this.element_.getElement().setAttributeNS(null, "visibility", a)
  597.         },
  598.         getParent: function () {
  599.             return this._parent
  600.         },
  601.         setParent: function (a) {
  602.             if (this._parent != a) this._parent = a
  603.         },
  604.         getAs2Object: function () {
  605.             if (!this._as2Object) this._as2Object = new fljs.swf.act.MovieClip(this);
  606.             return this._as2Object
  607.         },
  608.         dispatchMouseEvent: function (a) {
  609.             var b = {};
  610.             b.click = flash.events.MouseEvent.CLICK;
  611.             b.touchend = flash.events.MouseEvent.CLICK;
  612.             b.mouseover = flash.events.MouseEvent.MOUSE_OVER;
  613.             b.mouseout = flash.events.MouseEvent.MOUSE_OUT;
  614.             b.mousedown = flash.events.MouseEvent.MOUSE_DOWN;
  615.             b.mouseup = flash.events.MouseEvent.MOUSE_UP;
  616.             b.touchstart = flash.events.MouseEvent.MOUSE_DOWN;
  617.             b.touchend = flash.events.MouseEvent.MOUSE_UP;
  618.             this.dispatchEvent(new flash.events.MouseEvent(b[a.type]))
  619.         },
  620.         getWidth: function () {
  621.             return this.element_.element.getBBox().width
  622.         },
  623.         setWidth: function (a) {
  624.             var b = this.getWidth(),
  625.                 c = this.getMatrix(),
  626.                 d = new flash.geom.Matrix;
  627.             d.scale(a / b, 1);
  628.             d.concat(c);
  629.             d.tx = c.tx;
  630.             d.ty = c.ty;
  631.             this.setMatrix(d)
  632.         },
  633.         getHeight: function () {
  634.             return this.element_.element.getBBox().height
  635.         }
  636.     });
  637.     fljs.addEvents(flash.display.DisplayObject, [[flash.events.MouseEvent.MOUSE_OVER, function () {
  638.         this.element_.element.addEventListener("mouseover", this._mouseEventHandler, false)},function () {
  639.         this.element_.element.removeEventListener("mouseover", this._mouseEventHandler)}], [flash.events.MouseEvent.MOUSE_OUT, function () {
  640.         this.element_.element.addEventListener("mouseout", this._mouseEventHandler, false)},function () {
  641.         this.element_.element.removeEventListener("mouseout", this._mouseEventHandler)}], [flash.events.MouseEvent.MOUSE_DOWN,
  642.         function () {
  643.         this.element_.element.addEventListener("mousedown", this._mouseEventHandler, false)},function () {
  644.         this.element_.element.removeEventListener("mousedown", this._mouseEventHandler)}], [flash.events.MouseEvent.MOUSE_UP, function () {
  645.         this.element_.element.addEventListener("mouseup", this._mouseEventHandler, false)},function () {
  646.         this.element_.element.removeEventListener("mouseup", this._mouseEventHandler)}]]);
  647.     flash.display.DisplayObject.id = 1;
  648.     flash.display.InteractiveObject = function () {
  649.         flash.display.DisplayObject.call(this)
  650.     };
  651.     fljs.inherits(flash.display.InteractiveObject, flash.display.DisplayObject);
  652.     flash.display.DisplayObjectContainer = function () {
  653.         flash.display.InteractiveObject.call(this);
  654.         this.element_ = this._clipElement;
  655.         this.graphics_ = new flash.display.Graphics(this);
  656.         this.displayList_ = [];
  657.         this.__childNames = {}
  658.     };
  659.     fljs.inherits(flash.display.DisplayObjectContainer, flash.display.InteractiveObject);
  660.     fljs.addMethods(flash.display.DisplayObjectContainer, {
  661.         addChild: function (a) {
  662.             var b = 0;
  663.             for (var c in this.displayList_) b = Math.max(c, b);
  664.             return this.addChildAt(a, b + 1)
  665.         },
  666.         addChildAt: function (a, b) {
  667.             a._depth = b;
  668.             a.setParent(this);
  669.             var c = this.element_.getElement(),
  670.                 d = this.clipPathForDepth(b);
  671.             if (d) c = d.getClipPath().element;
  672.             var e = this.displayList_[b],
  673.                 f;
  674.             if (e) f = e.displayObject;
  675.             if (e && !f.__clipDepth) {
  676.                 c.replaceChild(a._clipElement.element, f._clipElement.element);
  677.                 f.removeFromStage()
  678.             } else {
  679.                 e && this.removeChildAt(b);
  680.                 if ((e = this.dispObjAfterIndex(b)) && d) if (e._mask != d) e = null;
  681.                 e ? c.insertBefore(a._clipElement.element, e._clipElement.element) : c.appendChild(a._clipElement.element)
  682.             }
  683.             this.displayList_[b] = {
  684.                 displayObject: a
  685.             };
  686.             a.__name && this.setChildName(a, null, a.__name);
  687.             if (this._parentClipPaths) for (var g in this._parentClipPaths) a.buildClipParts(this._parentClipPaths[g]);
  688.             if (d) a._mask = d;
  689.             return a
  690.         },
  691.         dispObjAfterIndex: function (a) {
  692.             var b, c = null;
  693.             for (var d in this.displayList_) if (d > a) {
  694.                 b = c ? Math.min(b, d) : d;
  695.                 c = this.displayList_[b].displayObject
  696.             }
  697.             return c
  698.         },
  699.         areInaccessibleObjectsUnderPoint: function () {
  700.             return false
  701.         },
  702.         contains: function () {},
  703.         getChildAt: function (a) {
  704.             return (a = this.displayList_[a]) ? a.displayObject : null
  705.         },
  706.         getChildByName: function (a) {
  707.             return this.childrenByName_[a]
  708.         },
  709.         removeChildAt: function (a) {
  710.             var b = this.displayList_[a];
  711.             if (b) {
  712.                 b = b.displayObject;
  713.                 var c;
  714.                 c = (c = this.clipPathForDepth(a)) ? c.getClipPath().element : this.element_.getElement();
  715.                 var d = b._clipElement.element;
  716.                 if (b.__clipDepth) {
  717.                     b.getClipPath();
  718.                     var e = document.createDocumentFragment();
  719.                     for (var f in this.displayList_) {
  720.                         var g = this.displayList_[f].displayObject;
  721.                         if (g._mask == b) {
  722.                             g._mask = null;
  723.                             e.appendChild(g._clipElement.element)
  724.                         }
  725.                     }
  726.                     c.replaceChild(e, d)
  727.                 } else c.removeChild(d);
  728.                 b.setParent(null);
  729.                 b.removeFromStage();
  730.                 b._name && delete this.__childNames[b._name];
  731.                 delete this.displayList_[a];
  732.                 return b
  733.             } else fljs.console("doc").info("removeChildAt:" + a + " failed")
  734.         },
  735.         removeChildren: function () {
  736.             for (var a in this.displayList_) this.removeChildAt(a)
  737.         },
  738.         setChildIndex: function () {},
  739.         swapChildren: function () {},
  740.         swapChildrenAt: function () {},
  741.         setChildName: function (a, b) {
  742.             a._name && delete this.__childNames[a._name];
  743.             this.__childNames[b] = a
  744.         },
  745.         buildClipParts: function (a) {
  746.             fljs.base(this, "buildClipParts", a);
  747.             this.graphics_.buildClipParts(a);
  748.             for (var b in this.displayList_) {
  749.                 var c = this.displayList_[b].displayObject;
  750.                 c.buildClipParts && c.buildClipParts(a)
  751.             }
  752.         },
  753.         updateClipParts: function (a) {
  754.             this.graphics_.updateClipParts(a);
  755.             for (var b in this.displayList_) {
  756.                 var c = this.displayList_[b].displayObject;
  757.                 c.updateClipParts && c.updateClipParts(a)
  758.             }
  759.         },
  760.         updateColorTransform: function () {
  761.             for (var a in this.displayList_) {
  762.                 var b = this.displayList_[a].displayObject;
  763.                 b.updateColorTransform && b.updateColorTransform()
  764.             }
  765.         },
  766.         __setColorTransform: function (a) {
  767.             fljs.base(this, "__setColorTransform", a);
  768.             this.updateColorTransform()
  769.         },
  770.         clipPathForDepth: function (a) {
  771.             var b = -1;
  772.             for (var c in this.displayList_) {
  773.                 var d = this.displayList_[c].displayObject;
  774.                 if (d.__clipDepth) if (a > c && a <= d.__clipDepth) b = Math.max(c, b)
  775.             }
  776.             return b > -1 ? this.displayList_[b].displayObject : null
  777.         }
  778.     });
  779.     flash.display.Stage = function () {
  780.         flash.display.DisplayObjectContainer.call(this);
  781.         var a = fljs.Player.getInstance(),
  782.             b = a.header.FrameSize.Xmax - a.header.FrameSize.Xmin,
  783.             c = a.header.FrameSize.Ymax - a.header.FrameSize.Ymin;
  784.         this._clipElement.sets([[null, "width", b], [null, "height", c]]);
  785.         this._clipElement.update();
  786.         this.align_ = flash.display.StageAlign.TOP_LEFT;
  787.         this.displayState_ = flash.display.StageDisplayState.NORMAL;
  788.         this.frameRate_ = 30;
  789.         a = fljs.Player.getInstance();
  790.         b = a.header.FrameSize.Xmax - a.header.FrameSize.Xmin;
  791.         c =
  792.         a.header.FrameSize.Ymax - a.header.FrameSize.Ymin;
  793.         a = this._bg = new fljs.dom.Element;
  794.         a.create(fljs.dom.Namespace.Svg, "rect");
  795.         a.sets([[null, "x", 0], [null, "y", 0], [null, "width", b], [null, "height", c], [null, "stroke", "none"], [null, "fill", this.colorToSvgString(0)]]);
  796.         a.update();
  797.         (b = this._clipElement.element.firstChild) ? this._clipElement.getElement().insertBefore(a.element, b) : this._clipElement.getElement().appendChild(a.element)
  798.     };
  799.     fljs.inherits(flash.display.Stage, flash.display.DisplayObjectContainer);
  800.     fljs.addMethods(flash.display.Stage, {
  801.         initialize: function () {
  802.             this.setBackgroundColor_(0)
  803.         },
  804.         invalidate: function () {},
  805.         isFocusInaccessible: function () {},
  806.         runFrameLoop_: function () {},
  807.         onEnterFrame_: function () {
  808.             for (var a in this.children_) this.children_.onEnterFrame()
  809.         },
  810.         colorToSvgString: function (a) {
  811.             return "rgb(" + [a >> 16 & 255, a >> 8 & 255, a & 255] + ")"
  812.         },
  813.         setBackgroundColor_: function (a) {
  814.             this._bg.set(null, "fill", this.colorToSvgString(a));
  815.             this._bg.update()
  816.         },
  817.         onMouseMove: function (a) {
  818.             this._mouseX = a.clientX;
  819.             this._mouseY = a.clientY
  820.         },
  821.         getStage: function () {
  822.             return this
  823.         },
  824.         getFrameRate: function () {
  825.             return this.frameRate_
  826.         },
  827.         setFrameRate: function (a) {
  828.             this.frameRate_ = a = Math.max(Math.min(a, 1E3), 0.01)
  829.         }
  830.     });
  831.     flash.display.GradientType = function () {};
  832.     fljs.addConstants(flash.display.GradientType, {
  833.         LINEAR: "linear",
  834.         RADIAL: "radial"
  835.     });
  836.     flash.display.SpreadMethod = function () {};
  837.     fljs.addConstants(flash.display.SpreadMethod, {
  838.         PAD: "pad",
  839.         REFLECT: "reflect",
  840.         REPEAT: "repeat"
  841.     });
  842.     flash.display.InterpolationMethod = function () {};
  843.     fljs.addConstants(flash.display.InterpolationMethod, {
  844.         LINEAR_RGB: "linearRGB",
  845.         RGB: "rgb"
  846.     });
  847.     flash.display.Graphics = function (a) {
  848.         this.__target = a;
  849.         this.setDisplayObject(a);
  850.         this._parentClipPaths = {};
  851.         this._clipParts = {};
  852.         this._parts = []
  853.     };
  854.     fljs.addMethods(flash.display.Graphics, {
  855.         clear: function () {
  856.             for (var a in this._parts) this.parentEl.removeChild(this._parts[a]);
  857.             this._parts = [];
  858.             this._clipParts = {};
  859.             this._parentClipPaths = {}
  860.         },
  861.         opacityWithXform: function (a) {
  862.             var b = this.displayObject_.getTransform().getConcatenatedColorTransform();
  863.             return b.__default ? a : Math.max(0, Math.min(255, Math.round(a * 255 * b.alphaMultiplier + b.alphaOffset))) / 255
  864.         },
  865.         setDisplayObject: function (a) {
  866.             this.displayObject_ = a;
  867.             this.parentEl = this.displayObject_.element_.element
  868.         },
  869.         __colorToSvgString: function (a) {
  870.             var b =
  871.             a >> 16 & 255,
  872.                 c = a >> 8 & 255;
  873.             a = a & 255;
  874.             if (!this.displayObject_.getTransform().getConcatenatedColorTransform().__default) {
  875.                 var d = this.displayObject_.getTransform().getConcatenatedColorTransform();
  876.                 b = Math.max(0, Math.min(255, Math.round(b * d.redMultiplier + d.redOffset)));
  877.                 c = Math.max(0, Math.min(255, Math.round(c * d.greenMultiplier + d.greenOffset)));
  878.                 a = Math.max(0, Math.min(255, Math.round(a * d.blueMultiplier + d.blueOffset)))
  879.             }
  880.             return "rgb(" + [b, c, a] + ")"
  881.         },
  882.         clipTransforms: function (a) {
  883.             for (var b = [], c = this.displayObject_;;) {
  884.                 var d = c.getMatrix().__toSvgString();
  885.                 b.push(d);
  886.                 if (c == a) break;
  887.                 c = c.getParent()
  888.             }
  889.             return b
  890.         },
  891.         buildClipParts: function (a) {
  892.             this._parentClipPaths[a.id] = a;
  893.             var b = this.clipTransforms(a).join(" ");
  894.             if (this.tag) {
  895.                 var c = this.tag.def.paths;
  896.                 for (var d in c) {
  897.                     var e = c[d],
  898.                         f;
  899.                     f = fljs.agent.browser == "Safari" ? e.clone() : e.use();
  900.                     f.set(null, "transform", b);
  901.                     f.update();
  902.                     this.addClipPart(a, e, f)
  903.                 }
  904.             }
  905.         },
  906.         addClipPart: function (a, b, c) {
  907.             this._clipParts[a.id] || (this._clipParts[a.id] = {});
  908.             this._clipParts[a.id][b.id] = c;
  909.             a.__clipElement.append(c)
  910.         },
  911.         updateClipParts: function (a) {
  912.             var b = this.clipTransforms(a);
  913.             for (a = a;;) {
  914.                 if (this._parentClipPaths[a.id]) {
  915.                     var c = b.join(" "),
  916.                         d = this._clipParts[a.id];
  917.                     for (var e in d) {
  918.                         var f = d[e];
  919.                         f.set(null, "transform", c);
  920.                         f.update()
  921.                     }
  922.                 }
  923.                 if (!a || !a.getTransform) break;
  924.                 c = a.getMatrix().__toSvgString();
  925.                 b.push(c);
  926.                 a = a.getParent()
  927.             }
  928.         },
  929.         useTag: function (a, b, c) {
  930.             var d = this.displayObject_.getTransform().getConcatenatedColorTransform();
  931.             d.__default || (b = d);
  932.             this.tag = a;
  933.             this.cloning = c;
  934.             this.use = a.def.use(b, null, this.cloning);
  935.             this.parentEl.appendChild(this.use.element)
  936.         },
  937.         setColorTransform: function (a) {
  938.             if (this.use) {
  939.                 var b =
  940.                 this.use.element;
  941.                 this.use = this.tag.def.use(a, null, this.cloning);
  942.                 this.parentEl.replaceChild(this.use.element, b)
  943.             }
  944.         }
  945.     });
  946.     flash.display.Graphics.patternId = 1;
  947.     flash.display.Graphics.pathId = 1;
  948.     flash.display.IBitmapDrawable = function () {};
  949.     flash.display.StageAlign = function () {};
  950.     fljs.addConstants(flash.display.StageAlign, {
  951.         TOP: "top",
  952.         BOTTOM: "bottom",
  953.         LEFT: "left",
  954.         RIGHT: "right",
  955.         TOP_LEFT: "topLeft",
  956.         TOP_RIGHT: "topRight",
  957.         BOTTOM_LEFT: "bottomLeft",
  958.         BOTTOM_RIGHT: "bottomRight"
  959.     });
  960.     flash.display.StageDisplayState = function () {};
  961.     fljs.addConstants(flash.display.StageDisplayState, {
  962.         FULL_SCREEN: "fullScreen",
  963.         NORMAL: "normal"
  964.     });
  965.     fljs.swf = {};
  966.     fljs.swf.tag = {};
  967.     fljs.swf.tag.End = function () {};
  968.     fljs.addMethods(fljs.swf.tag.End, {
  969.         read: function () {},
  970.         evaluate: function () {}
  971.     });
  972.     fljs.swf.tag.ShowFrame = function () {};
  973.     fljs.addMethods(fljs.swf.tag.ShowFrame, {
  974.         read: function () {},
  975.         evaluate: function () {}
  976.     });
  977.     flash.display.Shape = function () {
  978.         flash.display.DisplayObject.call(this);
  979.         this.element_ = this._clipElement;
  980.         this.graphics_ = new flash.display.Graphics(this)
  981.     };
  982.     fljs.inherits(flash.display.Shape, flash.display.DisplayObject);
  983.     fljs.addMethods(flash.display.Shape, {
  984.         buildClipParts: function (a) {
  985.             fljs.base(this, "buildClipParts", a);
  986.             this.graphics_.buildClipParts(a)
  987.         },
  988.         updateClipParts: function (a) {
  989.             this.graphics_.updateClipParts(a)
  990.         },
  991.         useTag: function (a, b, c) {
  992.             this.tag = a;
  993.             this.graphics_.useTag(a, b, c);
  994.             if (b) {
  995.                 this.setColorTransform(b);
  996.                 this.element_.getElement().setAttributeNS(null, "opacity", b.alphaMultiplier)
  997.             }
  998.         },
  999.         updateColorTransform: function () {
  1000.             this.graphics_.setColorTransform(this.getTransform().getConcatenatedColorTransform())
  1001.         },
  1002.         __setColorTransform: function (a) {
  1003.             fljs.base(this, "__setColorTransform", a);
  1004.             this.graphics_.setColorTransform(a)
  1005.         }
  1006.     });
  1007.     fljs.swf.tag.PlaceObject = function () {};
  1008.     fljs.addMethods(fljs.swf.tag.PlaceObject, {
  1009.         read: function (a, b) {
  1010.             var c = a.stream.byteIndex;
  1011.             this.CharacterId = a.readUI16();
  1012.             this.Depth = a.readUI16();
  1013.             this.Matrix = a.readMATRIX();
  1014.             a.stream.align();
  1015.             if (a.stream.byteIndex != c + b.TagLength) {
  1016.                 fljs.console("parse").info("reading cxform");
  1017.                 this.ColorTransform = a.readCXFORM()
  1018.             }
  1019.             a.stream.align()
  1020.         },
  1021.         buildMatrix_: function () {
  1022.             return new flash.geom.Matrix(this.Matrix.ScaleX, this.Matrix.RotateSkew0, this.Matrix.RotateSkew1, this.Matrix.ScaleY, this.Matrix.TranslateX, this.Matrix.TranslateY)
  1023.         },
  1024.         buildColorTransform_: function () {
  1025.             var a = this.ColorTransform;
  1026.             return new flash.geom.ColorTransform(a.RedMultTerm, a.GreenMultTerm, a.BlueMultTerm, a.AlphaMultTerm, a.RedAddTerm, a.GreenAddTerm, a.BlueAddTerm, a.AlphaAddTerm)
  1027.         },
  1028.         evaluate: function (a, b, c, d) {
  1029.             b = fljs.console("eval");
  1030.             c = a.dictionary[this.CharacterId];
  1031.             var e;
  1032.             if (c instanceof fljs.swf.tag.DefineShape || c instanceof fljs.swf.tag.DefineShape2) {
  1033.                 e = new flash.display.Shape;
  1034.                 e.getTransform().setMatrix(this.buildMatrix_());
  1035.                 this.ColorTransform && e.getTransform().setColorTransform(this.buildColorTransform_());
  1036.                 e.useTag(c)
  1037.             } else if (c instanceof fljs.swf.tag.DefineBitsJPEG2) {
  1038.                 e = c.buildBitmap(fljs.Player.getInstance());
  1039.                 e.getTransform().setMatrix(this.buildMatrix_())
  1040.             } else if (c instanceof fljs.swf.tag.DefineButton2) {
  1041.                 e = c.build(a);
  1042.                 e.getTransform().setMatrix(this.buildMatrix_())
  1043.             }
  1044.             e ? d.addChildAt(e, this.Depth) : b.info("not recognized: " + [this.CharacterId, this.Name])
  1045.         }
  1046.     });
  1047.     fljs.swf.tag.RemoveObject = function () {};
  1048.     fljs.addMethods(fljs.swf.tag.RemoveObject, {
  1049.         read: function (a) {
  1050.             this.CharacterId = a.readUI16();
  1051.             this.Depth = a.readUI16()
  1052.         },
  1053.         evaluate: function (a, b, c, d) {
  1054.             d.removeChildAt(this.Depth)
  1055.         }
  1056.     });
  1057.     fljs.swf.tag.PlaceObject2 = function () {};
  1058.     fljs.addMethods(fljs.swf.tag.PlaceObject2, {
  1059.         read: function (a) {
  1060.             this.startByteIndex = a.stream.byteIndex;
  1061.             fljs.console("parse");
  1062.             this.PlaceFlagHasClipActions = a.readUB(1);
  1063.             this.PlaceFlagHasClipDepth = a.readUB(1);
  1064.             this.PlaceFlagHasName = a.readUB(1);
  1065.             this.PlaceFlagHasRatio = a.readUB(1);
  1066.             this.PlaceFlagHasColorTransform = a.readUB(1);
  1067.             this.PlaceFlagHasMatrix = a.readUB(1);
  1068.             this.PlaceFlagHasCharacter = a.readUB(1);
  1069.             this.PlaceFlagMove = a.readUB(1);
  1070.             this.Depth = a.readUI16();
  1071.             if (this.PlaceFlagHasCharacter) this.CharacterId = a.readUI16();
  1072.             if (this.PlaceFlagHasMatrix) this.Matrix = a.readMATRIX();
  1073.             if (this.PlaceFlagHasColorTransform) this.ColorTransform = a.readCXFORMWITHALPHA();
  1074.             if (this.PlaceFlagHasRatio) this.Ratio = a.readUI16();
  1075.             if (this.PlaceFlagHasName) this.Name = a.readSTRING();
  1076.             if (this.PlaceFlagHasClipDepth) this.ClipDepth = a.readUI16();
  1077.             if (this.PlaceFlagHasClipActions) this.ClipActions = a.readCLIPACTIONS()
  1078.         },
  1079.         buildMatrix_: function () {
  1080.             return new flash.geom.Matrix(this.Matrix.ScaleX, this.Matrix.RotateSkew0, this.Matrix.RotateSkew1, this.Matrix.ScaleY, this.Matrix.TranslateX, this.Matrix.TranslateY)
  1081.         },
  1082.         buildColorTransform_: function () {
  1083.             var a = this.ColorTransform;
  1084.             return new flash.geom.ColorTransform(a.RedMultTerm, a.GreenMultTerm, a.BlueMultTerm, a.AlphaMultTerm, a.RedAddTerm, a.GreenAddTerm, a.BlueAddTerm, a.AlphaAddTerm)
  1085.         },
  1086.         evaluate: function (a, b, c, d) {
  1087.             var e;
  1088.             c = fljs.console("place");
  1089.             if (this.PlaceFlagMove && this.PlaceFlagHasCharacter) e = d.getChildAt(this.Depth);
  1090.             var f;
  1091.             if (this.ColorTransform) f = this.buildColorTransform_();
  1092.             if (this.PlaceFlagHasCharacter) {
  1093.                 b = a.dictionary[this.CharacterId];
  1094.                 var g;
  1095.                 if (b instanceof fljs.swf.tag.DefineShape || b instanceof fljs.swf.tag.DefineEditText || b instanceof fljs.swf.tag.DefineText || b instanceof fljs.swf.tag.DefineSprite || b instanceof fljs.swf.tag.DefineButton2) g = b.build(a, f);
  1096.                 if (g) {
  1097.                     this.Matrix && g.getTransform().setMatrix(this.buildMatrix_());
  1098.                     d.addChildAt(g, this.Depth);
  1099.                     if (e) this.Matrix || g.getTransform().setMatrix(e.getTransform().getMatrix());
  1100.                     if (g.__clipActions == null) g.__clipActions = {};
  1101.                     if (this.ClipActions) {
  1102.                         f = fljs.swf.ClipEventFlags;
  1103.                         d = this.ClipActions.ClipActionRecords;
  1104.                         for (var j in d) {
  1105.                             e = d[j];
  1106.                             for (var h in fljs.swf.ClipEventFlags) if (e.EventFlags & f[h]) {
  1107.                                 g.__clipActions[h] || (g.__clipActions[h] = []);
  1108.                                 g.__clipActions[h].push(e)
  1109.                             }
  1110.                         }
  1111.                     }
  1112.                     if (b instanceof fljs.swf.tag.DefineSprite || b instanceof fljs.swf.tag.DefineButton2) g.onCreate()
  1113.                 } else {
  1114.                     c.info("not recognized: " + [this.CharacterId, this.Name]);
  1115.                     e && d.removeChildAt(this.Depth)
  1116.                 }
  1117.             } else if (this.PlaceFlagMove) {
  1118.                 g = d.getChildAt(this.Depth);
  1119.                 if (!g) return;
  1120.                 h = false;
  1121.                 if (this.Matrix) {
  1122.                     g.getTransform().setMatrix(this.buildMatrix_());
  1123.                     h = true
  1124.                 }
  1125.                 if (f) {
  1126.                     g.getTransform().setColorTransform(f);
  1127.                     h = true
  1128.                 }
  1129.                 if (h && a.renderTextAsGlyphs) if (g.text_ || g._text) if (g.getParent()) {
  1130.                     j = 0;
  1131.                     h = g._clipElement.element;
  1132.                     h = b = h.parentNode;
  1133.                     b = h.parentNode;
  1134.                     d = h.nextSibling;
  1135.                     b.removeChild(h);
  1136.                     f && g.getTransform().setColorTransform(f);
  1137.                     this.Matrix && g.getTransform().setMatrix(this.buildMatrix_());
  1138.                     d ? b.insertBefore(h, d) : b.appendChild(h)
  1139.                 }
  1140.             }
  1141.             if (g) {
  1142.                 this.PlaceFlagHasClipDepth && g.updateClipDepth(this.ClipDepth);
  1143.                 this.Name && g.setName(this.Name);
  1144.                 if (g && this.PlaceFlagHasCharacter) {
  1145.                     if (g.__clipActions.ClipEventInitialize) {
  1146.                         f = [];
  1147.                         for (j in g.__clipActions.ClipEventInitialize) f.push.apply(f, g.__clipActions.ClipEventInitialize[j].Actions);
  1148.                         a.doActions(g, f)
  1149.                     }
  1150.                     if (g.__clipActions.ClipEventLoad) {
  1151.                         f = [];
  1152.                         for (j in g.__clipActions.ClipEventLoad) f.push.apply(f, g.__clipActions.ClipEventLoad[j].Actions);
  1153.                         a.doActions(g, f)
  1154.                     }
  1155.                     if (g.__clipActions.ClipEventEnterFrame) {
  1156.                         f = [];
  1157.                         for (j in g.__clipActions.ClipEventEnterFrame) f.push.apply(f, g.__clipActions.ClipEventEnterFrame[j].Actions);
  1158.                         a.dispatcher.addEventListener(flash.events.Event.ENTER_FRAME, fljs.bind(a.doActions, a, g, f))
  1159.                     }
  1160.                 }
  1161.             }
  1162.         }
  1163.     });
  1164.     fljs.swf.build = {};
  1165.     fljs.swf.build.SvgUtils = function () {};
  1166.     fljs.addMethods(fljs.swf.build.SvgUtils, {
  1167.         toSvgColorString: function (a) {
  1168.             return "rgb(" + [a.Red, a.Green, a.Blue] + ")"
  1169.         },
  1170.         toSvgOpacity: function (a) {
  1171.             return a.Alpha == null ? 1 : a.Alpha / 255
  1172.         },
  1173.         toSvgMatrixString: function (a) {
  1174.             return (new flash.geom.Matrix(a.ScaleX, a.RotateSkew0, a.RotateSkew1, a.ScaleY, a.TranslateX, a.TranslateY)).__toSvgString()
  1175.         },
  1176.         toMatrix: function (a) {
  1177.             return new flash.geom.Matrix(a.ScaleX, a.RotateSkew0, a.RotateSkew1, a.ScaleY, a.TranslateX, a.TranslateY)
  1178.         }
  1179.     });
  1180.     fljs.swf.def = {};
  1181.     fljs.swf.def.BitmapDef = function () {
  1182.         (this.element = new fljs.dom.Element).create(fljs.dom.Namespace.Svg, "image")
  1183.     };
  1184.     fljs.addMethods(fljs.swf.def.BitmapDef, {
  1185.         setCharaId: function (a) {
  1186.             this.id = "bitmap-" + a;
  1187.             this.ref = "#" + this.id;
  1188.             this.element.set("id", this.id)
  1189.         },
  1190.         define: function () {
  1191.             this.element.update();
  1192.             this._define(this.element.element)
  1193.         },
  1194.         use: function () {
  1195.             var a = new fljs.dom.Element;
  1196.             a.create(fljs.dom.Namespace.Svg, "use");
  1197.             a.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.ref]]);
  1198.             a.update();
  1199.             return a
  1200.         },
  1201.         _define: function (a) {
  1202.             fljs.Player.getInstance().defs.element.appendChild(a)
  1203.         }
  1204.     });
  1205.     fljs.swf.def.BitmapFillDef = function () {
  1206.         var a = this.element = new fljs.dom.Element;
  1207.         a.create(fljs.dom.Namespace.Svg, "pattern");
  1208.         this.type = "Bitmap";
  1209.         this.id = "pattern-" + fljs.swf.def.BitmapFillDef.patternId++;
  1210.         this.ref = "#" + this.id;
  1211.         a.set("id", this.id)
  1212.     };
  1213.     fljs.addMethods(fljs.swf.def.BitmapFillDef, {
  1214.         setBitmapId: function (a) {
  1215.             a = fljs.Player.getInstance().dictionary[a];
  1216.             if (!a) return false;
  1217.             this.bitmap = a;
  1218.             this.element.append(a.def.use());
  1219.             return true
  1220.         },
  1221.         define: function () {
  1222.             this.element.update();
  1223.             this._define(this.element.element)
  1224.         },
  1225.         use: function () {
  1226.             var a = new fljs.dom.Element;
  1227.             a.create(fljs.dom.Namespace.Svg, "use");
  1228.             a.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.ref]]);
  1229.             a.update();
  1230.             return a
  1231.         },
  1232.         _define: function (a) {
  1233.             fljs.Player.getInstance().defs.element.appendChild(a)
  1234.         }
  1235.     });
  1236.     fljs.swf.def.BitmapFillDef.patternId = 1;
  1237.     fljs.swf.def.GradientFillDef = function () {
  1238.         this.element = new fljs.dom.Element;
  1239.         this.stops = [];
  1240.         this.type = "Gradient"
  1241.     };
  1242.     fljs.addMethods(fljs.swf.def.GradientFillDef, {
  1243.         create: function (a) {
  1244.             var b = this.element;
  1245.             b.create(fljs.dom.Namespace.Svg, a);
  1246.             this.id = "gradient-" + fljs.swf.def.GradientFillDef.gradientId++;
  1247.             this.ref = "#" + this.id;
  1248.             b.set("id", this.id)
  1249.         },
  1250.         addStop: function (a) {
  1251.             this.stops.push(a);
  1252.             this.element.append(a.element)
  1253.         },
  1254.         define: function () {
  1255.             this.element.update();
  1256.             this._define(this.element.element)
  1257.         },
  1258.         use: function (a) {
  1259.             var b = this.element.clone(false);
  1260.             b.id = "gradient-" + fljs.swf.def.GradientFillDef.gradientId++;
  1261.             b.ref = "#" + b.id;
  1262.             b.set("id", b.id);
  1263.             for (var c in this.stops) b.append(this.stops[c].use(a));
  1264.             b.update();
  1265.             this._define(b.element);
  1266.             return b
  1267.         },
  1268.         _define: function (a) {
  1269.             fljs.Player.getInstance().defs.element.appendChild(a)
  1270.         }
  1271.     });
  1272.     fljs.swf.def.GradientFillDef.gradientId = 1;
  1273.     fljs.swf.def.GradientFillStopDef = function () {
  1274.         (this.element = new fljs.dom.Element).create(fljs.dom.Namespace.Svg, "stop")
  1275.     };
  1276.     fljs.addMethods(fljs.swf.def.GradientFillStopDef, {
  1277.         create: function (a) {
  1278.             var b = this.element;
  1279.             b.create(fljs.dom.Namespace.Svg, a);
  1280.             b.set("id", this.id)
  1281.         },
  1282.         setColor: function (a, b) {
  1283.             this.rgba = a;
  1284.             this.element.sets([[null, "stop-color", this._colorToSvgColor(a, b)], [null, "stop-opacity", this._colorToSvgOpacity(a)]])
  1285.         },
  1286.         define: function () {
  1287.             this.element.update();
  1288.             this._define(this.element.element)
  1289.         },
  1290.         use: function (a) {
  1291.             var b = this.element.clone(false);
  1292.             a = [[null, "stop-color", this._colorToSvgColor(this.rgba, a)]];
  1293.             b.sets(a);
  1294.             b.update();
  1295.             return b
  1296.         },
  1297.         _define: function (a) {
  1298.             fljs.Player.getInstance().defs.element.appendChild(a)
  1299.         },
  1300.         _colorToSvgColor: function (a, b) {
  1301.             var c = a >> 24 & 255,
  1302.                 d = a >> 16 & 255;
  1303.             a = a >> 8 & 255;
  1304.             if (b) {
  1305.                 c = Math.max(0, Math.min(255, Math.round(c * b.redMultiplier + b.redOffset)));
  1306.                 d = Math.max(0, Math.min(255, Math.round(d * b.greenMultiplier + b.greenOffset)));
  1307.                 a = Math.max(0, Math.min(255, Math.round(a * b.blueMultiplier + b.blueOffset)))
  1308.             }
  1309.             return "rgb(" + [c, d, a] + ")"
  1310.         },
  1311.         _colorToSvgOpacity: function (a, b) {
  1312.             a = (a & 255) / 255;
  1313.             if (b) a = Math.max(0, Math.min(1, Math.round(a * b.alphaMultiplier + b.alphaOffset)));
  1314.             return a
  1315.         }
  1316.     });
  1317.     fljs.swf.def.GradientFillStopDef.gradientStopId = 1;
  1318.     fljs.swf.def.PathDef = function () {
  1319.         var a = this.element = new fljs.dom.Element;
  1320.         a.create(fljs.dom.Namespace.Svg, "path");
  1321.         this.id = "path" + fljs.swf.def.PathDef.pathId++;
  1322.         this.ref = "#" + this.id;
  1323.         a.set("id", this.id);
  1324.         a.update()
  1325.     };
  1326.     fljs.addMethods(fljs.swf.def.PathDef, {
  1327.         setStroke: function (a) {
  1328.             (this.stroke = a) ? this.element.sets([[null, "stroke-width", a.thickness], [null, "stroke", this._colorToSvgColor(a.color)], [null, "stroke-opacity", this._colorToSvgOpacity(a.color)]]) : this.element.set(null, "stroke", "none")
  1329.         },
  1330.         setFill: function (a) {
  1331.             if (this.fill = a) switch (a.type) {
  1332.             case "Solid":
  1333.                 this._setSolidFill(a);
  1334.                 break;
  1335.             case "Bitmap":
  1336.                 this._setBitmapFill(a);
  1337.                 break;
  1338.             case "Gradient":
  1339.                 this._setGradientFill(a);
  1340.                 break
  1341.             } else this.element.set(null, "fill", "none")
  1342.         },
  1343.         _setSolidFill: function () {},
  1344.         _setBitmapFill: function (a) {
  1345.             this.element.sets([[null, "fill", "url(" + a.ref + ")"], [null, "fill-opacity", 1]])
  1346.         },
  1347.         _setGradientFill: function () {},
  1348.         define: function () {
  1349.             this.element.update();
  1350.             this._define(this.element.element)
  1351.         },
  1352.         use: function (a, b) {
  1353.             var c = new fljs.dom.Element;
  1354.             c.create(fljs.dom.Namespace.Svg, "use");
  1355.             document.getElementById(this.id);
  1356.             var d = [[fljs.dom.Namespace.Xlink, "xlink:href", this.ref]],
  1357.                 e = this.stroke;
  1358.             e && c.sets([[null, "stroke-width", e.thickness], [null, "stroke", this._colorToSvgColor(e.color, a)], [null, "stroke-opacity",
  1359.                 this._colorToSvgOpacity(e.color)]]);
  1360.             if (e = this.fill) switch (e.type) {
  1361.             case "Solid":
  1362.                 c.set(null, "fill", this._colorToSvgColor(e.color, a));
  1363.                 c.set(null, "fill-opacity", this._colorToSvgOpacity(e.color));
  1364.                 break;
  1365.             case "Bitmap":
  1366.                 break;
  1367.             case "Gradient":
  1368.                 c.sets([[null, "fill", "url(" + e.use(a).ref + ")"], [null, "fill-opacity", 1]]);
  1369.                 break
  1370.             }
  1371.             c.sets(d);
  1372.             b && b.append(c);
  1373.             c.update();
  1374.             return c
  1375.         },
  1376.         clone: function () {
  1377.             var a = this.element.clone(true);
  1378.             a.set("id", null);
  1379.             return a
  1380.         },
  1381.         _colorToSvgColor: function (a, b) {
  1382.             var c = a >> 24 & 255,
  1383.                 d = a >> 16 & 255;
  1384.             a = a >> 8 & 255;
  1385.             if (b) {
  1386.                 c = Math.max(0, Math.min(255, Math.round(c * b.redMultiplier + b.redOffset)));
  1387.                 d = Math.max(0, Math.min(255, Math.round(d * b.greenMultiplier + b.greenOffset)));
  1388.                 a = Math.max(0, Math.min(255, Math.round(a * b.blueMultiplier + b.blueOffset)))
  1389.             }
  1390.             return "rgb(" + [c, d, a] + ")"
  1391.         },
  1392.         _colorToSvgOpacity: function (a, b) {
  1393.             a = (a & 255) / 255;
  1394.             if (b) a = Math.max(0, Math.min(1, Math.round(a * b.alphaMultiplier + b.alphaOffset)));
  1395.             return a
  1396.         },
  1397.         _define: function (a) {
  1398.             fljs.Player.getInstance().defs.element.appendChild(a)
  1399.         }
  1400.     });
  1401.     fljs.swf.def.PathDef.pathId = 1;
  1402.     fljs.swf.def.ShapeDef = function () {
  1403.         (this.element = new fljs.dom.Element).create(fljs.dom.Namespace.Svg, "g");
  1404.         this.parts = [];
  1405.         this.paths = [];
  1406.         this.images = [];
  1407.         this.cxforms = {};
  1408.         this.cxformCount = 0
  1409.     };
  1410.     fljs.addMethods(fljs.swf.def.ShapeDef, {
  1411.         setCharaId: function (a) {
  1412.             this.id = "chara-" + a;
  1413.             this.ref = "#" + this.id;
  1414.             this.element.set("id", this.id)
  1415.         },
  1416.         addPath: function (a) {
  1417.             this.paths.push(a);
  1418.             this.parts.push(a);
  1419.             this.element.append(a.element)
  1420.         },
  1421.         addImage: function (a) {
  1422.             this.images.push(a);
  1423.             this.parts.push(a);
  1424.             this.element.append(a.element)
  1425.         },
  1426.         define: function () {
  1427.             this.element.update();
  1428.             fljs.Player.getInstance();
  1429.             this._define(this.element.element)
  1430.         },
  1431.         use: function (a, b, c) {
  1432.             if (c) {
  1433.                 a = this.element.clone(true);
  1434.                 b && b.append(a);
  1435.                 return a
  1436.             }
  1437.             if (!a) a = flash.geom.ColorTransform.identity;
  1438.             c = a.__toSvgString();
  1439.             a = c in this.cxforms ? this.cxforms[c] : (this.cxforms[c] = this.useDef(a));
  1440.             c = new fljs.dom.Element;
  1441.             c.create(fljs.dom.Namespace.Svg, "use");
  1442.             document.getElementById(a.id);
  1443.             b && b.append(c);
  1444.             c.element.setAttributeNS(fljs.dom.Namespace.Xlink, "xlink:href", a.ref);
  1445.             return c
  1446.         },
  1447.         useDef: function (a) {
  1448.             var b = new fljs.dom.Element;
  1449.             b.create(fljs.dom.Namespace.Svg, "g");
  1450.             var c = [this.id, this.cxformCount++].join("-");
  1451.             b.sets([["id", c]]);
  1452.             b.update();
  1453.             this._define(b.element);
  1454.             var d = this.parts;
  1455.             for (var e in d) d[e].use(a, b);
  1456.             return {
  1457.                 element: b,
  1458.                 id: c,
  1459.                 ref: "#" + c
  1460.             }
  1461.         },
  1462.         _define: function (a) {
  1463.             fljs.Player.getInstance().defs.element.appendChild(a)
  1464.         }
  1465.     });
  1466.     fljs.swf.def.ImageDef = function () {
  1467.         var a = this.element = new fljs.dom.Element;
  1468.         a.create(fljs.dom.Namespace.Svg, "g");
  1469.         this.id = "image-def-" + fljs.swf.def.ImageDef.id++;
  1470.         this.ref = "#" + this.id;
  1471.         a.set("id", this.id)
  1472.     };
  1473.     fljs.addMethods(fljs.swf.def.ImageDef, {
  1474.         setBitmapId: function (a) {
  1475.             a = fljs.Player.getInstance().dictionary[a];
  1476.             if (!a) return false;
  1477.             this.bitmap = a;
  1478.             this._use = a.def.use();
  1479.             this.element.append(this._use);
  1480.             return true
  1481.         },
  1482.         define: function () {
  1483.             this.element.update();
  1484.             this._define(this.element.element)
  1485.         },
  1486.         use: function (a, b) {
  1487.             a = new fljs.dom.Element;
  1488.             a.create(fljs.dom.Namespace.Svg, "use");
  1489.             a.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.ref]]);
  1490.             a.update();
  1491.             b && b.append(a);
  1492.             return a
  1493.         },
  1494.         _define: function (a) {
  1495.             fljs.Player.getInstance().defs.element.appendChild(a)
  1496.         }
  1497.     });
  1498.     fljs.swf.def.ImageDef.id = 1;
  1499.     fljs.swf.BigEndianStringStream = function (a) {
  1500.         this.buffer = a;
  1501.         this.bitIndex = this.byteIndex = this._byte = 0;
  1502.         this.byteIndexForBits = -1;
  1503.         this.logger = fljs.console("parse")
  1504.     };
  1505.     fljs.addMethods(fljs.swf.BigEndianStringStream, {
  1506.         length: function () {
  1507.             return this.buffer.length
  1508.         },
  1509.         hasMore: function () {
  1510.             return this.byteIndex < this.buffer.length
  1511.         },
  1512.         skipBytes: function (a) {
  1513.             this.byteIndex += a
  1514.         },
  1515.         readBytes: function (a) {
  1516.             for (var b = [], c = 0; c < a; c++) b.push(this.buffer.charCodeAt(this.byteIndex++) & 255);
  1517.             return b
  1518.         },
  1519.         align: function () {
  1520.             this.bitIndex = 8
  1521.         },
  1522.         nextUByte: function () {
  1523.             return this.buffer.charCodeAt(this.byteIndex++) & 255
  1524.         },
  1525.         nextSByte: function () {
  1526.             var a = this.buffer.charCodeAt(this.byteIndex++) & 255;
  1527.             if (a >= 128) a -= 256;
  1528.             return a
  1529.         },
  1530.         nextUShort: function () {
  1531.             var a = ((this.buffer.charCodeAt(this.byteIndex++) & 255) << 8) + (this.buffer.charCodeAt(this.byteIndex++) & 255);
  1532.             if (a < 0) a += 65536;
  1533.             return a
  1534.         }
  1535.     });
  1536.     fljs.swf.ClipEventFlags = {
  1537.         ClipEventKeyUp: -2147483648,
  1538.         ClipEventKeyDown: 1073741824,
  1539.         ClipEventMouseUp: 536870912,
  1540.         ClipEventMouseDown: 268435456,
  1541.         ClipEventMouseMove: 134217728,
  1542.         ClipEventUnload: 67108864,
  1543.         ClipEventEnterFrame: 33554432,
  1544.         ClipEventLoad: 16777216,
  1545.         ClipEventDragOver: 8388608,
  1546.         ClipEventRollOut: 4194304,
  1547.         ClipEventRollOver: 2097152,
  1548.         ClipEventReleaseOutside: 1048576,
  1549.         ClipEventRelease: 524288,
  1550.         ClipEventPress: 262144,
  1551.         ClipEventInitialize: 131072,
  1552.         ClipEventData: 65536,
  1553.         ClipEventConstruct: 1024,
  1554.         ClipEventKeyPress: 512,
  1555.         ClipEventDragOut: 256
  1556.     };
  1557.     fljs.swf.FillStyleTypes = {
  1558.         SolidFill: 0,
  1559.         LinearGradientFill: 16,
  1560.         RadialGradientFill: 18,
  1561.         FocalRadialGradientFill: 19,
  1562.         RepeatingBitmapFill: 64,
  1563.         ClippedBitmapFill: 65,
  1564.         NonSmoothedRepeatingBitmapFill: 66,
  1565.         NonSmoothedClippedBitmapFill: 67
  1566.     };
  1567.     fljs.swf.SpreadMethods = {
  1568.         Pad: 0,
  1569.         Reflect: 1,
  1570.         Repeat: 2
  1571.     };
  1572.     fljs.swf.InterpolationMethods = {
  1573.         Rgb: 0,
  1574.         LinearRgb: 1
  1575.     };
  1576.     fljs.swf.build.ShapeBuilder = function (a) {
  1577.         this.context = a;
  1578.         this.utils = new fljs.swf.build.SvgUtils
  1579.     };
  1580.     fljs.addMethods(fljs.swf.build.ShapeBuilder, {
  1581.         build: function (a) {
  1582.             var b = this.parseSwfPaths(a),
  1583.                 c = [];
  1584.             for (var d in b) c.push([this.buildPaths(b[d][0]), this.buildPaths(b[d][1])]);
  1585.             return this.buildDefinition(a, c)
  1586.         },
  1587.         parseSwfPaths: function (a) {
  1588.             var b = 0,
  1589.                 c = 0,
  1590.                 d = 0,
  1591.                 e = 0,
  1592.                 f = 0,
  1593.                 g = 0,
  1594.                 j = a.Shapes.ShapeRecords,
  1595.                 h = this.stateNewStyles(a.Shapes.FillStyles),
  1596.                 m = this.stateNewStyles(a.Shapes.LineStyles),
  1597.                 k = [],
  1598.                 l = 0,
  1599.                 n = 0,
  1600.                 p = 0,
  1601.                 u = 1,
  1602.                 o = {
  1603.                     x1: 0,
  1604.                     y1: 0
  1605.                 },
  1606.                 q = [],
  1607.                 s = this;
  1608.             a = function () {
  1609.                 o.parts = q;
  1610.                 o.flipped = false;
  1611.                 o.x2 = q[q.length - 1].x2;
  1612.                 o.y2 = q[q.length - 1].y2;
  1613.                 o.key1 =
  1614.                 s.pointKey(o.x1, o.y1);
  1615.                 o.key2 = s.pointKey(o.x2, o.y2);
  1616.                 o.key = u += 1;
  1617.                 l && h[l].edges.push(o);
  1618.                 if (n) h[n].edges.push({
  1619.                     parts: q,
  1620.                     flipped: true,
  1621.                     x1: o.x2,
  1622.                     y1: o.y2,
  1623.                     x2: o.x1,
  1624.                     y2: o.y1,
  1625.                     key1: o.key2,
  1626.                     key2: o.key1,
  1627.                     key: u += 1
  1628.                 });
  1629.                 p && m[p].edges.push(o);
  1630.                 o = {
  1631.                     x1: o.x2,
  1632.                     y1: o.y2
  1633.                 };
  1634.                 q = []
  1635.             };
  1636.             var r = function () {
  1637.                 k.push([h, m])
  1638.             },
  1639.                 t = function (w) {
  1640.                     return Math.round(w * 100) / 100
  1641.                 };
  1642.             for (var v in j) {
  1643.                 g = j[v];
  1644.                 switch (g.type) {
  1645.                 case "STRAIGHT":
  1646.                     f = b + g.DeltaX;
  1647.                     g = c + g.DeltaY;
  1648.                     q.push({
  1649.                         x1: t(b),
  1650.                         y1: t(c),
  1651.                         x2: t(f),
  1652.                         y2: t(g)
  1653.                     });
  1654.                     b = f;
  1655.                     c = g;
  1656.                     break;
  1657.                 case "CURVED":
  1658.                     d = b + g.ControlDeltaX;
  1659.                     e = c + g.ControlDeltaY;
  1660.                     f = d + g.AnchorDeltaX;
  1661.                     g = e + g.AnchorDeltaY;
  1662.                     q.push({
  1663.                         x1: t(b),
  1664.                         y1: t(c),
  1665.                         cx: t(d),
  1666.                         cy: t(e),
  1667.                         x2: t(f),
  1668.                         y2: t(g)
  1669.                     });
  1670.                     b = f;
  1671.                     c = g;
  1672.                     break;
  1673.                 case "NONEDGE":
  1674.                     q.length && a();
  1675.                     if (g.StateNewStyles) {
  1676.                         r();
  1677.                         h = this.stateNewStyles(g.FillStyles);
  1678.                         m = this.stateNewStyles(g.LineStyles)
  1679.                     }
  1680.                     if (g.StateLineStyle) p = g.LineStyle;
  1681.                     if (g.StateFillStyle0) l = g.FillStyle0;
  1682.                     if (g.StateFillStyle1) n = g.FillStyle1;
  1683.                     if (g.StateMoveTo) {
  1684.                         b = g.MoveDeltaX;
  1685.                         c = g.MoveDeltaY;
  1686.                         o.x1 = b;
  1687.                         o.y1 = c
  1688.                     }
  1689.                     break
  1690.                 }
  1691.             }
  1692.             q.length && a();
  1693.             r();
  1694.             return k
  1695.         },
  1696.         stateNewStyles: function (a) {
  1697.             var b = [{
  1698.                 edges: [],
  1699.                 style: null}];
  1700.             for (var c in a) b.push({
  1701.                 edges: [],
  1702.                 style: a[c]
  1703.             });
  1704.             return b
  1705.         },
  1706.         buildPaths: function (a) {
  1707.             var b = [],
  1708.                 c, d, e, f, g, j, h, m, k, l;
  1709.             for (e = 0; e < a.length; e++) {
  1710.                 d = a[e].edges;
  1711.                 if (d.length != 0) {
  1712.                     j = {};
  1713.                     edgeIndexCount = {};
  1714.                     m = [];
  1715.                     for (f = h = 0; f < d.length; f++) {
  1716.                         c = d[f];
  1717.                         if (c.key1 == c.key2) {
  1718.                             c.picked = true;
  1719.                             h += 1;
  1720.                             m.push([c])
  1721.                         } else {
  1722.                             c.picked = false;
  1723.                             j[c.key1] || (j[c.key1] = []);
  1724.                             j[c.key1].push(c)
  1725.                         }
  1726.                     }
  1727.                     for (f = 0; f < d.length; f++) {
  1728.                         if (h == d.length) break;
  1729.                         c = d[f];
  1730.                         if (!c.picked) {
  1731.                             k = [c];
  1732.                             c.picked = true;
  1733.                             h += 1;
  1734.                             l = j[c.key1];
  1735.                             for (g = 0; g < l.length; g++) if (l[g] == c) {
  1736.                                 l.splice(g, 1);
  1737.                                 break
  1738.                             }
  1739.                             g = c.key1;
  1740.                             for (c = c.key2; c != g;) {
  1741.                                 l = j[c];
  1742.                                 if (typeof l == "undefined") break;
  1743.                                 if (l.length == 0) break;
  1744.                                 c = l.shift();
  1745.                                 k.push(c);
  1746.                                 c.picked = true;
  1747.                                 h += 1;
  1748.                                 c = c.key2
  1749.                             }
  1750.                             m.push(k)
  1751.                         }
  1752.                     }
  1753.                     m.length && b.push({
  1754.                         path: m,
  1755.                         style: a[e].style
  1756.                     })
  1757.                 }
  1758.             }
  1759.             return b
  1760.         },
  1761.         pointKey: function (a, b) {
  1762.             return [a, b].join(",")
  1763.         },
  1764.         buildDefinition: function (a, b) {
  1765.             var c = new fljs.swf.def.ShapeDef;
  1766.             c.setCharaId(a.ShapeId);
  1767.             for (var d in b) {
  1768.                 a = b[d][0];
  1769.                 for (var e in a) {
  1770.                     var f = a[e];
  1771.                     if (this.isImagePath(f)) {
  1772.                         var g = new fljs.swf.def.ImageDef;
  1773.                         this.buildImageDef(g, f);
  1774.                         c.addImage(g)
  1775.                     } else {
  1776.                         f.style.def = this.buildFillDef(f.style);
  1777.                         f = this.buildPathDefinition(f.path, f.style, null);
  1778.                         c.addPath(f)
  1779.                     }
  1780.                 }
  1781.                 a = b[d][1];
  1782.                 for (e in a) {
  1783.                     f = a[e];
  1784.                     f = this.buildPathDefinition(f.path, null, f.style);
  1785.                     c.addPath(f)
  1786.                 }
  1787.             }
  1788.             c.define();
  1789.             return c
  1790.         },
  1791.         sameStyle: function (a, b) {
  1792.             if (!a || !b) return false;
  1793.             if (a.def && b.def && a.def.fill && b.def.fill) if (a.def.fill.type == "Solid" && b.def.fill.type == "Solid") {
  1794.                 if (a.def.fill.color != b.def.fill.color) return false
  1795.             } else return false;
  1796.             else if (a.def && b.def && (a.def.fill || b.def.fill)) return false;
  1797.             var c, d;
  1798.             c = a.HasFillFlag && a.FillType.Color ? a.FillType.Color : a.Color;
  1799.             if (b.HasFillFlag && b.FillType.Color) bcolor = b.FillType.Color;
  1800.             else d = b.Color;
  1801.             if (c && d) {
  1802.                 if (this.rgbaToColor(c) != this.rgbaToColor(d)) return false;
  1803.                 if (a.Width != b.Width) return false
  1804.             } else if (c || d) return false;
  1805.             return true
  1806.         },
  1807.         buildPathDefinition: function (a, b, c) {
  1808.             var d = new fljs.swf.def.PathDef;
  1809.             this.setPathLineStyle(d, c);
  1810.             this.setPathFillStyle(d, b);
  1811.             d.element.set(null, "d", this.pathToString(a));
  1812.             d.define();
  1813.             return d
  1814.         },
  1815.         isImagePath: function (a) {
  1816.             if (a.path.length != 1 || a.path[0].length != 1 || a.path[0][0].parts.length != 4 || !a.style) return false;
  1817.             var b = a.style.FillStyleType,
  1818.                 c = fljs.swf.FillStyleTypes;
  1819.             if (!(b == c.RepeatingBitmapFill || b == c.ClippedBitmapFill || b == c.NonSmoothedRepeatingBitmapFill || b == c.NonSmoothedClippedBitmapFill)) return false;
  1820.             if (!fljs.Player.getInstance().dictionary[a.style.BitmapId]) return false;
  1821.             a = a.path[0][0].parts;
  1822.             for (b = 0; b < a.length; b++) {
  1823.                 if (typeof a[b].cx != "undefined") return false;
  1824.                 if (b < a.length - 1) {
  1825.                     var d = a[b],
  1826.                         e = a[b + 1],
  1827.                         f, g, j;
  1828.                     if (d.flipped) {
  1829.                         f = d.x2;
  1830.                         c = d.y2;
  1831.                         g = d.x1;
  1832.                         d = d.y1
  1833.                     } else {
  1834.                         f = d.x1;
  1835.                         c = d.y1;
  1836.                         g = d.x2;
  1837.                         d = d.y2
  1838.                     }
  1839.                     if (e.flipped) {
  1840.                         j = e.x1;
  1841.                         e = e.y1
  1842.                     } else {
  1843.                         j = e.x2;
  1844.                         e = e.y2
  1845.                     }
  1846.                     f = (f - g) * (j - g);
  1847.                     c = (c - d) * (e - d);
  1848.                     g = f + c;
  1849.                     if (Math.abs(g) > 0.01) {
  1850.                         if (!f || !c) return false;
  1851.                         if (Math.abs(g / f) > 0.01 || Math.abs(g / c) > 0.01) return false
  1852.                     }
  1853.                 }
  1854.             }
  1855.             return true
  1856.         },
  1857.         buildImageDef: function (a, b) {
  1858.             a.setBitmapId(b.style.BitmapId);
  1859.             for (var c = [], d = 0, e = 0, f = b.path[0][0].parts, g = 0; g < f.length; g++) {
  1860.                 var j = f[g],
  1861.                     h = Math.abs(j.x2 - j.x1);
  1862.                 j = Math.abs(j.y2 - j.y1);
  1863.                 if (h > d) d = h;
  1864.                 if (j > e) e = j
  1865.             }
  1866.             a._use.set(null, "x", 0);
  1867.             a._use.set(null, "y", 0);
  1868.             a._use.set(null, "width", d);
  1869.             a._use.set(null, "height", e);
  1870.             if (b = b.style.BitmapMatrix) {
  1871.                 b = this.utils.toMatrix(b);
  1872.                 b.a /= 20;
  1873.                 b.b /= 20;
  1874.                 b.c /= 20;
  1875.                 b.d /= 20;
  1876.                 c.push("translate(" + [b.tx, b.ty] + ")");
  1877.                 b.tx = 0;
  1878.                 b.ty = 0;
  1879.                 c.push(b.__toSvgString())
  1880.             }
  1881.             a._use.set(null, "transform", c.toString());
  1882.             a._use.update();
  1883.             a.element.update();
  1884.             a.define()
  1885.         },
  1886.         appendPathToDef: function (a, b) {
  1887.             a = a.element.element;
  1888.             b = a.getAttributeNS(null, "d") + " " + this.pathToString(b);
  1889.             a.setAttributeNS(null, "d", b)
  1890.         },
  1891.         pathToString: function (a) {
  1892.             var b, c, d = [];
  1893.             for (var e in a) {
  1894.                 var f = a[e];
  1895.                 d.push("M", f[0].x1, f[0].y1);
  1896.                 for (var g in f) {
  1897.                     b = f[g];
  1898.                     if (b.flipped) for (var j = b.parts.length - 1; j >= 0; j--) {
  1899.                         c = b.parts[j];
  1900.                         typeof c.cx == "undefined" ? d.push("L", c.x1, c.y1) : d.push("Q", c.cx, c.cy, c.x1, c.y1)
  1901.                     } else for (j in b.parts) {
  1902.                         c = b.parts[j];
  1903.                         typeof c.cx == "undefined" ? d.push("L", c.x2, c.y2) : d.push("Q", c.cx, c.cy, c.x2, c.y2)
  1904.                     }
  1905.                 }
  1906.             }
  1907.             return d.join(" ")
  1908.         },
  1909.         setPathLineStyle: function (a, b) {
  1910.             if (b) {
  1911.                 var c = {};
  1912.                 c = b.HasFillFlag ? b.FillType.Color ? {
  1913.                     thickness: Math.max(b.Width, 1),
  1914.                     color: this.rgbaToColor(b.FillType.Color)
  1915.                 } : {
  1916.                     thickness: 1,
  1917.                     color: 0
  1918.                 } : {
  1919.                     thickness: Math.max(b.Width, 1),
  1920.                     color: this.rgbaToColor(b.Color)
  1921.                 };
  1922.                 a.setStroke(c)
  1923.             } else a.setStroke(null)
  1924.         },
  1925.         setPathFillStyle: function (a, b) {
  1926.             if (b) if (b.FillStyleType == fljs.swf.FillStyleTypes.SolidFill) this.setPathSolidFillStyle(a, b);
  1927.             else b.def && a.setFill(b.def);
  1928.             else a.setFill(null)
  1929.         },
  1930.         setPathSolidFillStyle: function (a, b) {
  1931.             a.setFill({
  1932.                 type: "Solid",
  1933.                 color: this.rgbaToColor(b.Color)
  1934.             })
  1935.         },
  1936.         buildFillDef: function (a) {
  1937.             if (!a) return null;
  1938.             var b = a.FillStyleType,
  1939.                 c = fljs.swf.FillStyleTypes;
  1940.             return b == c.LinearGradientFill || b == c.RadialGradientFill || b == c.FocalRadialGradientFill ? this.buildGradientFillDef(a) : b == c.RepeatingBitmapFill || b == c.ClippedBitmapFill || b == c.NonSmoothedRepeatingBitmapFill || b == c.NonSmoothedClippedBitmapFill ? this.buildBitmapFillDef(a) : null
  1941.         },
  1942.         buildGradientFillDef: function (a) {
  1943.             var b = new fljs.swf.def.GradientFillDef,
  1944.                 c = [];
  1945.             if (a.FillStyleType == fljs.swf.FillStyleTypes.LinearGradientFill) {
  1946.                 b.create("linearGradient");
  1947.                 c.push([null, "x1", -819.2], [null, "x2", 819.2])
  1948.             } else {
  1949.                 b.create("radialGradient");
  1950.                 c.push([null, "cx", 0], [null, "cy", 0], [null, "r", 819.2])
  1951.             }
  1952.             c.push([null, "gradientUnits", "userSpaceOnUse"]);
  1953.             c.push([null, "gradientTransform", this.utils.toSvgMatrixString(a.GradientMatrix)]);
  1954.             var d, e = fljs.swf.SpreadMethods;
  1955.             switch (a.Gradient.SpreadMode) {
  1956.             case e.Pad:
  1957.                 d = "pad";
  1958.                 break;
  1959.             case e.Reflect:
  1960.                 d = "reflect";
  1961.                 break;
  1962.             case e.Repeat:
  1963.                 d = "repeat";
  1964.                 break
  1965.             }
  1966.             c.push([null, "spreadMethod", d]);
  1967.             var f;
  1968.             d = fljs.swf.InterpolationMethods;
  1969.             switch (a.Gradient.InterpolationMode) {
  1970.             case d.LinearRgb:
  1971.                 f = "linearRGB";
  1972.                 break;
  1973.             case d.Rgb:
  1974.                 f = "rgb";
  1975.                 break
  1976.             }
  1977.             c.push([null, "color-interpolation", f]);
  1978.             a = a.Gradient.GradientRecords;
  1979.             for (var g in a) {
  1980.                 f = a[g];
  1981.                 d = new fljs.swf.def.GradientFillStopDef;
  1982.                 d.setColor(this.rgbaToColor(f.Color));
  1983.                 e = [];
  1984.                 e.push([null, "offset",
  1985.                     f.Ratio / 255]);
  1986.                 d.element.sets(e);
  1987.                 d.element.update();
  1988.                 b.addStop(d)
  1989.             }
  1990.             b.element.sets(c);
  1991.             b.define();
  1992.             return b
  1993.         },
  1994.         buildBitmapFillDef: function (a) {
  1995.             var b = new fljs.swf.def.BitmapFillDef;
  1996.             if (!b.setBitmapId(a.BitmapId)) {
  1997.                 b.define();
  1998.                 return b
  1999.             }
  2000.             var c = [];
  2001.             c.push([null, "patternUnits", "userSpaceOnUse"], [null, "x", 0], [null, "y", 0], [null, "width", b.bitmap.Width], [null, "height", b.bitmap.Height]);
  2002.             var d = [];
  2003.             if (a = a.BitmapMatrix) {
  2004.                 a = this.utils.toMatrix(a);
  2005.                 a.a /= 20;
  2006.                 a.b /= 20;
  2007.                 a.c /= 20;
  2008.                 a.d /= 20;
  2009.                 d.push("translate(" + [a.tx, a.ty] + ")");
  2010.                 a.tx = 0;
  2011.                 a.ty =
  2012.                 0;
  2013.                 d.push(a.__toSvgString())
  2014.             }
  2015.             c.push([null, "patternTransform", d.toString()]);
  2016.             b.element.sets(c);
  2017.             b.define();
  2018.             return b
  2019.         },
  2020.         rgbaToColor: function (a) {
  2021.             var b = (a.Red << 24) + (a.Green << 16) + (a.Blue << 8);
  2022.             b |= typeof a.Alpha != "undefined" ? a.Alpha : 255;
  2023.             return b
  2024.         }
  2025.     });
  2026.     fljs.swf.tag.DefineShape = function () {};
  2027.     fljs.addMethods(fljs.swf.tag.DefineShape, {
  2028.         read: function (a) {
  2029.             a.beginContext(fljs.swf.tag.DefineShape);
  2030.             this.defId = this.ShapeId = a.readUI16();
  2031.             this.ShapeBounds = a.readRECT();
  2032.             a.stream.align();
  2033.             this.Shapes = a.readSHAPEWITHSTYLE();
  2034.             a.endContext()
  2035.         },
  2036.         waitForBitmaps: function () {
  2037.             var a = fljs.Player.getInstance();
  2038.             this.bitmapIds = this.findBitmaps(this);
  2039.             this.waiting = 0;
  2040.             var b = fljs.Player.getInstance().mainTimeline.resources,
  2041.                 c = [];
  2042.             for (var d in this.bitmapIds) if (b.waiting(d)) {
  2043.                 this.waiting += 1;
  2044.                 b.listen(d, fljs.bind(this.onLoad, this, a))
  2045.             } else c.push(d);
  2046.             for (var e in c) delete this.bitmapIds[c[e]]
  2047.         },
  2048.         onLoad: function (a, b) {
  2049.             if (this.bitmapIds[b]) {
  2050.                 delete this.bitmapIds[b];
  2051.                 this.waiting -= 1
  2052.             }
  2053.             this.waiting == 0 && this.evaluate(a)
  2054.         },
  2055.         evaluate: function (a) {
  2056.             this.bitmapIds || this.waitForBitmaps();
  2057.             if (!(this.waiting > 0)) {
  2058.                 this.def = (new fljs.swf.build.ShapeBuilder).build(this);
  2059.                 a.addDefinition(this, this.ShapeId)
  2060.             }
  2061.         },
  2062.         findBitmaps: function (a) {
  2063.             var b = {};
  2064.             this.findBitmapsForStyles(b, a.Shapes.FillStyles);
  2065.             a = a.Shapes.ShapeRecords;
  2066.             for (var c in a) {
  2067.                 var d = a[c];
  2068.                 d.type == "NONEDGE" && d.StateNewStyles && this.findBitmapsForStyles(b, d.FillStyles)
  2069.             }
  2070.             return b
  2071.         },
  2072.         findBitmapsForStyles: function (a, b) {
  2073.             var c = fljs.swf.FillStyleTypes;
  2074.             for (var d in b) {
  2075.                 var e = b[d],
  2076.                     f = e.FillStyleType;
  2077.                 if (f == c.RepeatingBitmapFill || f == c.ClippedBitmapFill || f == c.NonSmoothedRepeatingBitmapFill || f == c.NonSmoothedClippedBitmapFill) a[e.BitmapId] = true
  2078.             }
  2079.         },
  2080.         build: function (a, b, c) {
  2081.             a = new flash.display.Shape;
  2082.             a.useTag(this, b, c);
  2083.             return a
  2084.         }
  2085.     });
  2086.     fljs.dom = {};
  2087.     fljs.dom.Namespace = {
  2088.         Svg: "http://www.w3.org/2000/svg",
  2089.         Xlink: "http://www.w3.org/1999/xlink"
  2090.     };
  2091.     fljs.dom.Element = function (a) {
  2092.         this.element = a;
  2093.         this.changes = []
  2094.     };
  2095.     fljs.addMethods(fljs.dom.Element, {
  2096.         create: function (a, b) {
  2097.             if (arguments.length == 1) {
  2098.                 b = a;
  2099.                 this.element = document.createElement(b)
  2100.             } else this.element = document.createElementNS(a, b);
  2101.             this.changes = []
  2102.         },
  2103.         set: function (a, b, c) {
  2104.             if (arguments.length == 2) {
  2105.                 c = b;
  2106.                 b = a;
  2107.                 this.changes.push([b, c])
  2108.             } else this.changes.push([a, b, c])
  2109.         },
  2110.         sets: function (a) {
  2111.             this.changes.push.apply(this.changes, a)
  2112.         },
  2113.         update: function () {
  2114.             var a = this.element,
  2115.                 b = this.changes;
  2116.             for (var c in b) {
  2117.                 var d = b[c];
  2118.                 d.length == 2 ? a.setAttribute(d[0], d[1]) : a.setAttributeNS(d[0], d[1], d[2])
  2119.             }
  2120.             this.changes = []
  2121.         },
  2122.         append: function (a) {
  2123.             this.element.appendChild(a.element)
  2124.         },
  2125.         appendText: function (a) {
  2126.             this.element.appendChild(document.createTextNode(a))
  2127.         },
  2128.         clone: function (a) {
  2129.             var b = new fljs.dom.Element;
  2130.             b.element = this.element.cloneNode(a);
  2131.             b.changes = [];
  2132.             return b
  2133.         },
  2134.         remove: function (a) {
  2135.             this.element.removeChild(a.element)
  2136.         },
  2137.         getElement: function () {
  2138.             return this.element
  2139.         }
  2140.     });
  2141.     fljs.swf.build.FontBuilder = function (a, b) {
  2142.         this.tag = a;
  2143.         this.player = b
  2144.     };
  2145.     fljs.addMethods(fljs.swf.build.FontBuilder, {
  2146.         buildDef: function () {
  2147.             var a = this.buildGlyphPaths();
  2148.             return this.player.renderTextAsGlyphs ? this.buildFontDef(a) : this.buildShapeDef(a)
  2149.         },
  2150.         buildFontDef: function (a) {
  2151.             var b = this.tag,
  2152.                 c = this.player.element.getElement().ownerDocument,
  2153.                 d = c.createElementNS("http://www.w3.org/2000/svg", "font"),
  2154.                 e = c.createElementNS("http://www.w3.org/2000/svg", "font-face");
  2155.             e.setAttributeNS(null, "font-family", "font-" + b.FontId);
  2156.             e.setAttributeNS(null, "units-per-em", 51.2);
  2157.             d.appendChild(e);
  2158.             for (var f in a) {
  2159.                 e =
  2160.                 c.createElementNS("http://www.w3.org/2000/svg", "glyph");
  2161.                 e.setAttributeNS(null, "unicode", String.fromCharCode(b.CodeTable[f]));
  2162.                 b.FontAdvanceTable && e.setAttributeNS(null, "horiz-adv-x", b.FontAdvanceTable[f] / 20);
  2163.                 e.setAttributeNS(null, "d", a[f]);
  2164.                 d.appendChild(e)
  2165.             }
  2166.             return [{
  2167.                 element: d
  2168.             }]
  2169.         },
  2170.         buildShapeDef: function (a) {
  2171.             var b = this.tag,
  2172.                 c = [];
  2173.             for (var d in a) {
  2174.                 var e = new fljs.dom.Element;
  2175.                 e.create(fljs.dom.Namespace.Svg, "path");
  2176.                 var f = ["font", b.FontId, b.FontFlagsBold, b.FontFlagsItalic, b.CodeTable[d]].join("-");
  2177.                 if (document.getElementById(f)) rar.rar = rar;
  2178.                 e.sets([["id", f], ["d", a[d]]]);
  2179.                 e.update();
  2180.                 c.push(e)
  2181.             }
  2182.             return c
  2183.         },
  2184.         buildGlyphPaths: function () {
  2185.             for (var a = [], b = this.tag.GlyphShapeTable, c = 0, d = b.length; c < d; c++) {
  2186.                 var e = this.buildPath(this.buildGlyph(b[c]));
  2187.                 a.push(e)
  2188.             }
  2189.             return a
  2190.         },
  2191.         buildGlyph: function (a) {
  2192.             var b = 0,
  2193.                 c = 0,
  2194.                 d = 0,
  2195.                 e = 0,
  2196.                 f = 0,
  2197.                 g = 0;
  2198.             a = a.ShapeRecords;
  2199.             var j = [],
  2200.                 h = [],
  2201.                 m = 1;
  2202.             if (this.tag instanceof fljs.swf.tag.DefineFont3) m = 20;
  2203.             var k = function (n) {
  2204.                 return Math.round(n * 100) / 100 / m
  2205.             };
  2206.             for (var l in a) {
  2207.                 g = a[l];
  2208.                 switch (g.type) {
  2209.                 case "STRAIGHT":
  2210.                     f = b + g.DeltaX;
  2211.                     g = c + g.DeltaY;
  2212.                     h.push({
  2213.                         x1: k(b),
  2214.                         y1: k(c),
  2215.                         x2: k(f),
  2216.                         y2: k(g)
  2217.                     });
  2218.                     b = f;
  2219.                     c = g;
  2220.                     break;
  2221.                 case "CURVED":
  2222.                     d = b + g.ControlDeltaX;
  2223.                     e = c + g.ControlDeltaY;
  2224.                     f = d + g.AnchorDeltaX;
  2225.                     g = e + g.AnchorDeltaY;
  2226.                     h.push({
  2227.                         x1: k(b),
  2228.                         y1: k(c),
  2229.                         cx: k(d),
  2230.                         cy: k(e),
  2231.                         x2: k(f),
  2232.                         y2: k(g)
  2233.                     });
  2234.                     b = f;
  2235.                     c = g;
  2236.                     break;
  2237.                 case "NONEDGE":
  2238.                     if (g.StateMoveTo) {
  2239.                         h.length && j.push(h);
  2240.                         b = g.MoveDeltaX;
  2241.                         c = g.MoveDeltaY;
  2242.                         h = []
  2243.                     }
  2244.                     break
  2245.                 }
  2246.             }
  2247.             h.length && j.push(h);
  2248.             return j
  2249.         },
  2250.         buildPath: function (a) {
  2251.             var b = [],
  2252.                 c = this.player.renderTextAsGlyphs ? -1 : 1,
  2253.                 d;
  2254.             for (var e in a) {
  2255.                 var f = a[e];
  2256.                 b.push("M", f[0].x1, f[0].y1 * c);
  2257.                 for (var g in f) {
  2258.                     d = f[g];
  2259.                     typeof d.cx == "undefined" ? b.push("L", d.x2, d.y2 * c) : b.push("Q", d.cx, d.cy * c, d.x2, d.y2 * c)
  2260.                 }
  2261.             }
  2262.             b.length == 0 && b.push("M", 0, 0);
  2263.             return b.join(" ")
  2264.         }
  2265.     });
  2266.     fljs.swf.build.FontBuilder.id = 1;
  2267.     fljs.swf.tag.DefineFont = function () {};
  2268.     fljs.addMethods(fljs.swf.tag.DefineFont, {
  2269.         read: function (a) {
  2270.             this.FontId = a.readUI16();
  2271.             this.OffsetTable = [a.readUI16()];
  2272.             var b = this.OffsetTable[0] / 2;
  2273.             this.NumGlyphs = b;
  2274.             for (var c = 1; c < b; c++) this.OffsetTable.push(a.readUI16());
  2275.             this.GlyphShapeTable = [];
  2276.             for (c = 0; c < b; c++) this.GlyphShapeTable.push(a.readSHAPE())
  2277.         },
  2278.         evaluate: function (a) {
  2279.             this.CodeTable = [];
  2280.             for (var b in this.GlyphShapeTable) this.CodeTable.push(b);
  2281.             this.FontName = "font-no-info-" + this.FontId;
  2282.             this.FontFlagsItalic = this.FontFlagsBold = false;
  2283.             a.fontsWithoutInfo[this.FontId] =
  2284.             this;
  2285.             b = (new fljs.swf.build.FontBuilder(this, a)).buildDef();
  2286.             a.defineFont2(this.FontId, this.GlyphShapeTable, b, this.FontName, this.FontFlagsBold, this.FontFlagsItalic, this.CodeTable)
  2287.         }
  2288.     });
  2289.     fljs.swf.tag.SetBackgroundColor = function () {};
  2290.     fljs.addMethods(fljs.swf.tag.SetBackgroundColor, {
  2291.         read: function (a) {
  2292.             this.BackgroundColor = a.readRGB()
  2293.         },
  2294.         evaluate: function (a) {
  2295.             a.stage.setBackgroundColor_((this.BackgroundColor.Red << 16) + (this.BackgroundColor.Green << 8) + this.BackgroundColor.Blue)
  2296.         }
  2297.     });
  2298.     fljs.swf.tag.DoAbc = function () {};
  2299.     fljs.addMethods(fljs.swf.tag.DoAbc, {
  2300.         read: function (a, b) {
  2301.             var c = a.stream.byteIndex;
  2302.             this.Flags = a.readUI32();
  2303.             this.Name = a.readString();
  2304.             b = b.TagLength - (a.stream.byteIndex - c);
  2305.             c = [];
  2306.             for (var d = 0; d < b; d++) c.push(String.fromCharCode(a.readUB()));
  2307.             this.AbcData = c.join("")
  2308.         },
  2309.         evaluate: function () {}
  2310.     });
  2311.     fljs.swf.tag.SoundStreamBlock = function () {};
  2312.     fljs.addMethods(fljs.swf.tag.SoundStreamBlock, {
  2313.         read: function (a, b) {
  2314.             this.SampleCount = a.readUI16();
  2315.             this.Mp3SoundData = a.readMp3SoundData(b.TagLength - 2)
  2316.         },
  2317.         evaluate: function (a, b, c, d) {
  2318.             if (d == a.mainTimeline) if (b = d.audioStream) {
  2319.                 b.shouldBuffer() && b.buffer();
  2320.                 c = a.mainTimeline.currentFrameIndex_;
  2321.                 if (!b.playing && b.frameShouldPlay(c)) {
  2322.                     b.playFrame(c);
  2323.                     a.sync.start(c)
  2324.                 }
  2325.             }
  2326.         },
  2327.         duration: function () {
  2328.             var a = 0;
  2329.             for (var b in this.Mp3SoundData.Mp3Frames) {
  2330.                 var c = this.Mp3SoundData.Mp3Frames[b],
  2331.                     d;
  2332.                 d = c.MpegVersion == 3 ? 1152 : 576;
  2333.                 var e = {
  2334.                     0: 11025,
  2335.                     1: 12E3,
  2336.                     2: 8E3
  2337.                 }[c.SamplingRate];
  2338.                 e *= {
  2339.                     0: 1,
  2340.                     2: 2,
  2341.                     3: 4
  2342.                 }[c.MpegVersion];
  2343.                 a += 1E3 * d / e / (c.ChannelMode == 3 ? 1 : 2)
  2344.             }
  2345.             return a
  2346.         }
  2347.     });
  2348.     fljs.swf.SwfStreamingSoundReader = function (a, b) {
  2349.         this.stream = new fljs.swf.SwfStream(new fljs.swf.StringStream(a));
  2350.         this.container = b;
  2351.         b.soundStream = this;
  2352.         this.tagMap = {
  2353.             19: fljs.swf.tag.SoundStreamBlock
  2354.         };
  2355.         this.currentTimeOffset = this.currentPlayer = 0;
  2356.         this.data = [];
  2357.         this.dataDurations = [];
  2358.         this.container.needAudio();
  2359.         for (a = 0; a < 2; a++) {
  2360.             b = this.container.audio[a];
  2361.             b.currentTimeOffset = 0;
  2362.             b.addEventListener("load", fljs.bind(this.onLoadSrc, this, a), true)
  2363.         }
  2364.         this.lastBufferAt = null;
  2365.         this.swfFrames = {};
  2366.         this.duration = this.swfFrameNum =
  2367.         0;
  2368.         this.playing = false;
  2369.         this.nextTime = null;
  2370.         this.waitingForLoad = false;
  2371.         this.dataOffset = 0;
  2372.         this.player = fljs.Player.getInstance()
  2373.     };
  2374.     fljs.addMethods(fljs.swf.SwfStreamingSoundReader, {
  2375.         controlFrame: function () {},
  2376.         timeDiff: function (a) {
  2377.             var b = this.container.audio[this.currentPlayer];
  2378.             return 1E3 * (b.currentTime + b.currentTimeOffset) - this.swfFrames[a]
  2379.         },
  2380.         currentTime: function () {
  2381.             var a = this.container.audio[this.currentPlayer];
  2382.             return 1E3 * (a.currentTime + a.currentTimeOffset)
  2383.         },
  2384.         play: function (a) {
  2385.             a = this.swfFrames[a];
  2386.             if (a == null) a = 0;
  2387.             a /= 1E3;
  2388.             this.nextTime = a;
  2389.             this.playing = true;
  2390.             if (!this.waitingForLoad) {
  2391.                 var b = this.container.audio[this.currentPlayer];
  2392.                 b.currentTime =
  2393.                 a - b.currentTimeOffset;
  2394.                 b.fljsPlaying = true;
  2395.                 this.player.playing && b.play()
  2396.             }
  2397.         },
  2398.         stop: function () {
  2399.             this.playing = false;
  2400.             var a = this.container.audio[this.currentPlayer];
  2401.             a.fljsPlaying = false;
  2402.             a.pause()
  2403.         },
  2404.         silence: function () {
  2405.             return ""
  2406.         },
  2407.         onLoadSrc: function (a) {
  2408.             var b = this.container.audio[a],
  2409.                 c = this.container.audio[1 - a];
  2410.             b.fljsWaiting = false;
  2411.             if (this.nextTime != null) {
  2412.                 b.currentTime = this.nextTime - b.currentTimeOffset;
  2413.                 this.nextTime = null
  2414.             } else b.currentTime = c.currentTime + c.currentTimeOffset - b.currentTimeOffset;
  2415.             if (this.playing) {
  2416.                 b.fljsPlaying =
  2417.                 true;
  2418.                 this.player.playing && b.play()
  2419.             }
  2420.             c.fljsPlaying = false;
  2421.             c.pause();
  2422.             this.currentPlayer = a;
  2423.             this.waitingForLoad = false
  2424.         },
  2425.         processBlock: function (a, b) {
  2426.             a = new fljs.swf.StringStream(this.stream.stream.buffer);
  2427.             a.byteIndex = b.Mp3SoundData.byteIndex;
  2428.             a = a.readBytes(b.Mp3SoundData.byteCount).join("");
  2429.             this.data.push(String(a));
  2430.             if (b.SampleCount) {
  2431.                 a = b.duration();
  2432.                 b = a * (b.Mp3SoundData.SeekSamples / b.SampleCount);
  2433.                 this.swfFrames[this.swfFrameNum] = this.duration + b;
  2434.                 this.sync && this.sync.setFrameTime(this.swfFrameNum, this.duration + b);
  2435.                 this.duration += a
  2436.             } else a = 0;
  2437.             this.dataDurations.push(a / 1E3);
  2438.             this.blocks += 1;
  2439.             return this.blocks < fljs.swf.SwfStreamingSoundReader.bufferBlocks
  2440.         },
  2441.         buffer: function () {
  2442.             this.blocks = 0;
  2443.             this.readTags(fljs.bind(this.processBlock, this), this.stream.stream.byteIndex);
  2444.             for (var a = this.container.audio[this.currentPlayer], b = this.container.audio[1 - this.currentPlayer]; this.currentTimeOffset + this.dataDurations[this.dataOffset] < a.currentTime + a.currentTimeOffset;) {
  2445.                 this.currentTimeOffset += this.dataDurations[this.dataOffset];
  2446.                 this.dataOffset += 1
  2447.             }
  2448.             a = "data:audio/mpeg;base64," + btoa(this.data.slice(this.dataOffset).join(""));
  2449.             b.currentTimeOffset = this.currentTimeOffset;
  2450.             b.setAttribute("src", a);
  2451.             this.waitingForLoad = true;
  2452.             b.fljsWaiting = true;
  2453.             b.load();
  2454.             this.lastBufferAt = fljs.now()
  2455.         },
  2456.         readTags: function (a, b) {
  2457.             var c = fljs.console("soundstream");
  2458.             if (b) this.stream.stream.seek(b);
  2459.             else this.stream.header = this.stream.readSwfHeader();
  2460.             for (var d, e; this.stream.hasMore();) {
  2461.                 d = this.stream.readRecordHeader();
  2462.                 e = this.tagMap[d.TagType];
  2463.                 b = this.stream.stream.byteIndex;
  2464.                 if (e) {
  2465.                     e = new e;
  2466.                     e.read(this.stream, d, this, a, fljs.Player.getInstance().stage);
  2467.                     if (!a(d, e)) return
  2468.                 } else {
  2469.                     this.stream.skipBytes(d.TagLength);
  2470.                     if (d.TagType == 1) this.swfFrameNum += 1
  2471.                 }
  2472.                 if (this.stream.stream.byteIndex != b + d.TagLength) {
  2473.                     c.info("expected " + (b + d.TagLength) + " but got " + this.stream.stream.byteIndex);
  2474.                     return
  2475.                 }
  2476.             }
  2477.         }
  2478.     });
  2479.     fljs.swf.SwfStreamingSoundReader.rebufferDuration = 9E4;
  2480.     fljs.swf.SwfStreamingSoundReader.bufferBlocks = 4500;
  2481.     fljs.swf.tag.SoundStreamHead = function () {};
  2482.     fljs.addMethods(fljs.swf.tag.SoundStreamHead, {
  2483.         read: function (a) {
  2484.             a.readUB(4);
  2485.             this.PlaybackSoundRate = a.readUB(2);
  2486.             this.PlaybackSoundSize = a.readUB(1);
  2487.             this.PlaybackSoundType = a.readUB(1);
  2488.             this.StreamSoundCompression = a.readUB(4);
  2489.             this.StreamSoundRate = a.readUB(2);
  2490.             this.StreamSoundSize = a.readUB(1);
  2491.             this.StreamSoundType = a.readUB(1);
  2492.             this.StreamSoundSampleCount = a.readUI16();
  2493.             if (this.StreamSoundCompression == 2) this.LatencySeek = a.readSI16()
  2494.         },
  2495.         evaluate: function (a, b, c, d) {
  2496.             if (!this.processed) {
  2497.                 d.soundStreamHead = this;
  2498.                 if (d == a.mainTimeline) {
  2499.                     d.audioStream = fljs.agent.browser == "Firefox" ? new fljs.player.ExtAudioStream(a, d, "audio/" + a.name + "-" + (d.def ? d.def.defId : "main") + ".wav") : new fljs.player.SwfAudioStream(a, d);
  2500.                     a.sync = new fljs.player.AudioSync(a.header.FrameRate);
  2501.                     a.sync.setAudio(d.audioStream);
  2502.                     d.audioStream.buffer()
  2503.                 }
  2504.                 this.processed = true
  2505.             }
  2506.         }
  2507.     });
  2508.     fljs.swf.tag.DefineFont2 = function () {};
  2509.     fljs.addMethods(fljs.swf.tag.DefineFont2, {
  2510.         read: function (a) {
  2511.             var b;
  2512.             this.FontId = a.readUI16();
  2513.             this.FontFlagsHasLayout = a.readUB(1);
  2514.             this.FontFlagsShiftJIS = a.readUB(1);
  2515.             this.FontFlagsSmallText = a.readUB(1);
  2516.             this.FontFlagsANSI = a.readUB(1);
  2517.             this.FontFlagsWideOffsets = a.readUB(1);
  2518.             this.FontFlagsWideCodes = a.readUB(1);
  2519.             a.FontFlagsWideCodes = this.FontFlagsWideCodes;
  2520.             this.FontFlagsItalic = a.readUB(1);
  2521.             this.FontFlagsBold = a.readUB(1);
  2522.             this.LanguageCode = a.readLangCode();
  2523.             this.FontNameLen = a.readUI8();
  2524.             var c = [];
  2525.             for (b = 0; b < this.FontNameLen; b++) c.push(String.fromCharCode(a.readUI8()));
  2526.             this.FontName = c.join("");
  2527.             this.NumGlyphs = a.readUI16();
  2528.             this.OffsetTable = [];
  2529.             if (this.FontFlagsWideOffsets) {
  2530.                 for (b = 0; b < this.NumGlyphs; b++) this.OffsetTable.push(a.readUI32());
  2531.                 this.CodeTableOffset = a.readUI32()
  2532.             } else {
  2533.                 for (b = 0; b < this.NumGlyphs; b++) this.OffsetTable.push(a.readUI16());
  2534.                 this.CodeTableOffset = a.readUI16()
  2535.             }
  2536.             this.GlyphShapeTable = [];
  2537.             for (b = 0; b < this.NumGlyphs; b++) this.GlyphShapeTable.push(a.readShape());
  2538.             this.CodeTable = [];
  2539.             if (this.FontFlagsWideCodes) for (b = 0; b < this.NumGlyphs; b++) this.CodeTable.push(a.readUI16());
  2540.             else for (b = 0; b < this.NumGlyphs; b++) this.CodeTable.push(a.readUI8());
  2541.             if (this.FontFlagsHasLayout) {
  2542.                 this.FontAscent = a.readSI16();
  2543.                 this.FontDescent = a.readSI16();
  2544.                 this.FontLeading = a.readSI16();
  2545.                 this.FontAdvanceTable = [];
  2546.                 for (b = 0; b < this.NumGlyphs; b++) this.FontAdvanceTable.push(a.readSI16());
  2547.                 this.FontBoundsTable = [];
  2548.                 for (b = 0; b < this.NumGlyphs; b++) {
  2549.                     this.FontBoundsTable.push(a.readRECT());
  2550.                     a.stream.align()
  2551.                 }
  2552.                 this.KerningCount = a.readUI16();
  2553.                 this.FontKerningTable = [];
  2554.                 for (b = 0; b < this.KerningCount; b++) this.FontKerningTable.push(a.readKerningRecord())
  2555.             }
  2556.         },
  2557.         evaluate: function (a) {
  2558.             var b = (new fljs.swf.build.FontBuilder(this, a)).buildDef();
  2559.             a.defineFont2(this.FontId, this.GlyphShapeTable.length, b, this.FontName, this.FontFlagsBold, this.FontFlagsItalic, this.CodeTable, this)
  2560.         }
  2561.     });
  2562.     flash.text = {};
  2563.     flash.text.TextFormatAlign = function () {};
  2564.     fljs.addConstants(flash.text.TextFormatAlign, {
  2565.         CENTER: "center",
  2566.         JUSTIFY: "justify",
  2567.         LEFT: "left",
  2568.         RIGHT: "right"
  2569.     });
  2570.     flash.text.TextFormat = function (a, b, c, d, e, f, g, j, h, m, k, l, n, p) {
  2571.         if (typeof a == "undefined") a = null;
  2572.         this.font = a;
  2573.         if (typeof b == "undefined") b = null;
  2574.         this.size = b;
  2575.         if (typeof c == "undefined") c = null;
  2576.         this.color = c;
  2577.         if (typeof d == "undefined") d = null;
  2578.         this.bold = d;
  2579.         if (typeof e == "undefined") e = null;
  2580.         this.italic = e;
  2581.         if (typeof f == "undefined") f = null;
  2582.         this.underline = f;
  2583.         if (typeof g == "undefined") g = null;
  2584.         this.url = g;
  2585.         if (typeof j == "undefined") j = null;
  2586.         this.target = j;
  2587.         if (typeof h == "undefined") h = flash.text.TextFormatAlign.LEFT;
  2588.         this.align = h;
  2589.         if (typeof m == "undefined") m = null;
  2590.         this.leftMargin = m;
  2591.         if (typeof k == "undefined") k = null;
  2592.         this.rightMargin = k;
  2593.         if (typeof l == "undefined") l = null;
  2594.         this.indent = l;
  2595.         if (typeof n == "undefined") n = null;
  2596.         this.leading = n;
  2597.         if (typeof p == "undefined") p = 1;
  2598.         this.alpha = p
  2599.     };
  2600.     flash.text.TextField = function () {
  2601.         flash.display.InteractiveObject.call(this);
  2602.         var a = this.element_ = new fljs.dom.Element;
  2603.         a.create(fljs.dom.Namespace.Svg, "g");
  2604.         this._clipElement.element.appendChild(this.element_.getElement());
  2605.         this.font_ = {
  2606.             family: "times",
  2607.             size: 12
  2608.         };
  2609.         this.fill_ = {
  2610.             color: 0
  2611.         };
  2612.         this.textFormat_ = new flash.text.TextFormat(this.font_.family, this.font_.size, this.fill_.color, false, false, false, null, null, flash.text.TextFormatAlign.LEFT, 0, 0, 0, 0);
  2613.         if (fljs.Player.getInstance().renderTextAsGlyphs) {
  2614.             a = Math.round(this.font_.size * 0.85);
  2615.             var b = Math.round(0 - this.font_.size / 2 + a);
  2616.             a = this._text = this.text_ = new fljs.dom.Element;
  2617.             a.create(fljs.dom.Namespace.Svg, "text");
  2618.             a.sets([[null, "fill", this.__colorToSvgString(this.font_.color)], [null, "font-family", this.font_.family], [null, "font-size", this.font_.size], [null, "font-family", this.font_.family], [null, "x", 0], [null, "y", b]]);
  2619.             a.update();
  2620.             this.element_.append(a)
  2621.         } else {
  2622.             a = this._text = new fljs.dom.Element;
  2623.             a.create(fljs.dom.Namespace.Svg, "g");
  2624.             a.update();
  2625.             this.element_.append(a)
  2626.         }
  2627.         this._textContent = ""
  2628.     };
  2629.     fljs.inherits(flash.text.TextField, flash.display.InteractiveObject);
  2630.     fljs.addMethods(flash.text.TextField, {
  2631.         setTextMatrix: function (a) {
  2632.             this._textMatrix = a;
  2633.             this._text.set(null, 'transform', a.__toSvgString());
  2634.             this._text.update()
  2635.         },
  2636.         __setSpans: function (a) {
  2637.             var b = [];
  2638.             this.spans = [];
  2639.             if (fljs.Player.getInstance().renderTextAsGlyphs) {
  2640.                 var c = this.text_.getElement().ownerDocument;
  2641.                 for (var d in a) {
  2642.                     var e = a[d],
  2643.                         f = c.createElementNS("http://www.w3.org/2000/svg", "tspan"),
  2644.                         g = e.format.indent,
  2645.                         j = [g];
  2646.                     for (var h in e.advances) {
  2647.                         g += e.advances[h];
  2648.                         j.push(g)
  2649.                     }
  2650.                     f.appendChild(c.createTextNode(e.text));
  2651.                     f.setAttributeNS(null, "x", j.join(" "));
  2652.                     f.setAttributeNS(null, "y", e.format.leading);
  2653.                     f.setAttributeNS(null, "font-size", e.format.size);
  2654.                     f.setAttributeNS(null, "fill", this.__colorToSvgString(e.format.color));
  2655.                     f.setAttributeNS(null, "fill-opacity", this.textOpacityWithXform(e.format.alpha));
  2656.                     this.text_.getElement().appendChild(f);
  2657.                     this.spans.push({
  2658.                         def: e,
  2659.                         element: f
  2660.                     });
  2661.                     b.push(e.text)
  2662.                 }
  2663.             } else {
  2664.                 fljs.Player.getInstance();
  2665.                 c = this._text;
  2666.                 for (d in a) {
  2667.                     e = a[d];
  2668.                     f = e.format;
  2669.                     j = e.advances;
  2670.                     var m = new fljs.dom.Element;
  2671.                     m.create(fljs.dom.Namespace.Svg, "g");
  2672.                     m.sets([["transform", ["translate(", f.indent, ",", f.leading, ")"].join("")], ["fill", this.__colorToSvgString(f.color)],
  2673.                         ["fill-opacity", this.opacityWithXform(f.alpha)]]);
  2674.                     m.update();
  2675.                     h = g = 0;
  2676.                     for (var k = e.text.length; h < k; h++) {
  2677.                         var l = new fljs.dom.Element;
  2678.                         l.create(fljs.dom.Namespace.Svg, "use");
  2679.                         var n = ["font", f.fontid, f.bold, f.italic, e.text.charCodeAt(h)].join("-");
  2680.                         l.sets([[fljs.dom.Namespace.Xlink, "xlink:href", "#" + n], ["transform", ["translate(", g, ")scale(", f.size * 20 / 1024, ")"].join("")]]);
  2681.                         l.update();
  2682.                         m.append(l);
  2683.                         g += j[h]
  2684.                     }
  2685.                     c.append(m);
  2686.                     this.spans.push({
  2687.                         def: e,
  2688.                         element: m
  2689.                     });
  2690.                     b.push(e.text)
  2691.                 }
  2692.             }
  2693.             this._textContent = b.join("")
  2694.         },
  2695.         __colorToSvgString: function (a) {
  2696.             var b =
  2697.             a >> 16 & 255,
  2698.                 c = a >> 8 & 255;
  2699.             a = a & 255;
  2700.             var d = this.getTransform().getConcatenatedColorTransform();
  2701.             if (!d.__default) {
  2702.                 b = Math.max(0, Math.min(255, Math.round(b * d.redMultiplier + d.redOffset)));
  2703.                 c = Math.max(0, Math.min(255, Math.round(c * d.greenMultiplier + d.greenOffset)));
  2704.                 a = Math.max(0, Math.min(255, Math.round(a * d.blueMultiplier + d.blueOffset)))
  2705.             }
  2706.             return "rgb(" + [b, c, a] + ")"
  2707.         },
  2708.         opacityWithXform: function (a) {
  2709.             return a
  2710.         },
  2711.         textOpacityWithXform: function (a) {
  2712.             var b = this.getTransform().getConcatenatedColorTransform();
  2713.             return b.__default ? a : Math.max(0, Math.min(255, Math.round(a * 255 * b.alphaMultiplier + b.alphaOffset))) / 255
  2714.         },
  2715.         __setColorTransform: function (a) {
  2716.             if (fljs.Player.getInstance().renderTextAsGlyphs) for (var b in this.spans) {
  2717.                 var c = this.spans[b];
  2718.                 a = c.def;
  2719.                 c = c.element;
  2720.                 c.setAttributeNS(null, "color", this.__colorToSvgString(a.format.color));
  2721.                 c.setAttributeNS(null, "fill-opacity", this.textOpacityWithXform(a.format.alpha))
  2722.             } else {
  2723.                 fljs.base(this, "__setColorTransform", a);
  2724.                 for (b in this.spans) {
  2725.                     c = this.spans[b];
  2726.                     a = c.def;
  2727.                     c = c.element;
  2728.                     c.sets([[null, "color", this.__colorToSvgString(a.format.color)]]);
  2729.                     c.update()
  2730.                 }
  2731.             }
  2732.         },
  2733.         setHeight: function (a) {
  2734.             this.height_ = a
  2735.         },
  2736.         setWidth: function (a) {
  2737.             this.width_ = a
  2738.         },
  2739.         getDefaultTextFormat: function () {
  2740.             return this.textFormat_
  2741.         },
  2742.         setDefaultTextFormat: function (a) {
  2743.             if (fljs.Player.getInstance().renderTextAsGlyphs) {
  2744.                 var b = this.textFormat_;
  2745.                 this.textFormat_ = a;
  2746.                 if (b.align != this.textFormat_.align) switch (this.textFormat_.align) {
  2747.                 case flash.text.TextFormatAlign.LEFT:
  2748.                     this.text_.getElement().setAttribute("x", this.x);
  2749.                     this.text_.getElement().setAttribute("text-anchor", "start");
  2750.                     break;
  2751.                 case flash.text.TextFormatAlign.CENTER:
  2752.                     this.text_.getElement().setAttribute("x", this.x + this.width / 2);
  2753.                     this.text_.getElement().setAttribute("text-anchor", "middle");
  2754.                     break;
  2755.                 case flash.text.TextFormatAlign.LEFT:
  2756.                     this.text_.getElement().setAttribute("x", this.x + this.width);
  2757.                     this.text_.getElement().setAttribute("text-anchor", "end");
  2758.                     break;
  2759.                 default:
  2760.                 }
  2761.                 if (b.font != this.textFormat_.font) {
  2762.                     a = fljs.Player.getInstance().lookupFontByStyle(this.textFormat_.font, this.textFormat_.bold, this.textFormat_.italic);
  2763.                     this.text_.getElement().setAttributeNS(null, "font-family", a)
  2764.                 }
  2765.                 if (b.bold != this.textFormat_.bold) {
  2766.                     a =
  2767.                     this.textFormat_.bold ? "bold" : "";
  2768.                     this.text_.getElement().setAttribute("font-weight", a)
  2769.                 }
  2770.                 if (b.italic != this.textFormat_.italic) {
  2771.                     a = this.textFormat_.italic ? "italic" : "";
  2772.                     this.text_.getElement().setAttribute("font-style", a)
  2773.                 }
  2774.                 if (b.color != this.textFormat_.color) {
  2775.                     this.fill_ = {
  2776.                         color: this.textFormat_.color
  2777.                     };
  2778.                     this.text_.set(null, "fill", this.__colorToSvgString(this.fill_.color))
  2779.                 }
  2780.                 if (b.size != this.textFormat_.size) {
  2781.                     this.font_ = {
  2782.                         size: this.textFormat_.size,
  2783.                         family: this.textFormat_.font
  2784.                     };
  2785.                     this.text_.getElement().setAttribute("font-size", this.textFormat_.size)
  2786.                 }
  2787.                 b.alpha != this.textFormat_.alpha && this.text_.getElement().setAttribute("opacity", this.textFormat_.alpha)
  2788.             }
  2789.         }
  2790.     });
  2791.     fljs.swf.tag.DefineEditText = function () {};
  2792.     fljs.addMethods(fljs.swf.tag.DefineEditText, {
  2793.         read: function (a) {
  2794.             this.CharacterId = a.readUI16();
  2795.             this.Bounds = a.readRECT();
  2796.             a.stream.align();
  2797.             this.HasText = a.readUB(1);
  2798.             this.WordWrap = a.readUB(1);
  2799.             this.Multiline = a.readUB(1);
  2800.             this.Password = a.readUB(1);
  2801.             this.ReadOnly = a.readUB(1);
  2802.             this.HasTextColor = a.readUB(1);
  2803.             this.HasMaxLength = a.readUB(1);
  2804.             this.HasFont = a.readUB(1);
  2805.             this.HasFontClass = a.readUB(1);
  2806.             this.AutoSize = a.readUB(1);
  2807.             this.HasLayout = a.readUB(1);
  2808.             this.NoSelect = a.readUB(1);
  2809.             this.Border = a.readUB(1);
  2810.             this.WasStatic = a.readUB(1);
  2811.             this.HTML = a.readUB(1);
  2812.             this.UseOutlines = a.readUB(1);
  2813.             if (this.HasFont) this.FontId = a.readUI16();
  2814.             if (this.HasFontClass) this.FontClass = a.readString();
  2815.             if (this.HasFont) this.FontHeight = a.readUI16() / a.twipsPerPixel;
  2816.             if (this.HasTextColor) this.TextColor = a.readRGBA();
  2817.             if (this.HasMaxLength) this.MaxLength = a.readUI16();
  2818.             if (this.HasLayout) {
  2819.                 this.Align = a.readUI8();
  2820.                 this.LeftMargin = a.readUI16();
  2821.                 this.RightMargin = a.readUI16();
  2822.                 this.Indent = a.readUI16();
  2823.                 this.Leading = a.readUI16()
  2824.             }
  2825.             this.VariableName = a.readString();
  2826.             if (this.HasText) this.InitialText = a.readString()
  2827.         },
  2828.         evaluate: function (a) {
  2829.             a.addDefinition(this, this.CharacterId)
  2830.         },
  2831.         _build: function (a) {
  2832.             a = a.element.getElement().ownerDocument;
  2833.             var b = a.createElement("text");
  2834.             b.setAttribute("font-family", "font-" + String(this.FontId));
  2835.             b.setAttribute("font-size", this.FontHeight);
  2836.             var c = this.TextColor,
  2837.                 d = 0;
  2838.             d += c.Red << 16;
  2839.             d += c.Green << 8;
  2840.             d += c.Blue;
  2841.             b.setAttribute("fill", d);
  2842.             var e, f;
  2843.             if (this.Align) {
  2844.                 if (this.Align == 1) {
  2845.                     e = this.Bounds.Xmax;
  2846.                     f = "end"
  2847.                 }
  2848.             } else {
  2849.                 e = this.Bounds.Xmin;
  2850.                 f = "start"
  2851.             }
  2852.             b.setAttribute("x", e);
  2853.             b.setAttribute("text-anchor", f);
  2854.             b.setAttribute("y", this.Bounds.Ymax);
  2855.             b.appendChild(a.createTextNode(this.InitialText ? this.InitialText : ""));
  2856.             return b
  2857.         },
  2858.         build: function (a, b) {
  2859.             return this._buildTextField(a, b)
  2860.         },
  2861.         _buildTextField: function (a, b) {
  2862.             var c = new flash.text.TextField;
  2863.             b && c.getTransform().setColorTransform(b);
  2864.             c.text = this.InitialText;
  2865.             c.x = this.Bounds.Xmin;
  2866.             c.y = this.Bounds.Ymin;
  2867.             c.setWidth(this.Bounds.Xmax - this.Bounds.Xmin);
  2868.             c.setHeight(this.Bounds.Ymax - this.Bounds.Ymin);
  2869.             b = new flash.text.TextFormat;
  2870.             switch (this.Align) {
  2871.             case 0:
  2872.                 b.align = flash.text.TextFormatAlign.LEFT;
  2873.                 break;
  2874.             case 1:
  2875.                 b.align = flash.text.TextFormatAlign.RIGHT;
  2876.                 break;
  2877.             case 2:
  2878.                 b.align = flash.text.TextFormatAlign.CENTER;
  2879.                 break;
  2880.             case 3:
  2881.                 b.align = flash.text.TextFormatAlign.JUSTIFY;
  2882.                 break
  2883.             }
  2884.             if (a = a.fonts2[this.FontId]) {
  2885.                 b.bold = a.bold;
  2886.                 b.italic = a.italic;
  2887.                 b.font = a.name
  2888.             }
  2889.             a = this.TextColor;
  2890.             var d = 0;
  2891.             d += a.Red << 16;
  2892.             d += a.Green << 8;
  2893.             d += a.Blue;
  2894.             b.color = d;
  2895.             b.leading = this.Leading;
  2896.             b.leftMargin = this.LeftMargin;
  2897.             b.rightMargin = this.RightMargin;
  2898.             b.indent = this.Indent;
  2899.             b.size = this.FontHeight;
  2900.             c.setDefaultTextFormat(b);
  2901.             return c
  2902.         }
  2903.     });
  2904.     fljs.swf.tag.RemoveObject2 = function () {};
  2905.     fljs.addMethods(fljs.swf.tag.RemoveObject2, {
  2906.         read: function (a) {
  2907.             this.Depth = a.readUI16()
  2908.         },
  2909.         evaluate: function (a, b, c, d) {
  2910.             d.removeChildAt(this.Depth)
  2911.         }
  2912.     });
  2913.     fljs.swf.build.JpegBuilder = function () {};
  2914.     fljs.addMethods(fljs.swf.build.JpegBuilder, {
  2915.         parseJpeg: function (a, b, c, d) {
  2916.             b = String(b.readBytes(c).join(""));
  2917.             var e = new fljs.swf.BigEndianStringStream(b),
  2918.                 f, g, j = fljs.Player.getInstance(),
  2919.                 h;
  2920.             if (e.nextUShort() == 65497) {
  2921.                 h = d && j.jpegTables ? 6 : 4;
  2922.                 e.nextUShort();
  2923.                 e.nextUShort()
  2924.             } else h = d && j.jpegTables ? 2 : 0;
  2925.             for (var m = 0; e.byteIndex < c;) {
  2926.                 f = e.nextUShort();
  2927.                 g = e.nextUShort();
  2928.                 if (f == 65472) {
  2929.                     e.nextUByte();
  2930.                     a.Height = e.nextUShort();
  2931.                     a.Width = e.nextUShort();
  2932.                     break
  2933.                 }
  2934.                 if (f == 65497) m = e.byteIndex - 6;
  2935.                 else e.skipBytes(g - 2)
  2936.             }
  2937.             if (m) b = b.substr(0, m) + b.substr(m + 6);
  2938.             if (h) b = b.substr(h);
  2939.             a.DataUri = "data:image/jpeg;base64," + btoa((d && j.jpegTables ? j.jpegTables : "") + b)
  2940.         },
  2941.         parseJpegTables: function (a, b, c) {
  2942.             b = String(b.readBytes(c).join(""));
  2943.             var d = new fljs.swf.BigEndianStringStream(b),
  2944.                 e = 0;
  2945.             if (d.nextUShort() == 65497) {
  2946.                 e = 4;
  2947.                 d.nextUShort();
  2948.                 d.nextUShort()
  2949.             }
  2950.             a.JpegTables = b.substr(e, c - e - 2)
  2951.         }
  2952.     });
  2953.     fljs.swf.tag.DefineBitsJPEG2 = function () {};
  2954.     fljs.addMethods(fljs.swf.tag.DefineBitsJPEG2, {
  2955.         read: function (a, b) {
  2956.             this.CharacterId = a.readUI16();
  2957.             b = b.TagLength - 2;
  2958.             (new fljs.swf.build.JpegBuilder).parseJpeg(this, a, b, true)
  2959.         },
  2960.         evaluate: function (a) {
  2961.             this.defId = "image" + this.CharacterId;
  2962.             a.addDefinition(this, this.CharacterId);
  2963.             a = new fljs.swf.def.BitmapDef;
  2964.             a.setCharaId(this.defId);
  2965.             a.element.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.DataUri], [null, "x", 0], [null, "y", 0], [null, "width", this.Width], [null, "height", this.Height]]);
  2966.             a.define();
  2967.             this.def = a
  2968.         }
  2969.     });
  2970.     flash.display.Sprite = function () {
  2971.         flash.display.DisplayObjectContainer.call(this)
  2972.     };
  2973.     fljs.inherits(flash.display.Sprite, flash.display.DisplayObjectContainer);
  2974.     fljs.addMethods(flash.display.Sprite, {
  2975.         startDrag: function () {},
  2976.         stopDrag: function () {},
  2977.         getGraphics: function () {
  2978.             return this.graphics_
  2979.         }
  2980.     });
  2981.     flash.display.Scene = function () {};
  2982.     flash.ui = {};
  2983.     flash.ui.Keyboard = function () {};
  2984.     fljs.addStaticMethods(flash.ui.Keyboard, {
  2985.         isAccessible: function () {}
  2986.     });
  2987.     fljs.addConstants(flash.ui.Keyboard, {
  2988.         BACKSPACE: 8,
  2989.         CAPS_LOCK: 20,
  2990.         CONTROL: 17,
  2991.         DELETE: 46,
  2992.         DOWN: 40,
  2993.         END: 35,
  2994.         ENTER: 13,
  2995.         ESCAPE: 27,
  2996.         F1: 112,
  2997.         F10: 121,
  2998.         F11: 122,
  2999.         F12: 123,
  3000.         F13: 124,
  3001.         F14: 125,
  3002.         F15: 126,
  3003.         F2: 113,
  3004.         F3: 114,
  3005.         F4: 115,
  3006.         F5: 116,
  3007.         F6: 117,
  3008.         F7: 118,
  3009.         F8: 119,
  3010.         F9: 120,
  3011.         HOME: 36,
  3012.         INSERT: 45,
  3013.         LEFT: 37,
  3014.         NUMPAD_0: 96,
  3015.         NUMPAD_1: 97,
  3016.         NUMPAD_2: 98,
  3017.         NUMPAD_3: 99,
  3018.         NUMPAD_4: 100,
  3019.         NUMPAD_5: 101,
  3020.         NUMPAD_6: 102,
  3021.         NUMPAD_7: 103,
  3022.         NUMPAD_8: 104,
  3023.         NUMPAD_9: 105,
  3024.         NUMPAD_ADD: 107,
  3025.         NUMPAD_DECIMAL: 110,
  3026.         NUMPAD_DIVIDE: 111,
  3027.         NUMPAD_ENTER: 108,
  3028.         NUMPAD_MULTIPLY: 106,
  3029.         NUMPAD_SUBTRACT: 109,
  3030.         PAGE_DOWN: 34,
  3031.         PAGE_UP: 33,
  3032.         RIGHT: 39,
  3033.         SHIFT: 16,
  3034.         SPACE: 32,
  3035.         TAB: 9,
  3036.         UP: 38
  3037.     });
  3038.     fljs.swf.AudioStreamReader = function (a, b) {
  3039.         this.player = a;
  3040.         this.delegate = b;
  3041.         this.reader = new fljs.swf.TagReader(a.parser.reader.stream.stream.buffer);
  3042.         this.reader.readSwfHeader()
  3043.     };
  3044.     fljs.addMethods(fljs.swf.AudioStreamReader, {
  3045.         hasMore: function () {
  3046.             return this.reader.stream.hasMore()
  3047.         },
  3048.         read: function (a) {
  3049.             for (var b = 0, c = this.delegate, d = this.reader, e = [0]; d.stream.hasMore();) {
  3050.                 var f = d.readTagHeader();
  3051.                 switch (f.tagClass()) {
  3052.                 case fljs.swf.tag.SoundStreamBlock:
  3053.                     f = d.readTag(f);
  3054.                     c.onSoundStreamBlockTag(f, null, e[0]);
  3055.                     b++;
  3056.                     if (b == a) return;
  3057.                     break;
  3058.                 case fljs.swf.tag.ShowFrame:
  3059.                     f = d.readTag(f);
  3060.                     c.onShowFrameTag(f, null, e[0]);
  3061.                     e[0] += 1;
  3062.                     break;
  3063.                 default:
  3064.                     d.skipTag(f);
  3065.                     c.onUnknownTag && c.onUnknownTag(f, null, e[0]);
  3066.                     break
  3067.                 }
  3068.             }
  3069.         }
  3070.     });
  3071.     fljs.player = {};
  3072.     fljs.player.ResourceManager = function () {
  3073.         this.frames = {};
  3074.         this.res = {};
  3075.         this.streams = {};
  3076.         this.listeners = {}
  3077.     };
  3078.     fljs.addMethods(fljs.player.ResourceManager, {
  3079.         addToFrame: function (a, b) {
  3080.             this.frames[b] || (this.frames[b] = {});
  3081.             this.frames[b][a] = true;
  3082.             this.res[a] = b
  3083.         },
  3084.         remove: function (a) {
  3085.             if (this.listeners[a]) for (var b in this.listeners[a]) this.listeners[a][b](a);
  3086.             b = this.res[a];
  3087.             delete this.listeners[a];
  3088.             delete this.frames[b][a];
  3089.             delete this.res[a]
  3090.         },
  3091.         addStream: function (a) {
  3092.             this.streams[a.id] = a
  3093.         },
  3094.         frameReady: function (a) {
  3095.             for (var b = 0; b <= a; b++) {
  3096.                 var c = this.frames[a];
  3097.                 if (c) for (var d in c) return false
  3098.             }
  3099.             for (b in this.streams) if (!this.streams[b].frameReady(a)) return false;
  3100.             return true
  3101.         },
  3102.         listen: function (a, b) {
  3103.             var c = this.listeners[a];
  3104.             c || (c = this.listeners[a] = []);
  3105.             c.push(b)
  3106.         },
  3107.         waiting: function (a) {
  3108.             return a in this.res
  3109.         },
  3110.         newId: function () {
  3111.             return fljs.player.ResourceManager.id++
  3112.         }
  3113.     });
  3114.     fljs.player.ResourceManager.id = 1;
  3115.     fljs.player.ExtAudioStream = function (a, b, c) {
  3116.         this.id = b.resources.newId();
  3117.         b.resources.addStream(this);
  3118.         b = this.audio = a.allocAudio();
  3119.         b.addEventListener("canplaythrough", fljs.bind(this.onAudioLoad, this), true);
  3120.         b.setAttribute("src", c);
  3121.         b.load();
  3122.         this.frames = {};
  3123.         this.playing = false;
  3124.         this.audioStreamReader = new fljs.swf.AudioStreamReader(a, this);
  3125.         this.duration = 0;
  3126.         this.maxFrame = -1
  3127.     };
  3128.     fljs.addMethods(fljs.player.ExtAudioStream, {
  3129.         pingLoad: function () {},
  3130.         frameReady: function (a) {
  3131.             if (this.maxFrame < a) return false;
  3132.             if (typeof this.frames[a] != "undefined") return true;
  3133.             else {
  3134.                 for (a = a; a > 0 && typeof this.frames[a] == "undefined";) a--;
  3135.                 return a == 0 ? true : this.frameReady(a)
  3136.             }
  3137.         },
  3138.         frameShouldPlay: function (a) {
  3139.             for (a = a; a > 0;) {
  3140.                 if (a in this.frames) return !!this.frames[a];
  3141.                 a--
  3142.             }
  3143.             return false
  3144.         },
  3145.         setFrameDuration: function (a, b) {
  3146.             this.frames[a] = b
  3147.         },
  3148.         onAudioLoad: function () {
  3149.             fljs.console("audio").info("onAudioLoad: " + this.audio.readyState + ", " + this.audio.duration);
  3150.             if (!this.started && this.playing) {
  3151.                 this.audio.currentTime = this.frames[this.frame];
  3152.                 this.audio.play()
  3153.             }
  3154.             this.started = true
  3155.         },
  3156.         playFrame: function (a) {
  3157.             fljs.console("audio").info("playFrame:" + this.audio.readyState);
  3158.             if (this.audio.readyState >= 2) {
  3159.                 this.frame = a;
  3160.                 this.audio.currentTime = this.frames[a];
  3161.                 this.audio.play();
  3162.                 this.started = true
  3163.             }
  3164.             this.playing = true
  3165.         },
  3166.         pause: function () {
  3167.             this.audio.pause();
  3168.             this.playing = false
  3169.         },
  3170.         controlsFrame: function () {},
  3171.         currentTime: function () {
  3172.             return this.audio.currentTime * 1E3
  3173.         },
  3174.         setSync: function (a) {
  3175.             this.sync = a
  3176.         },
  3177.         shouldBuffer: function () {
  3178.             var a = fljs.now() - this.lastBufferAt;
  3179.             return !this.lastBufferAt || a > fljs.swf.SwfStreamingSoundReader.rebufferDuration
  3180.         },
  3181.         buffer: function () {
  3182.             var a = this.audioStreamReader;
  3183.             a.hasMore() && a.read(fljs.swf.SwfStreamingSoundReader.bufferBlocks);
  3184.             this.lastBufferAt = fljs.now()
  3185.         },
  3186.         onSoundStreamBlockTag: function (a, b, c) {
  3187.             this.maxFrame = c;
  3188.             b = a.duration();
  3189.             a = this.duration + b * (a.Mp3SoundData.SeekSamples / a.SampleCount);
  3190.             this.frames[c] = a / 1E3;
  3191.             this.duration += b;
  3192.             this.sync.setFrameTime(c, a)
  3193.         },
  3194.         onShowFrameTag: function () {}
  3195.     });
  3196.     fljs.player.SwfAudioStream = function (a, b) {
  3197.         this.id = b.resources.newId();
  3198.         b.resources.addStream(this);
  3199.         this.player = a;
  3200.         this.target = b;
  3201.         this.soundStream = new fljs.swf.SwfStreamingSoundReader(a.parser.reader.stream.stream.buffer, b);
  3202.         this.playing = false
  3203.     };
  3204.     fljs.addMethods(fljs.player.SwfAudioStream, {
  3205.         pingLoad: function () {},
  3206.         frameReady: function (a) {
  3207.             if (typeof this.soundStream.swfFrames[a] != "undefined") return this.soundStream.duration >= this.soundStream.swfFrames[a];
  3208.             else {
  3209.                 for (a = a; a > 0 && typeof this.soundStream.swfFrames[a] == "undefined";) a--;
  3210.                 return a == 0 ? true : this.frameReady(a)
  3211.             }
  3212.         },
  3213.         frameShouldPlay: function (a) {
  3214.             for (a = a; a > 0;) {
  3215.                 if (a in this.soundStream.swfFrames) return true;
  3216.                 a--
  3217.             }
  3218.             return false
  3219.         },
  3220.         setFrameDuration: function () {},
  3221.         playFrame: function (a) {
  3222.             this.soundStream.play(a);
  3223.             this.playing = true
  3224.         },
  3225.         pause: function () {
  3226.             this.soundStream.stop();
  3227.             this.playing = false
  3228.         },
  3229.         controlsFrame: function (a) {
  3230.             return this.soundStream.controlFrame(a)
  3231.         },
  3232.         timeDiff: function (a) {
  3233.             return this.soundStream.timeDiff(a)
  3234.         },
  3235.         currentTime: function () {
  3236.             return this.soundStream.currentTime()
  3237.         },
  3238.         setSync: function (a) {
  3239.             this.soundStream.sync = a
  3240.         },
  3241.         shouldBuffer: function () {
  3242.             var a = fljs.now() - this.soundStream.lastBufferAt;
  3243.             return !this.soundStream.lastBufferAt || a > fljs.swf.SwfStreamingSoundReader.rebufferDuration
  3244.         },
  3245.         buffer: function () {
  3246.             this.soundStream.buffer()
  3247.         }
  3248.     });
  3249.     flash.display.MovieClip = function () {
  3250.         flash.display.Sprite.call(this);
  3251.         var a = new flash.display.Scene;
  3252.         a.labels = [];
  3253.         a.name = "Scene 1";
  3254.         a.numFrames = 1;
  3255.         this.frameData_ = [{
  3256.             scripts: [],
  3257.             parts: [],
  3258.             tags: [],
  3259.             label: "",
  3260.             repeat: false}];
  3261.         this.labels_ = {};
  3262.         this.sceneIndices_ = {};
  3263.         this.currentSceneIndex_ = 0;
  3264.         this.scenes_ = [a];
  3265.         this.currentFrameIndex_ = 0;
  3266.         this.currentLabel_ = null;
  3267.         this._enabled = false;
  3268.         this.totalFrames_ = this.framesLoaded_ = 1;
  3269.         this.next_ = null;
  3270.         this.playing_ = true;
  3271.         this.audio = [];
  3272.         fljs.Player.getInstance();
  3273.         this.id = flash.display.MovieClip.id++;
  3274.         this.element_.getElement().setAttribute("id", "mc" + this.id);
  3275.         this.__buttonStateDown = this.__buttonStateOver = this.firstFrame = false;
  3276.         this.resources = new fljs.player.ResourceManager
  3277.     };
  3278.     fljs.inherits(flash.display.MovieClip, flash.display.Sprite);
  3279.     fljs.addMethods(flash.display.MovieClip, {
  3280.         gotoAndPlay: function (a, b) {
  3281.             this.gotoAnd_(a, b, true)
  3282.         },
  3283.         gotoAndStop: function (a, b) {
  3284.             this.gotoAnd_(a, b, false)
  3285.         },
  3286.         gotoAnd_: function (a, b, c) {
  3287.             var d, e;
  3288.             if (typeof a.valueOf() == "string") if (d = this.labels_[a]) {
  3289.                 d = d.frame - 1;
  3290.                 e = 0
  3291.             } else return;
  3292.             else if (!b) {
  3293.                 d = a - 1;
  3294.                 if (d == -1) d = 0;
  3295.                 a = this.globalFrameIndexToLocal_(d);
  3296.                 d = a[0];
  3297.                 e = a[1]
  3298.             }
  3299.             this.next_ = {
  3300.                 frameIndex: d,
  3301.                 sceneIndex: e,
  3302.                 play: c
  3303.             };
  3304.             this.next_.clear = d != this.currentFrameIndex_ + 1
  3305.         },
  3306.         globalFrameIndexToLocal_: function (a) {
  3307.             for (var b = 0; a >= this.scenes_[b].numFrames;) {
  3308.                 a -= this.scenes_[b].numFrames;
  3309.                 b += 1
  3310.             }
  3311.             return [a, b]
  3312.         },
  3313.         nextFrame: function () {
  3314.             var a = this.currentFrameIndex_ + 1,
  3315.                 b = this.currentSceneIndex_;
  3316.             if (a == this.scenes_[this.currentSceneIndex_].numFrames) if (this.totalFrames_ > 1) {
  3317.                 a = 0;
  3318.                 b += 1;
  3319.                 if (b == this.scenes_.length) b = 0
  3320.             } else {
  3321.                 this.next_ = null;
  3322.                 return
  3323.             }
  3324.             this.next_ = {
  3325.                 frameIndex: a,
  3326.                 sceneIndex: b,
  3327.                 play: this.next_ ? this.next_.play : this.playing_
  3328.             }
  3329.         },
  3330.         nextScene: function () {
  3331.             var a = this.currentSceneIndex_ + 1;
  3332.             if (a == this.scenes_.length) a = 0;
  3333.             this.next_ = {
  3334.                 frameIndex: 0,
  3335.                 sceneIndex: a,
  3336.                 play: true
  3337.             }
  3338.         },
  3339.         play: function () {
  3340.             this.next_ =
  3341.             this.next_ ? {
  3342.                 frameIndex: this.next_.frameIndex,
  3343.                 sceneIndex: this.next_.sceneIndex,
  3344.                 play: true,
  3345.                 clear: this.next_.clear
  3346.             } : {
  3347.                 frameIndex: this.currentFrameIndex_,
  3348.                 sceneIndex: this.currentSceneIndex_,
  3349.                 play: true
  3350.             }
  3351.         },
  3352.         prevFrame: function () {
  3353.             var a = this.currentFrameIndex_ - 1,
  3354.                 b = this.currentSceneIndex_;
  3355.             if (a == -1) {
  3356.                 b -= 1;
  3357.                 if (b == -1) b = this.scenes_.length - 1;
  3358.                 a = this.scenes_[b].numFrames - 1
  3359.             }
  3360.             this.next_ = {
  3361.                 frameIndex: a,
  3362.                 sceneIndex: b,
  3363.                 play: this.next_ ? this.next_.play : this.playing_
  3364.             }
  3365.         },
  3366.         prevScene: function () {
  3367.             var a = this.currentSceneIndex_ - 1;
  3368.             if (a == -1) a = this.scenes_.length - 1;
  3369.             frameIndex = this.scenes_[a].numFrames - 1;
  3370.             this.next_ = {
  3371.                 frameIndex: frameIndex,
  3372.                 sceneIndex: a,
  3373.                 play: true
  3374.             }
  3375.         },
  3376.         stop: function () {
  3377.             var a;
  3378.             if (this.next_) a = this.next_.clear;
  3379.             this.next_ = {
  3380.                 frameIndex: this.currentFrameIndex_,
  3381.                 sceneIndex: this.currentSceneIndex_,
  3382.                 play: false,
  3383.                 stop: true,
  3384.                 clear: a
  3385.             }
  3386.         },
  3387.         clear: function () {
  3388.             for (var a in this.displayList_) this.removeChildAt(a)
  3389.         },
  3390.         onNewFrame: function () {
  3391.             if (this.getStage()) if (this.frameReady(this.currentFrameIndex_)) {
  3392.                 this.pendingFrame = false;
  3393.                 var a = this.frameData_[this.currentFrameIndex_];
  3394.                 if (a.label) this.currentLabel_ = a.label;
  3395.                 for (var b = 0; b < a.tags.length; b++) {
  3396.                     var c = a.tags[b];
  3397.                     c[0] && c[0].evaluate(fljs.Player.getInstance(), null, null, this)
  3398.                 }
  3399.                 if (a.parts) for (b in a.parts) this.addChildAt(a.parts[b], b)
  3400.             } else this.pendingFrame = true
  3401.         },
  3402.         onEnterFrame: function () {
  3403.             var a = false;
  3404.             if (a = this.pendingFrame ? true : this.pickNextFrame()) {
  3405.                 this.onNewFrame();
  3406.                 if (this.pendingFrame) return
  3407.             }(a = this._as2Object) && a._onEnterFrame && fljs.Player.getInstance().interpreter.callback(a, a._onEnterFrame)
  3408.         },
  3409.         onCreate: function () {
  3410.             this.next_ = {
  3411.                 frameIndex: 0,
  3412.                 sceneIndex: 0,
  3413.                 play: !this._enabled && this.totalFrames_ > 1
  3414.             };
  3415.             this.setCurrentFrame();
  3416.             this.onNewFrame()
  3417.         },
  3418.         setCurrentFrame: function () {
  3419.             this.updateSoundStream();
  3420.             this.currentFrameIndex_ = this.next_.frameIndex;
  3421.             this.currentSceneIndex_ = this.next_.sceneIndex;
  3422.             this.playing_ = this.next_.play;
  3423.             this.next_ = null
  3424.         },
  3425.         pickNextFrame: function () {
  3426.             if (this.playing_) if (!this.next_) {
  3427.                 var a = this.currentFrameIndex_ + 1,
  3428.                     b = this.currentSceneIndex_;
  3429.                 if (a == this.scenes_[this.currentSceneIndex_].numFrames) if (a == this.totalFrames_) if (this.totalFrames_ > 1) {
  3430.                     this.clear();
  3431.                     this.next_ = {
  3432.                         frameIndex: 0,
  3433.                         sceneIndex: 0,
  3434.                         play: true
  3435.                     }
  3436.                 } else {
  3437.                     this.playing_ = false;
  3438.                     this.next_ = null
  3439.                 } else this.next_ = {
  3440.                     frameIndex: a,
  3441.                     sceneIndex: b + 1,
  3442.                     play: true
  3443.                 };
  3444.                 else this.next_ = {
  3445.                     frameIndex: a,
  3446.                     sceneIndex: b,
  3447.                     play: this.playing_
  3448.                 }
  3449.             }
  3450.             if (this.next_) if (this._enabled) this.next_.play = false;
  3451.             a = this.next_ && !this.next_.stop && this.next_.frameIndex != this.currentFrameIndex_;
  3452.             if (this.next_) {
  3453.                 a && this.next_.clear && this.removeChildren();
  3454.                 this.setCurrentFrame();
  3455.                 this.next_ = null
  3456.             }
  3457.             return a
  3458.         },
  3459.         onEnterFrame_: function (a) {
  3460.             fljs.console("mc").info("mc#" + this.id + " frame#" + this.currentFrameIndex_);
  3461.             this.onEnterFrame(a)
  3462.         },
  3463.         updateSoundStream: function () {
  3464.             if (this.audioStream) if (this.next_) if (this.next_.play != this.playing_) if (this.next_.playing) this.audioStream.frameShouldPlay(this.next_.frameIndex) && this.audioStream.playFrame(this.next_.frameIndex);
  3465.             else this.audioStream.pause();
  3466.             else this.next_.play && this.next_.frameIndex != this.currentFrameIndex_ + 1 && this.audioStream.frameShouldPlay(this.next_.frameIndex) && this.audioStream.playFrame(this.next_.frameIndex);
  3467.             else this.audioStream.pause()
  3468.         },
  3469.         addFrameScript: function () {
  3470.             for (var a, b, c = 0; c < arguments.length; c += 2) {
  3471.                 a = arguments[c];
  3472.                 b = this.globalFrameIndexToLocal_(a);
  3473.                 a = b[0];
  3474.                 b = b[1];
  3475.                 this.scenes_[b].frameData_[a].scripts.push(arguments[c + 1])
  3476.             }
  3477.         },
  3478.         updateButtonState: function (a) {
  3479.             if (this._enabled) {
  3480.                 var b = flash.events.MouseEvent,
  3481.                     c = flash.events.KeyboardEvent,
  3482.                     d, e;
  3483.                 switch (a.type) {
  3484.                 case b.CLICK:
  3485.                     e = d = true;
  3486.                     break;
  3487.                 case b.MOUSE_OVER:
  3488.                     d = true;
  3489.                     e = this.__buttonStateDown;
  3490.                     break;
  3491.                 case b.MOUSE_OUT:
  3492.                     d = false;
  3493.                     e = this.__buttonStateDown;
  3494.                     break;
  3495.                 case b.MOUSE_DOWN:
  3496.                     d = this.__buttonStateOver;
  3497.                     e = true;
  3498.                     break;
  3499.                 case b.MOUSE_UP:
  3500.                     d = this.__buttonStateOver;
  3501.                     e = false;
  3502.                     break;
  3503.                 case c.KEY_DOWN:
  3504.                     d = this.__buttonStateOver;
  3505.                     e = true;
  3506.                     break;
  3507.                 case c.KEY_UP:
  3508.                     d = this.__buttonStateOver;
  3509.                     e = false;
  3510.                     break
  3511.                 }
  3512.                 var f;
  3513.                 if (this.__buttonStateOver != d) f = d ? e ? this.__buttonStateDown ? "CondOutDownToOverDown" : "CondIdleToOverDown" : "CondIdleToOverUp" : e ? "CondOverDownToOutDown" : "CondOverUpToIdle";
  3514.                 else if (this.__buttonStateDown != e) if (e) {
  3515.                     if (d) f = "CondOverUpToOverDown"
  3516.                 } else f = d ? "CondOverDownToOverUp" : "CondOutDownToIdle";
  3517.                 a = d ? e ? "down" : "over" : "up";
  3518.                 this.__buttonStateOver =
  3519.                 d;
  3520.                 this.__buttonStateDown = e;
  3521.                 this.gotoAndStop("_" + a);
  3522.                 if (f) for (var g in this.__buttonActions) {
  3523.                     d = this.__buttonActions[g];
  3524.                     d[f] && fljs.Player.getInstance().doActions(this, d.Actions)
  3525.                 }
  3526.             }
  3527.         },
  3528.         needAudio: function () {
  3529.             for (var a = fljs.Player.getInstance(), b = 0; b < 2; b++) this.audio[b] = a.allocAudio()
  3530.         },
  3531.         frameReady: function (a) {
  3532.             return this.frameData_[a] && this.frameData_[a].loaded && this.resources.frameReady(a)
  3533.         },
  3534.         getEnabled: function () {
  3535.             return this._enabled
  3536.         },
  3537.         setEnabled: function (a) {
  3538.             this._enabled = !! a
  3539.         }
  3540.     });
  3541.     flash.display.MovieClip.id = 1;
  3542.     fljs.swf.tag.DefineSprite = function () {};
  3543.     fljs.addMethods(fljs.swf.tag.DefineSprite, {
  3544.         read: function (a) {
  3545.             this.defId = this.SpriteId = a.readUI16();
  3546.             this.FrameCount = a.readUI16();
  3547.             this.frameData_ = [{
  3548.                 tags: []}];
  3549.             this.labels_ = {};
  3550.             this.framesLoaded_ = 0;
  3551.             this.totalFrames_ = this.FrameCount
  3552.         },
  3553.         evaluate: function (a) {
  3554.             a.addDefinition(this, this.SpriteId)
  3555.         },
  3556.         build: function (a, b) {
  3557.             a = new flash.display.MovieClip;
  3558.             a.def = this;
  3559.             b && a.getTransform().setColorTransform(b);
  3560.             b = new flash.display.Scene;
  3561.             b.labels = [];
  3562.             b.name = "Scene 1";
  3563.             b.numFrames = this.FrameCount;
  3564.             a.frameData_ = [];
  3565.             for (var c = 0; c < this.FrameCount; c++) {
  3566.                 var d = {
  3567.                     scripts: [],
  3568.                     parts: [],
  3569.                     tags: [],
  3570.                     label: ""
  3571.                 };
  3572.                 d.tags = this.frameData_[c].tags;
  3573.                 d.loaded = this.frameData_[c].loaded;
  3574.                 a.frameData_.push(d)
  3575.             }
  3576.             a.labels_ = this.labels_;
  3577.             a.sceneIndices_ = {};
  3578.             a.currentSceneIndex_ = 0;
  3579.             a.scenes_ = [b];
  3580.             a.currentFrameIndex_ = 0;
  3581.             a.currentLabel_ = null;
  3582.             a._enabled = false;
  3583.             a.framesLoaded_ = this.FrameCount;
  3584.             a.totalFrames_ = this.FrameCount;
  3585.             a.next_ = null;
  3586.             a.playing_ = true;
  3587.             return a
  3588.         }
  3589.     });
  3590.     fljs.swf.tag.DefineSound = function () {};
  3591.     fljs.addMethods(fljs.swf.tag.DefineSound, {
  3592.         read: function (a, b) {
  3593.             this.SoundId = a.readUI16();
  3594.             this.SoundFormat = a.readUB(4);
  3595.             this.SoundRate = a.readUB(2);
  3596.             this.SoundSize = a.readUB(1);
  3597.             this.SoundType = a.readUB(1);
  3598.             this.SoundSampleCount = a.readUI32();
  3599.             this.Mp3SoundData = this.SoundData = a.readMp3SoundData(b.TagLength - 2 - 1 - 4)
  3600.         },
  3601.         evaluate: function (a) {
  3602.             a.sounds[this.SoundId] = this
  3603.         }
  3604.     });
  3605.     fljs.swf.tag.StartSound = function () {};
  3606.     fljs.addMethods(fljs.swf.tag.StartSound, {
  3607.         read: function (a) {
  3608.             this.SoundId = a.readUI16();
  3609.             this.SoundInfo = a.readSoundInfo()
  3610.         },
  3611.         evaluate: function (a, b) {
  3612.             var c = a.sounds[this.SoundId];
  3613.             if (!c.player) {
  3614.                 c.player = a.allocAudio();
  3615.                 b = new fljs.swf.StringStream(a.reader.stream.stream.buffer);
  3616.                 b.byteIndex = c.Mp3SoundData.byteIndex;
  3617.                 b = b.readBytes(c.Mp3SoundData.byteCount).join("");
  3618.                 b = "data:audio/mpeg;base64," + btoa(b);
  3619.                 c.player.setAttribute("src", b)
  3620.             }
  3621.             var d = c.player;
  3622.             if (this.SoundInfo.SyncStop) {
  3623.                 d.fljsPlaying = false;
  3624.                 d.pause()
  3625.             } else if (this.SoundInfo.SyncNoMultiple) {
  3626.                 d.fljsPlaying =
  3627.                 true;
  3628.                 a.playing && d.play()
  3629.             } else {
  3630.                 d.addEventListener("load", function () {
  3631.                     d.currentTime = 0;
  3632.                     d.fljsPlaying = true;
  3633.                     a.playing && d.play()
  3634.                 }, true);
  3635.                 d.load()
  3636.             }
  3637.         }
  3638.     });
  3639.     fljs.swf.tag.DefineShape2 = function () {};
  3640.     fljs.inherits(fljs.swf.tag.DefineShape2, fljs.swf.tag.DefineShape);
  3641.     fljs.addMethods(fljs.swf.tag.DefineShape2, {
  3642.         read: function (a, b) {
  3643.             a.beginContext(fljs.swf.tag.DefineShape2);
  3644.             a.endByteIndex = a.stream.byteIndex + b.TagLength;
  3645.             this.ShapeId = a.readUI16();
  3646.             this.ShapeBounds = a.readRECT();
  3647.             a.stream.align();
  3648.             this.Shapes = a.readSHAPEWITHSTYLE();
  3649.             a.endContext()
  3650.         }
  3651.     });
  3652.     fljs.swf.tag.SoundStreamHead2 = function () {};
  3653.     fljs.inherits(fljs.swf.tag.SoundStreamHead2, fljs.swf.tag.SoundStreamHead);
  3654.     fljs.swf.tag.DefineFontInfo = function () {};
  3655.     fljs.addMethods(fljs.swf.tag.DefineFontInfo, {
  3656.         read: function (a) {
  3657.             this.FontId = a.readUI16();
  3658.             this.FontNameLen = a.readUI8();
  3659.             var b = [];
  3660.             for (i = 0; i < this.FontNameLen; i++) b.push(String.fromCharCode(a.readUI8()));
  3661.             this.FontName = b.join("");
  3662.             a.readUB(2);
  3663.             this.FontFlagsSmallText = a.readUB(1);
  3664.             this.FontFlagsShiftJis = a.readUB(1);
  3665.             this.FontFlagsAnsi = a.readUB(1);
  3666.             this.FontFlagsItalic = a.readUB(1);
  3667.             this.FontFlagsBold = a.readUB(1);
  3668.             this.FontFlagsWideCodes = a.readUB(1);
  3669.             b = fljs.Player.getInstance().fontsWithoutInfo[this.FontId];
  3670.             this.CodeTable = [];
  3671.             if (this.FontFlagsWideCodes) for (i = 0; i < b.NumGlyphs; i++) this.CodeTable.push(a.readUI16());
  3672.             else for (i = 0; i < this.NumGlyphs; i++) this.CodeTable.push(a.readUI8());
  3673.             this.GlyphShapeTable = b.GlyphShapeTable
  3674.         },
  3675.         evaluate: function (a) {
  3676.             var b = (new fljs.swf.build.FontBuilder(this, a)).buildDef();
  3677.             a.defineFont2(this.FontId, this.GlyphShapeTable.length, b, this.FontName, this.FontFlagsBold, this.FontFlagsItalic, this.CodeTable)
  3678.         }
  3679.     });
  3680.     fljs.swf.tag.DefineText = function () {};
  3681.     fljs.addMethods(fljs.swf.tag.DefineText, {
  3682.         read: function (a) {
  3683.             this.CharacterId = a.readUI16();
  3684.             this.TextBounds = a.readRECT();
  3685.             a.stream.align();
  3686.             this.TextMatrix = a.readMATRIX();
  3687.             this.GlyphBits = a.readUI8();
  3688.             this.AdvanceBits = a.readUI8();
  3689.             a.GlyphBits = this.GlyphBits;
  3690.             a.AdvanceBits = this.AdvanceBits;
  3691.             a.context = fljs.swf.tag.DefineText;
  3692.             this.TextRecords = a.readTEXTRECORDS();
  3693.             a.context = null
  3694.         },
  3695.         buildMatrix_: function () {
  3696.             return new flash.geom.Matrix(this.TextMatrix.ScaleX, this.TextMatrix.RotateSkew0, this.TextMatrix.RotateSkew1, this.TextMatrix.ScaleY, this.TextMatrix.TranslateX, this.TextMatrix.TranslateY)
  3697.         },
  3698.         evaluate: function (a) {
  3699.             a.addDefinition(this, this.CharacterId)
  3700.         },
  3701.         build: function (a, b) {
  3702.             return this._buildTextField(a, b)
  3703.         },
  3704.         _buildTextField: function (a, b) {
  3705.             if (!this.TextRecords || !this.TextRecords.length) return null;
  3706.             this.FontId = this.TextRecords[0].FontId;
  3707.             this.Bounds = this.TextBounds;
  3708.             var c = a.fonts2[this.FontId];
  3709.             a = [];
  3710.             var d;
  3711.             fljs.console("definetext");
  3712.             var e, f, g = 0,
  3713.                 j;
  3714.             for (var h in this.TextRecords) {
  3715.                 var m = this.TextRecords[h];
  3716.                 d = new flash.text.TextFormat;
  3717.                 if (c) {
  3718.                     d.bold = c.bold;
  3719.                     d.italic = c.italic;
  3720.                     d.font = c.name;
  3721.                     d.fontid = this.FontId
  3722.                 }
  3723.                 if (m.TextColor) {
  3724.                     var k = m.TextColor;
  3725.                     e = 0;
  3726.                     e += k.Red << 16;
  3727.                     e += k.Green << 8;
  3728.                     e += k.Blue;
  3729.                     if (typeof m.TextColor.Alpha != "undefined") d.alpha = m.TextColor.Alpha / 255
  3730.                 }
  3731.                 d.color = e;
  3732.                 if (m.YOffset != null) {
  3733.                     f = m.YOffset;
  3734.                     g = 0
  3735.                 };
  3736.                 d.leading = f;
  3737.                 if (m.XOffset != null) g = m.XOffset;
  3738.                 d.indent = g;
  3739.                 if (m.TextHeight != null) j = m.TextHeight;
  3740.                 d.size = j;
  3741.                 m = m.GlyphEntries;
  3742.                 k = [];
  3743.                 var l = [];
  3744.                 if (m) for (var n in m) {
  3745.                     var p = m[n];
  3746.                     c ? k.push(String.fromCharCode(c.codeTable[p.GlyphIndex])) : k.push(String.fromCharCode(p.GlyphIndex));
  3747.                     l.push(p.GlyphAdvance);
  3748.                     g += p.GlyphAdvance
  3749.                 }
  3750.                 a.push({
  3751.                     text: k.join(""),
  3752.                     advances: l,
  3753.                     format: d
  3754.                 })
  3755.             }
  3756.             this.Indent = this.RightMargin = this.LeftMargin = this.Leading = this.Align = 0;
  3757.             this.FontHeight = this.TextRecords[0].TextHeight;
  3758.             this.TextColor = this.TextRecords[0].TextColor;
  3759.             e = new flash.text.TextField;
  3760.             e.setTextMatrix(this.buildMatrix_());
  3761.             b && e.getTransform().setColorTransform(b);
  3762.             e.x = this.Bounds.Xmin;
  3763.             e.y = this.Bounds.Ymin;
  3764.             e.setWidth(this.Bounds.Xmax - this.Bounds.Xmin);
  3765.             e.setHeight(this.Bounds.Ymax - this.Bounds.Ymin);
  3766.             e.setDefaultTextFormat(d);
  3767.             e.__setSpans(a);
  3768.             return e
  3769.         }
  3770.     });
  3771.     fljs.swf.tag.DefineFontInfo2 = function () {};
  3772.     fljs.addMethods(fljs.swf.tag.DefineFontInfo2, {
  3773.         read: function (a, b) {
  3774.             var c = a.stream.byteIndex;
  3775.             this.FontId = a.readUI16();
  3776.             this.FontNameLen = a.readUI8();
  3777.             var d = [];
  3778.             for (i = 0; i < this.FontNameLen; i++) d.push(String.fromCharCode(a.readUI8()));
  3779.             this.FontName = d.join("");
  3780.             a.readUB(2);
  3781.             this.FontFlagsSmallText = a.readUB(1);
  3782.             this.FontFlagsShiftJis = a.readUB(1);
  3783.             this.FontFlagsAnsi = a.readUB(1);
  3784.             this.FontFlagsItalic = a.readUB(1);
  3785.             this.FontFlagsBold = a.readUB(1);
  3786.             this.FontFlagsWideCodes = a.readUB(1);
  3787.             this.LanguageCode = a.readLangCode();
  3788.             b =
  3789.             b.TagLength - (a.stream.byteIndex - c);
  3790.             this.CodeTable = [];
  3791.             if (this.FontFlagsWideCodes) {
  3792.                 b = b / 2;
  3793.                 for (i = 0; i < b; i++) this.CodeTable.push(a.readUI16())
  3794.             } else {
  3795.                 b = b;
  3796.                 for (i = 0; i < b; i++) this.CodeTable.push(a.readUI8())
  3797.             }
  3798.         },
  3799.         evaluate: function (a) {
  3800.             this.GlyphShapeTable = a.fontsWithoutInfo[this.FontId].GlyphShapeTable;
  3801.             var b = (new fljs.swf.build.FontBuilder(this, a)).buildDef();
  3802.             a.defineFont2(this.FontId, this.GlyphShapeTable.length, b, this.FontName, this.FontFlagsBold, this.FontFlagsItalic, this.CodeTable)
  3803.         }
  3804.     });
  3805.     fljs.swf.tag.DefineShape3 = function () {};
  3806.     fljs.inherits(fljs.swf.tag.DefineShape3, fljs.swf.tag.DefineShape);
  3807.     fljs.addMethods(fljs.swf.tag.DefineShape3, {
  3808.         read: function (a) {
  3809.             a.beginContext(fljs.swf.tag.DefineShape3);
  3810.             this.ShapeId = a.readUI16();
  3811.             this.ShapeBounds = a.readRECT();
  3812.             a.stream.align();
  3813.             this.Shapes = a.readSHAPEWITHSTYLE();
  3814.             a.endContext()
  3815.         }
  3816.     });
  3817.     fljs.swf.tag.DoAction = function () {};
  3818.     fljs.addMethods(fljs.swf.tag.DoAction, {
  3819.         read: function (a, b) {
  3820.             this.Actions = a.readActionRecords(b.TagLength)
  3821.         },
  3822.         evaluate: function (a, b, c, d) {
  3823.             a.doActions(d, this.Actions)
  3824.         }
  3825.     });
  3826.     fljs.swf.tag.Protect = function () {};
  3827.     fljs.addMethods(fljs.swf.tag.Protect, {
  3828.         read: function (a, b) {
  3829.             a.skipBytes(b.TagLength)
  3830.         },
  3831.         evaluate: function () {}
  3832.     });
  3833.     flash.display.FrameLabel = function () {};
  3834.     fljs.swf.tag.DefineButton2 = function () {};
  3835.     fljs.addMethods(fljs.swf.tag.DefineButton2, {
  3836.         read: function (a, b) {
  3837.             var c = a.stream.byteIndex;
  3838.             a.context = fljs.swf.tag.DefineButton2;
  3839.             this.ButtonId = a.readUI16();
  3840.             a.readUB(7);
  3841.             this.TrackAsMenu = a.readUB(1);
  3842.             this.ActionOffset = a.readUI16();
  3843.             this.Characters = a.readButtonRecords();
  3844.             this.Actions = this.ActionOffset ? a.readButtonCondActions(b.TagLength - (a.stream.byteIndex - c)) : [];
  3845.             a.context = null
  3846.         },
  3847.         evaluate: function (a) {
  3848.             a.addDefinition(this, this.ButtonId)
  3849.         },
  3850.         build: function (a, b) {
  3851.             if (b && b.__default) b = null;
  3852.             var c = new flash.display.MovieClip;
  3853.             c.def = this;
  3854.             c.setEnabled(true);
  3855.             c.trackAsMenu = this.TrackAsMenu;
  3856.             c.__buttonActions = this.Actions;
  3857.             var d = [["ButtonStateUp", "up"], ["ButtonStateDown", "down"], ["ButtonStateOver", "over"], ["ButtonStateHitTest", "hitTest"]],
  3858.                 e = new flash.display.Scene;
  3859.             e.labels = [];
  3860.             e.name = "Scene 1";
  3861.             e.numFrames = 3;
  3862.             c.frameData_ = [];
  3863.             c.labels_ = {};
  3864.             var f, g = 0;
  3865.             for (var j in d) {
  3866.                 var h = d[j][0],
  3867.                     m = d[j][1];
  3868.                 f = null;
  3869.                 for (var k in this.Characters) {
  3870.                     var l = this.Characters[k];
  3871.         &nb