(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
module.exports = { "default": require("core-js/library/fn/get-iterator"), __esModule: true };
},{"core-js/library/fn/get-iterator":6}],2:[function(require,module,exports){
module.exports = { "default": require("core-js/library/fn/object/define-property"), __esModule: true };
},{"core-js/library/fn/object/define-property":7}],3:[function(require,module,exports){
module.exports = { "default": require("core-js/library/fn/object/keys"), __esModule: true };
},{"core-js/library/fn/object/keys":8}],4:[function(require,module,exports){
"use strict";

exports.__esModule = true;

exports.default = function (instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
};
},{}],5:[function(require,module,exports){
"use strict";

exports.__esModule = true;

var _defineProperty = require("../core-js/object/define-property");

var _defineProperty2 = _interopRequireDefault(_defineProperty);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

exports.default = function () {
  function defineProperties(target, props) {
    for (var i = 0; i < props.length; i++) {
      var descriptor = props[i];
      descriptor.enumerable = descriptor.enumerable || false;
      descriptor.configurable = true;
      if ("value" in descriptor) descriptor.writable = true;
      (0, _defineProperty2.default)(target, descriptor.key, descriptor);
    }
  }

  return function (Constructor, protoProps, staticProps) {
    if (protoProps) defineProperties(Constructor.prototype, protoProps);
    if (staticProps) defineProperties(Constructor, staticProps);
    return Constructor;
  };
}();
},{"../core-js/object/define-property":2}],6:[function(require,module,exports){
require('../modules/web.dom.iterable');
require('../modules/es6.string.iterator');
module.exports = require('../modules/core.get-iterator');
},{"../modules/core.get-iterator":57,"../modules/es6.string.iterator":61,"../modules/web.dom.iterable":62}],7:[function(require,module,exports){
require('../../modules/es6.object.define-property');
var $Object = require('../../modules/_core').Object;
module.exports = function defineProperty(it, key, desc){
  return $Object.defineProperty(it, key, desc);
};
},{"../../modules/_core":15,"../../modules/es6.object.define-property":59}],8:[function(require,module,exports){
require('../../modules/es6.object.keys');
module.exports = require('../../modules/_core').Object.keys;
},{"../../modules/_core":15,"../../modules/es6.object.keys":60}],9:[function(require,module,exports){
module.exports = function(it){
  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
  return it;
};
},{}],10:[function(require,module,exports){
module.exports = function(){ /* empty */ };
},{}],11:[function(require,module,exports){
var isObject = require('./_is-object');
module.exports = function(it){
  if(!isObject(it))throw TypeError(it + ' is not an object!');
  return it;
};
},{"./_is-object":29}],12:[function(require,module,exports){
// false -> Array#indexOf
// true  -> Array#includes
var toIObject = require('./_to-iobject')
  , toLength  = require('./_to-length')
  , toIndex   = require('./_to-index');
module.exports = function(IS_INCLUDES){
  return function($this, el, fromIndex){
    var O      = toIObject($this)
      , length = toLength(O.length)
      , index  = toIndex(fromIndex, length)
      , value;
    // Array#includes uses SameValueZero equality algorithm
    if(IS_INCLUDES && el != el)while(length > index){
      value = O[index++];
      if(value != value)return true;
    // Array#toIndex ignores holes, Array#includes - not
    } else for(;length > index; index++)if(IS_INCLUDES || index in O){
      if(O[index] === el)return IS_INCLUDES || index || 0;
    } return !IS_INCLUDES && -1;
  };
};
},{"./_to-index":48,"./_to-iobject":50,"./_to-length":51}],13:[function(require,module,exports){
// getting tag from 19.1.3.6 Object.prototype.toString()
var cof = require('./_cof')
  , TAG = require('./_wks')('toStringTag')
  // ES3 wrong here
  , ARG = cof(function(){ return arguments; }()) == 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function(it, key){
  try {
    return it[key];
  } catch(e){ /* empty */ }
};

module.exports = function(it){
  var O, T, B;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
    // builtinTag case
    : ARG ? cof(O)
    // ES3 arguments fallback
    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};
},{"./_cof":14,"./_wks":55}],14:[function(require,module,exports){
var toString = {}.toString;

module.exports = function(it){
  return toString.call(it).slice(8, -1);
};
},{}],15:[function(require,module,exports){
var core = module.exports = {version: '2.4.0'};
if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
},{}],16:[function(require,module,exports){
// optional / simple context binding
var aFunction = require('./_a-function');
module.exports = function(fn, that, length){
  aFunction(fn);
  if(that === undefined)return fn;
  switch(length){
    case 1: return function(a){
      return fn.call(that, a);
    };
    case 2: return function(a, b){
      return fn.call(that, a, b);
    };
    case 3: return function(a, b, c){
      return fn.call(that, a, b, c);
    };
  }
  return function(/* ...args */){
    return fn.apply(that, arguments);
  };
};
},{"./_a-function":9}],17:[function(require,module,exports){
// 7.2.1 RequireObjectCoercible(argument)
module.exports = function(it){
  if(it == undefined)throw TypeError("Can't call method on  " + it);
  return it;
};
},{}],18:[function(require,module,exports){
// Thank's IE8 for his funny defineProperty
module.exports = !require('./_fails')(function(){
  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
});
},{"./_fails":22}],19:[function(require,module,exports){
var isObject = require('./_is-object')
  , document = require('./_global').document
  // in old IE typeof document.createElement is 'object'
  , is = isObject(document) && isObject(document.createElement);
module.exports = function(it){
  return is ? document.createElement(it) : {};
};
},{"./_global":23,"./_is-object":29}],20:[function(require,module,exports){
// IE 8- don't enum bug keys
module.exports = (
  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');
},{}],21:[function(require,module,exports){
var global    = require('./_global')
  , core      = require('./_core')
  , ctx       = require('./_ctx')
  , hide      = require('./_hide')
  , PROTOTYPE = 'prototype';

var $export = function(type, name, source){
  var IS_FORCED = type & $export.F
    , IS_GLOBAL = type & $export.G
    , IS_STATIC = type & $export.S
    , IS_PROTO  = type & $export.P
    , IS_BIND   = type & $export.B
    , IS_WRAP   = type & $export.W
    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
    , expProto  = exports[PROTOTYPE]
    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
    , key, own, out;
  if(IS_GLOBAL)source = name;
  for(key in source){
    // contains in native
    own = !IS_FORCED && target && target[key] !== undefined;
    if(own && key in exports)continue;
    // export native or passed
    out = own ? target[key] : source[key];
    // prevent global pollution for namespaces
    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
    // bind timers to global for call from export context
    : IS_BIND && own ? ctx(out, global)
    // wrap global constructors for prevent change them in library
    : IS_WRAP && target[key] == out ? (function(C){
      var F = function(a, b, c){
        if(this instanceof C){
          switch(arguments.length){
            case 0: return new C;
            case 1: return new C(a);
            case 2: return new C(a, b);
          } return new C(a, b, c);
        } return C.apply(this, arguments);
      };
      F[PROTOTYPE] = C[PROTOTYPE];
      return F;
    // make static versions for prototype methods
    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
    if(IS_PROTO){
      (exports.virtual || (exports.virtual = {}))[key] = out;
      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
    }
  }
};
// type bitmap
$export.F = 1;   // forced
$export.G = 2;   // global
$export.S = 4;   // static
$export.P = 8;   // proto
$export.B = 16;  // bind
$export.W = 32;  // wrap
$export.U = 64;  // safe
$export.R = 128; // real proto method for `library` 
module.exports = $export;
},{"./_core":15,"./_ctx":16,"./_global":23,"./_hide":25}],22:[function(require,module,exports){
module.exports = function(exec){
  try {
    return !!exec();
  } catch(e){
    return true;
  }
};
},{}],23:[function(require,module,exports){
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
},{}],24:[function(require,module,exports){
var hasOwnProperty = {}.hasOwnProperty;
module.exports = function(it, key){
  return hasOwnProperty.call(it, key);
};
},{}],25:[function(require,module,exports){
var dP         = require('./_object-dp')
  , createDesc = require('./_property-desc');
module.exports = require('./_descriptors') ? function(object, key, value){
  return dP.f(object, key, createDesc(1, value));
} : function(object, key, value){
  object[key] = value;
  return object;
};
},{"./_descriptors":18,"./_object-dp":36,"./_property-desc":42}],26:[function(require,module,exports){
module.exports = require('./_global').document && document.documentElement;
},{"./_global":23}],27:[function(require,module,exports){
module.exports = !require('./_descriptors') && !require('./_fails')(function(){
  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;
});
},{"./_descriptors":18,"./_dom-create":19,"./_fails":22}],28:[function(require,module,exports){
// fallback for non-array-like ES3 and non-enumerable old V8 strings
var cof = require('./_cof');
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
  return cof(it) == 'String' ? it.split('') : Object(it);
};
},{"./_cof":14}],29:[function(require,module,exports){
module.exports = function(it){
  return typeof it === 'object' ? it !== null : typeof it === 'function';
};
},{}],30:[function(require,module,exports){
'use strict';
var create         = require('./_object-create')
  , descriptor     = require('./_property-desc')
  , setToStringTag = require('./_set-to-string-tag')
  , IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
require('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });

module.exports = function(Constructor, NAME, next){
  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
  setToStringTag(Constructor, NAME + ' Iterator');
};
},{"./_hide":25,"./_object-create":35,"./_property-desc":42,"./_set-to-string-tag":44,"./_wks":55}],31:[function(require,module,exports){
'use strict';
var LIBRARY        = require('./_library')
  , $export        = require('./_export')
  , redefine       = require('./_redefine')
  , hide           = require('./_hide')
  , has            = require('./_has')
  , Iterators      = require('./_iterators')
  , $iterCreate    = require('./_iter-create')
  , setToStringTag = require('./_set-to-string-tag')
  , getPrototypeOf = require('./_object-gpo')
  , ITERATOR       = require('./_wks')('iterator')
  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
  , FF_ITERATOR    = '@@iterator'
  , KEYS           = 'keys'
  , VALUES         = 'values';

var returnThis = function(){ return this; };

module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
  $iterCreate(Constructor, NAME, next);
  var getMethod = function(kind){
    if(!BUGGY && kind in proto)return proto[kind];
    switch(kind){
      case KEYS: return function keys(){ return new Constructor(this, kind); };
      case VALUES: return function values(){ return new Constructor(this, kind); };
    } return function entries(){ return new Constructor(this, kind); };
  };
  var TAG        = NAME + ' Iterator'
    , DEF_VALUES = DEFAULT == VALUES
    , VALUES_BUG = false
    , proto      = Base.prototype
    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
    , $default   = $native || getMethod(DEFAULT)
    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined
    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native
    , methods, key, IteratorPrototype;
  // Fix native
  if($anyNative){
    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));
    if(IteratorPrototype !== Object.prototype){
      // Set @@toStringTag to native iterators
      setToStringTag(IteratorPrototype, TAG, true);
      // fix for some old engines
      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
    }
  }
  // fix Array#{values, @@iterator}.name in V8 / FF
  if(DEF_VALUES && $native && $native.name !== VALUES){
    VALUES_BUG = true;
    $default = function values(){ return $native.call(this); };
  }
  // Define iterator
  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
    hide(proto, ITERATOR, $default);
  }
  // Plug for library
  Iterators[NAME] = $default;
  Iterators[TAG]  = returnThis;
  if(DEFAULT){
    methods = {
      values:  DEF_VALUES ? $default : getMethod(VALUES),
      keys:    IS_SET     ? $default : getMethod(KEYS),
      entries: $entries
    };
    if(FORCED)for(key in methods){
      if(!(key in proto))redefine(proto, key, methods[key]);
    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
  }
  return methods;
};
},{"./_export":21,"./_has":24,"./_hide":25,"./_iter-create":30,"./_iterators":33,"./_library":34,"./_object-gpo":38,"./_redefine":43,"./_set-to-string-tag":44,"./_wks":55}],32:[function(require,module,exports){
module.exports = function(done, value){
  return {value: value, done: !!done};
};
},{}],33:[function(require,module,exports){
module.exports = {};
},{}],34:[function(require,module,exports){
module.exports = true;
},{}],35:[function(require,module,exports){
// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
var anObject    = require('./_an-object')
  , dPs         = require('./_object-dps')
  , enumBugKeys = require('./_enum-bug-keys')
  , IE_PROTO    = require('./_shared-key')('IE_PROTO')
  , Empty       = function(){ /* empty */ }
  , PROTOTYPE   = 'prototype';

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function(){
  // Thrash, waste and sodomy: IE GC bug
  var iframe = require('./_dom-create')('iframe')
    , i      = enumBugKeys.length
    , lt     = '<'
    , gt     = '>'
    , iframeDocument;
  iframe.style.display = 'none';
  require('./_html').appendChild(iframe);
  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
  // createDict = iframe.contentWindow.Object;
  // html.removeChild(iframe);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
  iframeDocument.close();
  createDict = iframeDocument.F;
  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];
  return createDict();
};

module.exports = Object.create || function create(O, Properties){
  var result;
  if(O !== null){
    Empty[PROTOTYPE] = anObject(O);
    result = new Empty;
    Empty[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = createDict();
  return Properties === undefined ? result : dPs(result, Properties);
};

},{"./_an-object":11,"./_dom-create":19,"./_enum-bug-keys":20,"./_html":26,"./_object-dps":37,"./_shared-key":45}],36:[function(require,module,exports){
var anObject       = require('./_an-object')
  , IE8_DOM_DEFINE = require('./_ie8-dom-define')
  , toPrimitive    = require('./_to-primitive')
  , dP             = Object.defineProperty;

exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if(IE8_DOM_DEFINE)try {
    return dP(O, P, Attributes);
  } catch(e){ /* empty */ }
  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
  if('value' in Attributes)O[P] = Attributes.value;
  return O;
};
},{"./_an-object":11,"./_descriptors":18,"./_ie8-dom-define":27,"./_to-primitive":53}],37:[function(require,module,exports){
var dP       = require('./_object-dp')
  , anObject = require('./_an-object')
  , getKeys  = require('./_object-keys');

module.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){
  anObject(O);
  var keys   = getKeys(Properties)
    , length = keys.length
    , i = 0
    , P;
  while(length > i)dP.f(O, P = keys[i++], Properties[P]);
  return O;
};
},{"./_an-object":11,"./_descriptors":18,"./_object-dp":36,"./_object-keys":40}],38:[function(require,module,exports){
// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
var has         = require('./_has')
  , toObject    = require('./_to-object')
  , IE_PROTO    = require('./_shared-key')('IE_PROTO')
  , ObjectProto = Object.prototype;

module.exports = Object.getPrototypeOf || function(O){
  O = toObject(O);
  if(has(O, IE_PROTO))return O[IE_PROTO];
  if(typeof O.constructor == 'function' && O instanceof O.constructor){
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectProto : null;
};
},{"./_has":24,"./_shared-key":45,"./_to-object":52}],39:[function(require,module,exports){
var has          = require('./_has')
  , toIObject    = require('./_to-iobject')
  , arrayIndexOf = require('./_array-includes')(false)
  , IE_PROTO     = require('./_shared-key')('IE_PROTO');

module.exports = function(object, names){
  var O      = toIObject(object)
    , i      = 0
    , result = []
    , key;
  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
  // Don't enum bug & hidden keys
  while(names.length > i)if(has(O, key = names[i++])){
    ~arrayIndexOf(result, key) || result.push(key);
  }
  return result;
};
},{"./_array-includes":12,"./_has":24,"./_shared-key":45,"./_to-iobject":50}],40:[function(require,module,exports){
// 19.1.2.14 / 15.2.3.14 Object.keys(O)
var $keys       = require('./_object-keys-internal')
  , enumBugKeys = require('./_enum-bug-keys');

module.exports = Object.keys || function keys(O){
  return $keys(O, enumBugKeys);
};
},{"./_enum-bug-keys":20,"./_object-keys-internal":39}],41:[function(require,module,exports){
// most Object methods by ES6 should accept primitives
var $export = require('./_export')
  , core    = require('./_core')
  , fails   = require('./_fails');
module.exports = function(KEY, exec){
  var fn  = (core.Object || {})[KEY] || Object[KEY]
    , exp = {};
  exp[KEY] = exec(fn);
  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
};
},{"./_core":15,"./_export":21,"./_fails":22}],42:[function(require,module,exports){
module.exports = function(bitmap, value){
  return {
    enumerable  : !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable    : !(bitmap & 4),
    value       : value
  };
};
},{}],43:[function(require,module,exports){
module.exports = require('./_hide');
},{"./_hide":25}],44:[function(require,module,exports){
var def = require('./_object-dp').f
  , has = require('./_has')
  , TAG = require('./_wks')('toStringTag');

module.exports = function(it, tag, stat){
  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
};
},{"./_has":24,"./_object-dp":36,"./_wks":55}],45:[function(require,module,exports){
var shared = require('./_shared')('keys')
  , uid    = require('./_uid');
module.exports = function(key){
  return shared[key] || (shared[key] = uid(key));
};
},{"./_shared":46,"./_uid":54}],46:[function(require,module,exports){
var global = require('./_global')
  , SHARED = '__core-js_shared__'
  , store  = global[SHARED] || (global[SHARED] = {});
module.exports = function(key){
  return store[key] || (store[key] = {});
};
},{"./_global":23}],47:[function(require,module,exports){
var toInteger = require('./_to-integer')
  , defined   = require('./_defined');
// true  -> String#at
// false -> String#codePointAt
module.exports = function(TO_STRING){
  return function(that, pos){
    var s = String(defined(that))
      , i = toInteger(pos)
      , l = s.length
      , a, b;
    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;
    a = s.charCodeAt(i);
    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
      ? TO_STRING ? s.charAt(i) : a
      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
  };
};
},{"./_defined":17,"./_to-integer":49}],48:[function(require,module,exports){
var toInteger = require('./_to-integer')
  , max       = Math.max
  , min       = Math.min;
module.exports = function(index, length){
  index = toInteger(index);
  return index < 0 ? max(index + length, 0) : min(index, length);
};
},{"./_to-integer":49}],49:[function(require,module,exports){
// 7.1.4 ToInteger
var ceil  = Math.ceil
  , floor = Math.floor;
module.exports = function(it){
  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};
},{}],50:[function(require,module,exports){
// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = require('./_iobject')
  , defined = require('./_defined');
module.exports = function(it){
  return IObject(defined(it));
};
},{"./_defined":17,"./_iobject":28}],51:[function(require,module,exports){
// 7.1.15 ToLength
var toInteger = require('./_to-integer')
  , min       = Math.min;
module.exports = function(it){
  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};
},{"./_to-integer":49}],52:[function(require,module,exports){
// 7.1.13 ToObject(argument)
var defined = require('./_defined');
module.exports = function(it){
  return Object(defined(it));
};
},{"./_defined":17}],53:[function(require,module,exports){
// 7.1.1 ToPrimitive(input [, PreferredType])
var isObject = require('./_is-object');
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function(it, S){
  if(!isObject(it))return it;
  var fn, val;
  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
  throw TypeError("Can't convert object to primitive value");
};
},{"./_is-object":29}],54:[function(require,module,exports){
var id = 0
  , px = Math.random();
module.exports = function(key){
  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};
},{}],55:[function(require,module,exports){
var store      = require('./_shared')('wks')
  , uid        = require('./_uid')
  , Symbol     = require('./_global').Symbol
  , USE_SYMBOL = typeof Symbol == 'function';

var $exports = module.exports = function(name){
  return store[name] || (store[name] =
    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
};

$exports.store = store;
},{"./_global":23,"./_shared":46,"./_uid":54}],56:[function(require,module,exports){
var classof   = require('./_classof')
  , ITERATOR  = require('./_wks')('iterator')
  , Iterators = require('./_iterators');
module.exports = require('./_core').getIteratorMethod = function(it){
  if(it != undefined)return it[ITERATOR]
    || it['@@iterator']
    || Iterators[classof(it)];
};
},{"./_classof":13,"./_core":15,"./_iterators":33,"./_wks":55}],57:[function(require,module,exports){
var anObject = require('./_an-object')
  , get      = require('./core.get-iterator-method');
module.exports = require('./_core').getIterator = function(it){
  var iterFn = get(it);
  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');
  return anObject(iterFn.call(it));
};
},{"./_an-object":11,"./_core":15,"./core.get-iterator-method":56}],58:[function(require,module,exports){
'use strict';
var addToUnscopables = require('./_add-to-unscopables')
  , step             = require('./_iter-step')
  , Iterators        = require('./_iterators')
  , toIObject        = require('./_to-iobject');

// 22.1.3.4 Array.prototype.entries()
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
module.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){
  this._t = toIObject(iterated); // target
  this._i = 0;                   // next index
  this._k = kind;                // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
}, function(){
  var O     = this._t
    , kind  = this._k
    , index = this._i++;
  if(!O || index >= O.length){
    this._t = undefined;
    return step(1);
  }
  if(kind == 'keys'  )return step(0, index);
  if(kind == 'values')return step(0, O[index]);
  return step(0, [index, O[index]]);
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
Iterators.Arguments = Iterators.Array;

addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');
},{"./_add-to-unscopables":10,"./_iter-define":31,"./_iter-step":32,"./_iterators":33,"./_to-iobject":50}],59:[function(require,module,exports){
var $export = require('./_export');
// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});
},{"./_descriptors":18,"./_export":21,"./_object-dp":36}],60:[function(require,module,exports){
// 19.1.2.14 Object.keys(O)
var toObject = require('./_to-object')
  , $keys    = require('./_object-keys');

require('./_object-sap')('keys', function(){
  return function keys(it){
    return $keys(toObject(it));
  };
});
},{"./_object-keys":40,"./_object-sap":41,"./_to-object":52}],61:[function(require,module,exports){
'use strict';
var $at  = require('./_string-at')(true);

// 21.1.3.27 String.prototype[@@iterator]()
require('./_iter-define')(String, 'String', function(iterated){
  this._t = String(iterated); // target
  this._i = 0;                // next index
// 21.1.5.2.1 %StringIteratorPrototype%.next()
}, function(){
  var O     = this._t
    , index = this._i
    , point;
  if(index >= O.length)return {value: undefined, done: true};
  point = $at(O, index);
  this._i += point.length;
  return {value: point, done: false};
});
},{"./_iter-define":31,"./_string-at":47}],62:[function(require,module,exports){
require('./es6.array.iterator');
var global        = require('./_global')
  , hide          = require('./_hide')
  , Iterators     = require('./_iterators')
  , TO_STRING_TAG = require('./_wks')('toStringTag');

for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
  var NAME       = collections[i]
    , Collection = global[NAME]
    , proto      = Collection && Collection.prototype;
  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);
  Iterators[NAME] = Iterators.Array;
}
},{"./_global":23,"./_hide":25,"./_iterators":33,"./_wks":55,"./es6.array.iterator":58}],63:[function(require,module,exports){
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _keys = require("babel-runtime/core-js/object/keys");

var _keys2 = _interopRequireDefault(_keys);

var _getIterator2 = require("babel-runtime/core-js/get-iterator");

var _getIterator3 = _interopRequireDefault(_getIterator2);

var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");

var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);

var _createClass2 = require("babel-runtime/helpers/createClass");

var _createClass3 = _interopRequireDefault(_createClass2);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * Emitter
 */

var Emitter = function () {
  function Emitter() {
    (0, _classCallCheck3.default)(this, Emitter);

    this._data = {};
  }

  (0, _createClass3.default)(Emitter, [{
    key: "on",
    value: function on(name, data) {
      if (!name) return;
      if (!this._data[name]) {
        this._data[name] = {};
      }
      this._data[name] = data;
    }
  }, {
    key: "emit",
    value: function emit(name, method, context) {
      if (!name || !method) return;

      this._data[name].run(method, context);
    }
  }, {
    key: "broadcast",
    value: function broadcast(method, context) {
      if (!method) return;

      var _iteratorNormalCompletion = true;
      var _didIteratorError = false;
      var _iteratorError = undefined;

      try {
        for (var _iterator = (0, _getIterator3.default)((0, _keys2.default)(this._data)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
          var name = _step.value;

          this._data[name].run(method, context);
        }
      } catch (err) {
        _didIteratorError = true;
        _iteratorError = err;
      } finally {
        try {
          if (!_iteratorNormalCompletion && _iterator.return) {
            _iterator.return();
          }
        } finally {
          if (_didIteratorError) {
            throw _iteratorError;
          }
        }
      }
    }
  }, {
    key: "keys",
    value: function keys() {
      return (0, _keys2.default)(this._data);
    }
  }, {
    key: "is",
    value: function is(name) {
      return !!this._data[name];
    }
  }, {
    key: "get",
    value: function get(name) {
      return this._data[name];
    }
  }]);
  return Emitter;
}();

exports.default = Emitter;

},{"babel-runtime/core-js/get-iterator":1,"babel-runtime/core-js/object/keys":3,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],64:[function(require,module,exports){
'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _keys = require('babel-runtime/core-js/object/keys');

var _keys2 = _interopRequireDefault(_keys);

var _getIterator2 = require('babel-runtime/core-js/get-iterator');

var _getIterator3 = _interopRequireDefault(_getIterator2);

var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');

var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);

var _createClass2 = require('babel-runtime/helpers/createClass');

var _createClass3 = _interopRequireDefault(_createClass2);

var _Emitter = require('../class/_Emitter');

var _Emitter2 = _interopRequireDefault(_Emitter);

var _Subscriber = require('../class/_Subscriber');

var _Subscriber2 = _interopRequireDefault(_Subscriber);

var _RequestAnim = require('../class/_RequestAnim');

var _RequestAnim2 = _interopRequireDefault(_RequestAnim);

var _calc = require('../module/_calc');

var _calc2 = _interopRequireDefault(_calc);

var _help = require('../module/_help');

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var Flyby = function () {
  function Flyby(options) {
    (0, _classCallCheck3.default)(this, Flyby);

    this.enabled = false;
    this.mode = '';
    this.painting = false;

    this.startX = 0;
    this.startY = 0;
    this.ghostX = 0;
    this.ghostY = 0;
    this.currentX = 0;
    this.currentY = 0;
    this.distanceX = 0;
    this.distanceY = 0;
    this.distanceAngle = 0;
    this.invertX = 0;
    this.invertY = 0;
    this.originX = 0;
    this.originY = 0;
    this.between = 0;
    this.betweenX = 0;
    this.betweenY = 0;
    this.betweenAngle = 0;

    this.previousX = 0;
    this.previousY = 0;
    this.direction = '';
    this.directionX = '';
    this.directionY = '';

    this.targetElement = null; // <event.target>

    this.startTime = 0; // timestamp by OnStart
    this.elapsed = 0; // <endTime> - <startTime>
    this.ghostTime = 0; // previously <startTime>

    this.onStart = this.onStart.bind(this);
    this.onMove = this.onMove.bind(this);
    this.onEnd = this.onEnd.bind(this);
    this.update = this.update.bind(this);

    // In this element, that enabled to mouse and touch events.
    this.rangeElement = options.rangeElement || document;
    this._addEventListeners();

    // Browser painting update
    // call requestAnimationFrame
    this.paint = new _RequestAnim2.default();
    this.paint.tick = this.update;

    this.first = false;
    this.pinchOnDesktop = false;
    this.flickTime = 250;

    // event emitter
    this.emitter = new _Emitter2.default();
    this._initSubscribe(options.subscribers);

    // emit configuration
    this.emitter.broadcast('onConfig', this);
    this.subscriber = null;
  }

  (0, _createClass3.default)(Flyby, [{
    key: 'onStart',
    value: function onStart(event) {

      // set the flags to initialize
      this.enabled = true;
      this.painting = true;
      this.touched = event.touches ? true : false;
      this.first = true;
      this.pinchOnDesktop = false;

      // set the position to initalize
      this.startTime = Date.now();
      this.startX = (0, _help.pageX)(event);
      this.startY = (0, _help.pageY)(event);
      this.distanceX = 0;
      this.distanceY = 0;
      this.distanceAngle = 0;
      this.distance = 0;
      this.currentX = this.startX;
      this.currentY = this.startY;
      this.invertX = this.startX;
      this.invertY = this.startY;
      this.previousX = this.startX;
      this.previousY = this.startY;
      this.between = 0;
      this.betweenX = 0;
      this.betweenY = 0;
      this.betweenAngle = 0;
      this.direction = '';
      this.directionX = '';
      this.directionY = '';

      this.targetElement = event.target;

      if (!this.touched) {
        if (this.startTime - this.ghostTime < 750) {
          this.pinchOnDesktop = true;
        }
      }

      // find a target & subscriber
      this._find(event.target);
      // subscribe
      this._emit('onStart');

      // paint
      this.paint.cancel();
      this.paint.play();

      this.ghostTime = this.startTime;

      event.preventDefault();
    }
  }, {
    key: 'onMove',
    value: function onMove(event) {
      if (!this.enabled) return;
      if ((0, _help.hasTouches)(event, 2) || this.pinchOnDesktop) {
        this.mode = 'pinch';
      } else {
        this.mode = 'swipe';
      }

      this.currentX = (0, _help.pageX)(event);
      this.currentY = (0, _help.pageY)(event);

      if (this.mode === 'pinch') {
        this._invert(event);
        this._between();
      }

      this._distance();

      this.originX = this.currentX - parseInt(this.betweenX / 2, 10);
      this.originY = this.currentY - parseInt(this.betweenY / 2, 10);

      this._direction();

      this.targetElement = event.target;

      // check ignore list to subscribe
      if (!this._inIgnore(this.mode)) {

        if (this.first) {
          // do of only once on `onMove` method.
          this.direction = _calc2.default.which(this.distanceAngle);
        }

        if (this.mode !== 'swipe' || !this._inIgnore(this.direction)) {
          if (this.first) {
            this._emit('onOnce');
          } else {
            this._emit('on' + (0, _help.camel)(this.mode));
          }

          event.preventDefault();
        }
      }

      // to next step
      this.first = false;

      this.previousX = this.currentX;
      this.previousY = this.currentY;
    }
  }, {
    key: 'onEnd',
    value: function onEnd(event) {
      this.enabled = false;
      this.touched = false;
      this.elapsed = Date.now() - this.startTime;
      this.ghostX = this.startX;
      this.ghostY = this.startY;
      this.targetElement = event.target;

      if (this._isFlick(this.elapsed)) {
        this._emit('onFlick');
      }

      // element & subscriber
      this._emit('onEnd');
    }

    /**
     * update
     * Call in requestAnimationFrame
     * Related Paiting Dom is here.
     */

  }, {
    key: 'update',
    value: function update() {
      if (!this.painting) return;
      this.paint.play();
      // subscribe
      this._emit('onUpdate');
    }

    /**
     * invert
     * The posision is another one that is B.
     * @private
     * @param {Object} event<EventObject>
     */

  }, {
    key: '_invert',
    value: function _invert(event) {
      if (this.touched && event.touches[1]) {
        this.currentX = event.touches[0].pageX;
        this.currentY = event.touches[0].pageY;
        this.invertX = event.touches[1].pageX;
        this.invertY = event.touches[1].pageY;
      } else {
        this.invertX = this.ghostX;
        this.invertY = this.ghostY;
      }
    }

    /**
     * distance
     * @private
     */

  }, {
    key: '_distance',
    value: function _distance() {
      this.distanceX = this.currentX - this.startX;
      this.distanceY = this.currentY - this.startY;
      this.distance = _calc2.default.diagonal(this.distanceX, this.distanceY);
      this.distanceAngle = _calc2.default.angle(this.distanceY * -1, this.distanceX, true);
    }

    /**
     * between
     * Distance of between A and B
     * @private
     */

  }, {
    key: '_between',
    value: function _between() {
      this.betweenX = this.currentX - this.invertX;
      this.betweenY = this.currentY - this.invertY;
      this.between = _calc2.default.diagonal(this.betweenX, this.betweenY);
      this.betweenAngle = _calc2.default.angle(this.betweenY * -1, this.betweenX, true);
    }

    /**
     * direction
     * @private
     */

  }, {
    key: '_direction',
    value: function _direction() {
      if (this.currentX > this.previousX) {
        this.directionX = 'to right';
      } else if (this.currentX < this.previousX) {
        this.directionX = 'to left';
      }

      if (this.currentY > this.previousY) {
        this.directionY = 'to bottom';
      } else if (this.currentY < this.previousY) {
        this.directionY = 'to top';
      }
    }

    /**
     * emit
     * @private
     * @param {String} suffix
     * 指定された文字列をキャメルケースに変換し, on と結合してメソッド名にする
     * subscriber 内のメソッドを実行する
     */

  }, {
    key: '_emit',
    value: function _emit(method) {
      if (!method || !this.subscriber) return;
      this.emitter.emit(this.subscriber.selector, method, this);
    }

    /**
     * find
     * @private
     * @param {Object} node<HTMLElement>
     * 今回実行するべき subscriber を探します
     */

  }, {
    key: '_find',
    value: function _find(el) {
      var found = false;
      this.subscriber = null;

      // nodeTree を上方向に探索します
      while (el && !found) {

        if (el === (0, _help.documentElement)()) {
          return found;
        }

        var _iteratorNormalCompletion = true;
        var _didIteratorError = false;
        var _iteratorError = undefined;

        try {
          for (var _iterator = (0, _getIterator3.default)(this.emitter.keys()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
            var name = _step.value;
            var prefix = name.slice(0, 1);
            var selector = name.substr(1);


            if ((0, _help.matchElement)(el, selector)) {
              if (this.emitter.is(name)) {
                this.subscriber = this.emitter.get(name);
                this.subscriber.el = el;
                found = true;
                return found;
              }
            }
          }
        } catch (err) {
          _didIteratorError = true;
          _iteratorError = err;
        } finally {
          try {
            if (!_iteratorNormalCompletion && _iterator.return) {
              _iterator.return();
            }
          } finally {
            if (_didIteratorError) {
              throw _iteratorError;
            }
          }
        }

        el = el.parentNode;
      }

      return found;
    }

    /**
     * initSubscribe
     * @private
     */

  }, {
    key: '_initSubscribe',
    value: function _initSubscribe(subscribers) {
      if (subscribers) {
        var _iteratorNormalCompletion2 = true;
        var _didIteratorError2 = false;
        var _iteratorError2 = undefined;

        try {
          for (var _iterator2 = (0, _getIterator3.default)((0, _keys2.default)(subscribers)), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
            var name = _step2.value;

            this.emitter.on(name, new _Subscriber2.default(name, subscribers[name]));
          }
        } catch (err) {
          _didIteratorError2 = true;
          _iteratorError2 = err;
        } finally {
          try {
            if (!_iteratorNormalCompletion2 && _iterator2.return) {
              _iterator2.return();
            }
          } finally {
            if (_didIteratorError2) {
              throw _iteratorError2;
            }
          }
        }
      }
    }

    /**
     * The `str` includes in ignore list.
     * @param {String} str
     * @return {Boolean}
     */

  }, {
    key: '_inIgnore',
    value: function _inIgnore(str) {
      return this.subscriber.ignore.includes(str);
    }

    /**
     * is Flick?
     * @return {Boolean}
     */

  }, {
    key: '_isFlick',
    value: function _isFlick(elapsed) {
      return elapsed < this.flickTime && elapsed > 50;
    }

    /**
     * addEventListeners
     * @private
     */

  }, {
    key: '_addEventListeners',
    value: function _addEventListeners() {
      this.rangeElement.addEventListener('mousedown', this.onStart);
      this.rangeElement.addEventListener('mousemove', this.onMove);
      this.rangeElement.addEventListener('mouseup', this.onEnd);

      this.rangeElement.addEventListener('touchstart', this.onStart);
      this.rangeElement.addEventListener('touchmove', this.onMove);
      this.rangeElement.addEventListener('touchend', this.onEnd);
    }
  }]);
  return Flyby;
}();

exports.default = Flyby;

},{"../class/_Emitter":63,"../class/_RequestAnim":65,"../class/_Subscriber":66,"../module/_calc":68,"../module/_help":69,"babel-runtime/core-js/get-iterator":1,"babel-runtime/core-js/object/keys":3,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],65:[function(require,module,exports){
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");

var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);

var _createClass2 = require("babel-runtime/helpers/createClass");

var _createClass3 = _interopRequireDefault(_createClass2);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.setTimeout;
var cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.clearTimeout;

window.requestAnimationFrame = requestAnimationFrame;
window.cancelAnimationFrame = cancelAnimationFrame;

var ReqestAnim = function () {
  function ReqestAnim() {
    (0, _classCallCheck3.default)(this, ReqestAnim);

    this._id = null;
    this._tick = null;
  }

  (0, _createClass3.default)(ReqestAnim, [{
    key: "play",
    value: function play(callback) {
      var _this = this;

      this.id = requestAnimationFrame(function () {
        if (callback) callback();
        _this._tick();
      });
    }
  }, {
    key: "cancel",
    value: function cancel() {
      if (this._id != null) {
        cancelAnimationFrame(this._id);
      }
    }
  }, {
    key: "id",
    set: function set(id) {
      this._id = id;
    },
    get: function get() {
      return this._id;
    }
  }, {
    key: "tick",
    set: function set(callback) {
      this._tick = callback;
    }
  }]);
  return ReqestAnim;
}();

exports.default = ReqestAnim;

},{"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],66:[function(require,module,exports){
'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _keys = require('babel-runtime/core-js/object/keys');

var _keys2 = _interopRequireDefault(_keys);

var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');

var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);

var _createClass2 = require('babel-runtime/helpers/createClass');

var _createClass3 = _interopRequireDefault(_createClass2);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * Target
 * @member {String} _name
 * @member {HTMLElement} _el
 * @member {Object} _methods
 * @member {Array} _ignore
 */

var Subscriber = function () {
  function Subscriber(name, body) {
    (0, _classCallCheck3.default)(this, Subscriber);

    this._name = '';
    this._selector = '';
    this._element = null;
    this._methods = this._defaultMethods();
    this._ignore = [];
    this._scope = {};

    this.name = name.replace(/^[.#]/, '');
    this.selector = name;
    this.ignore = body.ignore;
    this.methods = body;
  }

  (0, _createClass3.default)(Subscriber, [{
    key: 'run',
    value: function run(methodName, context) {
      if (this._methods[methodName]) {
        this._methods[methodName].bind(context)(this._scope, this._elementement);
      }
    }
  }, {
    key: '_defaultMethods',
    value: function _defaultMethods() {
      var noop = function noop() {};
      var methods = ['Config', 'Start', 'Once', 'Swipe', 'Pinch', 'Flick', 'End', 'Update'];

      return function (res) {
        methods.forEach(function (name) {
          var key = ['on', name].join('');
          res[key] = noop;
        });
        return res;
      }({});
    }
  }, {
    key: 'name',
    set: function set(str) {
      this._name = str;
    },
    get: function get() {
      return this._name;
    }
  }, {
    key: 'selector',
    set: function set(str) {
      this._selector = str;
    },
    get: function get() {
      return this._selector;
    }
  }, {
    key: 'methods',
    set: function set(obj) {
      var _this = this;

      (0, _keys2.default)(obj).forEach(function (key) {
        if (typeof obj[key] === 'function') {
          _this._methods[key] = obj[key];
        }
      });
    },
    get: function get() {
      return this._methods;
    }
  }, {
    key: 'ignore',
    set: function set(array) {
      this._ignore = array || [];
    },
    get: function get() {
      return this._ignore;
    }
  }, {
    key: 'el',
    set: function set(element) {
      this._element = element;
    },
    get: function get() {
      return this._element;
    }
  }]);
  return Subscriber;
}();

exports.default = Subscriber;

},{"babel-runtime/core-js/object/keys":3,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],67:[function(require,module,exports){
'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _Flyby = require('./class/_Flyby');

var _Flyby2 = _interopRequireDefault(_Flyby);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

exports.default = _Flyby2.default; /**
                                    * NOTE: Positions declarations
                                    * Start - 始点 <x, y>
                                    * End - 終点 <x, y> **不要?**
                                    * Current - 現在地 <x, y>
                                    * Distance - 始点から現在地への距離 <x, y> [swipe]
                                    * Invert - 2つ目の始点 <x, y> [pinch]
                                    * Between - Start と Invert の距離 <d> [pinch]
                                    * Origin - Start と Invert の開始時の中間地点 <x, y> [pinch]
                                    * Offset - 対象ノードの座標 <x, y> **外側でやる**
                                    */

/**
 * NOTE: API methods
 * onConfig(scope)
 * onStart(scope, element)
 * onEnd(scope, element)
 * onFirstStep(scope, element)
 * onPinch(scope, element)
 * onSwipe(scope, element)
 * onFlick(scope, element)
 * onUpdate(scope, element)
 * ignore [x, y, swipe, pinch]
 */

},{"./class/_Flyby":64}],68:[function(require,module,exports){
'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _help = require('./_help');

exports.default = function () {
  return { degree: degree, radian: radian, angle: angle, diagonal: diagonal, which: which };
}();

/**
 * diagonal
 * @param {Number} x
 * @param {Number} y
 * @return {Number} d
 */


function diagonal(x, y) {
  return parseInt((0, _help.sqrt)((0, _help.pow)(x, 2) + (0, _help.pow)(y, 2)));
}

/**
 * Wrapped `Math.atan2`
 * @private
 * @param {Number} y
 * @param {Number} x
 */
function angle(y, x) {
  var toDegree = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];

  if (toDegree) {
    return degree((0, _help.atan2)(y, x));
  }
  return (0, _help.atan2)(y, x);
}

/**
 * which
 * swipe の軸の向きを検出します
 * @return {String}
 */
function which(angle) {
  angle = (0, _help.abs)(angle);
  if (angle < 180 + 5 && angle > 180 - 5 || angle < 10) {
    return 'x';
  }
  return 'y';
}

/**
 * degree
 * The radian convert to degree.
 * @private
 * @param {Number} radian
 * @param {Number} degree
 */
function degree(radian) {
  return radian * 180 / _help.PI;
}

/**
 * radian
 * The degree convert to radian
 * @private
 * @param {Number} degree
 * @return {Number} radian
 */
function radian(degree) {
  return degree * _help.PI / 180;
}

},{"./_help":69}],69:[function(require,module,exports){
'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.camel = camel;
exports.hasClass = hasClass;
exports.hasId = hasId;
exports.matchElement = matchElement;
exports.documentElement = documentElement;
exports.pageX = pageX;
exports.pageY = pageY;
exports.touches = touches;
exports.hasTouches = hasTouches;
exports.noop = noop;
/**
 * help.js
 */

var PI = Math.PI;
var sqrt = Math.sqrt;
var atan2 = Math.atan2;
var abs = Math.abs;
var pow = Math.pow;
exports.PI = PI;
exports.sqrt = sqrt;
exports.atan2 = atan2;
exports.abs = abs;
exports.pow = pow;
function camel(str) {
  return [str.substr(0, 1).toUpperCase(), str.substr(1)].join('');
}

function hasClass(el, selector) {
  return el.classList.contains(selector);
}

function hasId(el, selector) {
  return el.getAttribute('id') === selector;
}

function matchElement(el, selector) {
  return hasClass(el, selector) || hasId(el, selector);
}

function documentElement() {
  return document.documentElement;
}

/**
 * pageX
 * @private
 * @param {Object} event<EventObject>
 */
function pageX(event) {
  if (event.pageX != null) {
    return event.pageX;
  }
  return event.touches[0].pageX;
}

/**
 * pageY
 * @private
 * @param {Object} event<EventObject>
 */
function pageY(event) {
  if (event.pageY != null) {
    return event.pageY;
  }
  return event.touches[0].pageY;
}

/**
 * touches
 * @param {Object} event<EventObject>
 * @return {Boolean}
 * Event オブジェクトから touches 抽出して返す
 */
function touches(event) {
  return event.originalEvent ? event.originalEvent.touches : event.touches;
}

/**
 * hasTouches
 * @private
 * @param {Object} event<EventObject>
 * @param {Number} length
 * @return {Boolean}
 */
function hasTouches(event, length) {
  var _touches = touches(event);
  if (_touches != null && _touches.length === length) {
    return true;
  }
  return false;
}

/**
 * No operation
 */
function noop() {
  return;
}

},{}]},{},[67]);
