text: (function(){
  /**
   * using AMD (Asynchronous Module Definition) API with OzJS
   * see http://ozjs.org for details
   *
   * Copyright (C) 2010-2012, Dexter.Yy, MIT License
   * vim: et:ts=4:sw=4:sts=4
   */
  var es5 = require('./es5');
  var _ = require('./mix');
  
      var mix = _.mix;
  
      function _apply(base, self, args){
          return base.apply(self, args);
      }
  
      exports.construct = function(base, mixes, factory){
          if (mixes && !Array.isArray(mixes)) {
              factory = mixes;
          }
          if (!factory) {
              factory = function(){
                  this.superConstructor.apply(this, arguments);
              };
          }
          var proto = Object.create(base.prototype),
              supr = Object.create(base.prototype),
              constructor = function(){
                  var self = this;
                  this.constructor = constructor;
                  this.superConstructor = function(){
                      _apply.prototype = base.prototype;
                      var su = new _apply(base, self, arguments);
                      for (var i in su) {
                          if (!self[i]) {
                              self[i] = supr[i] = su[i];
                          }
                      }
                  };
                  this.superClass = supr;
                  return factory.apply(this, arguments);
              };
          constructor.prototype = proto;
          if (mixes) {
              mixes = mix.apply(this, mixes);
              mix(proto, mixes);
              mix(supr, mixes);
          }
          return constructor;
      };
  
  
  
  })();