/*
 Copyright (C) Federico Zivolo 2017
 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
 */
(function(e, t) {
	'object' == typeof exports && 'undefined' != typeof module ? module.exports = t() : 'function' == typeof define && define.amd ? define( t ) : e.Popper = t()
})(
	this,
	function() {
		'use strict';

		function e(e) {
			return e && '[object Function]' === {}.toString.call( e )
		}

		function t(e, t) {
			if (1 !== e.nodeType) {
				return [];
			}
			var o = window.getComputedStyle( e, null );
			return t ? o[t] : o
		}

		function o(e) {
			return 'HTML' === e.nodeName ? e : e.parentNode || e.host
		}

		function n(e) {
			if ( ! e || -1 !== ['HTML', 'BODY', '#document'].indexOf( e.nodeName )) {
				return window.document.body;
			}
			var i = t( e ),
			r     = i.overflow,
			p     = i.overflowX,
			s     = i.overflowY;
			return /(auto|scroll)/.test( r + s + p ) ? e : n( o( e ) )
		}

		function r(e) {
			var o = e && e.offsetParent,
			i     = o && o.nodeName;
			return i && 'BODY' !== i && 'HTML' !== i ? -1 !== ['TD', 'TABLE'].indexOf( o.nodeName ) && 'static' === t( o, 'position' ) ? r( o ) : o : window.document.documentElement
		}

		function p(e) {
			var t = e.nodeName;
			return 'BODY' !== t && ('HTML' === t || r( e.firstElementChild ) === e)
		}

		function s(e) {
			return null === e.parentNode ? e : s( e.parentNode )
		}

		function d(e, t) {
			if ( ! e || ! e.nodeType || ! t || ! t.nodeType) {
				return window.document.documentElement;
			}
			var o = e.compareDocumentPosition( t ) & Node.DOCUMENT_POSITION_FOLLOWING,
			i     = o ? e : t,
			n     = o ? t : e,
			a     = document.createRange();
			a.setStart( i, 0 ), a.setEnd( n, 0 );
			var f = a.commonAncestorContainer;
			if (e !== f && t !== f || i.contains( n )) {
				return p( f ) ? f : r( f );
			}
			var l = s( e );
			return l.host ? d( l.host, t ) : d( e, s( t ).host )
		}

		function a(e) {
			var t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 'top',
			o     = 'top' === t ? 'scrollTop' : 'scrollLeft',
			i     = e.nodeName;
			if ('BODY' === i || 'HTML' === i) {
				var n = window.document.documentElement,
				r     = window.document.scrollingElement || n;
				return r[o]
			}
			return e[o]
		}

		function f(e, t) {
			var o         = 2 < arguments.length && void 0 !== arguments[2] && arguments[2],
			i             = a( t, 'top' ),
			n             = a( t, 'left' ),
			r             = o ? -1 : 1;
			return e.top += i * r, e.bottom += i * r, e.left += n * r, e.right += n * r, e
		}

		function l(e, t) {
			var o = 'x' === t ? 'Left' : 'Top',
			i     = 'Left' == o ? 'Right' : 'Bottom';
			return +e['border' + o + 'Width'].split( 'px' )[0] + +e['border' + i + 'Width'].split( 'px' )[0]
		}

		function m(e, t, o, i) {
			return _( t['offset' + e], o['client' + e], o['offset' + e], ie() ? o['offset' + e] + i['margin' + ('Height' === e ? 'Top' : 'Left')] + i['margin' + ('Height' === e ? 'Bottom' : 'Right')] : 0 )
		}

		function h() {
			var e = window.document.body,
			t     = window.document.documentElement,
			o     = ie() && window.getComputedStyle( t );
			return {
				height: m( 'Height', e, t, o ),
				width: m( 'Width', e, t, o )
			}
		}

		function c(e) {
			return se(
				{},
				e,
				{
					right: e.left + e.width,
					bottom: e.top + e.height
				}
			)
		}

		function g(e) {
			var o = {};
			if (ie()) {
				try {
								o      = e.getBoundingClientRect();
								var i  = a( e, 'top' ),
					n                  = a( e, 'left' );
								o.top += i, o.left += n, o.bottom += i, o.right += n
				} catch (e) {
				} } else {
				o = e.getBoundingClientRect();
				}
				var r = {
					left: o.left,
					top: o.top,
					width: o.right - o.left,
					height: o.bottom - o.top
			},
			p         = 'HTML' === e.nodeName ? h() : {},
			s         = p.width || e.clientWidth || r.right - r.left,
			d         = p.height || e.clientHeight || r.bottom - r.top,
			f         = e.offsetWidth - s,
			m         = e.offsetHeight - d;
			if (f || m) {
				var g = t( e );
				f    -= l( g, 'x' ), m -= l( g, 'y' ), r.width -= f, r.height -= m
			}
			return c( r )
		}

		function u(e, o) {
			var i = ie(),
			r     = 'HTML' === o.nodeName,
			p     = g( e ),
			s     = g( o ),
			d     = n( e ),
			a     = t( o ),
			l     = +a.borderTopWidth.split( 'px' )[0],
			m     = +a.borderLeftWidth.split( 'px' )[0],
			h     = c(
				{
					top: p.top - s.top - l,
					left: p.left - s.left - m,
					width: p.width,
					height: p.height
				}
			);
			if (h.marginTop = 0, h.marginLeft = 0, ! i && r) {
				var u  = +a.marginTop.split( 'px' )[0],
					b  = +a.marginLeft.split( 'px' )[0];
				h.top -= l - u, h.bottom -= l - u, h.left -= m - b, h.right -= m - b, h.marginTop = u, h.marginLeft = b
			}
			return (i ? o.contains( d ) : o === d && 'BODY' !== d.nodeName) && (h = f( h, o )), h
		}

		function b(e) {
			var t = window.document.documentElement,
			o     = u( e, t ),
			i     = _( t.clientWidth, window.innerWidth || 0 ),
			n     = _( t.clientHeight, window.innerHeight || 0 ),
			r     = a( t ),
			p     = a( t, 'left' ),
			s     = {
				top: r - o.top + o.marginTop,
				left: p - o.left + o.marginLeft,
				width: i,
				height: n
			};
			return c( s )
		}

		function y(e) {
			var i = e.nodeName;
			return 'BODY' === i || 'HTML' === i ? ! 1 : 'fixed' === t( e, 'position' ) || y( o( e ) )
		}

		function w(e, t, i, r) {
			var p = {
				top: 0,
				left: 0
			},
			s     = d( e, t );
			if ('viewport' === r) {
				p = b( s );
			} else {
				var a;
				'scrollParent' === r ? (a = n( o( e ) ), 'BODY' === a.nodeName && (a = window.document.documentElement)) : 'window' === r ? a = window.document.documentElement : a = r;
				var f                     = u( a, s );
				if ('HTML' === a.nodeName && ! y( s )) {
					var l  = h(),
					m      = l.height,
					c      = l.width;
					p.top += f.top - f.marginTop, p.bottom = m + f.top, p.left += f.left - f.marginLeft, p.right = c + f.left
				} else {
					p = f
				}
			}
			return p.left += i, p.top += i, p.right -= i, p.bottom -= i, p
		}

		function v(e) {
			var t = e.width,
			o     = e.height;
			return t * o
		}

		function E(e, t, o, i, n) {
			var r = 5 < arguments.length && void 0 !== arguments[5] ? arguments[5] : 0;
			if (-1 === e.indexOf( 'auto' )) {
				return e;
			}
			var p = w( o, i, r, n ),
			s     = {
				top: {
					width: p.width,
					height: t.top - p.top
				},
				right: {
					width: p.right - t.right,
					height: p.height
				},
				bottom: {
					width: p.width,
					height: p.bottom - t.bottom
				},
				left: {
					width: t.left - p.left,
					height: p.height
				}
			},
			d     = Object.keys( s ).map(
				function(e) {
					return se(
						{
							key: e
						},
						s[e],
						{
							area: v( s[e] )
						}
					)
				}
			).sort(
				function(e, t) {
						return t.area - e.area
				}
			),
				a = d.filter(
					function(e) {
						var t = e.width,
						i     = e.height;
						return t >= o.clientWidth && i >= o.clientHeight
					}
				),
				f = 0 < a.length ? a[0].key : d[0].key,
				l = e.split( '-' )[1];
			return f + (l ? '-' + l : '')
		}

		function x(e, t, o) {
			var i = d( t, o );
			return u( o, i )
		}

		function O(e) {
			var t = window.getComputedStyle( e ),
			o     = parseFloat( t.marginTop ) + parseFloat( t.marginBottom ),
			i     = parseFloat( t.marginLeft ) + parseFloat( t.marginRight ),
			n     = {
				width: e.offsetWidth + i,
				height: e.offsetHeight + o
			};
			return n
		}

		function L(e) {
			var t = {
				left: 'right',
				right: 'left',
				bottom: 'top',
				top: 'bottom'
			};
			return e.replace(
				/left|right|bottom|top/g,
				function(e) {
					return t[e]
				}
			)
		}

		function S(e, t, o) {
			o           = o.split( '-' )[0];
			var i       = O( e ),
			n           = {
				width: i.width,
				height: i.height
			},
			r           = -1 !== ['right', 'left'].indexOf( o ),
			p           = r ? 'top' : 'left',
			s           = r ? 'left' : 'top',
			d           = r ? 'height' : 'width',
			a           = r ? 'width' : 'height';
			return n[p] = t[p] + t[d] / 2 - i[d] / 2, n[s] = o === s ? t[s] - i[a] : t[L( s )], n
		}

		function T(e, t) {
			return Array.prototype.find ? e.find( t ) : e.filter( t )[0]
		}

		function C(e, t, o) {
			if (Array.prototype.findIndex) {
				return e.findIndex(
					function(e) {
						return e[t] === o
					}
				);
			}
			var i = T(
				e,
				function(e) {
					return e[t] === o
				}
			);
			return e.indexOf( i )
		}

		function N(t, o, i) {
			var n = void 0 === i ? t : t.slice( 0, C( t, 'name', i ) );
			return n.forEach(
				function(t) {
					t.function && console.warn( '`modifier.function` is deprecated, use `modifier.fn`!' );
					var i                                    = t.function || t.fn;
					t.enabled && e( i ) && (o.offsets.popper = c( o.offsets.popper ), o.offsets.reference = c( o.offsets.reference ), o = i( o, t ))
				}
			), o
		}

		function k() {
			if ( ! this.state.isDestroyed) {
				var e               = {
					instance: this,
					styles: {},
					attributes: {},
					flipped: ! 1,
					offsets: {}
				};
				e.offsets.reference = x( this.state, this.popper, this.reference ), e.placement = E( this.options.placement, e.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding ), e.originalPlacement = e.placement, e.offsets.popper = S( this.popper, e.offsets.reference, e.placement ), e.offsets.popper.position = 'absolute', e = N( this.modifiers, e ), this.state.isCreated ? this.options.onUpdate( e ) : (this.state.isCreated = ! 0, this.options.onCreate( e ))
			}
		}

		function W(e, t) {
			return e.some(
				function(e) {
					var o = e.name,
					i     = e.enabled;
					return i && o === t
				}
			)
		}

		function B(e) {
			for (var t = [ ! 1, 'ms', 'Webkit', 'Moz', 'O'], o = e.charAt( 0 ).toUpperCase() + e.slice( 1 ), n = 0; n < t.length - 1; n++) {
				var i = t[n],
				r     = i ? '' + i + o : e;
				if ('undefined' != typeof window.document.body.style[r]) {
					return r
				}
			}
			return null
		}

		function D() {
			return this.state.isDestroyed = ! 0, W( this.modifiers, 'applyStyle' ) && (this.popper.removeAttribute( 'x-placement' ), this.popper.style.left = '', this.popper.style.position = '', this.popper.style.top = '', this.popper.style[B( 'transform' )] = ''), this.disableEventListeners(), this.options.removeOnDestroy && this.popper.parentNode.removeChild( this.popper ), this
		}

		function H(e, t, o, i) {
			var r = 'BODY' === e.nodeName,
			p     = r ? window : e;
			p.addEventListener(
				t,
				o,
				{
					passive: ! 0
				}
			), r || H( n( p.parentNode ), t, o, i ), i.push( p )
		}

		function P(e, t, o, i) {
			o.updateBound = i, window.addEventListener(
				'resize',
				o.updateBound,
				{
					passive: ! 0
				}
			);
			var r         = n( e );
			return H( r, 'scroll', o.updateBound, o.scrollParents ), o.scrollElement = r, o.eventsEnabled = ! 0, o
		}

		function A() {
			this.state.eventsEnabled || (this.state = P( this.reference, this.options, this.state, this.scheduleUpdate ))
		}

		function M(e, t) {
			return window.removeEventListener( 'resize', t.updateBound ), t.scrollParents.forEach(
				function(e) {
					e.removeEventListener( 'scroll', t.updateBound )
				}
			), t.updateBound = null, t.scrollParents = [], t.scrollElement = null, t.eventsEnabled = ! 1, t
		}

		function I() {
			this.state.eventsEnabled && (window.cancelAnimationFrame( this.scheduleUpdate ), this.state = M( this.reference, this.state ))
		}

		function R(e) {
			return '' !== e && ! isNaN( parseFloat( e ) ) && isFinite( e )
		}

		function U(e, t) {
			Object.keys( t ).forEach(
				function(o) {
					var i = ''; - 1 !== ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf( o ) && R( t[o] ) && (i = 'px'), e.style[o] = t[o] + i
				}
			)
		}

		function Y(e, t) {
			Object.keys( t ).forEach(
				function(o) {
					var i = t[o];
					! 1 === i ? e.removeAttribute( o ) : e.setAttribute( o, t[o] )
				}
			)
		}

		function F(e, t, o) {
			var i = T(
				e,
				function(e) {
					var o = e.name;
					return o === t
				}
			),
				n = ! ! i && e.some(
					function(e) {
						return e.name === o && e.enabled && e.order < i.order
					}
				);
			if ( ! n) {
				var r = '`' + t + '`';
				console.warn( '`' + o + '`' + ' modifier is required by ' + r + ' modifier in order to work, be sure to include it before ' + r + '!' )
			}
			return n
		}

		function j(e) {
			return 'end' === e ? 'start' : 'start' === e ? 'end' : e
		}

		function K(e) {
			var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1],
			o     = ae.indexOf( e ),
			i     = ae.slice( o + 1 ).concat( ae.slice( 0, o ) );
			return t ? i.reverse() : i
		}

		function q(e, t, o, i) {
			var n = e.match( /((?:\-|\+)?\d*\.?\d*)(.*)/ ),
			r     = +n[1],
			p     = n[2];
			if ( ! r) {
				return e;
			}
			if (0 === p.indexOf( '%' )) {
				var s;
				switch (p) {
					case '%p':
						s = o;
						break;
					case '%':
					case '%r':
					default:
						s = i;
				}
				var d = c( s );
				return d[t] / 100 * r
			}
			if ('vh' === p || 'vw' === p) {
				var a;
				return a = 'vh' === p ? _( document.documentElement.clientHeight, window.innerHeight || 0 ) : _( document.documentElement.clientWidth, window.innerWidth || 0 ), a / 100 * r
			}
			return r
		}

		function G(e, t, o, i) {
			var n = [0, 0],
			r     = -1 !== ['right', 'left'].indexOf( i ),
			p     = e.split( /(\+|\-)/ ).map(
				function(e) {
					return e.trim()
				}
			),
				s = p.indexOf(
					T(
						p,
						function(e) {
							return -1 !== e.search( /,|\s/ )
						}
					)
				);
			p[s] && -1 === p[s].indexOf( ',' ) && console.warn( 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.' );
			var d    = /\s*,\s*|\s+/,
				a    = -1 === s ? [p] : [p.slice( 0, s ).concat( [p[s].split( d )[0]] ), [p[s].split( d )[1]].concat( p.slice( s + 1 ) )];
			return a = a.map(
				function(e, i) {
					var n = (1 === i ? ! r : r) ? 'height' : 'width',
					p     = ! 1;
					return e.reduce(
						function(e, t) {
							return '' === e[e.length - 1] && -1 !== ['+', '-'].indexOf( t ) ? (e[e.length - 1] = t, p = ! 0, e) : p ? (e[e.length - 1] += t, p = ! 1, e) : e.concat( t )
						},
						[]
					).map(
						function(e) {
							return q( e, n, t, o )
						}
					)
				}
			), a.forEach(
				function(e, t) {
						e.forEach(
							function(o, i) {
								R( o ) && (n[t] += o * ('-' === e[i - 1] ? -1 : 1))
							}
						)
				}
			), n
		}
		for (var z = Math.min, V = Math.floor, _ = Math.max, X = ['native code', '[object MutationObserverConstructor]'], Q = function(e) {
			return X.some(
				function(t) {
					return -1 < (e || '').toString().indexOf( t )
				}
			)
		}, J = 'undefined' != typeof window, Z = ['Edge', 'Trident', 'Firefox'], $ = 0, ee = 0; ee < Z.length; ee += 1) {
			if (J && 0 <= navigator.userAgent.indexOf( Z[ee] )) {
				$ = 1;
				break
			}
		} var i, te     = J && Q( window.MutationObserver ),
		oe              = te ? function(e) {
			var t = ! 1,
				o = 0,
				i = document.createElement( 'span' ),
				n = new MutationObserver(
					function() {
						e(), t = ! 1
					}
				);
			return n.observe(
				i,
				{
					attributes: ! 0
				}
			),
				function() {
					t || (t = ! 0, i.setAttribute( 'x-index', o ), ++o)
				}
		} : function(e) {
			var t = ! 1;
			return function() {
				t || (t = ! 0, setTimeout(
					function() {
						t = ! 1, e()
					},
					$
				))
			}
		},
		ie              = function() {
			return void 0 == i && (i = -1 !== navigator.appVersion.indexOf( 'MSIE 10' )), i
		},
		ne              = function(e, t) {
			if ( ! (e instanceof t)) {
				throw new TypeError( 'Cannot call a class as a function' )
			}
		},
		re              = function() {
			function e(e, t) {
				for (var o, n = 0; n < t.length; n++) {
					o = t[n], o.enumerable = o.enumerable || ! 1, o.configurable = ! 0, 'value' in o && (o.writable = ! 0), Object.defineProperty( e, o.key, o )
				}
			}
			return function(t, o, i) {
				return o && e( t.prototype, o ), i && e( t, i ), t
			}
		}(),
		pe              = function(e, t, o) {
			return t in e ? Object.defineProperty(
				e,
				t,
				{
					value: o,
					enumerable: ! 0,
					configurable: ! 0,
					writable: ! 0
				}
			) : e[t] = o, e
		},
		se              = Object.assign || function(e) {
			for (var t, o = 1; o < arguments.length; o++) {
				for (var i in t = arguments[o], t) {
					Object.prototype.hasOwnProperty.call( t, i ) && (e[i] = t[i]);
				}
			}
			return e
		},
		de              = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'],
		ae              = de.slice( 3 ),
		fe              = {
			FLIP: 'flip',
			CLOCKWISE: 'clockwise',
			COUNTERCLOCKWISE: 'counterclockwise'
		},
		le              = function() {
			function t(o, i) {
				var n                              = this,
					r                              = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : {};
				ne( this, t ), this.scheduleUpdate = function() {
					return requestAnimationFrame( n.update )
				}, this.update                     = oe( this.update.bind( this ) ), this.options = se( {}, t.Defaults, r ), this.state = {
					isDestroyed: ! 1,
					isCreated: ! 1,
					scrollParents: []
				}, this.reference                  = o.jquery ? o[0] : o, this.popper = i.jquery ? i[0] : i, this.options.modifiers = {}, Object.keys( se( {}, t.Defaults.modifiers, r.modifiers ) ).forEach(
					function(e) {
						n.options.modifiers[e] = se( {}, t.Defaults.modifiers[e] || {}, r.modifiers ? r.modifiers[e] : {} )
					}
				), this.modifiers                  = Object.keys( this.options.modifiers ).map(
					function(e) {
							return se(
								{
									name: e
								},
								n.options.modifiers[e]
							)
					}
				).sort(
					function(e, t) {
							return e.order - t.order
					}
				), this.modifiers.forEach(
					function(t) {
							t.enabled && e( t.onLoad ) && t.onLoad( n.reference, n.popper, n.options, t, n.state )
					}
				), this.update();
				var p                              = this.options.eventsEnabled;
				p && this.enableEventListeners(), this.state.eventsEnabled = p
			}
			return re(
				t,
				[{
					key: 'update',
					value: function() {
						return k.call( this )
					}
				}, {
					key: 'destroy',
					value: function() {
						return D.call( this )
					}
				}, {
					key: 'enableEventListeners',
					value: function() {
						return A.call( this )
					}
				}, {
					key: 'disableEventListeners',
					value: function() {
						return I.call( this )
					}
				}]
			), t
		}();
		return le.Utils = ('undefined' == typeof window ? global : window).PopperUtils, le.placements = de, le.Defaults = {
			placement: 'bottom',
			eventsEnabled: ! 0,
			removeOnDestroy: ! 1,
			onCreate: function() {},
			onUpdate: function() {},
			modifiers: {
				shift: {
					order: 100,
					enabled: ! 0,
					fn: function(e) {
						var t = e.placement,
						o     = t.split( '-' )[0],
						i     = t.split( '-' )[1];
						if (i) {
							var n            = e.offsets,
							r                = n.reference,
							p                = n.popper,
							s                = -1 !== ['bottom', 'top'].indexOf( o ),
							d                = s ? 'left' : 'top',
							a                = s ? 'width' : 'height',
							f                = {
								start: pe( {}, d, r[d] ),
								end: pe( {}, d, r[d] + r[a] - p[a] )
							};
							e.offsets.popper = se( {}, p, f[i] )
						}
						return e
					}
				},
				offset: {
					order: 200,
					enabled: ! 0,
					fn: function(e, t) {
						var o, i = t.offset,
						n        = e.placement,
						r        = e.offsets,
						p        = r.popper,
						s        = r.reference,
						d        = n.split( '-' )[0];
						return o = R( +i ) ? [+i, 0] : G( i, p, s, d ), 'left' === d ? (p.top += o[0], p.left -= o[1]) : 'right' === d ? (p.top += o[0], p.left += o[1]) : 'top' === d ? (p.left += o[0], p.top -= o[1]) : 'bottom' === d && (p.left += o[0], p.top += o[1]), e.popper = p, e
					},
					offset: 0
				},
				preventOverflow: {
					order: 300,
					enabled: ! 0,
					fn: function(e, t) {
						var o                            = t.boundariesElement || r( e.instance.popper );
						e.instance.reference === o && (o = r( o ));
						var i               = w( e.instance.popper, e.instance.reference, t.padding, o );
						t.boundaries        = i;
						var n               = t.priority,
						p                   = e.offsets.popper,
						s                   = {
							primary: function(e) {
								var o = p[e];
								return p[e] < i[e] && ! t.escapeWithReference && (o = _( p[e], i[e] )), pe( {}, e, o )
							},
							secondary: function(e) {
								var o = 'right' === e ? 'left' : 'top',
									n = p[o];
								return p[e] > i[e] && ! t.escapeWithReference && (n = z( p[o], i[e] - ('right' === e ? p.width : p.height) )), pe( {}, o, n )
							}
						};
						return n.forEach(
							function(e) {
								var t = -1 === ['left', 'top'].indexOf( e ) ? 'secondary' : 'primary';
								p     = se( {}, p, s[t](e) )
							}
						), e.offsets.popper = p, e
					},
					priority: ['left', 'right', 'top', 'bottom'],
					padding: 5,
					boundariesElement: 'scrollParent'
				},
				keepTogether: {
					order: 400,
					enabled: ! 0,
					fn: function(e) {
						var t = e.offsets,
						o     = t.popper,
						i     = t.reference,
						n     = e.placement.split( '-' )[0],
						r     = V,
						p     = -1 !== ['top', 'bottom'].indexOf( n ),
						s     = p ? 'right' : 'bottom',
						d     = p ? 'left' : 'top',
						a     = p ? 'width' : 'height';
						return o[s] < r( i[d] ) && (e.offsets.popper[d] = r( i[d] ) - o[a]), o[d] > r( i[s] ) && (e.offsets.popper[d] = r( i[s] )), e
					}
				},
				arrow: {
					order: 500,
					enabled: ! 0,
					fn: function(e, t) {
						if ( ! F( e.instance.modifiers, 'arrow', 'keepTogether' )) {
							return e;
						}
						var o = t.element;
						if ('string' == typeof o) {
							if (o = e.instance.popper.querySelector( o ), ! o) {
								return e;
							}
						} else if ( ! e.instance.popper.contains( o )) {
							return console.warn( 'WARNING: `arrow.element` must be child of its popper element!' ), e;
						}
						var i                                    = e.placement.split( '-' )[0],
						n                                        = e.offsets,
						r                                        = n.popper,
						p                                        = n.reference,
						s                                        = -1 !== ['left', 'right'].indexOf( i ),
						d                                        = s ? 'height' : 'width',
						a                                        = s ? 'top' : 'left',
						f                                        = s ? 'left' : 'top',
						l                                        = s ? 'bottom' : 'right',
						m                                        = O( o )[d];
						p[l] - m < r[a] && (e.offsets.popper[a] -= r[a] - (p[l] - m)), p[a] + m > r[l] && (e.offsets.popper[a] += p[a] + m - r[l]);
						var h    = p[a] + p[d] / 2 - m / 2,
						g        = h - c( e.offsets.popper )[a];
						return g = _( z( r[d] - m, g ), 0 ), e.arrowElement = o, e.offsets.arrow = {}, e.offsets.arrow[a] = Math.round( g ), e.offsets.arrow[f] = '', e
					},
					element: '[x-arrow]'
				},
				flip: {
					order: 600,
					enabled: ! 0,
					fn: function(e, t) {
						if (W( e.instance.modifiers, 'inner' )) {
							return e;
						}
						if (e.flipped && e.placement === e.originalPlacement) {
							return e;
						}
						var o = w( e.instance.popper, e.instance.reference, t.padding, t.boundariesElement ),
						i     = e.placement.split( '-' )[0],
						n     = L( i ),
						r     = e.placement.split( '-' )[1] || '',
						p     = [];
						switch (t.behavior) {
							case fe.FLIP:
								p = [i, n];
								break;
							case fe.CLOCKWISE:
								p = K( i );
								break;
							case fe.COUNTERCLOCKWISE:
								p = K( i, ! 0 );
								break;
							default:
								p = t.behavior;
						}
						return p.forEach(
							function(s, d) {
								if (i !== s || p.length === d + 1) {
									return e;
								}
								i                           = e.placement.split( '-' )[0], n = L( i );
								var a                       = e.offsets.popper,
								f                           = e.offsets.reference,
								l                           = V,
								m                           = 'left' === i && l( a.right ) > l( f.left ) || 'right' === i && l( a.left ) < l( f.right ) || 'top' === i && l( a.bottom ) > l( f.top ) || 'bottom' === i && l( a.top ) < l( f.bottom ),
								h                           = l( a.left ) < l( o.left ),
								c                           = l( a.right ) > l( o.right ),
								g                           = l( a.top ) < l( o.top ),
								u                           = l( a.bottom ) > l( o.bottom ),
								b                           = 'left' === i && h || 'right' === i && c || 'top' === i && g || 'bottom' === i && u,
								y                           = -1 !== ['top', 'bottom'].indexOf( i ),
								w                           = ! ! t.flipVariations && (y && 'start' === r && h || y && 'end' === r && c || ! y && 'start' === r && g || ! y && 'end' === r && u);
								(m || b || w) && (e.flipped = ! 0, (m || b) && (i = p[d + 1]), w && (r = j( r )), e.placement = i + (r ? '-' + r : ''), e.offsets.popper = se( {}, e.offsets.popper, S( e.instance.popper, e.offsets.reference, e.placement ) ), e = N( e.instance.modifiers, e, 'flip' ))
							}
						), e
					},
					behavior: 'flip',
					padding: 5,
					boundariesElement: 'viewport'
				},
				inner: {
					order: 700,
					enabled: ! 1,
					fn: function(e) {
						var t                        = e.placement,
						o                            = t.split( '-' )[0],
						i                            = e.offsets,
						n                            = i.popper,
						r                            = i.reference,
						p                            = -1 !== ['left', 'right'].indexOf( o ),
						s                            = -1 === ['top', 'left'].indexOf( o );
						return n[p ? 'left' : 'top'] = r[t] - (s ? n[p ? 'width' : 'height'] : 0), e.placement = L( t ), e.offsets.popper = c( n ), e
					}
				},
				hide: {
					order: 800,
					enabled: ! 0,
					fn: function(e) {
						if ( ! F( e.instance.modifiers, 'hide', 'preventOverflow' )) {
							return e;
						}
						var t = e.offsets.reference,
						o     = T(
							e.instance.modifiers,
							function(e) {
								return 'preventOverflow' === e.name
							}
						).boundaries;
						if (t.bottom < o.top || t.left > o.right || t.top > o.bottom || t.right < o.left) {
							if ( ! 0 === e.hide) {
								return e;
							}
							e.hide = ! 0, e.attributes['x-out-of-boundaries'] = ''
						} else {
							if ( ! 1 === e.hide) {
								return e;
							}
							e.hide = ! 1, e.attributes['x-out-of-boundaries'] = ! 1
						}
						return e
					}
				},
				computeStyle: {
					order: 850,
					enabled: ! 0,
					fn: function(e, t) {
						var o = t.x,
						i     = t.y,
						n     = e.offsets.popper,
						p     = T(
							e.instance.modifiers,
							function(e) {
								return 'applyStyle' === e.name
							}
						).gpuAcceleration;
						void 0 !== p && console.warn( 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!' );
						var s, d, a = void 0 === p ? t.gpuAcceleration : p,
						f           = r( e.instance.popper ),
						l           = g( f ),
						m           = {
							position: n.position
						},
						h           = {
							left: V( n.left ),
							top: V( n.top ),
							bottom: V( n.bottom ),
							right: V( n.right )
						},
						c           = 'bottom' === o ? 'top' : 'bottom',
						u           = 'right' === i ? 'left' : 'right',
						b           = B( 'transform' );
						if (d = 'bottom' == c ? -l.height + h.bottom : h.top, s = 'right' == u ? -l.width + h.right : h.left, a && b) {
							m[b] = 'translate3d(' + s + 'px, ' + d + 'px, 0)', m[c] = 0, m[u] = 0, m.willChange = 'transform';
						} else {
							var y = 'bottom' == c ? -1 : 1,
							w     = 'right' == u ? -1 : 1;
							m[c]  = d * y, m[u] = s * w, m.willChange = c + ', ' + u
						}
						var v               = {
							"x-placement": e.placement
						};
						return e.attributes = se( {}, v, e.attributes ), e.styles = se( {}, m, e.styles ), e
					},
					gpuAcceleration: ! 0,
					x: 'bottom',
					y: 'right'
				},
				applyStyle: {
					order: 900,
					enabled: ! 0,
					fn: function(e) {
						return U( e.instance.popper, e.styles ), Y( e.instance.popper, e.attributes ), e.offsets.arrow && U( e.arrowElement, e.offsets.arrow ), e
					},
					onLoad: function(e, t, o, i, n) {
						var r = x( n, t, e ),
						p     = E( o.placement, r, t, e, o.modifiers.flip.boundariesElement, o.modifiers.flip.padding );
						return t.setAttribute( 'x-placement', p ), U(
							t,
							{
								position: 'absolute'
							}
						), o
					},
					gpuAcceleration: void 0
				}
			}
		}, le
	}
);
