example.min.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. (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){
  2. 'use strict';
  3. var crossvent = require('crossvent');
  4. var sortable = $('sortable');
  5. dragula([$('left-defaults'), $('right-defaults')]);
  6. dragula([$('left-copy'), $('right-copy')], { copy: true });
  7. dragula([$('left-events'), $('right-events')])
  8. .on('drag', function (el) {
  9. el.className = el.className.replace('ex-moved', '');
  10. })
  11. .on('drop', function (el) {
  12. el.className += ' ex-moved';
  13. })
  14. .on('over', function (el, container) {
  15. container.className += ' ex-over';
  16. })
  17. .on('out', function (el, container) {
  18. container.className = container.className.replace('ex-over', '');
  19. });
  20. dragula([$('left-rollbacks'), $('right-rollbacks')], { revertOnSpill: true });
  21. dragula([$('left-lovehandles'), $('right-lovehandles')], {
  22. moves: function (el, container, handle) {
  23. return handle.classList.contains('handle');
  24. }
  25. });
  26. dragula([$('left-rm-spill'), $('right-rm-spill')], { removeOnSpill: true });
  27. dragula([$('left-copy-1tomany'), $('right-copy-1tomany')], {
  28. copy: function (el, source) {
  29. return source === $('left-copy-1tomany');
  30. },
  31. accepts: function (el, target) {
  32. return target !== $('left-copy-1tomany');
  33. }
  34. });
  35. dragula([sortable]);
  36. crossvent.add(sortable, 'click', clickHandler);
  37. function clickHandler (e) {
  38. var target = e.target;
  39. if (target === sortable) {
  40. return;
  41. }
  42. target.innerHTML += ' [click!]';
  43. setTimeout(function () {
  44. target.innerHTML = target.innerHTML.replace(/ \[click!\]/g, '');
  45. }, 500);
  46. }
  47. function $ (id) {
  48. return document.getElementById(id);
  49. }
  50. },{"crossvent":2}],2:[function(require,module,exports){
  51. (function (global){
  52. 'use strict';
  53. var customEvent = require('custom-event');
  54. var eventmap = require('./eventmap');
  55. var doc = global.document;
  56. var addEvent = addEventEasy;
  57. var removeEvent = removeEventEasy;
  58. var hardCache = [];
  59. if (!global.addEventListener) {
  60. addEvent = addEventHard;
  61. removeEvent = removeEventHard;
  62. }
  63. module.exports = {
  64. add: addEvent,
  65. remove: removeEvent,
  66. fabricate: fabricateEvent
  67. };
  68. function addEventEasy (el, type, fn, capturing) {
  69. return el.addEventListener(type, fn, capturing);
  70. }
  71. function addEventHard (el, type, fn) {
  72. return el.attachEvent('on' + type, wrap(el, type, fn));
  73. }
  74. function removeEventEasy (el, type, fn, capturing) {
  75. return el.removeEventListener(type, fn, capturing);
  76. }
  77. function removeEventHard (el, type, fn) {
  78. var listener = unwrap(el, type, fn);
  79. if (listener) {
  80. return el.detachEvent('on' + type, listener);
  81. }
  82. }
  83. function fabricateEvent (el, type, model) {
  84. var e = eventmap.indexOf(type) === -1 ? makeCustomEvent() : makeClassicEvent();
  85. if (el.dispatchEvent) {
  86. el.dispatchEvent(e);
  87. } else {
  88. el.fireEvent('on' + type, e);
  89. }
  90. function makeClassicEvent () {
  91. var e;
  92. if (doc.createEvent) {
  93. e = doc.createEvent('Event');
  94. e.initEvent(type, true, true);
  95. } else if (doc.createEventObject) {
  96. e = doc.createEventObject();
  97. }
  98. return e;
  99. }
  100. function makeCustomEvent () {
  101. return new customEvent(type, { detail: model });
  102. }
  103. }
  104. function wrapperFactory (el, type, fn) {
  105. return function wrapper (originalEvent) {
  106. var e = originalEvent || global.event;
  107. e.target = e.target || e.srcElement;
  108. e.preventDefault = e.preventDefault || function preventDefault () { e.returnValue = false; };
  109. e.stopPropagation = e.stopPropagation || function stopPropagation () { e.cancelBubble = true; };
  110. e.which = e.which || e.keyCode;
  111. fn.call(el, e);
  112. };
  113. }
  114. function wrap (el, type, fn) {
  115. var wrapper = unwrap(el, type, fn) || wrapperFactory(el, type, fn);
  116. hardCache.push({
  117. wrapper: wrapper,
  118. element: el,
  119. type: type,
  120. fn: fn
  121. });
  122. return wrapper;
  123. }
  124. function unwrap (el, type, fn) {
  125. var i = find(el, type, fn);
  126. if (i) {
  127. var wrapper = hardCache[i].wrapper;
  128. hardCache.splice(i, 1); // free up a tad of memory
  129. return wrapper;
  130. }
  131. }
  132. function find (el, type, fn) {
  133. var i, item;
  134. for (i = 0; i < hardCache.length; i++) {
  135. item = hardCache[i];
  136. if (item.element === el && item.type === type && item.fn === fn) {
  137. return i;
  138. }
  139. }
  140. }
  141. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  142. },{"./eventmap":3,"custom-event":4}],3:[function(require,module,exports){
  143. (function (global){
  144. 'use strict';
  145. var eventmap = [];
  146. var eventname = '';
  147. var ron = /^on/;
  148. for (eventname in global) {
  149. if (ron.test(eventname)) {
  150. eventmap.push(eventname.slice(2));
  151. }
  152. }
  153. module.exports = eventmap;
  154. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  155. },{}],4:[function(require,module,exports){
  156. (function (global){
  157. var NativeCustomEvent = global.CustomEvent;
  158. function useNative () {
  159. try {
  160. var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });
  161. return 'cat' === p.type && 'bar' === p.detail.foo;
  162. } catch (e) {
  163. }
  164. return false;
  165. }
  166. /**
  167. * Cross-browser `CustomEvent` constructor.
  168. *
  169. * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent
  170. *
  171. * @public
  172. */
  173. module.exports = useNative() ? NativeCustomEvent :
  174. // IE >= 9
  175. 'function' === typeof document.createEvent ? function CustomEvent (type, params) {
  176. var e = document.createEvent('CustomEvent');
  177. if (params) {
  178. e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);
  179. } else {
  180. e.initCustomEvent(type, false, false, void 0);
  181. }
  182. return e;
  183. } :
  184. // IE <= 8
  185. function CustomEvent (type, params) {
  186. var e = document.createEventObject();
  187. e.type = type;
  188. if (params) {
  189. e.bubbles = Boolean(params.bubbles);
  190. e.cancelable = Boolean(params.cancelable);
  191. e.detail = params.detail;
  192. } else {
  193. e.bubbles = false;
  194. e.cancelable = false;
  195. e.detail = void 0;
  196. }
  197. return e;
  198. }
  199. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  200. },{}]},{},[1])
  201. //# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJleGFtcGxlL2V4YW1wbGUuanMiLCJub2RlX21vZHVsZXMvY3Jvc3N2ZW50L3NyYy9jcm9zc3ZlbnQuanMiLCJub2RlX21vZHVsZXMvY3Jvc3N2ZW50L3NyYy9ldmVudG1hcC5qcyIsIm5vZGVfbW9kdWxlcy9jdXN0b20tZXZlbnQvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3Jvc3N2ZW50ID0gcmVxdWlyZSgnY3Jvc3N2ZW50Jyk7XG52YXIgc29ydGFibGUgPSAkKCdzb3J0YWJsZScpO1xuXG5kcmFndWxhKFskKCdsZWZ0LWRlZmF1bHRzJyksICQoJ3JpZ2h0LWRlZmF1bHRzJyldKTtcbmRyYWd1bGEoWyQoJ2xlZnQtY29weScpLCAkKCdyaWdodC1jb3B5JyldLCB7IGNvcHk6IHRydWUgfSk7XG5kcmFndWxhKFskKCdsZWZ0LWV2ZW50cycpLCAkKCdyaWdodC1ldmVudHMnKV0pXG4gIC5vbignZHJhZycsIGZ1bmN0aW9uIChlbCkge1xuICAgIGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZS5yZXBsYWNlKCdleC1tb3ZlZCcsICcnKTtcbiAgfSlcbiAgLm9uKCdkcm9wJywgZnVuY3Rpb24gKGVsKSB7XG4gICAgZWwuY2xhc3NOYW1lICs9ICcgZXgtbW92ZWQnO1xuICB9KVxuICAub24oJ292ZXInLCBmdW5jdGlvbiAoZWwsIGNvbnRhaW5lcikge1xuICAgIGNvbnRhaW5lci5jbGFzc05hbWUgKz0gJyBleC1vdmVyJztcbiAgfSlcbiAgLm9uKCdvdXQnLCBmdW5jdGlvbiAoZWwsIGNvbnRhaW5lcikge1xuICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSBjb250YWluZXIuY2xhc3NOYW1lLnJlcGxhY2UoJ2V4LW92ZXInLCAnJyk7XG4gIH0pO1xuZHJhZ3VsYShbJCgnbGVmdC1yb2xsYmFja3MnKSwgJCgncmlnaHQtcm9sbGJhY2tzJyldLCB7IHJldmVydE9uU3BpbGw6IHRydWUgfSk7XG5kcmFndWxhKFskKCdsZWZ0LWxvdmVoYW5kbGVzJyksICQoJ3JpZ2h0LWxvdmVoYW5kbGVzJyldLCB7XG4gIG1vdmVzOiBmdW5jdGlvbiAoZWwsIGNvbnRhaW5lciwgaGFuZGxlKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5jbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZScpO1xuICB9XG59KTtcblxuZHJhZ3VsYShbJCgnbGVmdC1ybS1zcGlsbCcpLCAkKCdyaWdodC1ybS1zcGlsbCcpXSwgeyByZW1vdmVPblNwaWxsOiB0cnVlIH0pO1xuZHJhZ3VsYShbJCgnbGVmdC1jb3B5LTF0b21hbnknKSwgJCgncmlnaHQtY29weS0xdG9tYW55JyldLCB7XG4gIGNvcHk6IGZ1bmN0aW9uIChlbCwgc291cmNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZSA9PT0gJCgnbGVmdC1jb3B5LTF0b21hbnknKTtcbiAgfSxcbiAgYWNjZXB0czogZnVuY3Rpb24gKGVsLCB0YXJnZXQpIHtcbiAgICByZXR1cm4gdGFyZ2V0ICE9PSAkKCdsZWZ0LWNvcHktMXRvbWFueScpO1xuICB9XG59KTtcblxuZHJhZ3VsYShbc29ydGFibGVdKTtcblxuY3Jvc3N2ZW50LmFkZChzb3J0YWJsZSwgJ2NsaWNrJywgY2xpY2tIYW5kbGVyKTtcblxuZnVuY3Rpb24gY2xpY2tIYW5kbGVyIChlKSB7XG4gIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcbiAgaWYgKHRhcmdldCA9PT0gc29ydGFibGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGFyZ2V0LmlubmVySFRNTCArPSAnIFtjbGljayFdJztcblxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICB0YXJnZXQuaW5uZXJIVE1MID0gdGFyZ2V0LmlubmVySFRNTC5yZXBsYWNlKC8gXFxbY2xpY2shXFxdL2csICcnKTtcbiAgfSwgNTAwKTtcbn1cblxuZnVuY3Rpb24gJCAoaWQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1c3RvbUV2ZW50ID0gcmVxdWlyZSgnY3VzdG9tLWV2ZW50Jyk7XG52YXIgZXZlbnRtYXAgPSByZXF1aXJlKCcuL2V2ZW50bWFwJyk7XG52YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIGFkZEV2ZW50ID0gYWRkRXZlbnRFYXN5O1xudmFyIHJlbW92ZUV2ZW50ID0gcmVtb3ZlRXZlbnRFYXN5O1xudmFyIGhhcmRDYWNoZSA9IFtdO1xuXG5pZiAoIWdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gIGFkZEV2ZW50ID0gYWRkRXZlbnRIYXJkO1xuICByZW1vdmVFdmVudCA9IHJlbW92ZUV2ZW50SGFyZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFkZDogYWRkRXZlbnQsXG4gIHJlbW92ZTogcmVtb3ZlRXZlbnQsXG4gIGZhYnJpY2F0ZTogZmFicmljYXRlRXZlbnRcbn07XG5cbmZ1bmN0aW9uIGFkZEV2ZW50RWFzeSAoZWwsIHR5cGUsIGZuLCBjYXB0dXJpbmcpIHtcbiAgcmV0dXJuIGVsLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZm4sIGNhcHR1cmluZyk7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50SGFyZCAoZWwsIHR5cGUsIGZuKSB7XG4gIHJldHVybiBlbC5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgd3JhcChlbCwgdHlwZSwgZm4pKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRFYXN5IChlbCwgdHlwZSwgZm4sIGNhcHR1cmluZykge1xuICByZXR1cm4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgY2FwdHVyaW5nKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRIYXJkIChlbCwgdHlwZSwgZm4pIHtcbiAgdmFyIGxpc3RlbmVyID0gdW53cmFwKGVsLCB0eXBlLCBmbik7XG4gIGlmIChsaXN0ZW5lcikge1xuICAgIHJldHVybiBlbC5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgbGlzdGVuZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZhYnJpY2F0ZUV2ZW50IChlbCwgdHlwZSwgbW9kZWwpIHtcbiAgdmFyIGUgPSBldmVudG1hcC5pbmRleE9mKHR5cGUpID09PSAtMSA/IG1ha2VDdXN0b21FdmVudCgpIDogbWFrZUNsYXNzaWNFdmVudCgpO1xuICBpZiAoZWwuZGlzcGF0Y2hFdmVudCkge1xuICAgIGVsLmRpc3BhdGNoRXZlbnQoZSk7XG4gIH0gZWxzZSB7XG4gICAgZWwuZmlyZUV2ZW50KCdvbicgKyB0eXBlLCBlKTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlQ2xhc3NpY0V2ZW50ICgpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAoZG9jLmNyZWF0ZUV2ZW50KSB7XG4gICAgICBlID0gZG9jLmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgZS5pbml0RXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChkb2MuY3JlYXRlRXZlbnRPYmplY3QpIHtcbiAgICAgIGUgPSBkb2MuY3JlYXRlRXZlbnRPYmplY3QoKTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZUN1c3RvbUV2ZW50ICgpIHtcbiAgICByZXR1cm4gbmV3IGN1c3RvbUV2ZW50KHR5cGUsIHsgZGV0YWlsOiBtb2RlbCB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cmFwcGVyRmFjdG9yeSAoZWwsIHR5cGUsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwcGVyIChvcmlnaW5hbEV2ZW50KSB7XG4gICAgdmFyIGUgPSBvcmlnaW5hbEV2ZW50IHx8IGdsb2JhbC5ldmVudDtcbiAgICBlLnRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICBlLnByZXZlbnREZWZhdWx0ID0gZS5wcmV2ZW50RGVmYXVsdCB8fCBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCAoKSB7IGUucmV0dXJuVmFsdWUgPSBmYWxzZTsgfTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbiA9IGUuc3RvcFByb3BhZ2F0aW9uIHx8IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbiAoKSB7IGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsgfTtcbiAgICBlLndoaWNoID0gZS53aGljaCB8fCBlLmtleUNvZGU7XG4gICAgZm4uY2FsbChlbCwgZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHdyYXAgKGVsLCB0eXBlLCBmbikge1xuICB2YXIgd3JhcHBlciA9IHVud3JhcChlbCwgdHlwZSwgZm4pIHx8IHdyYXBwZXJGYWN0b3J5KGVsLCB0eXBlLCBmbik7XG4gIGhhcmRDYWNoZS5wdXNoKHtcbiAgICB3cmFwcGVyOiB3cmFwcGVyLFxuICAgIGVsZW1lbnQ6IGVsLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgZm46IGZuXG4gIH0pO1xuICByZXR1cm4gd3JhcHBlcjtcbn1cblxuZnVuY3Rpb24gdW53cmFwIChlbCwgdHlwZSwgZm4pIHtcbiAgdmFyIGkgPSBmaW5kKGVsLCB0eXBlLCBmbik7XG4gIGlmIChpKSB7XG4gICAgdmFyIHdyYXBwZXIgPSBoYXJkQ2FjaGVbaV0ud3JhcHBlcjtcbiAgICBoYXJkQ2FjaGUuc3BsaWNlKGksIDEpOyAvLyBmcmVlIHVwIGEgdGFkIG9mIG1lbW9yeVxuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmQgKGVsLCB0eXBlLCBmbikge1xuICB2YXIgaSwgaXRlbTtcbiAgZm9yIChpID0gMDsgaSA8IGhhcmRDYWNoZS5sZW5ndGg7IGkrKykge1xuICAgIGl0ZW0gPSBoYXJkQ2FjaGVbaV07XG4gICAgaWYgKGl0ZW0uZWxlbWVudCA9PT0gZWwgJiYgaXRlbS50eXBlID09PSB0eXBlICYmIGl0ZW0uZm4gPT09IGZuKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGV2ZW50bWFwID0gW107XG52YXIgZXZlbnRuYW1lID0gJyc7XG52YXIgcm9uID0gL15vbi87XG5cbmZvciAoZXZlbnRuYW1lIGluIGdsb2JhbCkge1xuICBpZiAocm9uLnRlc3QoZXZlbnRuYW1lKSkge1xuICAgIGV2ZW50bWFwLnB1c2goZXZlbnRuYW1lLnNsaWNlKDIpKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV2ZW50bWFwO1xuIiwiXG52YXIgTmF0aXZlQ3VzdG9tRXZlbnQgPSBnbG9iYWwuQ3VzdG9tRXZlbnQ7XG5cbmZ1bmN0aW9uIHVzZU5hdGl2ZSAoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHAgPSBuZXcgTmF0aXZlQ3VzdG9tRXZlbnQoJ2NhdCcsIHsgZGV0YWlsOiB7IGZvbzogJ2JhcicgfSB9KTtcbiAgICByZXR1cm4gICdjYXQnID09PSBwLnR5cGUgJiYgJ2JhcicgPT09IHAuZGV0YWlsLmZvbztcbiAgfSBjYXRjaCAoZSkge1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDcm9zcy1icm93c2VyIGBDdXN0b21FdmVudGAgY29uc3RydWN0b3IuXG4gKlxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50LkN1c3RvbUV2ZW50XG4gKlxuICogQHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gdXNlTmF0aXZlKCkgPyBOYXRpdmVDdXN0b21FdmVudCA6XG5cbi8vIElFID49IDlcbidmdW5jdGlvbicgPT09IHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFdmVudCA/IGZ1bmN0aW9uIEN1c3RvbUV2ZW50ICh0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTtcbiAgaWYgKHBhcmFtcykge1xuICAgIGUuaW5pdEN1c3RvbUV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSwgcGFyYW1zLmRldGFpbCk7XG4gIH0gZWxzZSB7XG4gICAgZS5pbml0Q3VzdG9tRXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlLCB2b2lkIDApO1xuICB9XG4gIHJldHVybiBlO1xufSA6XG5cbi8vIElFIDw9IDhcbmZ1bmN0aW9uIEN1c3RvbUV2ZW50ICh0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuICBlLnR5cGUgPSB0eXBlO1xuICBpZiAocGFyYW1zKSB7XG4gICAgZS5idWJibGVzID0gQm9vbGVhbihwYXJhbXMuYnViYmxlcyk7XG4gICAgZS5jYW5jZWxhYmxlID0gQm9vbGVhbihwYXJhbXMuY2FuY2VsYWJsZSk7XG4gICAgZS5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICB9IGVsc2Uge1xuICAgIGUuYnViYmxlcyA9IGZhbHNlO1xuICAgIGUuY2FuY2VsYWJsZSA9IGZhbHNlO1xuICAgIGUuZGV0YWlsID0gdm9pZCAwO1xuICB9XG4gIHJldHVybiBlO1xufVxuIl19