| 1 |
- {"remainingRequest":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/babel-loader/lib/index.js!/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/element-ui/lib/element-ui.common.js","dependencies":[{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/element-ui/lib/element-ui.common.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbCIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24iKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5ldmVyeSIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWxsIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlciIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4iKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZSIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZSIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zb21lIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNwbGljZSIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZyIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWciKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4iKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLnBhcnNlLWZsb2F0Iik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci50by1maXhlZCIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZnJlZXplIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmciKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnZhbHVlcyIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IiKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMiKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZyIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMiKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaCIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZSIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3BsaXQiKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0iKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmZpeGVkIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5saW5rIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zbWFsbCIpO3JlcXVpcmUoImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoIik7cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IiKTtyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvd2ViLnVybCIpO3ZhciBfdHlwZW9mMj1yZXF1aXJlKCIvdXNyL2xvY2FsL2RldmVsb3AvcGhwL3d3dy93YWliYW8vcHJvamVjdC9OTjIwMjAwNjA4MDEvYWRkb25zL2FkbWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZiIpO21vZHVsZS5leHBvcnRzPS8qKioqKiovZnVuY3Rpb24obW9kdWxlcyl7Ly8gd2VicGFja0Jvb3RzdHJhcAovKioqKioqLyAvLyBUaGUgbW9kdWxlIGNhY2hlCi8qKioqKiovdmFyIGluc3RhbGxlZE1vZHVsZXM9e307LyoqKioqKi8gLyoqKioqKi8gLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb24KLyoqKioqKi9mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKXsvKioqKioqLyAvKioqKioqLyAvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGUKLyoqKioqKi9pZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSl7LyoqKioqKi9yZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0czsvKioqKioqL30vKioqKioqLyAvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKQovKioqKioqL3ZhciBtb2R1bGU9aW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF09ey8qKioqKiovaTptb2R1bGVJZCwvKioqKioqL2w6ZmFsc2UsLyoqKioqKi9leHBvcnRzOnt9LyoqKioqKi99Oy8qKioqKiovIC8qKioqKiovIC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvbgovKioqKioqL21vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsbW9kdWxlLG1vZHVsZS5leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pOy8qKioqKiovIC8qKioqKiovIC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWQKLyoqKioqKi9tb2R1bGUubD10cnVlOy8qKioqKiovIC8qKioqKiovIC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlCi8qKioqKiovcmV0dXJuIG1vZHVsZS5leHBvcnRzOy8qKioqKiovfS8qKioqKiovIC8qKioqKiovIC8qKioqKiovIC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pCi8qKioqKiovX193ZWJwYWNrX3JlcXVpcmVfXy5tPW1vZHVsZXM7LyoqKioqKi8gLyoqKioqKi8gLy8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGUKLyoqKioqKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmM9aW5zdGFsbGVkTW9kdWxlczsvKioqKioqLyAvKioqKioqLyAvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHMKLyoqKioqKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQ9ZnVuY3Rpb24oZXhwb3J0cyxuYW1lLGdldHRlcil7LyoqKioqKi9pZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsbmFtZSkpey8qKioqKiovT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsbmFtZSx7ZW51bWVyYWJsZTp0cnVlLGdldDpnZXR0ZXJ9KTsvKioqKioqL30vKioqKioqL307LyoqKioqKi8gLyoqKioqKi8gLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0cwovKioqKioqL19fd2VicGFja19yZXF1aXJlX18ucj1mdW5jdGlvbihleHBvcnRzKXsvKioqKioqL2lmKHR5cGVvZiBTeW1ib2whPT0ndW5kZWZpbmVkJyYmU3ltYm9sLnRvU3RyaW5nVGFnKXsvKioqKioqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6J01vZHVsZSd9KTsvKioqKioqL30vKioqKioqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCdfX2VzTW9kdWxlJyx7dmFsdWU6dHJ1ZX0pOy8qKioqKiovfTsvKioqKioqLyAvKioqKioqLyAvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3QKLyoqKioqKi8gLy8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0Ci8qKioqKiovIC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBucwovKioqKioqLyAvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3QKLyoqKioqKi8gLy8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZQovKioqKioqL19fd2VicGFja19yZXF1aXJlX18udD1mdW5jdGlvbih2YWx1ZSxtb2RlKXsvKioqKioqL2lmKG1vZGUmMSl2YWx1ZT1fX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTsvKioqKioqL2lmKG1vZGUmOClyZXR1cm4gdmFsdWU7LyoqKioqKi9pZihtb2RlJjQmJl90eXBlb2YyKHZhbHVlKT09PSdvYmplY3QnJiZ2YWx1ZSYmdmFsdWUuX19lc01vZHVsZSlyZXR1cm4gdmFsdWU7LyoqKioqKi92YXIgbnM9T2JqZWN0LmNyZWF0ZShudWxsKTsvKioqKioqL19fd2VicGFja19yZXF1aXJlX18ucihucyk7LyoqKioqKi9PYmplY3QuZGVmaW5lUHJvcGVydHkobnMsJ2RlZmF1bHQnLHtlbnVtZXJhYmxlOnRydWUsdmFsdWU6dmFsdWV9KTsvKioqKioqL2lmKG1vZGUmMiYmdHlwZW9mIHZhbHVlIT0nc3RyaW5nJylmb3IodmFyIGtleSBpbiB2YWx1ZSl7X193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLGtleSxmdW5jdGlvbihrZXkpe3JldHVybiB2YWx1ZVtrZXldO30uYmluZChudWxsLGtleSkpO30vKioqKioqL3JldHVybiBuczsvKioqKioqL307LyoqKioqKi8gLyoqKioqKi8gLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXMKLyoqKioqKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm49ZnVuY3Rpb24obW9kdWxlKXsvKioqKioqL3ZhciBnZXR0ZXI9bW9kdWxlJiZtb2R1bGUuX19lc01vZHVsZT8vKioqKioqL2Z1bmN0aW9uIGdldERlZmF1bHQoKXtyZXR1cm4gbW9kdWxlWydkZWZhdWx0J107fTovKioqKioqL2Z1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKXtyZXR1cm4gbW9kdWxlO307LyoqKioqKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCdhJyxnZXR0ZXIpOy8qKioqKiovcmV0dXJuIGdldHRlcjsvKioqKioqL307LyoqKioqKi8gLyoqKioqKi8gLy8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsCi8qKioqKiovX193ZWJwYWNrX3JlcXVpcmVfXy5vPWZ1bmN0aW9uKG9iamVjdCxwcm9wZXJ0eSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QscHJvcGVydHkpO307LyoqKioqKi8gLyoqKioqKi8gLy8gX193ZWJwYWNrX3B1YmxpY19wYXRoX18KLyoqKioqKi9fX3dlYnBhY2tfcmVxdWlyZV9fLnA9Ii9kaXN0LyI7LyoqKioqKi8gLyoqKioqKi8gLyoqKioqKi8gLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzCi8qKioqKiovcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zPTQ1KTsvKioqKioqL30oLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLyoqKioqKi9bLyogMCAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi91dGlscy9kYXRlLXV0aWwiKTsvKioqL30sLyogMSAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi91dGlscy9kb20iKTsvKioqL30sLyogMiAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsIik7LyoqKi99LC8qIDMgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXIiKTsvKioqL30sLyogNCAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9taXhpbnMvbG9jYWxlIik7LyoqKi99LC8qIDUgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlciIpOy8qKiovfSwvKiA2ICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoInZ1ZSIpOy8qKiovfSwvKiA3ICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoImVsZW1lbnQtdWkvbGliL3V0aWxzL21lcmdlIik7LyoqKi99LC8qIDggKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvaW5wdXQiKTsvKioqL30sLyogOSAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9taXhpbnMvbWlncmF0aW5nIik7LyoqKi99LC8qIDEwICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoImVsZW1lbnQtdWkvbGliL3V0aWxzL2NsaWNrb3V0c2lkZSIpOy8qKiovfSwvKiAxMSAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9sb2NhbGUiKTsvKioqL30sLyogMTIgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvYnV0dG9uIik7LyoqKi99LC8qIDEzICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoImVsZW1lbnQtdWkvbGliL3V0aWxzL3Jlc2l6ZS1ldmVudCIpOy8qKiovfSwvKiAxNCAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi91dGlscy9wb3B1cCIpOy8qKiovfSwvKiAxNSAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJ0aHJvdHRsZS1kZWJvdW5jZS9kZWJvdW5jZSIpOy8qKiovfSwvKiAxNiAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9jaGVja2JveCIpOy8qKiovfSwvKiAxNyAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9zY3JvbGxiYXIiKTsvKioqL30sLyogMTggKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvdXRpbHMvdHlwZXMiKTsvKioqL30sLyogMTkgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkIik7LyoqKi99LC8qIDIwICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoImVsZW1lbnQtdWkvbGliL3V0aWxzL2RhdGUiKTsvKioqL30sLyogMjEgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvdHJhbnNpdGlvbnMvY29sbGFwc2UtdHJhbnNpdGlvbiIpOy8qKiovfSwvKiAyMiAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZm9jdXMiKTsvKioqL30sLyogMjMgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvdXRpbHMvdmRvbSIpOy8qKiovfSwvKiAyNCAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJiYWJlbC1oZWxwZXItdnVlLWpzeC1tZXJnZS1wcm9wcyIpOy8qKiovfSwvKiAyNSAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJ0aHJvdHRsZS1kZWJvdW5jZS90aHJvdHRsZSIpOy8qKiovfSwvKiAyNiAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi90b29sdGlwIik7LyoqKi99LC8qIDI3ICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbC1pbnRvLXZpZXciKTsvKioqL30sLyogMjggKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS11dGlscyIpOy8qKiovfSwvKiAyOSAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9idXR0b24tZ3JvdXAiKTsvKioqL30sLyogMzAgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvdGFnIik7LyoqKi99LC8qIDMxICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbGJhci13aWR0aCIpOy8qKiovfSwvKiAzMiAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9jaGVja2JveC1ncm91cCIpOy8qKiovfSwvKiAzMyAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi91dGlscy9hZnRlci1sZWF2ZSIpOy8qKiovfSwvKiAzNCAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9wcm9ncmVzcyIpOy8qKiovfSwvKiAzNSAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJ0aHJvdHRsZS1kZWJvdW5jZSIpOy8qKiovfSwvKiAzNiAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi9zZWxlY3QiKTsvKioqL30sLyogMzcgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvb3B0aW9uIik7LyoqKi99LC8qIDM4ICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoIm5vcm1hbGl6ZS13aGVlbCIpOy8qKiovfSwvKiAzOSAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJlbGVtZW50LXVpL2xpYi91dGlscy9hcmlhLWRpYWxvZyIpOy8qKiovfSwvKiA0MCAqLyAvKioqL2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCJhc3luYy12YWxpZGF0b3IiKTsvKioqL30sLyogNDEgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgiZWxlbWVudC11aS9saWIvaW5wdXQtbnVtYmVyIik7LyoqKi99LC8qIDQyICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoImVsZW1lbnQtdWkvbGliL2Nhc2NhZGVyLXBhbmVsIik7LyoqKi99LC8qIDQzICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoImVsZW1lbnQtdWkvbGliL3JhZGlvIik7LyoqKi99LC8qIDQ0ICovIC8qKiovZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXJlcXVpcmUoImVsZW1lbnQtdWkvbGliL3BvcG92ZXIiKTsvKioqL30sLyogNDUgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXttb2R1bGUuZXhwb3J0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTsvKioqL30sLyogNDYgKi8gLyoqKi9mdW5jdGlvbihtb2R1bGUsX193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcGFnaW5hdGlvbi9zcmMvcGFnZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyNzRmMjY3Jgp2YXIgcGFnZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83Mjc0ZjI2N19yZW5kZXI9ZnVuY3Rpb24gcGFnZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83Mjc0ZjI2N19yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInVsIix7c3RhdGljQ2xhc3M6ImVsLXBhZ2VyIixvbjp7Y2xpY2s6X3ZtLm9uUGFnZXJDbGlja319LFtfdm0ucGFnZUNvdW50PjA/X2MoImxpIix7c3RhdGljQ2xhc3M6Im51bWJlciIsY2xhc3M6e2FjdGl2ZTpfdm0uY3VycmVudFBhZ2U9PT0xLGRpc2FibGVkOl92bS5kaXNhYmxlZH19LFtfdm0uX3YoIjEiKV0pOl92bS5fZSgpLF92bS5zaG93UHJldk1vcmU/X2MoImxpIix7c3RhdGljQ2xhc3M6ImVsLWljb24gbW9yZSBidG4tcXVpY2twcmV2IixjbGFzczpbX3ZtLnF1aWNrcHJldkljb25DbGFzcyx7ZGlzYWJsZWQ6X3ZtLmRpc2FibGVkfV0sb246e21vdXNlZW50ZXI6ZnVuY3Rpb24gbW91c2VlbnRlcigkZXZlbnQpe192bS5vbk1vdXNlZW50ZXIoImxlZnQiKTt9LG1vdXNlbGVhdmU6ZnVuY3Rpb24gbW91c2VsZWF2ZSgkZXZlbnQpe192bS5xdWlja3ByZXZJY29uQ2xhc3M9ImVsLWljb24tbW9yZSI7fX19KTpfdm0uX2UoKSxfdm0uX2woX3ZtLnBhZ2VycyxmdW5jdGlvbihwYWdlcil7cmV0dXJuIF9jKCJsaSIse2tleTpwYWdlcixzdGF0aWNDbGFzczoibnVtYmVyIixjbGFzczp7YWN0aXZlOl92bS5jdXJyZW50UGFnZT09PXBhZ2VyLGRpc2FibGVkOl92bS5kaXNhYmxlZH19LFtfdm0uX3YoX3ZtLl9zKHBhZ2VyKSldKTt9KSxfdm0uc2hvd05leHRNb3JlP19jKCJsaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uIG1vcmUgYnRuLXF1aWNrbmV4dCIsY2xhc3M6W192bS5xdWlja25leHRJY29uQ2xhc3Mse2Rpc2FibGVkOl92bS5kaXNhYmxlZH1dLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uIG1vdXNlZW50ZXIoJGV2ZW50KXtfdm0ub25Nb3VzZWVudGVyKCJyaWdodCIpO30sbW91c2VsZWF2ZTpmdW5jdGlvbiBtb3VzZWxlYXZlKCRldmVudCl7X3ZtLnF1aWNrbmV4dEljb25DbGFzcz0iZWwtaWNvbi1tb3JlIjt9fX0pOl92bS5fZSgpLF92bS5wYWdlQ291bnQ+MT9fYygibGkiLHtzdGF0aWNDbGFzczoibnVtYmVyIixjbGFzczp7YWN0aXZlOl92bS5jdXJyZW50UGFnZT09PV92bS5wYWdlQ291bnQsZGlzYWJsZWQ6X3ZtLmRpc2FibGVkfX0sW192bS5fdihfdm0uX3MoX3ZtLnBhZ2VDb3VudCkpXSk6X3ZtLl9lKCldLDIpO307dmFyIHN0YXRpY1JlbmRlckZucz1bXTtwYWdlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzcyNzRmMjY3X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdpbmF0aW9uL3NyYy9wYWdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzI3NGYyNjcmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3BhZ2luYXRpb24vc3JjL3BhZ2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxQYWdlcicscHJvcHM6e2N1cnJlbnRQYWdlOk51bWJlcixwYWdlQ291bnQ6TnVtYmVyLHBhZ2VyQ291bnQ6TnVtYmVyLGRpc2FibGVkOkJvb2xlYW59LHdhdGNoOntzaG93UHJldk1vcmU6ZnVuY3Rpb24gc2hvd1ByZXZNb3JlKHZhbCl7aWYoIXZhbCl0aGlzLnF1aWNrcHJldkljb25DbGFzcz0nZWwtaWNvbi1tb3JlJzt9LHNob3dOZXh0TW9yZTpmdW5jdGlvbiBzaG93TmV4dE1vcmUodmFsKXtpZighdmFsKXRoaXMucXVpY2tuZXh0SWNvbkNsYXNzPSdlbC1pY29uLW1vcmUnO319LG1ldGhvZHM6e29uUGFnZXJDbGljazpmdW5jdGlvbiBvblBhZ2VyQ2xpY2soZXZlbnQpe3ZhciB0YXJnZXQ9ZXZlbnQudGFyZ2V0O2lmKHRhcmdldC50YWdOYW1lPT09J1VMJ3x8dGhpcy5kaXNhYmxlZCl7cmV0dXJuO312YXIgbmV3UGFnZT1OdW1iZXIoZXZlbnQudGFyZ2V0LnRleHRDb250ZW50KTt2YXIgcGFnZUNvdW50PXRoaXMucGFnZUNvdW50O3ZhciBjdXJyZW50UGFnZT10aGlzLmN1cnJlbnRQYWdlO3ZhciBwYWdlckNvdW50T2Zmc2V0PXRoaXMucGFnZXJDb3VudC0yO2lmKHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZignbW9yZScpIT09LTEpe2lmKHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZigncXVpY2twcmV2JykhPT0tMSl7bmV3UGFnZT1jdXJyZW50UGFnZS1wYWdlckNvdW50T2Zmc2V0O31lbHNlIGlmKHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZigncXVpY2tuZXh0JykhPT0tMSl7bmV3UGFnZT1jdXJyZW50UGFnZStwYWdlckNvdW50T2Zmc2V0O319LyogaXN0YW5idWwgaWdub3JlIGlmICovaWYoIWlzTmFOKG5ld1BhZ2UpKXtpZihuZXdQYWdlPDEpe25ld1BhZ2U9MTt9aWYobmV3UGFnZT5wYWdlQ291bnQpe25ld1BhZ2U9cGFnZUNvdW50O319aWYobmV3UGFnZSE9PWN1cnJlbnRQYWdlKXt0aGlzLiRlbWl0KCdjaGFuZ2UnLG5ld1BhZ2UpO319LG9uTW91c2VlbnRlcjpmdW5jdGlvbiBvbk1vdXNlZW50ZXIoZGlyZWN0aW9uKXtpZih0aGlzLmRpc2FibGVkKXJldHVybjtpZihkaXJlY3Rpb249PT0nbGVmdCcpe3RoaXMucXVpY2twcmV2SWNvbkNsYXNzPSdlbC1pY29uLWQtYXJyb3ctbGVmdCc7fWVsc2V7dGhpcy5xdWlja25leHRJY29uQ2xhc3M9J2VsLWljb24tZC1hcnJvdy1yaWdodCc7fX19LGNvbXB1dGVkOntwYWdlcnM6ZnVuY3Rpb24gcGFnZXJzKCl7dmFyIHBhZ2VyQ291bnQ9dGhpcy5wYWdlckNvdW50O3ZhciBoYWxmUGFnZXJDb3VudD0ocGFnZXJDb3VudC0xKS8yO3ZhciBjdXJyZW50UGFnZT1OdW1iZXIodGhpcy5jdXJyZW50UGFnZSk7dmFyIHBhZ2VDb3VudD1OdW1iZXIodGhpcy5wYWdlQ291bnQpO3ZhciBzaG93UHJldk1vcmU9ZmFsc2U7dmFyIHNob3dOZXh0TW9yZT1mYWxzZTtpZihwYWdlQ291bnQ+cGFnZXJDb3VudCl7aWYoY3VycmVudFBhZ2U+cGFnZXJDb3VudC1oYWxmUGFnZXJDb3VudCl7c2hvd1ByZXZNb3JlPXRydWU7fWlmKGN1cnJlbnRQYWdlPHBhZ2VDb3VudC1oYWxmUGFnZXJDb3VudCl7c2hvd05leHRNb3JlPXRydWU7fX12YXIgYXJyYXk9W107aWYoc2hvd1ByZXZNb3JlJiYhc2hvd05leHRNb3JlKXt2YXIgc3RhcnRQYWdlPXBhZ2VDb3VudC0ocGFnZXJDb3VudC0yKTtmb3IodmFyIGk9c3RhcnRQYWdlO2k8cGFnZUNvdW50O2krKyl7YXJyYXkucHVzaChpKTt9fWVsc2UgaWYoIXNob3dQcmV2TW9yZSYmc2hvd05leHRNb3JlKXtmb3IodmFyIF9pPTI7X2k8cGFnZXJDb3VudDtfaSsrKXthcnJheS5wdXNoKF9pKTt9fWVsc2UgaWYoc2hvd1ByZXZNb3JlJiZzaG93TmV4dE1vcmUpe3ZhciBvZmZzZXQ9TWF0aC5mbG9vcihwYWdlckNvdW50LzIpLTE7Zm9yKHZhciBfaTI9Y3VycmVudFBhZ2Utb2Zmc2V0O19pMjw9Y3VycmVudFBhZ2Urb2Zmc2V0O19pMisrKXthcnJheS5wdXNoKF9pMik7fX1lbHNle2Zvcih2YXIgX2kzPTI7X2kzPHBhZ2VDb3VudDtfaTMrKyl7YXJyYXkucHVzaChfaTMpO319dGhpcy5zaG93UHJldk1vcmU9c2hvd1ByZXZNb3JlO3RoaXMuc2hvd05leHRNb3JlPXNob3dOZXh0TW9yZTtyZXR1cm4gYXJyYXk7fX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2N1cnJlbnQ6bnVsbCxzaG93UHJldk1vcmU6ZmFsc2Usc2hvd05leHRNb3JlOmZhbHNlLHF1aWNrbmV4dEljb25DbGFzczonZWwtaWNvbi1tb3JlJyxxdWlja3ByZXZJY29uQ2xhc3M6J2VsLWljb24tbW9yZSd9O319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcGFnaW5hdGlvbi9zcmMvcGFnZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19wYWdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1wYWdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMKLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovIC8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLgovLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbAovLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS4KZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50KHNjcmlwdEV4cG9ydHMscmVuZGVyLHN0YXRpY1JlbmRlckZucyxmdW5jdGlvbmFsVGVtcGxhdGUsaW5qZWN0U3R5bGVzLHNjb3BlSWQsbW9kdWxlSWRlbnRpZmllciwvKiBzZXJ2ZXIgb25seSAqL3NoYWRvd01vZGUvKiB2dWUtY2xpIG9ubHkgKi8pey8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3AKdmFyIG9wdGlvbnM9dHlwZW9mIHNjcmlwdEV4cG9ydHM9PT0nZnVuY3Rpb24nP3NjcmlwdEV4cG9ydHMub3B0aW9uczpzY3JpcHRFeHBvcnRzOy8vIHJlbmRlciBmdW5jdGlvbnMKaWYocmVuZGVyKXtvcHRpb25zLnJlbmRlcj1yZW5kZXI7b3B0aW9ucy5zdGF0aWNSZW5kZXJGbnM9c3RhdGljUmVuZGVyRm5zO29wdGlvbnMuX2NvbXBpbGVkPXRydWU7fS8vIGZ1bmN0aW9uYWwgdGVtcGxhdGUKaWYoZnVuY3Rpb25hbFRlbXBsYXRlKXtvcHRpb25zLmZ1bmN0aW9uYWw9dHJ1ZTt9Ly8gc2NvcGVkSWQKaWYoc2NvcGVJZCl7b3B0aW9ucy5fc2NvcGVJZD0nZGF0YS12LScrc2NvcGVJZDt9dmFyIGhvb2s7aWYobW9kdWxlSWRlbnRpZmllcil7Ly8gc2VydmVyIGJ1aWxkCmhvb2s9ZnVuY3Rpb24gaG9vayhjb250ZXh0KXsvLyAyLjMgaW5qZWN0aW9uCmNvbnRleHQ9Y29udGV4dHx8Ly8gY2FjaGVkIGNhbGwKdGhpcy4kdm5vZGUmJnRoaXMuJHZub2RlLnNzckNvbnRleHR8fC8vIHN0YXRlZnVsCnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC4kdm5vZGUmJnRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0Oy8vIGZ1bmN0aW9uYWwKLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlCmlmKCFjb250ZXh0JiZ0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyE9PSd1bmRlZmluZWQnKXtjb250ZXh0PV9fVlVFX1NTUl9DT05URVhUX187fS8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzCmlmKGluamVjdFN0eWxlcyl7aW5qZWN0U3R5bGVzLmNhbGwodGhpcyxjb250ZXh0KTt9Ly8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlCmlmKGNvbnRleHQmJmNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKXtjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcik7fX07Ly8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGUKLy8gbmV2ZXIgZ2V0cyBjYWxsZWQKb3B0aW9ucy5fc3NyUmVnaXN0ZXI9aG9vazt9ZWxzZSBpZihpbmplY3RTdHlsZXMpe2hvb2s9c2hhZG93TW9kZT9mdW5jdGlvbigpe2luamVjdFN0eWxlcy5jYWxsKHRoaXMsdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KTt9OmluamVjdFN0eWxlczt9aWYoaG9vayl7aWYob3B0aW9ucy5mdW5jdGlvbmFsKXsvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndAovLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyCm9wdGlvbnMuX2luamVjdFN0eWxlcz1ob29rOy8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlCnZhciBvcmlnaW5hbFJlbmRlcj1vcHRpb25zLnJlbmRlcjtvcHRpb25zLnJlbmRlcj1mdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24oaCxjb250ZXh0KXtob29rLmNhbGwoY29udGV4dCk7cmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsY29udGV4dCk7fTt9ZWxzZXsvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9vawp2YXIgZXhpc3Rpbmc9b3B0aW9ucy5iZWZvcmVDcmVhdGU7b3B0aW9ucy5iZWZvcmVDcmVhdGU9ZXhpc3Rpbmc/W10uY29uY2F0KGV4aXN0aW5nLGhvb2spOltob29rXTt9fXJldHVybntleHBvcnRzOnNjcmlwdEV4cG9ydHMsb3B0aW9uczpvcHRpb25zfTt9Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdpbmF0aW9uL3NyYy9wYWdlci52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBjb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19wYWdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxwYWdlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzcyNzRmMjY3X3JlbmRlcixzdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGFwaTt9Y29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9wYWdpbmF0aW9uL3NyYy9wYWdlci52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFnZXI9Y29tcG9uZW50LmV4cG9ydHM7Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvc2VsZWN0Igp2YXIgc2VsZWN0Xz1fX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTt2YXIgc2VsZWN0X2RlZmF1bHQ9LyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzZWxlY3RfKTsvLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi9vcHRpb24iCnZhciBvcHRpb25fPV9fd2VicGFja19yZXF1aXJlX18oMzcpO3ZhciBvcHRpb25fZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKG9wdGlvbl8pOy8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL2lucHV0Igp2YXIgaW5wdXRfPV9fd2VicGFja19yZXF1aXJlX18oOCk7dmFyIGlucHV0X2RlZmF1bHQ9LyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihpbnB1dF8pOy8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL21peGlucy9sb2NhbGUiCnZhciBsb2NhbGVfPV9fd2VicGFja19yZXF1aXJlX18oNCk7dmFyIGxvY2FsZV9kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obG9jYWxlXyk7Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbCIKdmFyIHV0aWxfPV9fd2VicGFja19yZXF1aXJlX18oMik7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmpzCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFnaW5hdGlvbj17bmFtZTonRWxQYWdpbmF0aW9uJyxwcm9wczp7cGFnZVNpemU6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTB9LHNtYWxsOkJvb2xlYW4sdG90YWw6TnVtYmVyLHBhZ2VDb3VudDpOdW1iZXIscGFnZXJDb3VudDp7dHlwZTpOdW1iZXIsdmFsaWRhdG9yOmZ1bmN0aW9uIHZhbGlkYXRvcih2YWx1ZSl7cmV0dXJuKHZhbHVlfDApPT09dmFsdWUmJnZhbHVlPjQmJnZhbHVlPDIyJiZ2YWx1ZSUyPT09MTt9LGRlZmF1bHQ6N30sY3VycmVudFBhZ2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0sbGF5b3V0OntkZWZhdWx0OidwcmV2LCBwYWdlciwgbmV4dCwganVtcGVyLCAtPiwgdG90YWwnfSxwYWdlU2l6ZXM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVyblsxMCwyMCwzMCw0MCw1MCwxMDBdO319LHBvcHBlckNsYXNzOlN0cmluZyxwcmV2VGV4dDpTdHJpbmcsbmV4dFRleHQ6U3RyaW5nLGJhY2tncm91bmQ6Qm9vbGVhbixkaXNhYmxlZDpCb29sZWFuLGhpZGVPblNpbmdsZVBhZ2U6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2ludGVybmFsQ3VycmVudFBhZ2U6MSxpbnRlcm5hbFBhZ2VTaXplOjAsbGFzdEVtaXR0ZWRQYWdlOi0xLHVzZXJDaGFuZ2VQYWdlU2l6ZTpmYWxzZX07fSxyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKGgpe3ZhciBsYXlvdXQ9dGhpcy5sYXlvdXQ7aWYoIWxheW91dClyZXR1cm4gbnVsbDtpZih0aGlzLmhpZGVPblNpbmdsZVBhZ2UmJighdGhpcy5pbnRlcm5hbFBhZ2VDb3VudHx8dGhpcy5pbnRlcm5hbFBhZ2VDb3VudD09PTEpKXJldHVybiBudWxsO3ZhciB0ZW1wbGF0ZT1oKCdkaXYnLHsnY2xhc3MnOlsnZWwtcGFnaW5hdGlvbicseydpcy1iYWNrZ3JvdW5kJzp0aGlzLmJhY2tncm91bmQsJ2VsLXBhZ2luYXRpb24tLXNtYWxsJzp0aGlzLnNtYWxsfV19KTt2YXIgVEVNUExBVEVfTUFQPXtwcmV2OmgoJ3ByZXYnKSxqdW1wZXI6aCgnanVtcGVyJykscGFnZXI6aCgncGFnZXInLHthdHRyczp7Y3VycmVudFBhZ2U6dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlLHBhZ2VDb3VudDp0aGlzLmludGVybmFsUGFnZUNvdW50LHBhZ2VyQ291bnQ6dGhpcy5wYWdlckNvdW50LGRpc2FibGVkOnRoaXMuZGlzYWJsZWR9LG9uOnsnY2hhbmdlJzp0aGlzLmhhbmRsZUN1cnJlbnRDaGFuZ2V9fSksbmV4dDpoKCduZXh0Jyksc2l6ZXM6aCgnc2l6ZXMnLHthdHRyczp7cGFnZVNpemVzOnRoaXMucGFnZVNpemVzfX0pLHNsb3Q6aCgnc2xvdCcsW3RoaXMuJHNsb3RzLmRlZmF1bHQ/dGhpcy4kc2xvdHMuZGVmYXVsdDonJ10pLHRvdGFsOmgoJ3RvdGFsJyl9O3ZhciBjb21wb25lbnRzPWxheW91dC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbS50cmltKCk7fSk7dmFyIHJpZ2h0V3JhcHBlcj1oKCdkaXYnLHsnY2xhc3MnOidlbC1wYWdpbmF0aW9uX19yaWdodHdyYXBwZXInfSk7dmFyIGhhdmVSaWdodFdyYXBwZXI9ZmFsc2U7dGVtcGxhdGUuY2hpbGRyZW49dGVtcGxhdGUuY2hpbGRyZW58fFtdO3JpZ2h0V3JhcHBlci5jaGlsZHJlbj1yaWdodFdyYXBwZXIuY2hpbGRyZW58fFtdO2NvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbihjb21wbyl7aWYoY29tcG89PT0nLT4nKXtoYXZlUmlnaHRXcmFwcGVyPXRydWU7cmV0dXJuO31pZighaGF2ZVJpZ2h0V3JhcHBlcil7dGVtcGxhdGUuY2hpbGRyZW4ucHVzaChURU1QTEFURV9NQVBbY29tcG9dKTt9ZWxzZXtyaWdodFdyYXBwZXIuY2hpbGRyZW4ucHVzaChURU1QTEFURV9NQVBbY29tcG9dKTt9fSk7aWYoaGF2ZVJpZ2h0V3JhcHBlcil7dGVtcGxhdGUuY2hpbGRyZW4udW5zaGlmdChyaWdodFdyYXBwZXIpO31yZXR1cm4gdGVtcGxhdGU7fSxjb21wb25lbnRzOntQcmV2OntyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKGgpe3JldHVybiBoKCdidXR0b24nLHthdHRyczp7dHlwZTonYnV0dG9uJyxkaXNhYmxlZDp0aGlzLiRwYXJlbnQuZGlzYWJsZWR8fHRoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlPD0xfSwnY2xhc3MnOididG4tcHJldicsb246eydjbGljayc6dGhpcy4kcGFyZW50LnByZXZ9fSxbdGhpcy4kcGFyZW50LnByZXZUZXh0P2goJ3NwYW4nLFt0aGlzLiRwYXJlbnQucHJldlRleHRdKTpoKCdpJyx7J2NsYXNzJzonZWwtaWNvbiBlbC1pY29uLWFycm93LWxlZnQnfSldKTt9fSxOZXh0OntyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKGgpe3JldHVybiBoKCdidXR0b24nLHthdHRyczp7dHlwZTonYnV0dG9uJyxkaXNhYmxlZDp0aGlzLiRwYXJlbnQuZGlzYWJsZWR8fHRoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlPT09dGhpcy4kcGFyZW50LmludGVybmFsUGFnZUNvdW50fHx0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlQ291bnQ9PT0wfSwnY2xhc3MnOididG4tbmV4dCcsb246eydjbGljayc6dGhpcy4kcGFyZW50Lm5leHR9fSxbdGhpcy4kcGFyZW50Lm5leHRUZXh0P2goJ3NwYW4nLFt0aGlzLiRwYXJlbnQubmV4dFRleHRdKTpoKCdpJyx7J2NsYXNzJzonZWwtaWNvbiBlbC1pY29uLWFycm93LXJpZ2h0J30pXSk7fX0sU2l6ZXM6e21peGluczpbbG9jYWxlX2RlZmF1bHQuYV0scHJvcHM6e3BhZ2VTaXplczpBcnJheX0sd2F0Y2g6e3BhZ2VTaXplczp7aW1tZWRpYXRlOnRydWUsaGFuZGxlcjpmdW5jdGlvbiBoYW5kbGVyKG5ld1ZhbCxvbGRWYWwpe2lmKE9iamVjdCh1dGlsX1sidmFsdWVFcXVhbHMiXSkobmV3VmFsLG9sZFZhbCkpcmV0dXJuO2lmKEFycmF5LmlzQXJyYXkobmV3VmFsKSl7dGhpcy4kcGFyZW50LmludGVybmFsUGFnZVNpemU9bmV3VmFsLmluZGV4T2YodGhpcy4kcGFyZW50LnBhZ2VTaXplKT4tMT90aGlzLiRwYXJlbnQucGFnZVNpemU6dGhpcy5wYWdlU2l6ZXNbMF07fX19fSxyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKGgpe3ZhciBfdGhpcz10aGlzO3JldHVybiBoKCdzcGFuJyx7J2NsYXNzJzonZWwtcGFnaW5hdGlvbl9fc2l6ZXMnfSxbaCgnZWwtc2VsZWN0Jyx7YXR0cnM6e3ZhbHVlOnRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VTaXplLHBvcHBlckNsYXNzOnRoaXMuJHBhcmVudC5wb3BwZXJDbGFzc3x8Jycsc2l6ZTonbWluaScsZGlzYWJsZWQ6dGhpcy4kcGFyZW50LmRpc2FibGVkfSxvbjp7J2lucHV0Jzp0aGlzLmhhbmRsZUNoYW5nZX19LFt0aGlzLnBhZ2VTaXplcy5tYXAoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIGgoJ2VsLW9wdGlvbicse2F0dHJzOnt2YWx1ZTppdGVtLGxhYmVsOml0ZW0rX3RoaXMudCgnZWwucGFnaW5hdGlvbi5wYWdlc2l6ZScpfX0pO30pXSldKTt9LGNvbXBvbmVudHM6e0VsU2VsZWN0OnNlbGVjdF9kZWZhdWx0LmEsRWxPcHRpb246b3B0aW9uX2RlZmF1bHQuYX0sbWV0aG9kczp7aGFuZGxlQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZUNoYW5nZSh2YWwpe2lmKHZhbCE9PXRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VTaXplKXt0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlU2l6ZT12YWw9cGFyc2VJbnQodmFsLDEwKTt0aGlzLiRwYXJlbnQudXNlckNoYW5nZVBhZ2VTaXplPXRydWU7dGhpcy4kcGFyZW50LiRlbWl0KCd1cGRhdGU6cGFnZVNpemUnLHZhbCk7dGhpcy4kcGFyZW50LiRlbWl0KCdzaXplLWNoYW5nZScsdmFsKTt9fX19LEp1bXBlcjp7bWl4aW5zOltsb2NhbGVfZGVmYXVsdC5hXSxjb21wb25lbnRzOntFbElucHV0OmlucHV0X2RlZmF1bHQuYX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3VzZXJJbnB1dDpudWxsfTt9LHdhdGNoOnsnJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlJzpmdW5jdGlvbiAkcGFyZW50SW50ZXJuYWxDdXJyZW50UGFnZSgpe3RoaXMudXNlcklucHV0PW51bGw7fX0sbWV0aG9kczp7aGFuZGxlS2V5dXA6ZnVuY3Rpb24gaGFuZGxlS2V5dXAoX3JlZil7dmFyIGtleUNvZGU9X3JlZi5rZXlDb2RlLHRhcmdldD1fcmVmLnRhcmdldDsvLyBDaHJvbWUsIFNhZmFyaSwgRmlyZWZveCB0cmlnZ2VycyBjaGFuZ2UgZXZlbnQgb24gRW50ZXIKLy8gSGFjayBmb3IgSUU6IGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzExNzEwCi8vIERyb3AgdGhpcyBtZXRob2Qgd2hlbiB3ZSBubyBsb25nZXIgc3VwcG9ydHMgSUUKaWYoa2V5Q29kZT09PTEzKXt0aGlzLmhhbmRsZUNoYW5nZSh0YXJnZXQudmFsdWUpO319LGhhbmRsZUlucHV0OmZ1bmN0aW9uIGhhbmRsZUlucHV0KHZhbHVlKXt0aGlzLnVzZXJJbnB1dD12YWx1ZTt9LGhhbmRsZUNoYW5nZTpmdW5jdGlvbiBoYW5kbGVDaGFuZ2UodmFsdWUpe3RoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlPXRoaXMuJHBhcmVudC5nZXRWYWxpZEN1cnJlbnRQYWdlKHZhbHVlKTt0aGlzLiRwYXJlbnQuZW1pdENoYW5nZSgpO3RoaXMudXNlcklucHV0PW51bGw7fX0scmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihoKXtyZXR1cm4gaCgnc3BhbicseydjbGFzcyc6J2VsLXBhZ2luYXRpb25fX2p1bXAnfSxbdGhpcy50KCdlbC5wYWdpbmF0aW9uLmdvdG8nKSxoKCdlbC1pbnB1dCcseydjbGFzcyc6J2VsLXBhZ2luYXRpb25fX2VkaXRvciBpcy1pbi1wYWdpbmF0aW9uJyxhdHRyczp7bWluOjEsbWF4OnRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VDb3VudCx2YWx1ZTp0aGlzLnVzZXJJbnB1dCE9PW51bGw/dGhpcy51c2VySW5wdXQ6dGhpcy4kcGFyZW50LmludGVybmFsQ3VycmVudFBhZ2UsdHlwZTonbnVtYmVyJyxkaXNhYmxlZDp0aGlzLiRwYXJlbnQuZGlzYWJsZWR9LG5hdGl2ZU9uOnsna2V5dXAnOnRoaXMuaGFuZGxlS2V5dXB9LG9uOnsnaW5wdXQnOnRoaXMuaGFuZGxlSW5wdXQsJ2NoYW5nZSc6dGhpcy5oYW5kbGVDaGFuZ2V9fSksdGhpcy50KCdlbC5wYWdpbmF0aW9uLnBhZ2VDbGFzc2lmaWVyJyldKTt9fSxUb3RhbDp7bWl4aW5zOltsb2NhbGVfZGVmYXVsdC5hXSxyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKGgpe3JldHVybiB0eXBlb2YgdGhpcy4kcGFyZW50LnRvdGFsPT09J251bWJlcic/aCgnc3BhbicseydjbGFzcyc6J2VsLXBhZ2luYXRpb25fX3RvdGFsJ30sW3RoaXMudCgnZWwucGFnaW5hdGlvbi50b3RhbCcse3RvdGFsOnRoaXMuJHBhcmVudC50b3RhbH0pXSk6Jyc7fX0sUGFnZXI6cGFnZXJ9LG1ldGhvZHM6e2hhbmRsZUN1cnJlbnRDaGFuZ2U6ZnVuY3Rpb24gaGFuZGxlQ3VycmVudENoYW5nZSh2YWwpe3RoaXMuaW50ZXJuYWxDdXJyZW50UGFnZT10aGlzLmdldFZhbGlkQ3VycmVudFBhZ2UodmFsKTt0aGlzLnVzZXJDaGFuZ2VQYWdlU2l6ZT10cnVlO3RoaXMuZW1pdENoYW5nZSgpO30scHJldjpmdW5jdGlvbiBwcmV2KCl7aWYodGhpcy5kaXNhYmxlZClyZXR1cm47dmFyIG5ld1ZhbD10aGlzLmludGVybmFsQ3VycmVudFBhZ2UtMTt0aGlzLmludGVybmFsQ3VycmVudFBhZ2U9dGhpcy5nZXRWYWxpZEN1cnJlbnRQYWdlKG5ld1ZhbCk7dGhpcy4kZW1pdCgncHJldi1jbGljaycsdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlKTt0aGlzLmVtaXRDaGFuZ2UoKTt9LG5leHQ6ZnVuY3Rpb24gbmV4dCgpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO3ZhciBuZXdWYWw9dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlKzE7dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlPXRoaXMuZ2V0VmFsaWRDdXJyZW50UGFnZShuZXdWYWwpO3RoaXMuJGVtaXQoJ25leHQtY2xpY2snLHRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZSk7dGhpcy5lbWl0Q2hhbmdlKCk7fSxnZXRWYWxpZEN1cnJlbnRQYWdlOmZ1bmN0aW9uIGdldFZhbGlkQ3VycmVudFBhZ2UodmFsdWUpe3ZhbHVlPXBhcnNlSW50KHZhbHVlLDEwKTt2YXIgaGF2ZVBhZ2VDb3VudD10eXBlb2YgdGhpcy5pbnRlcm5hbFBhZ2VDb3VudD09PSdudW1iZXInO3ZhciByZXNldFZhbHVlPXZvaWQgMDtpZighaGF2ZVBhZ2VDb3VudCl7aWYoaXNOYU4odmFsdWUpfHx2YWx1ZTwxKXJlc2V0VmFsdWU9MTt9ZWxzZXtpZih2YWx1ZTwxKXtyZXNldFZhbHVlPTE7fWVsc2UgaWYodmFsdWU+dGhpcy5pbnRlcm5hbFBhZ2VDb3VudCl7cmVzZXRWYWx1ZT10aGlzLmludGVybmFsUGFnZUNvdW50O319aWYocmVzZXRWYWx1ZT09PXVuZGVmaW5lZCYmaXNOYU4odmFsdWUpKXtyZXNldFZhbHVlPTE7fWVsc2UgaWYocmVzZXRWYWx1ZT09PTApe3Jlc2V0VmFsdWU9MTt9cmV0dXJuIHJlc2V0VmFsdWU9PT11bmRlZmluZWQ/dmFsdWU6cmVzZXRWYWx1ZTt9LGVtaXRDaGFuZ2U6ZnVuY3Rpb24gZW1pdENoYW5nZSgpe3ZhciBfdGhpczI9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lmKF90aGlzMi5pbnRlcm5hbEN1cnJlbnRQYWdlIT09X3RoaXMyLmxhc3RFbWl0dGVkUGFnZXx8X3RoaXMyLnVzZXJDaGFuZ2VQYWdlU2l6ZSl7X3RoaXMyLiRlbWl0KCdjdXJyZW50LWNoYW5nZScsX3RoaXMyLmludGVybmFsQ3VycmVudFBhZ2UpO190aGlzMi5sYXN0RW1pdHRlZFBhZ2U9X3RoaXMyLmludGVybmFsQ3VycmVudFBhZ2U7X3RoaXMyLnVzZXJDaGFuZ2VQYWdlU2l6ZT1mYWxzZTt9fSk7fX0sY29tcHV0ZWQ6e2ludGVybmFsUGFnZUNvdW50OmZ1bmN0aW9uIGludGVybmFsUGFnZUNvdW50KCl7aWYodHlwZW9mIHRoaXMudG90YWw9PT0nbnVtYmVyJyl7cmV0dXJuIE1hdGgubWF4KDEsTWF0aC5jZWlsKHRoaXMudG90YWwvdGhpcy5pbnRlcm5hbFBhZ2VTaXplKSk7fWVsc2UgaWYodHlwZW9mIHRoaXMucGFnZUNvdW50PT09J251bWJlcicpe3JldHVybiBNYXRoLm1heCgxLHRoaXMucGFnZUNvdW50KTt9cmV0dXJuIG51bGw7fX0sd2F0Y2g6e2N1cnJlbnRQYWdlOntpbW1lZGlhdGU6dHJ1ZSxoYW5kbGVyOmZ1bmN0aW9uIGhhbmRsZXIodmFsKXt0aGlzLmludGVybmFsQ3VycmVudFBhZ2U9dGhpcy5nZXRWYWxpZEN1cnJlbnRQYWdlKHZhbCk7fX0scGFnZVNpemU6e2ltbWVkaWF0ZTp0cnVlLGhhbmRsZXI6ZnVuY3Rpb24gaGFuZGxlcih2YWwpe3RoaXMuaW50ZXJuYWxQYWdlU2l6ZT1pc05hTih2YWwpPzEwOnZhbDt9fSxpbnRlcm5hbEN1cnJlbnRQYWdlOntpbW1lZGlhdGU6dHJ1ZSxoYW5kbGVyOmZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsKXt0aGlzLiRlbWl0KCd1cGRhdGU6Y3VycmVudFBhZ2UnLG5ld1ZhbCk7dGhpcy5sYXN0RW1pdHRlZFBhZ2U9LTE7fX0saW50ZXJuYWxQYWdlQ291bnQ6ZnVuY3Rpb24gaW50ZXJuYWxQYWdlQ291bnQobmV3VmFsKXsvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi92YXIgb2xkUGFnZT10aGlzLmludGVybmFsQ3VycmVudFBhZ2U7aWYobmV3VmFsPjAmJm9sZFBhZ2U9PT0wKXt0aGlzLmludGVybmFsQ3VycmVudFBhZ2U9MTt9ZWxzZSBpZihvbGRQYWdlPm5ld1ZhbCl7dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlPW5ld1ZhbD09PTA/MTpuZXdWYWw7dGhpcy51c2VyQ2hhbmdlUGFnZVNpemUmJnRoaXMuZW1pdENoYW5nZSgpO310aGlzLnVzZXJDaGFuZ2VQYWdlU2l6ZT1mYWxzZTt9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdpbmF0aW9uL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovcGFnaW5hdGlvbi5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChwYWdpbmF0aW9uLm5hbWUscGFnaW5hdGlvbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3BhZ2luYXRpb249cGFnaW5hdGlvbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RpYWxvZy9zcmMvY29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MDE0MGU2MiYKdmFyIGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYwMTQwZTYyX3JlbmRlcj1mdW5jdGlvbiBjb21wb25lbnR2dWVfdHlwZV90ZW1wbGF0ZV9pZF82MDE0MGU2Ml9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZGlhbG9nLWZhZGUifSxvbjp7ImFmdGVyLWVudGVyIjpfdm0uYWZ0ZXJFbnRlciwiYWZ0ZXItbGVhdmUiOl92bS5hZnRlckxlYXZlfX0sW19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0udmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1kaWFsb2dfX3dyYXBwZXIiLG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe2lmKCRldmVudC50YXJnZXQhPT0kZXZlbnQuY3VycmVudFRhcmdldCl7cmV0dXJuIG51bGw7fXJldHVybiBfdm0uaGFuZGxlV3JhcHBlckNsaWNrKCRldmVudCk7fX19LFtfYygiZGl2Iix7a2V5Ol92bS5rZXkscmVmOiJkaWFsb2ciLGNsYXNzOlsiZWwtZGlhbG9nIix7ImlzLWZ1bGxzY3JlZW4iOl92bS5mdWxsc2NyZWVuLCJlbC1kaWFsb2ctLWNlbnRlciI6X3ZtLmNlbnRlcn0sX3ZtLmN1c3RvbUNsYXNzXSxzdHlsZTpfdm0uc3R5bGUsYXR0cnM6e3JvbGU6ImRpYWxvZyIsImFyaWEtbW9kYWwiOiJ0cnVlIiwiYXJpYS1sYWJlbCI6X3ZtLnRpdGxlfHwiZGlhbG9nIn19LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWRpYWxvZ19faGVhZGVyIn0sW192bS5fdCgidGl0bGUiLFtfYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1kaWFsb2dfX3RpdGxlIn0sW192bS5fdihfdm0uX3MoX3ZtLnRpdGxlKSldKV0pLF92bS5zaG93Q2xvc2U/X2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1kaWFsb2dfX2hlYWRlcmJ0biIsYXR0cnM6e3R5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiJDbG9zZSJ9LG9uOntjbGljazpfdm0uaGFuZGxlQ2xvc2V9fSxbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtZGlhbG9nX19jbG9zZSBlbC1pY29uIGVsLWljb24tY2xvc2UifSldKTpfdm0uX2UoKV0sMiksX3ZtLnJlbmRlcmVkP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGlhbG9nX19ib2R5In0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTpfdm0uX2UoKSxfdm0uJHNsb3RzLmZvb3Rlcj9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWRpYWxvZ19fZm9vdGVyIn0sW192bS5fdCgiZm9vdGVyIildLDIpOl92bS5fZSgpXSldKV0pO307dmFyIGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYwMTQwZTYyX3N0YXRpY1JlbmRlckZucz1bXTtjb21wb25lbnR2dWVfdHlwZV90ZW1wbGF0ZV9pZF82MDE0MGU2Ml9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGlhbG9nL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYwMTQwZTYyJgovLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi91dGlscy9wb3B1cCIKdmFyIHBvcHVwXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTt2YXIgcG9wdXBfZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHBvcHVwXyk7Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvbWl4aW5zL21pZ3JhdGluZyIKdmFyIG1pZ3JhdGluZ189X193ZWJwYWNrX3JlcXVpcmVfXyg5KTt2YXIgbWlncmF0aW5nX2RlZmF1bHQ9LyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihtaWdyYXRpbmdfKTsvLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlciIKdmFyIGVtaXR0ZXJfPV9fd2VicGFja19yZXF1aXJlX18oMyk7dmFyIGVtaXR0ZXJfZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGVtaXR0ZXJfKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kaWFsb2cvc3JjL2NvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbERpYWxvZycsbWl4aW5zOltwb3B1cF9kZWZhdWx0LmEsZW1pdHRlcl9kZWZhdWx0LmEsbWlncmF0aW5nX2RlZmF1bHQuYV0scHJvcHM6e3RpdGxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OicnfSxtb2RhbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sbW9kYWxBcHBlbmRUb0JvZHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGFwcGVuZFRvQm9keTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ZmFsc2V9LGxvY2tTY3JvbGw6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGNsb3NlT25DbGlja01vZGFsOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxjbG9zZU9uUHJlc3NFc2NhcGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LHNob3dDbG9zZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sd2lkdGg6U3RyaW5nLGZ1bGxzY3JlZW46Qm9vbGVhbixjdXN0b21DbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDonJ30sdG9wOnt0eXBlOlN0cmluZyxkZWZhdWx0OicxNXZoJ30sYmVmb3JlQ2xvc2U6RnVuY3Rpb24sY2VudGVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX0sZGVzdHJveU9uQ2xvc2U6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2Nsb3NlZDpmYWxzZSxrZXk6MH07fSx3YXRjaDp7dmlzaWJsZTpmdW5jdGlvbiB2aXNpYmxlKHZhbCl7dmFyIF90aGlzPXRoaXM7aWYodmFsKXt0aGlzLmNsb3NlZD1mYWxzZTt0aGlzLiRlbWl0KCdvcGVuJyk7dGhpcy4kZWwuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJyx0aGlzLnVwZGF0ZVBvcHBlcik7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtfdGhpcy4kcmVmcy5kaWFsb2cuc2Nyb2xsVG9wPTA7fSk7aWYodGhpcy5hcHBlbmRUb0JvZHkpe2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpO319ZWxzZXt0aGlzLiRlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLHRoaXMudXBkYXRlUG9wcGVyKTtpZighdGhpcy5jbG9zZWQpdGhpcy4kZW1pdCgnY2xvc2UnKTtpZih0aGlzLmRlc3Ryb3lPbkNsb3NlKXt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe190aGlzLmtleSsrO30pO319fX0sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uIHN0eWxlKCl7dmFyIHN0eWxlPXt9O2lmKCF0aGlzLmZ1bGxzY3JlZW4pe3N0eWxlLm1hcmdpblRvcD10aGlzLnRvcDtpZih0aGlzLndpZHRoKXtzdHlsZS53aWR0aD10aGlzLndpZHRoO319cmV0dXJuIHN0eWxlO319LG1ldGhvZHM6e2dldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKXtyZXR1cm57cHJvcHM6eydzaXplJzonc2l6ZSBpcyByZW1vdmVkLid9fTt9LGhhbmRsZVdyYXBwZXJDbGljazpmdW5jdGlvbiBoYW5kbGVXcmFwcGVyQ2xpY2soKXtpZighdGhpcy5jbG9zZU9uQ2xpY2tNb2RhbClyZXR1cm47dGhpcy5oYW5kbGVDbG9zZSgpO30saGFuZGxlQ2xvc2U6ZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKXtpZih0eXBlb2YgdGhpcy5iZWZvcmVDbG9zZT09PSdmdW5jdGlvbicpe3RoaXMuYmVmb3JlQ2xvc2UodGhpcy5oaWRlKTt9ZWxzZXt0aGlzLmhpZGUoKTt9fSxoaWRlOmZ1bmN0aW9uIGhpZGUoY2FuY2VsKXtpZihjYW5jZWwhPT1mYWxzZSl7dGhpcy4kZW1pdCgndXBkYXRlOnZpc2libGUnLGZhbHNlKTt0aGlzLiRlbWl0KCdjbG9zZScpO3RoaXMuY2xvc2VkPXRydWU7fX0sdXBkYXRlUG9wcGVyOmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpe3RoaXMuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywndXBkYXRlUG9wcGVyJyk7dGhpcy5icm9hZGNhc3QoJ0VsRHJvcGRvd25NZW51JywndXBkYXRlUG9wcGVyJyk7fSxhZnRlckVudGVyOmZ1bmN0aW9uIGFmdGVyRW50ZXIoKXt0aGlzLiRlbWl0KCdvcGVuZWQnKTt9LGFmdGVyTGVhdmU6ZnVuY3Rpb24gYWZ0ZXJMZWF2ZSgpe3RoaXMuJGVtaXQoJ2Nsb3NlZCcpO319LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe2lmKHRoaXMudmlzaWJsZSl7dGhpcy5yZW5kZXJlZD10cnVlO3RoaXMub3BlbigpO2lmKHRoaXMuYXBwZW5kVG9Cb2R5KXtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuJGVsKTt9fX0sZGVzdHJveWVkOmZ1bmN0aW9uIGRlc3Ryb3llZCgpey8vIGlmIGFwcGVuZFRvQm9keSBpcyB0cnVlLCByZW1vdmUgRE9NIG5vZGUgYWZ0ZXIgZGVzdHJveQppZih0aGlzLmFwcGVuZFRvQm9keSYmdGhpcy4kZWwmJnRoaXMuJGVsLnBhcmVudE5vZGUpe3RoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RpYWxvZy9zcmMvY29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWNvbXBvbmVudHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RpYWxvZy9zcmMvY29tcG9uZW50LnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGNvbXBvbmVudF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19jb21wb25lbnR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sY29tcG9uZW50dnVlX3R5cGVfdGVtcGxhdGVfaWRfNjAxNDBlNjJfcmVuZGVyLGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYwMTQwZTYyX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgY29tcG9uZW50X2FwaTt9Y29tcG9uZW50X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZGlhbG9nL3NyYy9jb21wb25lbnQudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19jb21wb25lbnQ9Y29tcG9uZW50X2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGlhbG9nL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovc3JjX2NvbXBvbmVudC5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzcmNfY29tcG9uZW50Lm5hbWUsc3JjX2NvbXBvbmVudCk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGRpYWxvZz1zcmNfY29tcG9uZW50Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1MmYyZWU2Jgp2YXIgYXV0b2NvbXBsZXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMTUyZjJlZTZfcmVuZGVyPWZ1bmN0aW9uIGF1dG9jb21wbGV0ZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE1MmYyZWU2X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6ImNsaWNrb3V0c2lkZSIscmF3TmFtZToidi1jbGlja291dHNpZGUiLHZhbHVlOl92bS5jbG9zZSxleHByZXNzaW9uOiJjbG9zZSJ9XSxzdGF0aWNDbGFzczoiZWwtYXV0b2NvbXBsZXRlIixhdHRyczp7ImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94Iixyb2xlOiJjb21ib2JveCIsImFyaWEtZXhwYW5kZWQiOl92bS5zdWdnZXN0aW9uVmlzaWJsZSwiYXJpYS1vd25zIjpfdm0uaWR9fSxbX2MoImVsLWlucHV0Iixfdm0uX2Ioe3JlZjoiaW5wdXQiLG9uOntpbnB1dDpfdm0uaGFuZGxlSW5wdXQsY2hhbmdlOl92bS5oYW5kbGVDaGFuZ2UsZm9jdXM6X3ZtLmhhbmRsZUZvY3VzLGJsdXI6X3ZtLmhhbmRsZUJsdXIsY2xlYXI6X3ZtLmhhbmRsZUNsZWFyfSxuYXRpdmVPbjp7a2V5ZG93bjpbZnVuY3Rpb24oJGV2ZW50KXtpZighKCJidXR0b24iaW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLCJ1cCIsMzgsJGV2ZW50LmtleSxbIlVwIiwiQXJyb3dVcCJdKSl7cmV0dXJuIG51bGw7fSRldmVudC5wcmV2ZW50RGVmYXVsdCgpO192bS5oaWdobGlnaHQoX3ZtLmhpZ2hsaWdodGVkSW5kZXgtMSk7fSxmdW5jdGlvbigkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsImRvd24iLDQwLCRldmVudC5rZXksWyJEb3duIiwiQXJyb3dEb3duIl0pKXtyZXR1cm4gbnVsbDt9JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7X3ZtLmhpZ2hsaWdodChfdm0uaGlnaGxpZ2h0ZWRJbmRleCsxKTt9LGZ1bmN0aW9uKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwiZW50ZXIiLDEzLCRldmVudC5rZXksIkVudGVyIikpe3JldHVybiBudWxsO31yZXR1cm4gX3ZtLmhhbmRsZUtleUVudGVyKCRldmVudCk7fSxmdW5jdGlvbigkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsInRhYiIsOSwkZXZlbnQua2V5LCJUYWIiKSl7cmV0dXJuIG51bGw7fXJldHVybiBfdm0uY2xvc2UoJGV2ZW50KTt9XX19LCJlbC1pbnB1dCIsW192bS4kcHJvcHMsX3ZtLiRhdHRyc10sZmFsc2UpLFtfdm0uJHNsb3RzLnByZXBlbmQ/X2MoInRlbXBsYXRlIix7c2xvdDoicHJlcGVuZCJ9LFtfdm0uX3QoInByZXBlbmQiKV0sMik6X3ZtLl9lKCksX3ZtLiRzbG90cy5hcHBlbmQ/X2MoInRlbXBsYXRlIix7c2xvdDoiYXBwZW5kIn0sW192bS5fdCgiYXBwZW5kIildLDIpOl92bS5fZSgpLF92bS4kc2xvdHMucHJlZml4P19jKCJ0ZW1wbGF0ZSIse3Nsb3Q6InByZWZpeCJ9LFtfdm0uX3QoInByZWZpeCIpXSwyKTpfdm0uX2UoKSxfdm0uJHNsb3RzLnN1ZmZpeD9fYygidGVtcGxhdGUiLHtzbG90OiJzdWZmaXgifSxbX3ZtLl90KCJzdWZmaXgiKV0sMik6X3ZtLl9lKCldLDIpLF9jKCJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMiLHtyZWY6InN1Z2dlc3Rpb25zIixjbGFzczpbX3ZtLnBvcHBlckNsYXNzP192bS5wb3BwZXJDbGFzczoiIl0sYXR0cnM6eyJ2aXNpYmxlLWFycm93IjoiIiwicG9wcGVyLW9wdGlvbnMiOl92bS5wb3BwZXJPcHRpb25zLCJhcHBlbmQtdG8tYm9keSI6X3ZtLnBvcHBlckFwcGVuZFRvQm9keSxwbGFjZW1lbnQ6X3ZtLnBsYWNlbWVudCxpZDpfdm0uaWR9fSxfdm0uX2woX3ZtLnN1Z2dlc3Rpb25zLGZ1bmN0aW9uKGl0ZW0saW5kZXgpe3JldHVybiBfYygibGkiLHtrZXk6aW5kZXgsY2xhc3M6e2hpZ2hsaWdodGVkOl92bS5oaWdobGlnaHRlZEluZGV4PT09aW5kZXh9LGF0dHJzOntpZDpfdm0uaWQrIi1pdGVtLSIraW5kZXgscm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6X3ZtLmhpZ2hsaWdodGVkSW5kZXg9PT1pbmRleH0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLnNlbGVjdChpdGVtKTt9fX0sW192bS5fdCgiZGVmYXVsdCIsW192bS5fdigiXG4gICAgICAgICIrX3ZtLl9zKGl0ZW1bX3ZtLnZhbHVlS2V5XSkrIlxuICAgICAgIildLHtpdGVtOml0ZW19KV0sMik7fSksMCldLDEpO307dmFyIGF1dG9jb21wbGV0ZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE1MmYyZWU2X3N0YXRpY1JlbmRlckZucz1bXTthdXRvY29tcGxldGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNTJmMmVlNl9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1MmYyZWU2JgovLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJ0aHJvdHRsZS1kZWJvdW5jZS9kZWJvdW5jZSIKdmFyIGRlYm91bmNlXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTt2YXIgZGVib3VuY2VfZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGRlYm91bmNlXyk7Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvdXRpbHMvY2xpY2tvdXRzaWRlIgp2YXIgY2xpY2tvdXRzaWRlXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTt2YXIgY2xpY2tvdXRzaWRlX2RlZmF1bHQ9LyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjbGlja291dHNpZGVfKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jZDEwZGNmMCYKdmFyIGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2NkMTBkY2YwX3JlbmRlcj1mdW5jdGlvbiBhdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jZDEwZGNmMF9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifSxvbjp7ImFmdGVyLWxlYXZlIjpfdm0uZG9EZXN0cm95fX0sW19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uc2hvd1BvcHBlcixleHByZXNzaW9uOiJzaG93UG9wcGVyIn1dLHN0YXRpY0NsYXNzOiJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBlbC1wb3BwZXIiLGNsYXNzOnsiaXMtbG9hZGluZyI6IV92bS5wYXJlbnQuaGlkZUxvYWRpbmcmJl92bS5wYXJlbnQubG9hZGluZ30sc3R5bGU6e3dpZHRoOl92bS5kcm9wZG93bldpZHRofSxhdHRyczp7cm9sZToicmVnaW9uIn19LFtfYygiZWwtc2Nyb2xsYmFyIix7YXR0cnM6e3RhZzoidWwiLCJ3cmFwLWNsYXNzIjoiZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25fX3dyYXAiLCJ2aWV3LWNsYXNzIjoiZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25fX2xpc3QifX0sWyFfdm0ucGFyZW50LmhpZGVMb2FkaW5nJiZfdm0ucGFyZW50LmxvYWRpbmc/X2MoImxpIixbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1sb2FkaW5nIn0pXSk6X3ZtLl90KCJkZWZhdWx0IildLDIpXSwxKV0pO307dmFyIGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2NkMTBkY2YwX3N0YXRpY1JlbmRlckZucz1bXTthdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jZDEwZGNmMF9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNkMTBkY2YwJgovLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi91dGlscy92dWUtcG9wcGVyIgp2YXIgdnVlX3BvcHBlcl89X193ZWJwYWNrX3JlcXVpcmVfXyg1KTt2YXIgdnVlX3BvcHBlcl9kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX3BvcHBlcl8pOy8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL3Njcm9sbGJhciIKdmFyIHNjcm9sbGJhcl89X193ZWJwYWNrX3JlcXVpcmVfXygxNyk7dmFyIHNjcm9sbGJhcl9kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc2Nyb2xsYmFyXyk7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17Y29tcG9uZW50czp7RWxTY3JvbGxiYXI6c2Nyb2xsYmFyX2RlZmF1bHQuYX0sbWl4aW5zOlt2dWVfcG9wcGVyX2RlZmF1bHQuYSxlbWl0dGVyX2RlZmF1bHQuYV0sY29tcG9uZW50TmFtZTonRWxBdXRvY29tcGxldGVTdWdnZXN0aW9ucycsZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3BhcmVudDp0aGlzLiRwYXJlbnQsZHJvcGRvd25XaWR0aDonJ307fSxwcm9wczp7b3B0aW9uczp7ZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybntncHVBY2NlbGVyYXRpb246ZmFsc2V9O319LGlkOlN0cmluZ30sbWV0aG9kczp7c2VsZWN0OmZ1bmN0aW9uIHNlbGVjdChpdGVtKXt0aGlzLmRpc3BhdGNoKCdFbEF1dG9jb21wbGV0ZScsJ2l0ZW0tY2xpY2snLGl0ZW0pO319LHVwZGF0ZWQ6ZnVuY3Rpb24gdXBkYXRlZCgpe3ZhciBfdGhpcz10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKF8pe190aGlzLnBvcHBlckpTJiZfdGhpcy51cGRhdGVQb3BwZXIoKTt9KTt9LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3RoaXMuJHBhcmVudC5wb3BwZXJFbG09dGhpcy5wb3BwZXJFbG09dGhpcy4kZWw7dGhpcy5yZWZlcmVuY2VFbG09dGhpcy4kcGFyZW50LiRyZWZzLmlucHV0LiRyZWZzLmlucHV0fHx0aGlzLiRwYXJlbnQuJHJlZnMuaW5wdXQuJHJlZnMudGV4dGFyZWE7dGhpcy5yZWZlcmVuY2VMaXN0PXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fbGlzdCcpO3RoaXMucmVmZXJlbmNlTGlzdC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCdsaXN0Ym94Jyk7dGhpcy5yZWZlcmVuY2VMaXN0LnNldEF0dHJpYnV0ZSgnaWQnLHRoaXMuaWQpO30sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dmFyIF90aGlzMj10aGlzO3RoaXMuJG9uKCd2aXNpYmxlJyxmdW5jdGlvbih2YWwsaW5wdXRXaWR0aCl7X3RoaXMyLmRyb3Bkb3duV2lkdGg9aW5wdXRXaWR0aCsncHgnO190aGlzMi5zaG93UG9wcGVyPXZhbDt9KTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc19jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19hdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2QxMGRjZjBfcmVuZGVyLGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2NkMTBkY2YwX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zX2FwaTt9YXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9ucz1hdXRvY29tcGxldGVfc3VnZ2VzdGlvbnNfY29tcG9uZW50LmV4cG9ydHM7Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvbWl4aW5zL2ZvY3VzIgp2YXIgZm9jdXNfPV9fd2VicGFja19yZXF1aXJlX18oMjIpO3ZhciBmb2N1c19kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZm9jdXNfKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9hdXRvY29tcGxldGUvc3JjL2F1dG9jb21wbGV0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgYXV0b2NvbXBsZXRldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbEF1dG9jb21wbGV0ZScsbWl4aW5zOltlbWl0dGVyX2RlZmF1bHQuYSxmb2N1c19kZWZhdWx0KCkoJ2lucHV0JyksbWlncmF0aW5nX2RlZmF1bHQuYV0saW5oZXJpdEF0dHJzOmZhbHNlLGNvbXBvbmVudE5hbWU6J0VsQXV0b2NvbXBsZXRlJyxjb21wb25lbnRzOntFbElucHV0OmlucHV0X2RlZmF1bHQuYSxFbEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zOmF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc30sZGlyZWN0aXZlczp7Q2xpY2tvdXRzaWRlOmNsaWNrb3V0c2lkZV9kZWZhdWx0LmF9LHByb3BzOnt2YWx1ZUtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDondmFsdWUnfSxwb3BwZXJDbGFzczpTdHJpbmcscG9wcGVyT3B0aW9uczpPYmplY3QscGxhY2Vob2xkZXI6U3RyaW5nLGNsZWFyYWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ZmFsc2V9LGRpc2FibGVkOkJvb2xlYW4sbmFtZTpTdHJpbmcsc2l6ZTpTdHJpbmcsdmFsdWU6U3RyaW5nLG1heGxlbmd0aDpOdW1iZXIsbWlubGVuZ3RoOk51bWJlcixhdXRvZm9jdXM6Qm9vbGVhbixmZXRjaFN1Z2dlc3Rpb25zOkZ1bmN0aW9uLHRyaWdnZXJPbkZvY3VzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxjdXN0b21JdGVtOlN0cmluZyxzZWxlY3RXaGVuVW5tYXRjaGVkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX0scHJlZml4SWNvbjpTdHJpbmcsc3VmZml4SWNvbjpTdHJpbmcsbGFiZWw6U3RyaW5nLGRlYm91bmNlOnt0eXBlOk51bWJlcixkZWZhdWx0OjMwMH0scGxhY2VtZW50Ont0eXBlOlN0cmluZyxkZWZhdWx0Oidib3R0b20tc3RhcnQnfSxoaWRlTG9hZGluZzpCb29sZWFuLHBvcHBlckFwcGVuZFRvQm9keTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0saGlnaGxpZ2h0Rmlyc3RJdGVtOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnthY3RpdmF0ZWQ6ZmFsc2Usc3VnZ2VzdGlvbnM6W10sbG9hZGluZzpmYWxzZSxoaWdobGlnaHRlZEluZGV4Oi0xLHN1Z2dlc3Rpb25EaXNhYmxlZDpmYWxzZX07fSxjb21wdXRlZDp7c3VnZ2VzdGlvblZpc2libGU6ZnVuY3Rpb24gc3VnZ2VzdGlvblZpc2libGUoKXt2YXIgc3VnZ2VzdGlvbnM9dGhpcy5zdWdnZXN0aW9uczt2YXIgaXNWYWxpZERhdGE9QXJyYXkuaXNBcnJheShzdWdnZXN0aW9ucykmJnN1Z2dlc3Rpb25zLmxlbmd0aD4wO3JldHVybihpc1ZhbGlkRGF0YXx8dGhpcy5sb2FkaW5nKSYmdGhpcy5hY3RpdmF0ZWQ7fSxpZDpmdW5jdGlvbiBpZCgpe3JldHVybidlbC1hdXRvY29tcGxldGUtJytPYmplY3QodXRpbF9bImdlbmVyYXRlSWQiXSkoKTt9fSx3YXRjaDp7c3VnZ2VzdGlvblZpc2libGU6ZnVuY3Rpb24gc3VnZ2VzdGlvblZpc2libGUodmFsKXt2YXIgJGlucHV0PXRoaXMuZ2V0SW5wdXQoKTtpZigkaW5wdXQpe3RoaXMuYnJvYWRjYXN0KCdFbEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zJywndmlzaWJsZScsW3ZhbCwkaW5wdXQub2Zmc2V0V2lkdGhdKTt9fX0sbWV0aG9kczp7Z2V0TWlncmF0aW5nQ29uZmlnOmZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpe3JldHVybntwcm9wczp7J2N1c3RvbS1pdGVtJzonY3VzdG9tLWl0ZW0gaXMgcmVtb3ZlZCwgdXNlIHNjb3BlZCBzbG90IGluc3RlYWQuJywncHJvcHMnOidwcm9wcyBpcyByZW1vdmVkLCB1c2UgdmFsdWUta2V5IGluc3RlYWQuJ319O30sZ2V0RGF0YTpmdW5jdGlvbiBnZXREYXRhKHF1ZXJ5U3RyaW5nKXt2YXIgX3RoaXM9dGhpcztpZih0aGlzLnN1Z2dlc3Rpb25EaXNhYmxlZCl7cmV0dXJuO310aGlzLmxvYWRpbmc9dHJ1ZTt0aGlzLmZldGNoU3VnZ2VzdGlvbnMocXVlcnlTdHJpbmcsZnVuY3Rpb24oc3VnZ2VzdGlvbnMpe190aGlzLmxvYWRpbmc9ZmFsc2U7aWYoX3RoaXMuc3VnZ2VzdGlvbkRpc2FibGVkKXtyZXR1cm47fWlmKEFycmF5LmlzQXJyYXkoc3VnZ2VzdGlvbnMpKXtfdGhpcy5zdWdnZXN0aW9ucz1zdWdnZXN0aW9ucztfdGhpcy5oaWdobGlnaHRlZEluZGV4PV90aGlzLmhpZ2hsaWdodEZpcnN0SXRlbT8wOi0xO31lbHNle2NvbnNvbGUuZXJyb3IoJ1tFbGVtZW50IEVycm9yXVtBdXRvY29tcGxldGVdYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zIG11c3QgYmUgYW4gYXJyYXknKTt9fSk7fSxoYW5kbGVJbnB1dDpmdW5jdGlvbiBoYW5kbGVJbnB1dCh2YWx1ZSl7dGhpcy4kZW1pdCgnaW5wdXQnLHZhbHVlKTt0aGlzLnN1Z2dlc3Rpb25EaXNhYmxlZD1mYWxzZTtpZighdGhpcy50cmlnZ2VyT25Gb2N1cyYmIXZhbHVlKXt0aGlzLnN1Z2dlc3Rpb25EaXNhYmxlZD10cnVlO3RoaXMuc3VnZ2VzdGlvbnM9W107cmV0dXJuO310aGlzLmRlYm91bmNlZEdldERhdGEodmFsdWUpO30saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZUNoYW5nZSh2YWx1ZSl7dGhpcy4kZW1pdCgnY2hhbmdlJyx2YWx1ZSk7fSxoYW5kbGVGb2N1czpmdW5jdGlvbiBoYW5kbGVGb2N1cyhldmVudCl7dGhpcy5hY3RpdmF0ZWQ9dHJ1ZTt0aGlzLiRlbWl0KCdmb2N1cycsZXZlbnQpO2lmKHRoaXMudHJpZ2dlck9uRm9jdXMpe3RoaXMuZGVib3VuY2VkR2V0RGF0YSh0aGlzLnZhbHVlKTt9fSxoYW5kbGVCbHVyOmZ1bmN0aW9uIGhhbmRsZUJsdXIoZXZlbnQpe3RoaXMuJGVtaXQoJ2JsdXInLGV2ZW50KTt9LGhhbmRsZUNsZWFyOmZ1bmN0aW9uIGhhbmRsZUNsZWFyKCl7dGhpcy5hY3RpdmF0ZWQ9ZmFsc2U7dGhpcy4kZW1pdCgnY2xlYXInKTt9LGNsb3NlOmZ1bmN0aW9uIGNsb3NlKGUpe3RoaXMuYWN0aXZhdGVkPWZhbHNlO30saGFuZGxlS2V5RW50ZXI6ZnVuY3Rpb24gaGFuZGxlS2V5RW50ZXIoZSl7dmFyIF90aGlzMj10aGlzO2lmKHRoaXMuc3VnZ2VzdGlvblZpc2libGUmJnRoaXMuaGlnaGxpZ2h0ZWRJbmRleD49MCYmdGhpcy5oaWdobGlnaHRlZEluZGV4PHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKXtlLnByZXZlbnREZWZhdWx0KCk7dGhpcy5zZWxlY3QodGhpcy5zdWdnZXN0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKTt9ZWxzZSBpZih0aGlzLnNlbGVjdFdoZW5Vbm1hdGNoZWQpe3RoaXMuJGVtaXQoJ3NlbGVjdCcse3ZhbHVlOnRoaXMudmFsdWV9KTt0aGlzLiRuZXh0VGljayhmdW5jdGlvbihfKXtfdGhpczIuc3VnZ2VzdGlvbnM9W107X3RoaXMyLmhpZ2hsaWdodGVkSW5kZXg9LTE7fSk7fX0sc2VsZWN0OmZ1bmN0aW9uIHNlbGVjdChpdGVtKXt2YXIgX3RoaXMzPXRoaXM7dGhpcy4kZW1pdCgnaW5wdXQnLGl0ZW1bdGhpcy52YWx1ZUtleV0pO3RoaXMuJGVtaXQoJ3NlbGVjdCcsaXRlbSk7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oXyl7X3RoaXMzLnN1Z2dlc3Rpb25zPVtdO190aGlzMy5oaWdobGlnaHRlZEluZGV4PS0xO30pO30saGlnaGxpZ2h0OmZ1bmN0aW9uIGhpZ2hsaWdodChpbmRleCl7aWYoIXRoaXMuc3VnZ2VzdGlvblZpc2libGV8fHRoaXMubG9hZGluZyl7cmV0dXJuO31pZihpbmRleDwwKXt0aGlzLmhpZ2hsaWdodGVkSW5kZXg9LTE7cmV0dXJuO31pZihpbmRleD49dGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgpe2luZGV4PXRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoLTE7fXZhciBzdWdnZXN0aW9uPXRoaXMuJHJlZnMuc3VnZ2VzdGlvbnMuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fd3JhcCcpO3ZhciBzdWdnZXN0aW9uTGlzdD1zdWdnZXN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fbGlzdCBsaScpO3ZhciBoaWdobGlnaHRJdGVtPXN1Z2dlc3Rpb25MaXN0W2luZGV4XTt2YXIgc2Nyb2xsVG9wPXN1Z2dlc3Rpb24uc2Nyb2xsVG9wO3ZhciBvZmZzZXRUb3A9aGlnaGxpZ2h0SXRlbS5vZmZzZXRUb3A7aWYob2Zmc2V0VG9wK2hpZ2hsaWdodEl0ZW0uc2Nyb2xsSGVpZ2h0PnNjcm9sbFRvcCtzdWdnZXN0aW9uLmNsaWVudEhlaWdodCl7c3VnZ2VzdGlvbi5zY3JvbGxUb3ArPWhpZ2hsaWdodEl0ZW0uc2Nyb2xsSGVpZ2h0O31pZihvZmZzZXRUb3A8c2Nyb2xsVG9wKXtzdWdnZXN0aW9uLnNjcm9sbFRvcC09aGlnaGxpZ2h0SXRlbS5zY3JvbGxIZWlnaHQ7fXRoaXMuaGlnaGxpZ2h0ZWRJbmRleD1pbmRleDt2YXIgJGlucHV0PXRoaXMuZ2V0SW5wdXQoKTskaW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLHRoaXMuaWQrJy1pdGVtLScrdGhpcy5oaWdobGlnaHRlZEluZGV4KTt9LGdldElucHV0OmZ1bmN0aW9uIGdldElucHV0KCl7cmV0dXJuIHRoaXMuJHJlZnMuaW5wdXQuZ2V0SW5wdXQoKTt9fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt2YXIgX3RoaXM0PXRoaXM7dGhpcy5kZWJvdW5jZWRHZXREYXRhPWRlYm91bmNlX2RlZmF1bHQoKSh0aGlzLmRlYm91bmNlLHRoaXMuZ2V0RGF0YSk7dGhpcy4kb24oJ2l0ZW0tY2xpY2snLGZ1bmN0aW9uKGl0ZW0pe190aGlzNC5zZWxlY3QoaXRlbSk7fSk7dmFyICRpbnB1dD10aGlzLmdldElucHV0KCk7JGlucHV0LnNldEF0dHJpYnV0ZSgncm9sZScsJ3RleHRib3gnKTskaW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWF1dG9jb21wbGV0ZScsJ2xpc3QnKTskaW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywnaWQnKTskaW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLHRoaXMuaWQrJy1pdGVtLScrdGhpcy5oaWdobGlnaHRlZEluZGV4KTt9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpe3RoaXMuJHJlZnMuc3VnZ2VzdGlvbnMuJGRlc3Ryb3koKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfYXV0b2NvbXBsZXRldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWF1dG9jb21wbGV0ZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGF1dG9jb21wbGV0ZV9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19hdXRvY29tcGxldGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sYXV0b2NvbXBsZXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMTUyZjJlZTZfcmVuZGVyLGF1dG9jb21wbGV0ZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE1MmYyZWU2X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgYXV0b2NvbXBsZXRlX2FwaTt9YXV0b2NvbXBsZXRlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGF1dG9jb21wbGV0ZT1hdXRvY29tcGxldGVfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hdXRvY29tcGxldGUvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9hdXRvY29tcGxldGUuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoYXV0b2NvbXBsZXRlLm5hbWUsYXV0b2NvbXBsZXRlKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfYXV0b2NvbXBsZXRlPWF1dG9jb21wbGV0ZTsvLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi9idXR0b24iCnZhciBidXR0b25fPV9fd2VicGFja19yZXF1aXJlX18oMTIpO3ZhciBidXR0b25fZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGJ1dHRvbl8pOy8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL2J1dHRvbi1ncm91cCIKdmFyIGJ1dHRvbl9ncm91cF89X193ZWJwYWNrX3JlcXVpcmVfXygyOSk7dmFyIGJ1dHRvbl9ncm91cF9kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oYnV0dG9uX2dyb3VwXyk7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBkcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxEcm9wZG93bicsY29tcG9uZW50TmFtZTonRWxEcm9wZG93bicsbWl4aW5zOltlbWl0dGVyX2RlZmF1bHQuYSxtaWdyYXRpbmdfZGVmYXVsdC5hXSxkaXJlY3RpdmVzOntDbGlja291dHNpZGU6Y2xpY2tvdXRzaWRlX2RlZmF1bHQuYX0sY29tcG9uZW50czp7RWxCdXR0b246YnV0dG9uX2RlZmF1bHQuYSxFbEJ1dHRvbkdyb3VwOmJ1dHRvbl9ncm91cF9kZWZhdWx0LmF9LHByb3ZpZGU6ZnVuY3Rpb24gcHJvdmlkZSgpe3JldHVybntkcm9wZG93bjp0aGlzfTt9LHByb3BzOnt0cmlnZ2VyOnt0eXBlOlN0cmluZyxkZWZhdWx0Oidob3Zlcid9LHR5cGU6U3RyaW5nLHNpemU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Jyd9LHNwbGl0QnV0dG9uOkJvb2xlYW4saGlkZU9uQ2xpY2s6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LHBsYWNlbWVudDp7dHlwZTpTdHJpbmcsZGVmYXVsdDonYm90dG9tLWVuZCd9LHZpc2libGVBcnJvdzp7ZGVmYXVsdDp0cnVlfSxzaG93VGltZW91dDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoyNTB9LGhpZGVUaW1lb3V0Ont0eXBlOk51bWJlcixkZWZhdWx0OjE1MH0sdGFiaW5kZXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnt0aW1lb3V0Om51bGwsdmlzaWJsZTpmYWxzZSx0cmlnZ2VyRWxtOm51bGwsbWVudUl0ZW1zOm51bGwsbWVudUl0ZW1zQXJyYXk6bnVsbCxkcm9wZG93bkVsbTpudWxsLGZvY3VzaW5nOmZhbHNlLGxpc3RJZDonZHJvcGRvd24tbWVudS0nK09iamVjdCh1dGlsX1siZ2VuZXJhdGVJZCJdKSgpfTt9LGNvbXB1dGVkOntkcm9wZG93blNpemU6ZnVuY3Rpb24gZHJvcGRvd25TaXplKCl7cmV0dXJuIHRoaXMuc2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplO319LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3RoaXMuJG9uKCdtZW51LWl0ZW0tY2xpY2snLHRoaXMuaGFuZGxlTWVudUl0ZW1DbGljayk7fSx3YXRjaDp7dmlzaWJsZTpmdW5jdGlvbiB2aXNpYmxlKHZhbCl7dGhpcy5icm9hZGNhc3QoJ0VsRHJvcGRvd25NZW51JywndmlzaWJsZScsdmFsKTt0aGlzLiRlbWl0KCd2aXNpYmxlLWNoYW5nZScsdmFsKTt9LGZvY3VzaW5nOmZ1bmN0aW9uIGZvY3VzaW5nKHZhbCl7dmFyIHNlbGZEZWZpbmU9dGhpcy4kZWwucXVlcnlTZWxlY3RvcignLmVsLWRyb3Bkb3duLXNlbGZkZWZpbmUnKTtpZihzZWxmRGVmaW5lKXsvLyDoh6rlrprkuYkKaWYodmFsKXtzZWxmRGVmaW5lLmNsYXNzTmFtZSs9JyBmb2N1c2luZyc7fWVsc2V7c2VsZkRlZmluZS5jbGFzc05hbWU9c2VsZkRlZmluZS5jbGFzc05hbWUucmVwbGFjZSgnZm9jdXNpbmcnLCcnKTt9fX19LG1ldGhvZHM6e2dldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKXtyZXR1cm57cHJvcHM6eydtZW51LWFsaWduJzonbWVudS1hbGlnbiBpcyByZW5hbWVkIHRvIHBsYWNlbWVudC4nfX07fSxzaG93OmZ1bmN0aW9uIHNob3coKXt2YXIgX3RoaXM9dGhpcztpZih0aGlzLnRyaWdnZXJFbG0uZGlzYWJsZWQpcmV0dXJuO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO3RoaXMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7X3RoaXMudmlzaWJsZT10cnVlO30sdGhpcy50cmlnZ2VyPT09J2NsaWNrJz8wOnRoaXMuc2hvd1RpbWVvdXQpO30saGlkZTpmdW5jdGlvbiBoaWRlKCl7dmFyIF90aGlzMj10aGlzO2lmKHRoaXMudHJpZ2dlckVsbS5kaXNhYmxlZClyZXR1cm47dGhpcy5yZW1vdmVUYWJpbmRleCgpO2lmKHRoaXMudGFiaW5kZXg+PTApe3RoaXMucmVzZXRUYWJpbmRleCh0aGlzLnRyaWdnZXJFbG0pO31jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTt0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe190aGlzMi52aXNpYmxlPWZhbHNlO30sdGhpcy50cmlnZ2VyPT09J2NsaWNrJz8wOnRoaXMuaGlkZVRpbWVvdXQpO30saGFuZGxlQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlQ2xpY2soKXtpZih0aGlzLnRyaWdnZXJFbG0uZGlzYWJsZWQpcmV0dXJuO2lmKHRoaXMudmlzaWJsZSl7dGhpcy5oaWRlKCk7fWVsc2V7dGhpcy5zaG93KCk7fX0saGFuZGxlVHJpZ2dlcktleURvd246ZnVuY3Rpb24gaGFuZGxlVHJpZ2dlcktleURvd24oZXYpe3ZhciBrZXlDb2RlPWV2LmtleUNvZGU7aWYoWzM4LDQwXS5pbmRleE9mKGtleUNvZGUpPi0xKXsvLyB1cC9kb3duCnRoaXMucmVtb3ZlVGFiaW5kZXgoKTt0aGlzLnJlc2V0VGFiaW5kZXgodGhpcy5tZW51SXRlbXNbMF0pO3RoaXMubWVudUl0ZW1zWzBdLmZvY3VzKCk7ZXYucHJldmVudERlZmF1bHQoKTtldi5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZSBpZihrZXlDb2RlPT09MTMpey8vIHNwYWNlIGVudGVy6YCJ5LitCnRoaXMuaGFuZGxlQ2xpY2soKTt9ZWxzZSBpZihbOSwyN10uaW5kZXhPZihrZXlDb2RlKT4tMSl7Ly8gdGFiIHx8IGVzYwp0aGlzLmhpZGUoKTt9fSxoYW5kbGVJdGVtS2V5RG93bjpmdW5jdGlvbiBoYW5kbGVJdGVtS2V5RG93bihldil7dmFyIGtleUNvZGU9ZXYua2V5Q29kZTt2YXIgdGFyZ2V0PWV2LnRhcmdldDt2YXIgY3VycmVudEluZGV4PXRoaXMubWVudUl0ZW1zQXJyYXkuaW5kZXhPZih0YXJnZXQpO3ZhciBtYXg9dGhpcy5tZW51SXRlbXNBcnJheS5sZW5ndGgtMTt2YXIgbmV4dEluZGV4PXZvaWQgMDtpZihbMzgsNDBdLmluZGV4T2Yoa2V5Q29kZSk+LTEpey8vIHVwL2Rvd24KaWYoa2V5Q29kZT09PTM4KXsvLyB1cApuZXh0SW5kZXg9Y3VycmVudEluZGV4IT09MD9jdXJyZW50SW5kZXgtMTowO31lbHNley8vIGRvd24KbmV4dEluZGV4PWN1cnJlbnRJbmRleDxtYXg/Y3VycmVudEluZGV4KzE6bWF4O310aGlzLnJlbW92ZVRhYmluZGV4KCk7dGhpcy5yZXNldFRhYmluZGV4KHRoaXMubWVudUl0ZW1zW25leHRJbmRleF0pO3RoaXMubWVudUl0ZW1zW25leHRJbmRleF0uZm9jdXMoKTtldi5wcmV2ZW50RGVmYXVsdCgpO2V2LnN0b3BQcm9wYWdhdGlvbigpO31lbHNlIGlmKGtleUNvZGU9PT0xMyl7Ly8gZW50ZXLpgInkuK0KdGhpcy50cmlnZ2VyRWxtRm9jdXMoKTt0YXJnZXQuY2xpY2soKTtpZih0aGlzLmhpZGVPbkNsaWNrKXsvLyBjbGlja+WFs+mXrQp0aGlzLnZpc2libGU9ZmFsc2U7fX1lbHNlIGlmKFs5LDI3XS5pbmRleE9mKGtleUNvZGUpPi0xKXsvLyB0YWIgLy8gZXNjCnRoaXMuaGlkZSgpO3RoaXMudHJpZ2dlckVsbUZvY3VzKCk7fX0scmVzZXRUYWJpbmRleDpmdW5jdGlvbiByZXNldFRhYmluZGV4KGVsZSl7Ly8g5LiL5qyhdGFi5pe257uE5Lu26IGa54Sm5YWD57SgCnRoaXMucmVtb3ZlVGFiaW5kZXgoKTtlbGUuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsJzAnKTsvLyDkuIvmrKHmnJ/mnJvnmoTogZrnhKblhYPntKAKfSxyZW1vdmVUYWJpbmRleDpmdW5jdGlvbiByZW1vdmVUYWJpbmRleCgpe3RoaXMudHJpZ2dlckVsbS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywnLTEnKTt0aGlzLm1lbnVJdGVtc0FycmF5LmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aXRlbS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywnLTEnKTt9KTt9LGluaXRBcmlhOmZ1bmN0aW9uIGluaXRBcmlhKCl7dGhpcy5kcm9wZG93bkVsbS5zZXRBdHRyaWJ1dGUoJ2lkJyx0aGlzLmxpc3RJZCk7dGhpcy50cmlnZ2VyRWxtLnNldEF0dHJpYnV0ZSgnYXJpYS1oYXNwb3B1cCcsJ2xpc3QnKTt0aGlzLnRyaWdnZXJFbG0uc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJyx0aGlzLmxpc3RJZCk7aWYoIXRoaXMuc3BsaXRCdXR0b24pey8vIOiHquWumuS5iQp0aGlzLnRyaWdnZXJFbG0uc2V0QXR0cmlidXRlKCdyb2xlJywnYnV0dG9uJyk7dGhpcy50cmlnZ2VyRWxtLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLHRoaXMudGFiaW5kZXgpO3RoaXMudHJpZ2dlckVsbS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywodGhpcy50cmlnZ2VyRWxtLmdldEF0dHJpYnV0ZSgnY2xhc3MnKXx8JycpKycgZWwtZHJvcGRvd24tc2VsZmRlZmluZScpOy8vIOaOp+WItgp9fSxpbml0RXZlbnQ6ZnVuY3Rpb24gaW5pdEV2ZW50KCl7dmFyIF90aGlzMz10aGlzO3ZhciB0cmlnZ2VyPXRoaXMudHJpZ2dlcixzaG93PXRoaXMuc2hvdyxoaWRlPXRoaXMuaGlkZSxoYW5kbGVDbGljaz10aGlzLmhhbmRsZUNsaWNrLHNwbGl0QnV0dG9uPXRoaXMuc3BsaXRCdXR0b24saGFuZGxlVHJpZ2dlcktleURvd249dGhpcy5oYW5kbGVUcmlnZ2VyS2V5RG93bixoYW5kbGVJdGVtS2V5RG93bj10aGlzLmhhbmRsZUl0ZW1LZXlEb3duO3RoaXMudHJpZ2dlckVsbT1zcGxpdEJ1dHRvbj90aGlzLiRyZWZzLnRyaWdnZXIuJGVsOnRoaXMuJHNsb3RzLmRlZmF1bHRbMF0uZWxtO3ZhciBkcm9wZG93bkVsbT10aGlzLmRyb3Bkb3duRWxtO3RoaXMudHJpZ2dlckVsbS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxoYW5kbGVUcmlnZ2VyS2V5RG93bik7Ly8gdHJpZ2dlckVsbSBrZXlkb3duCmRyb3Bkb3duRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLGhhbmRsZUl0ZW1LZXlEb3duLHRydWUpOy8vIGl0ZW0ga2V5ZG93bgovLyDmjqfliLboh6rlrprkuYnlhYPntKDnmoTmoLflvI8KaWYoIXNwbGl0QnV0dG9uKXt0aGlzLnRyaWdnZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLGZ1bmN0aW9uKCl7X3RoaXMzLmZvY3VzaW5nPXRydWU7fSk7dGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLGZ1bmN0aW9uKCl7X3RoaXMzLmZvY3VzaW5nPWZhbHNlO30pO3RoaXMudHJpZ2dlckVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXtfdGhpczMuZm9jdXNpbmc9ZmFsc2U7fSk7fWlmKHRyaWdnZXI9PT0naG92ZXInKXt0aGlzLnRyaWdnZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsc2hvdyk7dGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLGhpZGUpO2Ryb3Bkb3duRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLHNob3cpO2Ryb3Bkb3duRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLGhpZGUpO31lbHNlIGlmKHRyaWdnZXI9PT0nY2xpY2snKXt0aGlzLnRyaWdnZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGhhbmRsZUNsaWNrKTt9fSxoYW5kbGVNZW51SXRlbUNsaWNrOmZ1bmN0aW9uIGhhbmRsZU1lbnVJdGVtQ2xpY2soY29tbWFuZCxpbnN0YW5jZSl7aWYodGhpcy5oaWRlT25DbGljayl7dGhpcy52aXNpYmxlPWZhbHNlO310aGlzLiRlbWl0KCdjb21tYW5kJyxjb21tYW5kLGluc3RhbmNlKTt9LHRyaWdnZXJFbG1Gb2N1czpmdW5jdGlvbiB0cmlnZ2VyRWxtRm9jdXMoKXt0aGlzLnRyaWdnZXJFbG0uZm9jdXMmJnRoaXMudHJpZ2dlckVsbS5mb2N1cygpO30saW5pdERvbU9wZXJhdGlvbjpmdW5jdGlvbiBpbml0RG9tT3BlcmF0aW9uKCl7dGhpcy5kcm9wZG93bkVsbT10aGlzLnBvcHBlckVsbTt0aGlzLm1lbnVJdGVtcz10aGlzLmRyb3Bkb3duRWxtLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0YWJpbmRleD0nLTEnXSIpO3RoaXMubWVudUl0ZW1zQXJyYXk9W10uc2xpY2UuY2FsbCh0aGlzLm1lbnVJdGVtcyk7dGhpcy5pbml0RXZlbnQoKTt0aGlzLmluaXRBcmlhKCk7fX0scmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihoKXt2YXIgX3RoaXM0PXRoaXM7dmFyIGhpZGU9dGhpcy5oaWRlLHNwbGl0QnV0dG9uPXRoaXMuc3BsaXRCdXR0b24sdHlwZT10aGlzLnR5cGUsZHJvcGRvd25TaXplPXRoaXMuZHJvcGRvd25TaXplO3ZhciBoYW5kbGVNYWluQnV0dG9uQ2xpY2s9ZnVuY3Rpb24gaGFuZGxlTWFpbkJ1dHRvbkNsaWNrKGV2ZW50KXtfdGhpczQuJGVtaXQoJ2NsaWNrJyxldmVudCk7aGlkZSgpO307dmFyIHRyaWdnZXJFbG09IXNwbGl0QnV0dG9uP3RoaXMuJHNsb3RzLmRlZmF1bHQ6aCgnZWwtYnV0dG9uLWdyb3VwJyxbaCgnZWwtYnV0dG9uJyx7YXR0cnM6e3R5cGU6dHlwZSxzaXplOmRyb3Bkb3duU2l6ZX0sbmF0aXZlT246eydjbGljayc6aGFuZGxlTWFpbkJ1dHRvbkNsaWNrfX0sW3RoaXMuJHNsb3RzLmRlZmF1bHRdKSxoKCdlbC1idXR0b24nLHtyZWY6J3RyaWdnZXInLGF0dHJzOnt0eXBlOnR5cGUsc2l6ZTpkcm9wZG93blNpemV9LCdjbGFzcyc6J2VsLWRyb3Bkb3duX19jYXJldC1idXR0b24nfSxbaCgnaScseydjbGFzcyc6J2VsLWRyb3Bkb3duX19pY29uIGVsLWljb24tYXJyb3ctZG93bid9KV0pXSk7cmV0dXJuIGgoJ2RpdicseydjbGFzcyc6J2VsLWRyb3Bkb3duJyxkaXJlY3RpdmVzOlt7bmFtZTonY2xpY2tvdXRzaWRlJyx2YWx1ZTpoaWRlfV19LFt0cmlnZ2VyRWxtLHRoaXMuJHNsb3RzLmRyb3Bkb3duXSk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi52dWUKdmFyIGRyb3Bkb3duX3JlbmRlcixkcm9wZG93bl9zdGF0aWNSZW5kZXJGbnM7Lyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBkcm9wZG93bl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxkcm9wZG93bl9yZW5kZXIsZHJvcGRvd25fc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBkcm9wZG93bl9hcGk7fWRyb3Bkb3duX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBkcm9wZG93bj1kcm9wZG93bl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovZHJvcGRvd24uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoZHJvcGRvd24ubmFtZSxkcm9wZG93bik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2Ryb3Bkb3duPWRyb3Bkb3duOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLW1lbnUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBkYTZiNzE0Jgp2YXIgZHJvcGRvd25fbWVudXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBkYTZiNzE0X3JlbmRlcj1mdW5jdGlvbiBkcm9wZG93bl9tZW51dnVlX3R5cGVfdGVtcGxhdGVfaWRfMGRhNmI3MTRfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn0sb246eyJhZnRlci1sZWF2ZSI6X3ZtLmRvRGVzdHJveX19LFtfYygidWwiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uc2hvd1BvcHBlcixleHByZXNzaW9uOiJzaG93UG9wcGVyIn1dLHN0YXRpY0NsYXNzOiJlbC1kcm9wZG93bi1tZW51IGVsLXBvcHBlciIsY2xhc3M6W192bS5zaXplJiYiZWwtZHJvcGRvd24tbWVudS0tIitfdm0uc2l6ZV19LFtfdm0uX3QoImRlZmF1bHQiKV0sMildKTt9O3ZhciBkcm9wZG93bl9tZW51dnVlX3R5cGVfdGVtcGxhdGVfaWRfMGRhNmI3MTRfc3RhdGljUmVuZGVyRm5zPVtdO2Ryb3Bkb3duX21lbnV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZGE2YjcxNF9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLW1lbnUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBkYTZiNzE0JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24tbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZHJvcGRvd25fbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxEcm9wZG93bk1lbnUnLGNvbXBvbmVudE5hbWU6J0VsRHJvcGRvd25NZW51JyxtaXhpbnM6W3Z1ZV9wb3BwZXJfZGVmYXVsdC5hXSxwcm9wczp7dmlzaWJsZUFycm93Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxhcnJvd09mZnNldDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3NpemU6dGhpcy5kcm9wZG93bi5kcm9wZG93blNpemV9O30saW5qZWN0OlsnZHJvcGRvd24nXSxjcmVhdGVkOmZ1bmN0aW9uIGNyZWF0ZWQoKXt2YXIgX3RoaXM9dGhpczt0aGlzLiRvbigndXBkYXRlUG9wcGVyJyxmdW5jdGlvbigpe2lmKF90aGlzLnNob3dQb3BwZXIpX3RoaXMudXBkYXRlUG9wcGVyKCk7fSk7dGhpcy4kb24oJ3Zpc2libGUnLGZ1bmN0aW9uKHZhbCl7X3RoaXMuc2hvd1BvcHBlcj12YWw7fSk7fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt0aGlzLmRyb3Bkb3duLnBvcHBlckVsbT10aGlzLnBvcHBlckVsbT10aGlzLiRlbDt0aGlzLnJlZmVyZW5jZUVsbT10aGlzLmRyb3Bkb3duLiRlbDsvLyBjb21wYXRpYmxlIHdpdGggMi42IG5ldyB2LXNsb3Qgc3ludGF4Ci8vIGlzc3VlIGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQzNDUKdGhpcy5kcm9wZG93bi5pbml0RG9tT3BlcmF0aW9uKCk7fSx3YXRjaDp7J2Ryb3Bkb3duLnBsYWNlbWVudCc6e2ltbWVkaWF0ZTp0cnVlLGhhbmRsZXI6ZnVuY3Rpb24gaGFuZGxlcih2YWwpe3RoaXMuY3VycmVudFBsYWNlbWVudD12YWw7fX19fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1tZW51LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfZHJvcGRvd25fbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1kcm9wZG93bl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLW1lbnUudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgZHJvcGRvd25fbWVudV9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19kcm9wZG93bl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGRyb3Bkb3duX21lbnV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZGE2YjcxNF9yZW5kZXIsZHJvcGRvd25fbWVudXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBkYTZiNzE0X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgZHJvcGRvd25fbWVudV9hcGk7fWRyb3Bkb3duX21lbnVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24tbWVudS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZHJvcGRvd25fbWVudT1kcm9wZG93bl9tZW51X2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24tbWVudS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2Ryb3Bkb3duX21lbnUuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoZHJvcGRvd25fbWVudS5uYW1lLGRyb3Bkb3duX21lbnUpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19kcm9wZG93bl9tZW51PWRyb3Bkb3duX21lbnU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24taXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjM1OTEwMmEmCnZhciBkcm9wZG93bl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjM1OTEwMmFfcmVuZGVyPWZ1bmN0aW9uIGRyb3Bkb3duX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF82MzU5MTAyYV9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImxpIix7c3RhdGljQ2xhc3M6ImVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0iLGNsYXNzOnsiaXMtZGlzYWJsZWQiOl92bS5kaXNhYmxlZCwiZWwtZHJvcGRvd24tbWVudV9faXRlbS0tZGl2aWRlZCI6X3ZtLmRpdmlkZWR9LGF0dHJzOnsiYXJpYS1kaXNhYmxlZCI6X3ZtLmRpc2FibGVkLHRhYmluZGV4Ol92bS5kaXNhYmxlZD9udWxsOi0xfSxvbjp7Y2xpY2s6X3ZtLmhhbmRsZUNsaWNrfX0sW192bS5pY29uP19jKCJpIix7Y2xhc3M6X3ZtLmljb259KTpfdm0uX2UoKSxfdm0uX3QoImRlZmF1bHQiKV0sMik7fTt2YXIgZHJvcGRvd25faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYzNTkxMDJhX3N0YXRpY1JlbmRlckZucz1bXTtkcm9wZG93bl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjM1OTEwMmFfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MzU5MTAyYSYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGRyb3Bkb3duX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsRHJvcGRvd25JdGVtJyxtaXhpbnM6W2VtaXR0ZXJfZGVmYXVsdC5hXSxwcm9wczp7Y29tbWFuZDp7fSxkaXNhYmxlZDpCb29sZWFuLGRpdmlkZWQ6Qm9vbGVhbixpY29uOlN0cmluZ30sbWV0aG9kczp7aGFuZGxlQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlQ2xpY2soZSl7dGhpcy5kaXNwYXRjaCgnRWxEcm9wZG93bicsJ21lbnUtaXRlbS1jbGljaycsW3RoaXMuY29tbWFuZCx0aGlzXSk7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19kcm9wZG93bl9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWRyb3Bkb3duX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24taXRlbS52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBkcm9wZG93bl9pdGVtX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX2Ryb3Bkb3duX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sZHJvcGRvd25faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYzNTkxMDJhX3JlbmRlcixkcm9wZG93bl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjM1OTEwMmFfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBkcm9wZG93bl9pdGVtX2FwaTt9ZHJvcGRvd25faXRlbV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1pdGVtLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBkcm9wZG93bl9pdGVtPWRyb3Bkb3duX2l0ZW1fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcm9wZG93bi1pdGVtL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovZHJvcGRvd25faXRlbS5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChkcm9wZG93bl9pdGVtLm5hbWUsZHJvcGRvd25faXRlbSk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2Ryb3Bkb3duX2l0ZW09ZHJvcGRvd25faXRlbTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91dGlscy9hcmlhLXV0aWxzLmpzCnZhciBhcmlhPWFyaWF8fHt9O2FyaWEuVXRpbHM9YXJpYS5VdGlsc3x8e307LyoqCiAqIEBkZXNjIFNldCBmb2N1cyBvbiBkZXNjZW5kYW50IG5vZGVzIHVudGlsIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBpcwogKiAgICAgICBmb3VuZC4KICogQHBhcmFtIGVsZW1lbnQKICogICAgICAgICAgRE9NIG5vZGUgZm9yIHdoaWNoIHRvIGZpbmQgdGhlIGZpcnN0IGZvY3VzYWJsZSBkZXNjZW5kYW50LgogKiBAcmV0dXJucwogKiAgdHJ1ZSBpZiBhIGZvY3VzYWJsZSBlbGVtZW50IGlzIGZvdW5kIGFuZCBmb2N1cyBpcyBzZXQuCiAqL2FyaWEuVXRpbHMuZm9jdXNGaXJzdERlc2NlbmRhbnQ9ZnVuY3Rpb24oZWxlbWVudCl7Zm9yKHZhciBpPTA7aTxlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoO2krKyl7dmFyIGNoaWxkPWVsZW1lbnQuY2hpbGROb2Rlc1tpXTtpZihhcmlhLlV0aWxzLmF0dGVtcHRGb2N1cyhjaGlsZCl8fGFyaWEuVXRpbHMuZm9jdXNGaXJzdERlc2NlbmRhbnQoY2hpbGQpKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9Oy8qKgogKiBAZGVzYyBGaW5kIHRoZSBsYXN0IGRlc2NlbmRhbnQgbm9kZSB0aGF0IGlzIGZvY3VzYWJsZS4KICogQHBhcmFtIGVsZW1lbnQKICogICAgICAgICAgRE9NIG5vZGUgZm9yIHdoaWNoIHRvIGZpbmQgdGhlIGxhc3QgZm9jdXNhYmxlIGRlc2NlbmRhbnQuCiAqIEByZXR1cm5zCiAqICB0cnVlIGlmIGEgZm9jdXNhYmxlIGVsZW1lbnQgaXMgZm91bmQgYW5kIGZvY3VzIGlzIHNldC4KICovYXJpYS5VdGlscy5mb2N1c0xhc3REZXNjZW5kYW50PWZ1bmN0aW9uKGVsZW1lbnQpe2Zvcih2YXIgaT1lbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBjaGlsZD1lbGVtZW50LmNoaWxkTm9kZXNbaV07aWYoYXJpYS5VdGlscy5hdHRlbXB0Rm9jdXMoY2hpbGQpfHxhcmlhLlV0aWxzLmZvY3VzTGFzdERlc2NlbmRhbnQoY2hpbGQpKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9Oy8qKgogKiBAZGVzYyBTZXQgQXR0ZW1wdCB0byBzZXQgZm9jdXMgb24gdGhlIGN1cnJlbnQgbm9kZS4KICogQHBhcmFtIGVsZW1lbnQKICogICAgICAgICAgVGhlIG5vZGUgdG8gYXR0ZW1wdCB0byBmb2N1cyBvbi4KICogQHJldHVybnMKICogIHRydWUgaWYgZWxlbWVudCBpcyBmb2N1c2VkLgogKi9hcmlhLlV0aWxzLmF0dGVtcHRGb2N1cz1mdW5jdGlvbihlbGVtZW50KXtpZighYXJpYS5VdGlscy5pc0ZvY3VzYWJsZShlbGVtZW50KSl7cmV0dXJuIGZhbHNlO31hcmlhLlV0aWxzLklnbm9yZVV0aWxGb2N1c0NoYW5nZXM9dHJ1ZTt0cnl7ZWxlbWVudC5mb2N1cygpO31jYXRjaChlKXt9YXJpYS5VdGlscy5JZ25vcmVVdGlsRm9jdXNDaGFuZ2VzPWZhbHNlO3JldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ZWxlbWVudDt9O2FyaWEuVXRpbHMuaXNGb2N1c2FibGU9ZnVuY3Rpb24oZWxlbWVudCl7aWYoZWxlbWVudC50YWJJbmRleD4wfHxlbGVtZW50LnRhYkluZGV4PT09MCYmZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JykhPT1udWxsKXtyZXR1cm4gdHJ1ZTt9aWYoZWxlbWVudC5kaXNhYmxlZCl7cmV0dXJuIGZhbHNlO31zd2l0Y2goZWxlbWVudC5ub2RlTmFtZSl7Y2FzZSdBJzpyZXR1cm4hIWVsZW1lbnQuaHJlZiYmZWxlbWVudC5yZWwhPT0naWdub3JlJztjYXNlJ0lOUFVUJzpyZXR1cm4gZWxlbWVudC50eXBlIT09J2hpZGRlbicmJmVsZW1lbnQudHlwZSE9PSdmaWxlJztjYXNlJ0JVVFRPTic6Y2FzZSdTRUxFQ1QnOmNhc2UnVEVYVEFSRUEnOnJldHVybiB0cnVlO2RlZmF1bHQ6cmV0dXJuIGZhbHNlO319Oy8qKgogKiDop6blj5HkuIDkuKrkuovku7YKICogbW91c2VlbnRlciwgbW91c2VsZWF2ZSwgbW91c2VvdmVyLCBrZXl1cCwgY2hhbmdlLCBjbGljayDnrYkKICogQHBhcmFtICB7RWxlbWVudH0gZWxtCiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZQogKiBAcGFyYW0gIHsqfSBvcHRzCiAqL2FyaWEuVXRpbHMudHJpZ2dlckV2ZW50PWZ1bmN0aW9uKGVsbSxuYW1lKXt2YXIgZXZlbnROYW1lPXZvaWQgMDtpZigvXm1vdXNlfGNsaWNrLy50ZXN0KG5hbWUpKXtldmVudE5hbWU9J01vdXNlRXZlbnRzJzt9ZWxzZSBpZigvXmtleS8udGVzdChuYW1lKSl7ZXZlbnROYW1lPSdLZXlib2FyZEV2ZW50Jzt9ZWxzZXtldmVudE5hbWU9J0hUTUxFdmVudHMnO312YXIgZXZ0PWRvY3VtZW50LmNyZWF0ZUV2ZW50KGV2ZW50TmFtZSk7Zm9yKHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsb3B0cz1BcnJheShfbGVuPjI/X2xlbi0yOjApLF9rZXk9Mjtfa2V5PF9sZW47X2tleSsrKXtvcHRzW19rZXktMl09YXJndW1lbnRzW19rZXldO31ldnQuaW5pdEV2ZW50LmFwcGx5KGV2dCxbbmFtZV0uY29uY2F0KG9wdHMpKTtlbG0uZGlzcGF0Y2hFdmVudD9lbG0uZGlzcGF0Y2hFdmVudChldnQpOmVsbS5maXJlRXZlbnQoJ29uJytuYW1lLGV2dCk7cmV0dXJuIGVsbTt9O2FyaWEuVXRpbHMua2V5cz17dGFiOjksZW50ZXI6MTMsc3BhY2U6MzIsbGVmdDozNyx1cDozOCxyaWdodDozOSxkb3duOjQwLGVzYzoyN307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBhcmlhX3V0aWxzPWFyaWEuVXRpbHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdXRpbHMvbWVudS9hcmlhLXN1Ym1lbnUuanMKdmFyIFN1Yk1lbnU9ZnVuY3Rpb24gU3ViTWVudShwYXJlbnQsZG9tTm9kZSl7dGhpcy5kb21Ob2RlPWRvbU5vZGU7dGhpcy5wYXJlbnQ9cGFyZW50O3RoaXMuc3ViTWVudUl0ZW1zPVtdO3RoaXMuc3ViSW5kZXg9MDt0aGlzLmluaXQoKTt9O1N1Yk1lbnUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnN1Yk1lbnVJdGVtcz10aGlzLmRvbU5vZGUucXVlcnlTZWxlY3RvckFsbCgnbGknKTt0aGlzLmFkZExpc3RlbmVycygpO307U3ViTWVudS5wcm90b3R5cGUuZ290b1N1YkluZGV4PWZ1bmN0aW9uKGlkeCl7aWYoaWR4PT09dGhpcy5zdWJNZW51SXRlbXMubGVuZ3RoKXtpZHg9MDt9ZWxzZSBpZihpZHg8MCl7aWR4PXRoaXMuc3ViTWVudUl0ZW1zLmxlbmd0aC0xO310aGlzLnN1Yk1lbnVJdGVtc1tpZHhdLmZvY3VzKCk7dGhpcy5zdWJJbmRleD1pZHg7fTtTdWJNZW51LnByb3RvdHlwZS5hZGRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgX3RoaXM9dGhpczt2YXIga2V5cz1hcmlhX3V0aWxzLmtleXM7dmFyIHBhcmVudE5vZGU9dGhpcy5wYXJlbnQuZG9tTm9kZTtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRoaXMuc3ViTWVudUl0ZW1zLGZ1bmN0aW9uKGVsKXtlbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxmdW5jdGlvbihldmVudCl7dmFyIHByZXZEZWY9ZmFsc2U7c3dpdGNoKGV2ZW50LmtleUNvZGUpe2Nhc2Uga2V5cy5kb3duOl90aGlzLmdvdG9TdWJJbmRleChfdGhpcy5zdWJJbmRleCsxKTtwcmV2RGVmPXRydWU7YnJlYWs7Y2FzZSBrZXlzLnVwOl90aGlzLmdvdG9TdWJJbmRleChfdGhpcy5zdWJJbmRleC0xKTtwcmV2RGVmPXRydWU7YnJlYWs7Y2FzZSBrZXlzLnRhYjphcmlhX3V0aWxzLnRyaWdnZXJFdmVudChwYXJlbnROb2RlLCdtb3VzZWxlYXZlJyk7YnJlYWs7Y2FzZSBrZXlzLmVudGVyOmNhc2Uga2V5cy5zcGFjZTpwcmV2RGVmPXRydWU7ZXZlbnQuY3VycmVudFRhcmdldC5jbGljaygpO2JyZWFrO31pZihwcmV2RGVmKXtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO31yZXR1cm4gZmFsc2U7fSk7fSk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGFyaWFfc3VibWVudT1TdWJNZW51Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzL21lbnUvYXJpYS1tZW51aXRlbS5qcwp2YXIgTWVudUl0ZW09ZnVuY3Rpb24gTWVudUl0ZW0oZG9tTm9kZSl7dGhpcy5kb21Ob2RlPWRvbU5vZGU7dGhpcy5zdWJtZW51PW51bGw7dGhpcy5pbml0KCk7fTtNZW51SXRlbS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuZG9tTm9kZS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywnMCcpO3ZhciBtZW51Q2hpbGQ9dGhpcy5kb21Ob2RlLnF1ZXJ5U2VsZWN0b3IoJy5lbC1tZW51Jyk7aWYobWVudUNoaWxkKXt0aGlzLnN1Ym1lbnU9bmV3IGFyaWFfc3VibWVudSh0aGlzLG1lbnVDaGlsZCk7fXRoaXMuYWRkTGlzdGVuZXJzKCk7fTtNZW51SXRlbS5wcm90b3R5cGUuYWRkTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIF90aGlzPXRoaXM7dmFyIGtleXM9YXJpYV91dGlscy5rZXlzO3RoaXMuZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxmdW5jdGlvbihldmVudCl7dmFyIHByZXZEZWY9ZmFsc2U7c3dpdGNoKGV2ZW50LmtleUNvZGUpe2Nhc2Uga2V5cy5kb3duOmFyaWFfdXRpbHMudHJpZ2dlckV2ZW50KGV2ZW50LmN1cnJlbnRUYXJnZXQsJ21vdXNlZW50ZXInKTtfdGhpcy5zdWJtZW51JiZfdGhpcy5zdWJtZW51LmdvdG9TdWJJbmRleCgwKTtwcmV2RGVmPXRydWU7YnJlYWs7Y2FzZSBrZXlzLnVwOmFyaWFfdXRpbHMudHJpZ2dlckV2ZW50KGV2ZW50LmN1cnJlbnRUYXJnZXQsJ21vdXNlZW50ZXInKTtfdGhpcy5zdWJtZW51JiZfdGhpcy5zdWJtZW51LmdvdG9TdWJJbmRleChfdGhpcy5zdWJtZW51LnN1Yk1lbnVJdGVtcy5sZW5ndGgtMSk7cHJldkRlZj10cnVlO2JyZWFrO2Nhc2Uga2V5cy50YWI6YXJpYV91dGlscy50cmlnZ2VyRXZlbnQoZXZlbnQuY3VycmVudFRhcmdldCwnbW91c2VsZWF2ZScpO2JyZWFrO2Nhc2Uga2V5cy5lbnRlcjpjYXNlIGtleXMuc3BhY2U6cHJldkRlZj10cnVlO2V2ZW50LmN1cnJlbnRUYXJnZXQuY2xpY2soKTticmVhazt9aWYocHJldkRlZil7ZXZlbnQucHJldmVudERlZmF1bHQoKTt9fSk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGFyaWFfbWVudWl0ZW09TWVudUl0ZW07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdXRpbHMvbWVudS9hcmlhLW1lbnViYXIuanMKdmFyIE1lbnU9ZnVuY3Rpb24gTWVudShkb21Ob2RlKXt0aGlzLmRvbU5vZGU9ZG9tTm9kZTt0aGlzLmluaXQoKTt9O01lbnUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgbWVudUNoaWxkcmVuPXRoaXMuZG9tTm9kZS5jaGlsZE5vZGVzO1tdLmZpbHRlci5jYWxsKG1lbnVDaGlsZHJlbixmdW5jdGlvbihjaGlsZCl7cmV0dXJuIGNoaWxkLm5vZGVUeXBlPT09MTt9KS5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXtuZXcgYXJpYV9tZW51aXRlbShjaGlsZCk7Ly8gZXNsaW50LWRpc2FibGUtbGluZQp9KTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgYXJpYV9tZW51YmFyPU1lbnU7Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tIgp2YXIgZG9tXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDEpOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIG1lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsTWVudScscmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihoKXt2YXIgY29tcG9uZW50PWgoJ3VsJyx7YXR0cnM6e3JvbGU6J21lbnViYXInfSxrZXk6K3RoaXMuY29sbGFwc2Usc3R5bGU6e2JhY2tncm91bmRDb2xvcjp0aGlzLmJhY2tncm91bmRDb2xvcnx8Jyd9LCdjbGFzcyc6eydlbC1tZW51LS1ob3Jpem9udGFsJzp0aGlzLm1vZGU9PT0naG9yaXpvbnRhbCcsJ2VsLW1lbnUtLWNvbGxhcHNlJzp0aGlzLmNvbGxhcHNlLCJlbC1tZW51Ijp0cnVlfX0sW3RoaXMuJHNsb3RzLmRlZmF1bHRdKTtpZih0aGlzLmNvbGxhcHNlVHJhbnNpdGlvbil7cmV0dXJuIGgoJ2VsLW1lbnUtY29sbGFwc2UtdHJhbnNpdGlvbicsW2NvbXBvbmVudF0pO31lbHNle3JldHVybiBjb21wb25lbnQ7fX0sY29tcG9uZW50TmFtZTonRWxNZW51JyxtaXhpbnM6W2VtaXR0ZXJfZGVmYXVsdC5hLG1pZ3JhdGluZ19kZWZhdWx0LmFdLHByb3ZpZGU6ZnVuY3Rpb24gcHJvdmlkZSgpe3JldHVybntyb290TWVudTp0aGlzfTt9LGNvbXBvbmVudHM6eydlbC1tZW51LWNvbGxhcHNlLXRyYW5zaXRpb24nOntmdW5jdGlvbmFsOnRydWUscmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihjcmVhdGVFbGVtZW50LGNvbnRleHQpe3ZhciBkYXRhPXtwcm9wczp7bW9kZTonb3V0LWluJ30sb246e2JlZm9yZUVudGVyOmZ1bmN0aW9uIGJlZm9yZUVudGVyKGVsKXtlbC5zdHlsZS5vcGFjaXR5PTAuMjt9LGVudGVyOmZ1bmN0aW9uIGVudGVyKGVsKXtPYmplY3QoZG9tX1siYWRkQ2xhc3MiXSkoZWwsJ2VsLW9wYWNpdHktdHJhbnNpdGlvbicpO2VsLnN0eWxlLm9wYWNpdHk9MTt9LGFmdGVyRW50ZXI6ZnVuY3Rpb24gYWZ0ZXJFbnRlcihlbCl7T2JqZWN0KGRvbV9bInJlbW92ZUNsYXNzIl0pKGVsLCdlbC1vcGFjaXR5LXRyYW5zaXRpb24nKTtlbC5zdHlsZS5vcGFjaXR5PScnO30sYmVmb3JlTGVhdmU6ZnVuY3Rpb24gYmVmb3JlTGVhdmUoZWwpe2lmKCFlbC5kYXRhc2V0KWVsLmRhdGFzZXQ9e307aWYoT2JqZWN0KGRvbV9bImhhc0NsYXNzIl0pKGVsLCdlbC1tZW51LS1jb2xsYXBzZScpKXtPYmplY3QoZG9tX1sicmVtb3ZlQ2xhc3MiXSkoZWwsJ2VsLW1lbnUtLWNvbGxhcHNlJyk7ZWwuZGF0YXNldC5vbGRPdmVyZmxvdz1lbC5zdHlsZS5vdmVyZmxvdztlbC5kYXRhc2V0LnNjcm9sbFdpZHRoPWVsLmNsaWVudFdpZHRoO09iamVjdChkb21fWyJhZGRDbGFzcyJdKShlbCwnZWwtbWVudS0tY29sbGFwc2UnKTt9ZWxzZXtPYmplY3QoZG9tX1siYWRkQ2xhc3MiXSkoZWwsJ2VsLW1lbnUtLWNvbGxhcHNlJyk7ZWwuZGF0YXNldC5vbGRPdmVyZmxvdz1lbC5zdHlsZS5vdmVyZmxvdztlbC5kYXRhc2V0LnNjcm9sbFdpZHRoPWVsLmNsaWVudFdpZHRoO09iamVjdChkb21fWyJyZW1vdmVDbGFzcyJdKShlbCwnZWwtbWVudS0tY29sbGFwc2UnKTt9ZWwuc3R5bGUud2lkdGg9ZWwuc2Nyb2xsV2lkdGgrJ3B4JztlbC5zdHlsZS5vdmVyZmxvdz0naGlkZGVuJzt9LGxlYXZlOmZ1bmN0aW9uIGxlYXZlKGVsKXtPYmplY3QoZG9tX1siYWRkQ2xhc3MiXSkoZWwsJ2hvcml6b250YWwtY29sbGFwc2UtdHJhbnNpdGlvbicpO2VsLnN0eWxlLndpZHRoPWVsLmRhdGFzZXQuc2Nyb2xsV2lkdGgrJ3B4Jzt9fX07cmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ3RyYW5zaXRpb24nLGRhdGEsY29udGV4dC5jaGlsZHJlbik7fX19LHByb3BzOnttb2RlOnt0eXBlOlN0cmluZyxkZWZhdWx0Oid2ZXJ0aWNhbCd9LGRlZmF1bHRBY3RpdmU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Jyd9LGRlZmF1bHRPcGVuZWRzOkFycmF5LHVuaXF1ZU9wZW5lZDpCb29sZWFuLHJvdXRlcjpCb29sZWFuLG1lbnVUcmlnZ2VyOnt0eXBlOlN0cmluZyxkZWZhdWx0Oidob3Zlcid9LGNvbGxhcHNlOkJvb2xlYW4sYmFja2dyb3VuZENvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nLGFjdGl2ZVRleHRDb2xvcjpTdHJpbmcsY29sbGFwc2VUcmFuc2l0aW9uOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2FjdGl2ZUluZGV4OnRoaXMuZGVmYXVsdEFjdGl2ZSxvcGVuZWRNZW51czp0aGlzLmRlZmF1bHRPcGVuZWRzJiYhdGhpcy5jb2xsYXBzZT90aGlzLmRlZmF1bHRPcGVuZWRzLnNsaWNlKDApOltdLGl0ZW1zOnt9LHN1Ym1lbnVzOnt9fTt9LGNvbXB1dGVkOntob3ZlckJhY2tncm91bmQ6ZnVuY3Rpb24gaG92ZXJCYWNrZ3JvdW5kKCl7cmV0dXJuIHRoaXMuYmFja2dyb3VuZENvbG9yP3RoaXMubWl4Q29sb3IodGhpcy5iYWNrZ3JvdW5kQ29sb3IsMC4yKTonJzt9LGlzTWVudVBvcHVwOmZ1bmN0aW9uIGlzTWVudVBvcHVwKCl7cmV0dXJuIHRoaXMubW9kZT09PSdob3Jpem9udGFsJ3x8dGhpcy5tb2RlPT09J3ZlcnRpY2FsJyYmdGhpcy5jb2xsYXBzZTt9fSx3YXRjaDp7ZGVmYXVsdEFjdGl2ZTpmdW5jdGlvbiBkZWZhdWx0QWN0aXZlKHZhbHVlKXtpZighdGhpcy5pdGVtc1t2YWx1ZV0pe3RoaXMuYWN0aXZlSW5kZXg9bnVsbDt9dGhpcy51cGRhdGVBY3RpdmVJbmRleCh2YWx1ZSk7fSxkZWZhdWx0T3BlbmVkczpmdW5jdGlvbiBkZWZhdWx0T3BlbmVkcyh2YWx1ZSl7aWYoIXRoaXMuY29sbGFwc2Upe3RoaXMub3BlbmVkTWVudXM9dmFsdWU7fX0sY29sbGFwc2U6ZnVuY3Rpb24gY29sbGFwc2UodmFsdWUpe2lmKHZhbHVlKXRoaXMub3BlbmVkTWVudXM9W107dGhpcy5icm9hZGNhc3QoJ0VsU3VibWVudScsJ3RvZ2dsZS1jb2xsYXBzZScsdmFsdWUpO319LG1ldGhvZHM6e3VwZGF0ZUFjdGl2ZUluZGV4OmZ1bmN0aW9uIHVwZGF0ZUFjdGl2ZUluZGV4KHZhbCl7dmFyIGl0ZW09dGhpcy5pdGVtc1t2YWxdfHx0aGlzLml0ZW1zW3RoaXMuYWN0aXZlSW5kZXhdfHx0aGlzLml0ZW1zW3RoaXMuZGVmYXVsdEFjdGl2ZV07aWYoaXRlbSl7dGhpcy5hY3RpdmVJbmRleD1pdGVtLmluZGV4O3RoaXMuaW5pdE9wZW5lZE1lbnUoKTt9ZWxzZXt0aGlzLmFjdGl2ZUluZGV4PW51bGw7fX0sZ2V0TWlncmF0aW5nQ29uZmlnOmZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpe3JldHVybntwcm9wczp7J3RoZW1lJzondGhlbWUgaXMgcmVtb3ZlZC4nfX07fSxnZXRDb2xvckNoYW5uZWxzOmZ1bmN0aW9uIGdldENvbG9yQ2hhbm5lbHMoY29sb3Ipe2NvbG9yPWNvbG9yLnJlcGxhY2UoJyMnLCcnKTtpZigvXlswLTlhLWZBLUZdezN9JC8udGVzdChjb2xvcikpe2NvbG9yPWNvbG9yLnNwbGl0KCcnKTtmb3IodmFyIGk9MjtpPj0wO2ktLSl7Y29sb3Iuc3BsaWNlKGksMCxjb2xvcltpXSk7fWNvbG9yPWNvbG9yLmpvaW4oJycpO31pZigvXlswLTlhLWZBLUZdezZ9JC8udGVzdChjb2xvcikpe3JldHVybntyZWQ6cGFyc2VJbnQoY29sb3Iuc2xpY2UoMCwyKSwxNiksZ3JlZW46cGFyc2VJbnQoY29sb3Iuc2xpY2UoMiw0KSwxNiksYmx1ZTpwYXJzZUludChjb2xvci5zbGljZSg0LDYpLDE2KX07fWVsc2V7cmV0dXJue3JlZDoyNTUsZ3JlZW46MjU1LGJsdWU6MjU1fTt9fSxtaXhDb2xvcjpmdW5jdGlvbiBtaXhDb2xvcihjb2xvcixwZXJjZW50KXt2YXIgX2dldENvbG9yQ2hhbm5lbHM9dGhpcy5nZXRDb2xvckNoYW5uZWxzKGNvbG9yKSxyZWQ9X2dldENvbG9yQ2hhbm5lbHMucmVkLGdyZWVuPV9nZXRDb2xvckNoYW5uZWxzLmdyZWVuLGJsdWU9X2dldENvbG9yQ2hhbm5lbHMuYmx1ZTtpZihwZXJjZW50PjApey8vIHNoYWRlIGdpdmVuIGNvbG9yCnJlZCo9MS1wZXJjZW50O2dyZWVuKj0xLXBlcmNlbnQ7Ymx1ZSo9MS1wZXJjZW50O31lbHNley8vIHRpbnQgZ2l2ZW4gY29sb3IKcmVkKz0oMjU1LXJlZCkqcGVyY2VudDtncmVlbis9KDI1NS1ncmVlbikqcGVyY2VudDtibHVlKz0oMjU1LWJsdWUpKnBlcmNlbnQ7fXJldHVybidyZ2IoJytNYXRoLnJvdW5kKHJlZCkrJywgJytNYXRoLnJvdW5kKGdyZWVuKSsnLCAnK01hdGgucm91bmQoYmx1ZSkrJyknO30sYWRkSXRlbTpmdW5jdGlvbiBhZGRJdGVtKGl0ZW0pe3RoaXMuJHNldCh0aGlzLml0ZW1zLGl0ZW0uaW5kZXgsaXRlbSk7fSxyZW1vdmVJdGVtOmZ1bmN0aW9uIHJlbW92ZUl0ZW0oaXRlbSl7ZGVsZXRlIHRoaXMuaXRlbXNbaXRlbS5pbmRleF07fSxhZGRTdWJtZW51OmZ1bmN0aW9uIGFkZFN1Ym1lbnUoaXRlbSl7dGhpcy4kc2V0KHRoaXMuc3VibWVudXMsaXRlbS5pbmRleCxpdGVtKTt9LHJlbW92ZVN1Ym1lbnU6ZnVuY3Rpb24gcmVtb3ZlU3VibWVudShpdGVtKXtkZWxldGUgdGhpcy5zdWJtZW51c1tpdGVtLmluZGV4XTt9LG9wZW5NZW51OmZ1bmN0aW9uIG9wZW5NZW51KGluZGV4LGluZGV4UGF0aCl7dmFyIG9wZW5lZE1lbnVzPXRoaXMub3BlbmVkTWVudXM7aWYob3BlbmVkTWVudXMuaW5kZXhPZihpbmRleCkhPT0tMSlyZXR1cm47Ly8g5bCG5LiN5Zyo6K+l6I+c5Y2V6Lev5b6E5LiL55qE5YW25L2Z6I+c5Y2V5pS26LW3Ci8vIGNvbGxhcHNlIGFsbCBtZW51IHRoYXQgYXJlIG5vdCB1bmRlciBjdXJyZW50IG1lbnUgaXRlbQppZih0aGlzLnVuaXF1ZU9wZW5lZCl7dGhpcy5vcGVuZWRNZW51cz1vcGVuZWRNZW51cy5maWx0ZXIoZnVuY3Rpb24oaW5kZXgpe3JldHVybiBpbmRleFBhdGguaW5kZXhPZihpbmRleCkhPT0tMTt9KTt9dGhpcy5vcGVuZWRNZW51cy5wdXNoKGluZGV4KTt9LGNsb3NlTWVudTpmdW5jdGlvbiBjbG9zZU1lbnUoaW5kZXgpe3ZhciBpPXRoaXMub3BlbmVkTWVudXMuaW5kZXhPZihpbmRleCk7aWYoaSE9PS0xKXt0aGlzLm9wZW5lZE1lbnVzLnNwbGljZShpLDEpO319LGhhbmRsZVN1Ym1lbnVDbGljazpmdW5jdGlvbiBoYW5kbGVTdWJtZW51Q2xpY2soc3VibWVudSl7dmFyIGluZGV4PXN1Ym1lbnUuaW5kZXgsaW5kZXhQYXRoPXN1Ym1lbnUuaW5kZXhQYXRoO3ZhciBpc09wZW5lZD10aGlzLm9wZW5lZE1lbnVzLmluZGV4T2YoaW5kZXgpIT09LTE7aWYoaXNPcGVuZWQpe3RoaXMuY2xvc2VNZW51KGluZGV4KTt0aGlzLiRlbWl0KCdjbG9zZScsaW5kZXgsaW5kZXhQYXRoKTt9ZWxzZXt0aGlzLm9wZW5NZW51KGluZGV4LGluZGV4UGF0aCk7dGhpcy4kZW1pdCgnb3BlbicsaW5kZXgsaW5kZXhQYXRoKTt9fSxoYW5kbGVJdGVtQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlSXRlbUNsaWNrKGl0ZW0pe3ZhciBfdGhpcz10aGlzO3ZhciBpbmRleD1pdGVtLmluZGV4LGluZGV4UGF0aD1pdGVtLmluZGV4UGF0aDt2YXIgb2xkQWN0aXZlSW5kZXg9dGhpcy5hY3RpdmVJbmRleDt2YXIgaGFzSW5kZXg9aXRlbS5pbmRleCE9PW51bGw7aWYoaGFzSW5kZXgpe3RoaXMuYWN0aXZlSW5kZXg9aXRlbS5pbmRleDt9dGhpcy4kZW1pdCgnc2VsZWN0JyxpbmRleCxpbmRleFBhdGgsaXRlbSk7aWYodGhpcy5tb2RlPT09J2hvcml6b250YWwnfHx0aGlzLmNvbGxhcHNlKXt0aGlzLm9wZW5lZE1lbnVzPVtdO31pZih0aGlzLnJvdXRlciYmaGFzSW5kZXgpe3RoaXMucm91dGVUb0l0ZW0oaXRlbSxmdW5jdGlvbihlcnJvcil7X3RoaXMuYWN0aXZlSW5kZXg9b2xkQWN0aXZlSW5kZXg7aWYoZXJyb3Ipey8vIHZ1ZS1yb3V0ZXIgMy4xLjArIHB1c2gvcmVwbGFjZSBjYXVzZSBOYXZpZ2F0aW9uRHVwbGljYXRlZCBlcnJvciAKLy8gaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTcwNDQKaWYoZXJyb3IubmFtZT09PSdOYXZpZ2F0aW9uRHVwbGljYXRlZCcpcmV0dXJuO2NvbnNvbGUuZXJyb3IoZXJyb3IpO319KTt9fSwvLyDliJ3lp4vljJblsZXlvIDoj5zljZUKLy8gaW5pdGlhbGl6ZSBvcGVuZWQgbWVudQppbml0T3BlbmVkTWVudTpmdW5jdGlvbiBpbml0T3BlbmVkTWVudSgpe3ZhciBfdGhpczI9dGhpczt2YXIgaW5kZXg9dGhpcy5hY3RpdmVJbmRleDt2YXIgYWN0aXZlSXRlbT10aGlzLml0ZW1zW2luZGV4XTtpZighYWN0aXZlSXRlbXx8dGhpcy5tb2RlPT09J2hvcml6b250YWwnfHx0aGlzLmNvbGxhcHNlKXJldHVybjt2YXIgaW5kZXhQYXRoPWFjdGl2ZUl0ZW0uaW5kZXhQYXRoOy8vIOWxleW8gOivpeiPnOWNlemhueeahOi3r+W+hOS4iuaJgOacieWtkOiPnOWNlQovLyBleHBhbmQgYWxsIHN1Ym1lbnVzIG9mIHRoZSBtZW51IGl0ZW0KaW5kZXhQYXRoLmZvckVhY2goZnVuY3Rpb24oaW5kZXgpe3ZhciBzdWJtZW51PV90aGlzMi5zdWJtZW51c1tpbmRleF07c3VibWVudSYmX3RoaXMyLm9wZW5NZW51KGluZGV4LHN1Ym1lbnUuaW5kZXhQYXRoKTt9KTt9LHJvdXRlVG9JdGVtOmZ1bmN0aW9uIHJvdXRlVG9JdGVtKGl0ZW0sb25FcnJvcil7dmFyIHJvdXRlPWl0ZW0ucm91dGV8fGl0ZW0uaW5kZXg7dHJ5e3RoaXMuJHJvdXRlci5wdXNoKHJvdXRlLGZ1bmN0aW9uKCl7fSxvbkVycm9yKTt9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKTt9fSxvcGVuOmZ1bmN0aW9uIG9wZW4oaW5kZXgpe3ZhciBfdGhpczM9dGhpczt2YXIgaW5kZXhQYXRoPXRoaXMuc3VibWVudXNbaW5kZXgudG9TdHJpbmcoKV0uaW5kZXhQYXRoO2luZGV4UGF0aC5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBfdGhpczMub3Blbk1lbnUoaSxpbmRleFBhdGgpO30pO30sY2xvc2U6ZnVuY3Rpb24gY2xvc2UoaW5kZXgpe3RoaXMuY2xvc2VNZW51KGluZGV4KTt9fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt0aGlzLmluaXRPcGVuZWRNZW51KCk7dGhpcy4kb24oJ2l0ZW0tY2xpY2snLHRoaXMuaGFuZGxlSXRlbUNsaWNrKTt0aGlzLiRvbignc3VibWVudS1jbGljaycsdGhpcy5oYW5kbGVTdWJtZW51Q2xpY2spO2lmKHRoaXMubW9kZT09PSdob3Jpem9udGFsJyl7bmV3IGFyaWFfbWVudWJhcih0aGlzLiRlbCk7Ly8gZXNsaW50LWRpc2FibGUtbGluZQp9dGhpcy4kd2F0Y2goJ2l0ZW1zJyx0aGlzLnVwZGF0ZUFjdGl2ZUluZGV4KTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPW1lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LnZ1ZQp2YXIgbWVudV9yZW5kZXIsbWVudV9zdGF0aWNSZW5kZXJGbnM7Lyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBtZW51X2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sbWVudV9yZW5kZXIsbWVudV9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIG1lbnVfYXBpO31tZW51X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvbWVudS9zcmMvbWVudS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX21lbnU9bWVudV9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9zcmNfbWVudS5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzcmNfbWVudS5uYW1lLHNyY19tZW51KTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfbWVudT1zcmNfbWVudTsvLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi90cmFuc2l0aW9ucy9jb2xsYXBzZS10cmFuc2l0aW9uIgp2YXIgY29sbGFwc2VfdHJhbnNpdGlvbl89X193ZWJwYWNrX3JlcXVpcmVfXygyMSk7dmFyIGNvbGxhcHNlX3RyYW5zaXRpb25fZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvbGxhcHNlX3RyYW5zaXRpb25fKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtbWl4aW4uanMKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBtZW51X21peGluPXtpbmplY3Q6Wydyb290TWVudSddLGNvbXB1dGVkOntpbmRleFBhdGg6ZnVuY3Rpb24gaW5kZXhQYXRoKCl7dmFyIHBhdGg9W3RoaXMuaW5kZXhdO3ZhciBwYXJlbnQ9dGhpcy4kcGFyZW50O3doaWxlKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lIT09J0VsTWVudScpe2lmKHBhcmVudC5pbmRleCl7cGF0aC51bnNoaWZ0KHBhcmVudC5pbmRleCk7fXBhcmVudD1wYXJlbnQuJHBhcmVudDt9cmV0dXJuIHBhdGg7fSxwYXJlbnRNZW51OmZ1bmN0aW9uIHBhcmVudE1lbnUoKXt2YXIgcGFyZW50PXRoaXMuJHBhcmVudDt3aGlsZShwYXJlbnQmJlsnRWxNZW51JywnRWxTdWJtZW51J10uaW5kZXhPZihwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSk9PT0tMSl7cGFyZW50PXBhcmVudC4kcGFyZW50O31yZXR1cm4gcGFyZW50O30scGFkZGluZ1N0eWxlOmZ1bmN0aW9uIHBhZGRpbmdTdHlsZSgpe2lmKHRoaXMucm9vdE1lbnUubW9kZSE9PSd2ZXJ0aWNhbCcpcmV0dXJue307dmFyIHBhZGRpbmc9MjA7dmFyIHBhcmVudD10aGlzLiRwYXJlbnQ7aWYodGhpcy5yb290TWVudS5jb2xsYXBzZSl7cGFkZGluZz0yMDt9ZWxzZXt3aGlsZShwYXJlbnQmJnBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lIT09J0VsTWVudScpe2lmKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lPT09J0VsU3VibWVudScpe3BhZGRpbmcrPTIwO31wYXJlbnQ9cGFyZW50LiRwYXJlbnQ7fX1yZXR1cm57cGFkZGluZ0xlZnQ6cGFkZGluZysncHgnfTt9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVudS9zcmMvc3VibWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCnZhciBwb3Blck1peGlucz17cHJvcHM6e3RyYW5zZm9ybU9yaWdpbjp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ZmFsc2V9LG9mZnNldDp2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5vZmZzZXQsYm91bmRhcmllc1BhZGRpbmc6dnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMuYm91bmRhcmllc1BhZGRpbmcscG9wcGVyT3B0aW9uczp2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5wb3BwZXJPcHRpb25zfSxkYXRhOnZ1ZV9wb3BwZXJfZGVmYXVsdC5hLmRhdGEsbWV0aG9kczp2dWVfcG9wcGVyX2RlZmF1bHQuYS5tZXRob2RzLGJlZm9yZURlc3Ryb3k6dnVlX3BvcHBlcl9kZWZhdWx0LmEuYmVmb3JlRGVzdHJveSxkZWFjdGl2YXRlZDp2dWVfcG9wcGVyX2RlZmF1bHQuYS5kZWFjdGl2YXRlZH07LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzdWJtZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFN1Ym1lbnUnLGNvbXBvbmVudE5hbWU6J0VsU3VibWVudScsbWl4aW5zOlttZW51X21peGluLGVtaXR0ZXJfZGVmYXVsdC5hLHBvcGVyTWl4aW5zXSxjb21wb25lbnRzOntFbENvbGxhcHNlVHJhbnNpdGlvbjpjb2xsYXBzZV90cmFuc2l0aW9uX2RlZmF1bHQuYX0scHJvcHM6e2luZGV4Ont0eXBlOlN0cmluZyxyZXF1aXJlZDp0cnVlfSxzaG93VGltZW91dDp7dHlwZTpOdW1iZXIsZGVmYXVsdDozMDB9LGhpZGVUaW1lb3V0Ont0eXBlOk51bWJlcixkZWZhdWx0OjMwMH0scG9wcGVyQ2xhc3M6U3RyaW5nLGRpc2FibGVkOkJvb2xlYW4scG9wcGVyQXBwZW5kVG9Cb2R5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDp1bmRlZmluZWR9fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57cG9wcGVySlM6bnVsbCx0aW1lb3V0Om51bGwsaXRlbXM6e30sc3VibWVudXM6e30sbW91c2VJbkNoaWxkOmZhbHNlfTt9LHdhdGNoOntvcGVuZWQ6ZnVuY3Rpb24gb3BlbmVkKHZhbCl7dmFyIF90aGlzPXRoaXM7aWYodGhpcy5pc01lbnVQb3B1cCl7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oXyl7X3RoaXMudXBkYXRlUG9wcGVyKCk7fSk7fX19LGNvbXB1dGVkOnsvLyBwb3BwZXIgb3B0aW9uCmFwcGVuZFRvQm9keTpmdW5jdGlvbiBhcHBlbmRUb0JvZHkoKXtyZXR1cm4gdGhpcy5wb3BwZXJBcHBlbmRUb0JvZHk9PT11bmRlZmluZWQ/dGhpcy5pc0ZpcnN0TGV2ZWw6dGhpcy5wb3BwZXJBcHBlbmRUb0JvZHk7fSxtZW51VHJhbnNpdGlvbk5hbWU6ZnVuY3Rpb24gbWVudVRyYW5zaXRpb25OYW1lKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUuY29sbGFwc2U/J2VsLXpvb20taW4tbGVmdCc6J2VsLXpvb20taW4tdG9wJzt9LG9wZW5lZDpmdW5jdGlvbiBvcGVuZWQoKXtyZXR1cm4gdGhpcy5yb290TWVudS5vcGVuZWRNZW51cy5pbmRleE9mKHRoaXMuaW5kZXgpPi0xO30sYWN0aXZlOmZ1bmN0aW9uIGFjdGl2ZSgpe3ZhciBpc0FjdGl2ZT1mYWxzZTt2YXIgc3VibWVudXM9dGhpcy5zdWJtZW51czt2YXIgaXRlbXM9dGhpcy5pdGVtcztPYmplY3Qua2V5cyhpdGVtcykuZm9yRWFjaChmdW5jdGlvbihpbmRleCl7aWYoaXRlbXNbaW5kZXhdLmFjdGl2ZSl7aXNBY3RpdmU9dHJ1ZTt9fSk7T2JqZWN0LmtleXMoc3VibWVudXMpLmZvckVhY2goZnVuY3Rpb24oaW5kZXgpe2lmKHN1Ym1lbnVzW2luZGV4XS5hY3RpdmUpe2lzQWN0aXZlPXRydWU7fX0pO3JldHVybiBpc0FjdGl2ZTt9LGhvdmVyQmFja2dyb3VuZDpmdW5jdGlvbiBob3ZlckJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5yb290TWVudS5ob3ZlckJhY2tncm91bmQ7fSxiYWNrZ3JvdW5kQ29sb3I6ZnVuY3Rpb24gYmFja2dyb3VuZENvbG9yKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yfHwnJzt9LGFjdGl2ZVRleHRDb2xvcjpmdW5jdGlvbiBhY3RpdmVUZXh0Q29sb3IoKXtyZXR1cm4gdGhpcy5yb290TWVudS5hY3RpdmVUZXh0Q29sb3J8fCcnO30sdGV4dENvbG9yOmZ1bmN0aW9uIHRleHRDb2xvcigpe3JldHVybiB0aGlzLnJvb3RNZW51LnRleHRDb2xvcnx8Jyc7fSxtb2RlOmZ1bmN0aW9uIG1vZGUoKXtyZXR1cm4gdGhpcy5yb290TWVudS5tb2RlO30saXNNZW51UG9wdXA6ZnVuY3Rpb24gaXNNZW51UG9wdXAoKXtyZXR1cm4gdGhpcy5yb290TWVudS5pc01lbnVQb3B1cDt9LHRpdGxlU3R5bGU6ZnVuY3Rpb24gdGl0bGVTdHlsZSgpe2lmKHRoaXMubW9kZSE9PSdob3Jpem9udGFsJyl7cmV0dXJue2NvbG9yOnRoaXMudGV4dENvbG9yfTt9cmV0dXJue2JvcmRlckJvdHRvbUNvbG9yOnRoaXMuYWN0aXZlP3RoaXMucm9vdE1lbnUuYWN0aXZlVGV4dENvbG9yP3RoaXMuYWN0aXZlVGV4dENvbG9yOicnOid0cmFuc3BhcmVudCcsY29sb3I6dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmVUZXh0Q29sb3I6dGhpcy50ZXh0Q29sb3J9O30saXNGaXJzdExldmVsOmZ1bmN0aW9uIGlzRmlyc3RMZXZlbCgpe3ZhciBpc0ZpcnN0TGV2ZWw9dHJ1ZTt2YXIgcGFyZW50PXRoaXMuJHBhcmVudDt3aGlsZShwYXJlbnQmJnBhcmVudCE9PXRoaXMucm9vdE1lbnUpe2lmKFsnRWxTdWJtZW51JywnRWxNZW51SXRlbUdyb3VwJ10uaW5kZXhPZihwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSk+LTEpe2lzRmlyc3RMZXZlbD1mYWxzZTticmVhazt9ZWxzZXtwYXJlbnQ9cGFyZW50LiRwYXJlbnQ7fX1yZXR1cm4gaXNGaXJzdExldmVsO319LG1ldGhvZHM6e2hhbmRsZUNvbGxhcHNlVG9nZ2xlOmZ1bmN0aW9uIGhhbmRsZUNvbGxhcHNlVG9nZ2xlKHZhbHVlKXtpZih2YWx1ZSl7dGhpcy5pbml0UG9wcGVyKCk7fWVsc2V7dGhpcy5kb0Rlc3Ryb3koKTt9fSxhZGRJdGVtOmZ1bmN0aW9uIGFkZEl0ZW0oaXRlbSl7dGhpcy4kc2V0KHRoaXMuaXRlbXMsaXRlbS5pbmRleCxpdGVtKTt9LHJlbW92ZUl0ZW06ZnVuY3Rpb24gcmVtb3ZlSXRlbShpdGVtKXtkZWxldGUgdGhpcy5pdGVtc1tpdGVtLmluZGV4XTt9LGFkZFN1Ym1lbnU6ZnVuY3Rpb24gYWRkU3VibWVudShpdGVtKXt0aGlzLiRzZXQodGhpcy5zdWJtZW51cyxpdGVtLmluZGV4LGl0ZW0pO30scmVtb3ZlU3VibWVudTpmdW5jdGlvbiByZW1vdmVTdWJtZW51KGl0ZW0pe2RlbGV0ZSB0aGlzLnN1Ym1lbnVzW2l0ZW0uaW5kZXhdO30saGFuZGxlQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlQ2xpY2soKXt2YXIgcm9vdE1lbnU9dGhpcy5yb290TWVudSxkaXNhYmxlZD10aGlzLmRpc2FibGVkO2lmKHJvb3RNZW51Lm1lbnVUcmlnZ2VyPT09J2hvdmVyJyYmcm9vdE1lbnUubW9kZT09PSdob3Jpem9udGFsJ3x8cm9vdE1lbnUuY29sbGFwc2UmJnJvb3RNZW51Lm1vZGU9PT0ndmVydGljYWwnfHxkaXNhYmxlZCl7cmV0dXJuO310aGlzLmRpc3BhdGNoKCdFbE1lbnUnLCdzdWJtZW51LWNsaWNrJyx0aGlzKTt9LGhhbmRsZU1vdXNlZW50ZXI6ZnVuY3Rpb24gaGFuZGxlTW91c2VlbnRlcihldmVudCl7dmFyIF90aGlzMj10aGlzO3ZhciBzaG93VGltZW91dD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMV06dGhpcy5zaG93VGltZW91dDtpZighKCdBY3RpdmVYT2JqZWN0J2luIHdpbmRvdykmJmV2ZW50LnR5cGU9PT0nZm9jdXMnJiYhZXZlbnQucmVsYXRlZFRhcmdldCl7cmV0dXJuO312YXIgcm9vdE1lbnU9dGhpcy5yb290TWVudSxkaXNhYmxlZD10aGlzLmRpc2FibGVkO2lmKHJvb3RNZW51Lm1lbnVUcmlnZ2VyPT09J2NsaWNrJyYmcm9vdE1lbnUubW9kZT09PSdob3Jpem9udGFsJ3x8IXJvb3RNZW51LmNvbGxhcHNlJiZyb290TWVudS5tb2RlPT09J3ZlcnRpY2FsJ3x8ZGlzYWJsZWQpe3JldHVybjt9dGhpcy5kaXNwYXRjaCgnRWxTdWJtZW51JywnbW91c2UtZW50ZXItY2hpbGQnKTtjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTt0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe190aGlzMi5yb290TWVudS5vcGVuTWVudShfdGhpczIuaW5kZXgsX3RoaXMyLmluZGV4UGF0aCk7fSxzaG93VGltZW91dCk7aWYodGhpcy5hcHBlbmRUb0JvZHkpe3RoaXMuJHBhcmVudC4kZWwuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2VlbnRlcicpKTt9fSxoYW5kbGVNb3VzZWxlYXZlOmZ1bmN0aW9uIGhhbmRsZU1vdXNlbGVhdmUoKXt2YXIgX3RoaXMzPXRoaXM7dmFyIGRlZXBEaXNwYXRjaD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMF06ZmFsc2U7dmFyIHJvb3RNZW51PXRoaXMucm9vdE1lbnU7aWYocm9vdE1lbnUubWVudVRyaWdnZXI9PT0nY2xpY2snJiZyb290TWVudS5tb2RlPT09J2hvcml6b250YWwnfHwhcm9vdE1lbnUuY29sbGFwc2UmJnJvb3RNZW51Lm1vZGU9PT0ndmVydGljYWwnKXtyZXR1cm47fXRoaXMuZGlzcGF0Y2goJ0VsU3VibWVudScsJ21vdXNlLWxlYXZlLWNoaWxkJyk7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7dGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXshX3RoaXMzLm1vdXNlSW5DaGlsZCYmX3RoaXMzLnJvb3RNZW51LmNsb3NlTWVudShfdGhpczMuaW5kZXgpO30sdGhpcy5oaWRlVGltZW91dCk7aWYodGhpcy5hcHBlbmRUb0JvZHkmJmRlZXBEaXNwYXRjaCl7aWYodGhpcy4kcGFyZW50LiRvcHRpb25zLm5hbWU9PT0nRWxTdWJtZW51Jyl7dGhpcy4kcGFyZW50LmhhbmRsZU1vdXNlbGVhdmUodHJ1ZSk7fX19LGhhbmRsZVRpdGxlTW91c2VlbnRlcjpmdW5jdGlvbiBoYW5kbGVUaXRsZU1vdXNlZW50ZXIoKXtpZih0aGlzLm1vZGU9PT0naG9yaXpvbnRhbCcmJiF0aGlzLnJvb3RNZW51LmJhY2tncm91bmRDb2xvcilyZXR1cm47dmFyIHRpdGxlPXRoaXMuJHJlZnNbJ3N1Ym1lbnUtdGl0bGUnXTt0aXRsZSYmKHRpdGxlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLnJvb3RNZW51LmhvdmVyQmFja2dyb3VuZCk7fSxoYW5kbGVUaXRsZU1vdXNlbGVhdmU6ZnVuY3Rpb24gaGFuZGxlVGl0bGVNb3VzZWxlYXZlKCl7aWYodGhpcy5tb2RlPT09J2hvcml6b250YWwnJiYhdGhpcy5yb290TWVudS5iYWNrZ3JvdW5kQ29sb3IpcmV0dXJuO3ZhciB0aXRsZT10aGlzLiRyZWZzWydzdWJtZW51LXRpdGxlJ107dGl0bGUmJih0aXRsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5yb290TWVudS5iYWNrZ3JvdW5kQ29sb3J8fCcnKTt9LHVwZGF0ZVBsYWNlbWVudDpmdW5jdGlvbiB1cGRhdGVQbGFjZW1lbnQoKXt0aGlzLmN1cnJlbnRQbGFjZW1lbnQ9dGhpcy5tb2RlPT09J2hvcml6b250YWwnJiZ0aGlzLmlzRmlyc3RMZXZlbD8nYm90dG9tLXN0YXJ0JzoncmlnaHQtc3RhcnQnO30saW5pdFBvcHBlcjpmdW5jdGlvbiBpbml0UG9wcGVyKCl7dGhpcy5yZWZlcmVuY2VFbG09dGhpcy4kZWw7dGhpcy5wb3BwZXJFbG09dGhpcy4kcmVmcy5tZW51O3RoaXMudXBkYXRlUGxhY2VtZW50KCk7fX0sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dmFyIF90aGlzND10aGlzO3RoaXMuJG9uKCd0b2dnbGUtY29sbGFwc2UnLHRoaXMuaGFuZGxlQ29sbGFwc2VUb2dnbGUpO3RoaXMuJG9uKCdtb3VzZS1lbnRlci1jaGlsZCcsZnVuY3Rpb24oKXtfdGhpczQubW91c2VJbkNoaWxkPXRydWU7Y2xlYXJUaW1lb3V0KF90aGlzNC50aW1lb3V0KTt9KTt0aGlzLiRvbignbW91c2UtbGVhdmUtY2hpbGQnLGZ1bmN0aW9uKCl7X3RoaXM0Lm1vdXNlSW5DaGlsZD1mYWxzZTtjbGVhclRpbWVvdXQoX3RoaXM0LnRpbWVvdXQpO30pO30sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dGhpcy5wYXJlbnRNZW51LmFkZFN1Ym1lbnUodGhpcyk7dGhpcy5yb290TWVudS5hZGRTdWJtZW51KHRoaXMpO3RoaXMuaW5pdFBvcHBlcigpO30sYmVmb3JlRGVzdHJveTpmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCl7dGhpcy5wYXJlbnRNZW51LnJlbW92ZVN1Ym1lbnUodGhpcyk7dGhpcy5yb290TWVudS5yZW1vdmVTdWJtZW51KHRoaXMpO30scmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihoKXt2YXIgX3RoaXM1PXRoaXM7dmFyIGFjdGl2ZT10aGlzLmFjdGl2ZSxvcGVuZWQ9dGhpcy5vcGVuZWQscGFkZGluZ1N0eWxlPXRoaXMucGFkZGluZ1N0eWxlLHRpdGxlU3R5bGU9dGhpcy50aXRsZVN0eWxlLGJhY2tncm91bmRDb2xvcj10aGlzLmJhY2tncm91bmRDb2xvcixyb290TWVudT10aGlzLnJvb3RNZW51LGN1cnJlbnRQbGFjZW1lbnQ9dGhpcy5jdXJyZW50UGxhY2VtZW50LG1lbnVUcmFuc2l0aW9uTmFtZT10aGlzLm1lbnVUcmFuc2l0aW9uTmFtZSxtb2RlPXRoaXMubW9kZSxkaXNhYmxlZD10aGlzLmRpc2FibGVkLHBvcHBlckNsYXNzPXRoaXMucG9wcGVyQ2xhc3MsJHNsb3RzPXRoaXMuJHNsb3RzLGlzRmlyc3RMZXZlbD10aGlzLmlzRmlyc3RMZXZlbDt2YXIgcG9wdXBNZW51PWgoJ3RyYW5zaXRpb24nLHthdHRyczp7bmFtZTptZW51VHJhbnNpdGlvbk5hbWV9fSxbaCgnZGl2Jyx7cmVmOidtZW51JyxkaXJlY3RpdmVzOlt7bmFtZTonc2hvdycsdmFsdWU6b3BlbmVkfV0sJ2NsYXNzJzpbJ2VsLW1lbnUtLScrbW9kZSxwb3BwZXJDbGFzc10sb246eydtb3VzZWVudGVyJzpmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCl7cmV0dXJuIF90aGlzNS5oYW5kbGVNb3VzZWVudGVyKCRldmVudCwxMDApO30sJ21vdXNlbGVhdmUnOmZ1bmN0aW9uIG1vdXNlbGVhdmUoKXtyZXR1cm4gX3RoaXM1LmhhbmRsZU1vdXNlbGVhdmUodHJ1ZSk7fSwnZm9jdXMnOmZ1bmN0aW9uIGZvY3VzKCRldmVudCl7cmV0dXJuIF90aGlzNS5oYW5kbGVNb3VzZWVudGVyKCRldmVudCwxMDApO319fSxbaCgndWwnLHthdHRyczp7cm9sZTonbWVudSd9LCdjbGFzcyc6WydlbC1tZW51IGVsLW1lbnUtLXBvcHVwJywnZWwtbWVudS0tcG9wdXAtJytjdXJyZW50UGxhY2VtZW50XSxzdHlsZTp7YmFja2dyb3VuZENvbG9yOnJvb3RNZW51LmJhY2tncm91bmRDb2xvcnx8Jyd9fSxbJHNsb3RzLmRlZmF1bHRdKV0pXSk7dmFyIGlubGluZU1lbnU9aCgnZWwtY29sbGFwc2UtdHJhbnNpdGlvbicsW2goJ3VsJyx7YXR0cnM6e3JvbGU6J21lbnUnfSwnY2xhc3MnOidlbC1tZW51IGVsLW1lbnUtLWlubGluZScsZGlyZWN0aXZlczpbe25hbWU6J3Nob3cnLHZhbHVlOm9wZW5lZH1dLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6cm9vdE1lbnUuYmFja2dyb3VuZENvbG9yfHwnJ319LFskc2xvdHMuZGVmYXVsdF0pXSk7dmFyIHN1Ym1lbnVUaXRsZUljb249cm9vdE1lbnUubW9kZT09PSdob3Jpem9udGFsJyYmaXNGaXJzdExldmVsfHxyb290TWVudS5tb2RlPT09J3ZlcnRpY2FsJyYmIXJvb3RNZW51LmNvbGxhcHNlPydlbC1pY29uLWFycm93LWRvd24nOidlbC1pY29uLWFycm93LXJpZ2h0JztyZXR1cm4gaCgnbGknLHsnY2xhc3MnOnsnZWwtc3VibWVudSc6dHJ1ZSwnaXMtYWN0aXZlJzphY3RpdmUsJ2lzLW9wZW5lZCc6b3BlbmVkLCdpcy1kaXNhYmxlZCc6ZGlzYWJsZWR9LGF0dHJzOntyb2xlOidtZW51aXRlbScsJ2FyaWEtaGFzcG9wdXAnOid0cnVlJywnYXJpYS1leHBhbmRlZCc6b3BlbmVkfSxvbjp7J21vdXNlZW50ZXInOnRoaXMuaGFuZGxlTW91c2VlbnRlciwnbW91c2VsZWF2ZSc6ZnVuY3Rpb24gbW91c2VsZWF2ZSgpe3JldHVybiBfdGhpczUuaGFuZGxlTW91c2VsZWF2ZShmYWxzZSk7fSwnZm9jdXMnOnRoaXMuaGFuZGxlTW91c2VlbnRlcn19LFtoKCdkaXYnLHsnY2xhc3MnOidlbC1zdWJtZW51X190aXRsZScscmVmOidzdWJtZW51LXRpdGxlJyxvbjp7J2NsaWNrJzp0aGlzLmhhbmRsZUNsaWNrLCdtb3VzZWVudGVyJzp0aGlzLmhhbmRsZVRpdGxlTW91c2VlbnRlciwnbW91c2VsZWF2ZSc6dGhpcy5oYW5kbGVUaXRsZU1vdXNlbGVhdmV9LHN0eWxlOltwYWRkaW5nU3R5bGUsdGl0bGVTdHlsZSx7YmFja2dyb3VuZENvbG9yOmJhY2tncm91bmRDb2xvcn1dfSxbJHNsb3RzLnRpdGxlLGgoJ2knLHsnY2xhc3MnOlsnZWwtc3VibWVudV9faWNvbi1hcnJvdycsc3VibWVudVRpdGxlSWNvbl19KV0pLHRoaXMuaXNNZW51UG9wdXA/cG9wdXBNZW51OmlubGluZU1lbnVdKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL3N1Ym1lbnUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19zdWJtZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXN1Ym1lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L3NyYy9zdWJtZW51LnZ1ZQp2YXIgc3VibWVudV9yZW5kZXIsc3VibWVudV9zdGF0aWNSZW5kZXJGbnM7Lyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBzdWJtZW51X2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX3N1Ym1lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sc3VibWVudV9yZW5kZXIsc3VibWVudV9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHN1Ym1lbnVfYXBpO31zdWJtZW51X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvbWVudS9zcmMvc3VibWVudS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3VibWVudT1zdWJtZW51X2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3VibWVudS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3N1Ym1lbnUuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoc3VibWVudS5uYW1lLHN1Ym1lbnUpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19zdWJtZW51PXN1Ym1lbnU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhNWRiZmVhJgp2YXIgbWVudV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmE1ZGJmZWFfcmVuZGVyPWZ1bmN0aW9uIG1lbnVfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhNWRiZmVhX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygibGkiLHtzdGF0aWNDbGFzczoiZWwtbWVudS1pdGVtIixjbGFzczp7ImlzLWFjdGl2ZSI6X3ZtLmFjdGl2ZSwiaXMtZGlzYWJsZWQiOl92bS5kaXNhYmxlZH0sc3R5bGU6W192bS5wYWRkaW5nU3R5bGUsX3ZtLml0ZW1TdHlsZSx7YmFja2dyb3VuZENvbG9yOl92bS5iYWNrZ3JvdW5kQ29sb3J9XSxhdHRyczp7cm9sZToibWVudWl0ZW0iLHRhYmluZGV4OiItMSJ9LG9uOntjbGljazpfdm0uaGFuZGxlQ2xpY2ssbW91c2VlbnRlcjpfdm0ub25Nb3VzZUVudGVyLGZvY3VzOl92bS5vbk1vdXNlRW50ZXIsYmx1cjpfdm0ub25Nb3VzZUxlYXZlLG1vdXNlbGVhdmU6X3ZtLm9uTW91c2VMZWF2ZX19LFtfdm0ucGFyZW50TWVudS4kb3B0aW9ucy5jb21wb25lbnROYW1lPT09IkVsTWVudSImJl92bS5yb290TWVudS5jb2xsYXBzZSYmX3ZtLiRzbG90cy50aXRsZT9fYygiZWwtdG9vbHRpcCIse2F0dHJzOntlZmZlY3Q6ImRhcmsiLHBsYWNlbWVudDoicmlnaHQifX0sW19jKCJkaXYiLHthdHRyczp7c2xvdDoiY29udGVudCJ9LHNsb3Q6ImNvbnRlbnQifSxbX3ZtLl90KCJ0aXRsZSIpXSwyKSxfYygiZGl2Iix7c3RhdGljU3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiMCIsdG9wOiIwIixoZWlnaHQ6IjEwMCUiLHdpZHRoOiIxMDAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIscGFkZGluZzoiMCAyMHB4In19LFtfdm0uX3QoImRlZmF1bHQiKV0sMildKTpbX3ZtLl90KCJkZWZhdWx0IiksX3ZtLl90KCJ0aXRsZSIpXV0sMik7fTt2YXIgbWVudV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmE1ZGJmZWFfc3RhdGljUmVuZGVyRm5zPVtdO21lbnVfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhNWRiZmVhX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhNWRiZmVhJgovLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi90b29sdGlwIgp2YXIgdG9vbHRpcF89X193ZWJwYWNrX3JlcXVpcmVfXygyNik7dmFyIHRvb2x0aXBfZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHRvb2x0aXBfKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIG1lbnVfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxNZW51SXRlbScsY29tcG9uZW50TmFtZTonRWxNZW51SXRlbScsbWl4aW5zOlttZW51X21peGluLGVtaXR0ZXJfZGVmYXVsdC5hXSxjb21wb25lbnRzOntFbFRvb2x0aXA6dG9vbHRpcF9kZWZhdWx0LmF9LHByb3BzOntpbmRleDp7ZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbiB2YWxpZGF0b3IodmFsKXtyZXR1cm4gdHlwZW9mIHZhbD09PSdzdHJpbmcnfHx2YWw9PT1udWxsO319LHJvdXRlOltTdHJpbmcsT2JqZWN0XSxkaXNhYmxlZDpCb29sZWFufSxjb21wdXRlZDp7YWN0aXZlOmZ1bmN0aW9uIGFjdGl2ZSgpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy5yb290TWVudS5hY3RpdmVJbmRleDt9LGhvdmVyQmFja2dyb3VuZDpmdW5jdGlvbiBob3ZlckJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5yb290TWVudS5ob3ZlckJhY2tncm91bmQ7fSxiYWNrZ3JvdW5kQ29sb3I6ZnVuY3Rpb24gYmFja2dyb3VuZENvbG9yKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yfHwnJzt9LGFjdGl2ZVRleHRDb2xvcjpmdW5jdGlvbiBhY3RpdmVUZXh0Q29sb3IoKXtyZXR1cm4gdGhpcy5yb290TWVudS5hY3RpdmVUZXh0Q29sb3J8fCcnO30sdGV4dENvbG9yOmZ1bmN0aW9uIHRleHRDb2xvcigpe3JldHVybiB0aGlzLnJvb3RNZW51LnRleHRDb2xvcnx8Jyc7fSxtb2RlOmZ1bmN0aW9uIG1vZGUoKXtyZXR1cm4gdGhpcy5yb290TWVudS5tb2RlO30saXRlbVN0eWxlOmZ1bmN0aW9uIGl0ZW1TdHlsZSgpe3ZhciBzdHlsZT17Y29sb3I6dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmVUZXh0Q29sb3I6dGhpcy50ZXh0Q29sb3J9O2lmKHRoaXMubW9kZT09PSdob3Jpem9udGFsJyYmIXRoaXMuaXNOZXN0ZWQpe3N0eWxlLmJvcmRlckJvdHRvbUNvbG9yPXRoaXMuYWN0aXZlP3RoaXMucm9vdE1lbnUuYWN0aXZlVGV4dENvbG9yP3RoaXMuYWN0aXZlVGV4dENvbG9yOicnOid0cmFuc3BhcmVudCc7fXJldHVybiBzdHlsZTt9LGlzTmVzdGVkOmZ1bmN0aW9uIGlzTmVzdGVkKCl7cmV0dXJuIHRoaXMucGFyZW50TWVudSE9PXRoaXMucm9vdE1lbnU7fX0sbWV0aG9kczp7b25Nb3VzZUVudGVyOmZ1bmN0aW9uIG9uTW91c2VFbnRlcigpe2lmKHRoaXMubW9kZT09PSdob3Jpem9udGFsJyYmIXRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yKXJldHVybjt0aGlzLiRlbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5ob3ZlckJhY2tncm91bmQ7fSxvbk1vdXNlTGVhdmU6ZnVuY3Rpb24gb25Nb3VzZUxlYXZlKCl7aWYodGhpcy5tb2RlPT09J2hvcml6b250YWwnJiYhdGhpcy5yb290TWVudS5iYWNrZ3JvdW5kQ29sb3IpcmV0dXJuO3RoaXMuJGVsLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmJhY2tncm91bmRDb2xvcjt9LGhhbmRsZUNsaWNrOmZ1bmN0aW9uIGhhbmRsZUNsaWNrKCl7aWYoIXRoaXMuZGlzYWJsZWQpe3RoaXMuZGlzcGF0Y2goJ0VsTWVudScsJ2l0ZW0tY2xpY2snLHRoaXMpO3RoaXMuJGVtaXQoJ2NsaWNrJyx0aGlzKTt9fX0sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dGhpcy5wYXJlbnRNZW51LmFkZEl0ZW0odGhpcyk7dGhpcy5yb290TWVudS5hZGRJdGVtKHRoaXMpO30sYmVmb3JlRGVzdHJveTpmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCl7dGhpcy5wYXJlbnRNZW51LnJlbW92ZUl0ZW0odGhpcyk7dGhpcy5yb290TWVudS5yZW1vdmVJdGVtKHRoaXMpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfbWVudV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPW1lbnVfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBtZW51X2l0ZW1fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfbWVudV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLG1lbnVfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhNWRiZmVhX3JlbmRlcixtZW51X2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYTVkYmZlYV9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIG1lbnVfaXRlbV9hcGk7fW1lbnVfaXRlbV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbWVudV9pdGVtPW1lbnVfaXRlbV9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUtaXRlbS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL21lbnVfaXRlbS5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChtZW51X2l0ZW0ubmFtZSxtZW51X2l0ZW0pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19tZW51X2l0ZW09bWVudV9pdGVtOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NDNiN2JkYyYKdmFyIG1lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0M2I3YmRjX3JlbmRlcj1mdW5jdGlvbiBtZW51X2l0ZW1fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF81NDNiN2JkY19yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImxpIix7c3RhdGljQ2xhc3M6ImVsLW1lbnUtaXRlbS1ncm91cCJ9LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLW1lbnUtaXRlbS1ncm91cF9fdGl0bGUiLHN0eWxlOntwYWRkaW5nTGVmdDpfdm0ubGV2ZWxQYWRkaW5nKyJweCJ9fSxbIV92bS4kc2xvdHMudGl0bGU/W192bS5fdihfdm0uX3MoX3ZtLnRpdGxlKSldOl92bS5fdCgidGl0bGUiKV0sMiksX2MoInVsIixbX3ZtLl90KCJkZWZhdWx0IildLDIpXSk7fTt2YXIgbWVudV9pdGVtX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNTQzYjdiZGNfc3RhdGljUmVuZGVyRm5zPVtdO21lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0M2I3YmRjX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU0M2I3YmRjJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIG1lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxNZW51SXRlbUdyb3VwJyxjb21wb25lbnROYW1lOidFbE1lbnVJdGVtR3JvdXAnLGluamVjdDpbJ3Jvb3RNZW51J10scHJvcHM6e3RpdGxlOnt0eXBlOlN0cmluZ319LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntwYWRkaW5nTGVmdDoyMH07fSxjb21wdXRlZDp7bGV2ZWxQYWRkaW5nOmZ1bmN0aW9uIGxldmVsUGFkZGluZygpe3ZhciBwYWRkaW5nPTIwO3ZhciBwYXJlbnQ9dGhpcy4kcGFyZW50O2lmKHRoaXMucm9vdE1lbnUuY29sbGFwc2UpcmV0dXJuIDIwO3doaWxlKHBhcmVudCYmcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUhPT0nRWxNZW51Jyl7aWYocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWU9PT0nRWxTdWJtZW51Jyl7cGFkZGluZys9MjA7fXBhcmVudD1wYXJlbnQuJHBhcmVudDt9cmV0dXJuIHBhZGRpbmc7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfbWVudV9pdGVtX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPW1lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS1ncm91cC52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBtZW51X2l0ZW1fZ3JvdXBfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfbWVudV9pdGVtX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLG1lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0M2I3YmRjX3JlbmRlcixtZW51X2l0ZW1fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF81NDNiN2JkY19zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIG1lbnVfaXRlbV9ncm91cF9hcGk7fW1lbnVfaXRlbV9ncm91cF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS1ncm91cC52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbWVudV9pdGVtX2dyb3VwPW1lbnVfaXRlbV9ncm91cF9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUtaXRlbS1ncm91cC9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL21lbnVfaXRlbV9ncm91cC5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChtZW51X2l0ZW1fZ3JvdXAubmFtZSxtZW51X2l0ZW1fZ3JvdXApO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19tZW51X2l0ZW1fZ3JvdXA9bWVudV9pdGVtX2dyb3VwOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDNkZDc3NCYKdmFyIGlucHV0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQzZGQ3NzRfcmVuZGVyPWZ1bmN0aW9uIGlucHV0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQzZGQ3NzRfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtjbGFzczpbX3ZtLnR5cGU9PT0idGV4dGFyZWEiPyJlbC10ZXh0YXJlYSI6ImVsLWlucHV0Iixfdm0uaW5wdXRTaXplPyJlbC1pbnB1dC0tIitfdm0uaW5wdXRTaXplOiIiLHsiaXMtZGlzYWJsZWQiOl92bS5pbnB1dERpc2FibGVkLCJpcy1leGNlZWQiOl92bS5pbnB1dEV4Y2VlZCwiZWwtaW5wdXQtZ3JvdXAiOl92bS4kc2xvdHMucHJlcGVuZHx8X3ZtLiRzbG90cy5hcHBlbmQsImVsLWlucHV0LWdyb3VwLS1hcHBlbmQiOl92bS4kc2xvdHMuYXBwZW5kLCJlbC1pbnB1dC1ncm91cC0tcHJlcGVuZCI6X3ZtLiRzbG90cy5wcmVwZW5kLCJlbC1pbnB1dC0tcHJlZml4Ijpfdm0uJHNsb3RzLnByZWZpeHx8X3ZtLnByZWZpeEljb24sImVsLWlucHV0LS1zdWZmaXgiOl92bS4kc2xvdHMuc3VmZml4fHxfdm0uc3VmZml4SWNvbnx8X3ZtLmNsZWFyYWJsZXx8X3ZtLnNob3dQYXNzd29yZH1dLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uIG1vdXNlZW50ZXIoJGV2ZW50KXtfdm0uaG92ZXJpbmc9dHJ1ZTt9LG1vdXNlbGVhdmU6ZnVuY3Rpb24gbW91c2VsZWF2ZSgkZXZlbnQpe192bS5ob3ZlcmluZz1mYWxzZTt9fX0sW192bS50eXBlIT09InRleHRhcmVhIj9bX3ZtLiRzbG90cy5wcmVwZW5kP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQifSxbX3ZtLl90KCJwcmVwZW5kIildLDIpOl92bS5fZSgpLF92bS50eXBlIT09InRleHRhcmVhIj9fYygiaW5wdXQiLF92bS5fYih7cmVmOiJpbnB1dCIsc3RhdGljQ2xhc3M6ImVsLWlucHV0X19pbm5lciIsYXR0cnM6e3RhYmluZGV4Ol92bS50YWJpbmRleCx0eXBlOl92bS5zaG93UGFzc3dvcmQ/X3ZtLnBhc3N3b3JkVmlzaWJsZT8idGV4dCI6InBhc3N3b3JkIjpfdm0udHlwZSxkaXNhYmxlZDpfdm0uaW5wdXREaXNhYmxlZCxyZWFkb25seTpfdm0ucmVhZG9ubHksYXV0b2NvbXBsZXRlOl92bS5hdXRvQ29tcGxldGV8fF92bS5hdXRvY29tcGxldGUsImFyaWEtbGFiZWwiOl92bS5sYWJlbH0sb246e2NvbXBvc2l0aW9uc3RhcnQ6X3ZtLmhhbmRsZUNvbXBvc2l0aW9uU3RhcnQsY29tcG9zaXRpb251cGRhdGU6X3ZtLmhhbmRsZUNvbXBvc2l0aW9uVXBkYXRlLGNvbXBvc2l0aW9uZW5kOl92bS5oYW5kbGVDb21wb3NpdGlvbkVuZCxpbnB1dDpfdm0uaGFuZGxlSW5wdXQsZm9jdXM6X3ZtLmhhbmRsZUZvY3VzLGJsdXI6X3ZtLmhhbmRsZUJsdXIsY2hhbmdlOl92bS5oYW5kbGVDaGFuZ2V9fSwiaW5wdXQiLF92bS4kYXR0cnMsZmFsc2UpKTpfdm0uX2UoKSxfdm0uJHNsb3RzLnByZWZpeHx8X3ZtLnByZWZpeEljb24/X2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX3ByZWZpeCJ9LFtfdm0uX3QoInByZWZpeCIpLF92bS5wcmVmaXhJY29uP19jKCJpIix7c3RhdGljQ2xhc3M6ImVsLWlucHV0X19pY29uIixjbGFzczpfdm0ucHJlZml4SWNvbn0pOl92bS5fZSgpXSwyKTpfdm0uX2UoKSxfdm0uZ2V0U3VmZml4VmlzaWJsZSgpP19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWlucHV0X19zdWZmaXgifSxbX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX3N1ZmZpeC1pbm5lciJ9LFshX3ZtLnNob3dDbGVhcnx8IV92bS5zaG93UHdkVmlzaWJsZXx8IV92bS5pc1dvcmRMaW1pdFZpc2libGU/W192bS5fdCgic3VmZml4IiksX3ZtLnN1ZmZpeEljb24/X2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24iLGNsYXNzOl92bS5zdWZmaXhJY29ufSk6X3ZtLl9lKCldOl92bS5fZSgpLF92bS5zaG93Q2xlYXI/X2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1jaXJjbGUtY2xvc2UgZWwtaW5wdXRfX2NsZWFyIixvbjp7bW91c2Vkb3duOmZ1bmN0aW9uIG1vdXNlZG93bigkZXZlbnQpeyRldmVudC5wcmV2ZW50RGVmYXVsdCgpO30sY2xpY2s6X3ZtLmNsZWFyfX0pOl92bS5fZSgpLF92bS5zaG93UHdkVmlzaWJsZT9fYygiaSIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dF9faWNvbiBlbC1pY29uLXZpZXcgZWwtaW5wdXRfX2NsZWFyIixvbjp7Y2xpY2s6X3ZtLmhhbmRsZVBhc3N3b3JkVmlzaWJsZX19KTpfdm0uX2UoKSxfdm0uaXNXb3JkTGltaXRWaXNpYmxlP19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWlucHV0X19jb3VudCJ9LFtfYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dF9fY291bnQtaW5uZXIifSxbX3ZtLl92KCJcbiAgICAgICAgICAgICIrX3ZtLl9zKF92bS50ZXh0TGVuZ3RoKSsiLyIrX3ZtLl9zKF92bS51cHBlckxpbWl0KSsiXG4gICAgICAgICAgIildKV0pOl92bS5fZSgpXSwyKSxfdm0udmFsaWRhdGVTdGF0ZT9fYygiaSIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dF9faWNvbiIsY2xhc3M6WyJlbC1pbnB1dF9fdmFsaWRhdGVJY29uIixfdm0udmFsaWRhdGVJY29uXX0pOl92bS5fZSgpXSk6X3ZtLl9lKCksX3ZtLiRzbG90cy5hcHBlbmQ/X2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dC1ncm91cF9fYXBwZW5kIn0sW192bS5fdCgiYXBwZW5kIildLDIpOl92bS5fZSgpXTpfYygidGV4dGFyZWEiLF92bS5fYih7cmVmOiJ0ZXh0YXJlYSIsc3RhdGljQ2xhc3M6ImVsLXRleHRhcmVhX19pbm5lciIsc3R5bGU6X3ZtLnRleHRhcmVhU3R5bGUsYXR0cnM6e3RhYmluZGV4Ol92bS50YWJpbmRleCxkaXNhYmxlZDpfdm0uaW5wdXREaXNhYmxlZCxyZWFkb25seTpfdm0ucmVhZG9ubHksYXV0b2NvbXBsZXRlOl92bS5hdXRvQ29tcGxldGV8fF92bS5hdXRvY29tcGxldGUsImFyaWEtbGFiZWwiOl92bS5sYWJlbH0sb246e2NvbXBvc2l0aW9uc3RhcnQ6X3ZtLmhhbmRsZUNvbXBvc2l0aW9uU3RhcnQsY29tcG9zaXRpb251cGRhdGU6X3ZtLmhhbmRsZUNvbXBvc2l0aW9uVXBkYXRlLGNvbXBvc2l0aW9uZW5kOl92bS5oYW5kbGVDb21wb3NpdGlvbkVuZCxpbnB1dDpfdm0uaGFuZGxlSW5wdXQsZm9jdXM6X3ZtLmhhbmRsZUZvY3VzLGJsdXI6X3ZtLmhhbmRsZUJsdXIsY2hhbmdlOl92bS5oYW5kbGVDaGFuZ2V9fSwidGV4dGFyZWEiLF92bS4kYXR0cnMsZmFsc2UpKSxfdm0uaXNXb3JkTGltaXRWaXNpYmxlJiZfdm0udHlwZT09PSJ0ZXh0YXJlYSI/X2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2NvdW50In0sW192bS5fdihfdm0uX3MoX3ZtLnRleHRMZW5ndGgpKyIvIitfdm0uX3MoX3ZtLnVwcGVyTGltaXQpKV0pOl92bS5fZSgpXSwyKTt9O3ZhciBpbnB1dHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0M2RkNzc0X3N0YXRpY1JlbmRlckZucz1bXTtpbnB1dHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0M2RkNzc0X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0M2RkNzc0JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L3NyYy9jYWxjVGV4dGFyZWFIZWlnaHQuanMKdmFyIGhpZGRlblRleHRhcmVhPXZvaWQgMDt2YXIgSElEREVOX1NUWUxFPSdcbiAgaGVpZ2h0OjAgIWltcG9ydGFudDtcbiAgdmlzaWJpbGl0eTpoaWRkZW4gIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnQ7XG4gIHBvc2l0aW9uOmFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHotaW5kZXg6LTEwMDAgIWltcG9ydGFudDtcbiAgdG9wOjAgIWltcG9ydGFudDtcbiAgcmlnaHQ6MCAhaW1wb3J0YW50XG4nO3ZhciBDT05URVhUX1NUWUxFPVsnbGV0dGVyLXNwYWNpbmcnLCdsaW5lLWhlaWdodCcsJ3BhZGRpbmctdG9wJywncGFkZGluZy1ib3R0b20nLCdmb250LWZhbWlseScsJ2ZvbnQtd2VpZ2h0JywnZm9udC1zaXplJywndGV4dC1yZW5kZXJpbmcnLCd0ZXh0LXRyYW5zZm9ybScsJ3dpZHRoJywndGV4dC1pbmRlbnQnLCdwYWRkaW5nLWxlZnQnLCdwYWRkaW5nLXJpZ2h0JywnYm9yZGVyLXdpZHRoJywnYm94LXNpemluZyddO2Z1bmN0aW9uIGNhbGN1bGF0ZU5vZGVTdHlsaW5nKHRhcmdldEVsZW1lbnQpe3ZhciBzdHlsZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXRFbGVtZW50KTt2YXIgYm94U2l6aW5nPXN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTt2YXIgcGFkZGluZ1NpemU9cGFyc2VGbG9hdChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWJvdHRvbScpKStwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctdG9wJykpO3ZhciBib3JkZXJTaXplPXBhcnNlRmxvYXQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWJvdHRvbS13aWR0aCcpKStwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci10b3Atd2lkdGgnKSk7dmFyIGNvbnRleHRTdHlsZT1DT05URVhUX1NUWUxFLm1hcChmdW5jdGlvbihuYW1lKXtyZXR1cm4gbmFtZSsnOicrc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTt9KS5qb2luKCc7Jyk7cmV0dXJue2NvbnRleHRTdHlsZTpjb250ZXh0U3R5bGUscGFkZGluZ1NpemU6cGFkZGluZ1NpemUsYm9yZGVyU2l6ZTpib3JkZXJTaXplLGJveFNpemluZzpib3hTaXppbmd9O31mdW5jdGlvbiBjYWxjVGV4dGFyZWFIZWlnaHQodGFyZ2V0RWxlbWVudCl7dmFyIG1pblJvd3M9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzFdOjE7dmFyIG1heFJvd3M9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzJdOm51bGw7aWYoIWhpZGRlblRleHRhcmVhKXtoaWRkZW5UZXh0YXJlYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dGFyZWEpO312YXIgX2NhbGN1bGF0ZU5vZGVTdHlsaW5nPWNhbGN1bGF0ZU5vZGVTdHlsaW5nKHRhcmdldEVsZW1lbnQpLHBhZGRpbmdTaXplPV9jYWxjdWxhdGVOb2RlU3R5bGluZy5wYWRkaW5nU2l6ZSxib3JkZXJTaXplPV9jYWxjdWxhdGVOb2RlU3R5bGluZy5ib3JkZXJTaXplLGJveFNpemluZz1fY2FsY3VsYXRlTm9kZVN0eWxpbmcuYm94U2l6aW5nLGNvbnRleHRTdHlsZT1fY2FsY3VsYXRlTm9kZVN0eWxpbmcuY29udGV4dFN0eWxlO2hpZGRlblRleHRhcmVhLnNldEF0dHJpYnV0ZSgnc3R5bGUnLGNvbnRleHRTdHlsZSsnOycrSElEREVOX1NUWUxFKTtoaWRkZW5UZXh0YXJlYS52YWx1ZT10YXJnZXRFbGVtZW50LnZhbHVlfHx0YXJnZXRFbGVtZW50LnBsYWNlaG9sZGVyfHwnJzt2YXIgaGVpZ2h0PWhpZGRlblRleHRhcmVhLnNjcm9sbEhlaWdodDt2YXIgcmVzdWx0PXt9O2lmKGJveFNpemluZz09PSdib3JkZXItYm94Jyl7aGVpZ2h0PWhlaWdodCtib3JkZXJTaXplO31lbHNlIGlmKGJveFNpemluZz09PSdjb250ZW50LWJveCcpe2hlaWdodD1oZWlnaHQtcGFkZGluZ1NpemU7fWhpZGRlblRleHRhcmVhLnZhbHVlPScnO3ZhciBzaW5nbGVSb3dIZWlnaHQ9aGlkZGVuVGV4dGFyZWEuc2Nyb2xsSGVpZ2h0LXBhZGRpbmdTaXplO2lmKG1pblJvd3MhPT1udWxsKXt2YXIgbWluSGVpZ2h0PXNpbmdsZVJvd0hlaWdodCptaW5Sb3dzO2lmKGJveFNpemluZz09PSdib3JkZXItYm94Jyl7bWluSGVpZ2h0PW1pbkhlaWdodCtwYWRkaW5nU2l6ZStib3JkZXJTaXplO31oZWlnaHQ9TWF0aC5tYXgobWluSGVpZ2h0LGhlaWdodCk7cmVzdWx0Lm1pbkhlaWdodD1taW5IZWlnaHQrJ3B4Jzt9aWYobWF4Um93cyE9PW51bGwpe3ZhciBtYXhIZWlnaHQ9c2luZ2xlUm93SGVpZ2h0Km1heFJvd3M7aWYoYm94U2l6aW5nPT09J2JvcmRlci1ib3gnKXttYXhIZWlnaHQ9bWF4SGVpZ2h0K3BhZGRpbmdTaXplK2JvcmRlclNpemU7fWhlaWdodD1NYXRoLm1pbihtYXhIZWlnaHQsaGVpZ2h0KTt9cmVzdWx0LmhlaWdodD1oZWlnaHQrJ3B4JztoaWRkZW5UZXh0YXJlYS5wYXJlbnROb2RlJiZoaWRkZW5UZXh0YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhpZGRlblRleHRhcmVhKTtoaWRkZW5UZXh0YXJlYT1udWxsO3JldHVybiByZXN1bHQ7fTsvLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi91dGlscy9tZXJnZSIKdmFyIG1lcmdlXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDcpO3ZhciBtZXJnZV9kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obWVyZ2VfKTsvLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi91dGlscy9zaGFyZWQiCnZhciBzaGFyZWRfPV9fd2VicGFja19yZXF1aXJlX18oMTkpOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgaW5wdXR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsSW5wdXQnLGNvbXBvbmVudE5hbWU6J0VsSW5wdXQnLG1peGluczpbZW1pdHRlcl9kZWZhdWx0LmEsbWlncmF0aW5nX2RlZmF1bHQuYV0saW5oZXJpdEF0dHJzOmZhbHNlLGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OicnfSxlbEZvcm1JdGVtOntkZWZhdWx0OicnfX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3RleHRhcmVhQ2FsY1N0eWxlOnt9LGhvdmVyaW5nOmZhbHNlLGZvY3VzZWQ6ZmFsc2UsaXNDb21wb3Npbmc6ZmFsc2UscGFzc3dvcmRWaXNpYmxlOmZhbHNlfTt9LHByb3BzOnt2YWx1ZTpbU3RyaW5nLE51bWJlcl0sc2l6ZTpTdHJpbmcscmVzaXplOlN0cmluZyxmb3JtOlN0cmluZyxkaXNhYmxlZDpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW4sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDondGV4dCd9LGF1dG9zaXplOnt0eXBlOltCb29sZWFuLE9iamVjdF0sZGVmYXVsdDpmYWxzZX0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyxkZWZhdWx0OidvZmYnfSwvKiogQERlcHJlY2F0ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uICovYXV0b0NvbXBsZXRlOnt0eXBlOlN0cmluZyx2YWxpZGF0b3I6ZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCl7ZmFsc2UmJmZhbHNlO3JldHVybiB0cnVlO319LHZhbGlkYXRlRXZlbnQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LHN1ZmZpeEljb246U3RyaW5nLHByZWZpeEljb246U3RyaW5nLGxhYmVsOlN0cmluZyxjbGVhcmFibGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxzaG93UGFzc3dvcmQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxzaG93V29yZExpbWl0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX0sdGFiaW5kZXg6U3RyaW5nfSxjb21wdXRlZDp7X2VsRm9ybUl0ZW1TaXplOmZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpe3JldHVybih0aGlzLmVsRm9ybUl0ZW18fHt9KS5lbEZvcm1JdGVtU2l6ZTt9LHZhbGlkYXRlU3RhdGU6ZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZSgpe3JldHVybiB0aGlzLmVsRm9ybUl0ZW0/dGhpcy5lbEZvcm1JdGVtLnZhbGlkYXRlU3RhdGU6Jyc7fSxuZWVkU3RhdHVzSWNvbjpmdW5jdGlvbiBuZWVkU3RhdHVzSWNvbigpe3JldHVybiB0aGlzLmVsRm9ybT90aGlzLmVsRm9ybS5zdGF0dXNJY29uOmZhbHNlO30sdmFsaWRhdGVJY29uOmZ1bmN0aW9uIHZhbGlkYXRlSWNvbigpe3JldHVybnt2YWxpZGF0aW5nOidlbC1pY29uLWxvYWRpbmcnLHN1Y2Nlc3M6J2VsLWljb24tY2lyY2xlLWNoZWNrJyxlcnJvcjonZWwtaWNvbi1jaXJjbGUtY2xvc2UnfVt0aGlzLnZhbGlkYXRlU3RhdGVdO30sdGV4dGFyZWFTdHlsZTpmdW5jdGlvbiB0ZXh0YXJlYVN0eWxlKCl7cmV0dXJuIG1lcmdlX2RlZmF1bHQoKSh7fSx0aGlzLnRleHRhcmVhQ2FsY1N0eWxlLHtyZXNpemU6dGhpcy5yZXNpemV9KTt9LGlucHV0U2l6ZTpmdW5jdGlvbiBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5zaXplfHx0aGlzLl9lbEZvcm1JdGVtU2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplO30saW5wdXREaXNhYmxlZDpmdW5jdGlvbiBpbnB1dERpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkO30sbmF0aXZlSW5wdXRWYWx1ZTpmdW5jdGlvbiBuYXRpdmVJbnB1dFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWU9PT1udWxsfHx0aGlzLnZhbHVlPT09dW5kZWZpbmVkPycnOlN0cmluZyh0aGlzLnZhbHVlKTt9LHNob3dDbGVhcjpmdW5jdGlvbiBzaG93Q2xlYXIoKXtyZXR1cm4gdGhpcy5jbGVhcmFibGUmJiF0aGlzLmlucHV0RGlzYWJsZWQmJiF0aGlzLnJlYWRvbmx5JiZ0aGlzLm5hdGl2ZUlucHV0VmFsdWUmJih0aGlzLmZvY3VzZWR8fHRoaXMuaG92ZXJpbmcpO30sc2hvd1B3ZFZpc2libGU6ZnVuY3Rpb24gc2hvd1B3ZFZpc2libGUoKXtyZXR1cm4gdGhpcy5zaG93UGFzc3dvcmQmJiF0aGlzLmlucHV0RGlzYWJsZWQmJiF0aGlzLnJlYWRvbmx5JiYoISF0aGlzLm5hdGl2ZUlucHV0VmFsdWV8fHRoaXMuZm9jdXNlZCk7fSxpc1dvcmRMaW1pdFZpc2libGU6ZnVuY3Rpb24gaXNXb3JkTGltaXRWaXNpYmxlKCl7cmV0dXJuIHRoaXMuc2hvd1dvcmRMaW1pdCYmdGhpcy4kYXR0cnMubWF4bGVuZ3RoJiYodGhpcy50eXBlPT09J3RleHQnfHx0aGlzLnR5cGU9PT0ndGV4dGFyZWEnKSYmIXRoaXMuaW5wdXREaXNhYmxlZCYmIXRoaXMucmVhZG9ubHkmJiF0aGlzLnNob3dQYXNzd29yZDt9LHVwcGVyTGltaXQ6ZnVuY3Rpb24gdXBwZXJMaW1pdCgpe3JldHVybiB0aGlzLiRhdHRycy5tYXhsZW5ndGg7fSx0ZXh0TGVuZ3RoOmZ1bmN0aW9uIHRleHRMZW5ndGgoKXtpZih0eXBlb2YgdGhpcy52YWx1ZT09PSdudW1iZXInKXtyZXR1cm4gU3RyaW5nKHRoaXMudmFsdWUpLmxlbmd0aDt9cmV0dXJuKHRoaXMudmFsdWV8fCcnKS5sZW5ndGg7fSxpbnB1dEV4Y2VlZDpmdW5jdGlvbiBpbnB1dEV4Y2VlZCgpey8vIHNob3cgZXhjZWVkIHN0eWxlIGlmIGxlbmd0aCBvZiBpbml0aWFsIHZhbHVlIGdyZWF0ZXIgdGhlbiBtYXhsZW5ndGgKcmV0dXJuIHRoaXMuaXNXb3JkTGltaXRWaXNpYmxlJiZ0aGlzLnRleHRMZW5ndGg+dGhpcy51cHBlckxpbWl0O319LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbiB2YWx1ZSh2YWwpe3RoaXMuJG5leHRUaWNrKHRoaXMucmVzaXplVGV4dGFyZWEpO2lmKHRoaXMudmFsaWRhdGVFdmVudCl7dGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsJ2VsLmZvcm0uY2hhbmdlJyxbdmFsXSk7fX0sLy8gbmF0aXZlIGlucHV0IHZhbHVlIGlzIHNldCBleHBsaWNpdGx5Ci8vIGRvIG5vdCB1c2Ugdi1tb2RlbCAvIDp2YWx1ZSBpbiB0ZW1wbGF0ZQovLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzE0NTIxCm5hdGl2ZUlucHV0VmFsdWU6ZnVuY3Rpb24gbmF0aXZlSW5wdXRWYWx1ZSgpe3RoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSgpO30sLy8gd2hlbiBjaGFuZ2UgYmV0d2VlbiA8aW5wdXQ+IGFuZCA8dGV4dGFyZWE+LAovLyB1cGRhdGUgRE9NIGRlcGVuZGVudCB2YWx1ZSBhbmQgc3R5bGVzCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzE0ODU3CnR5cGU6ZnVuY3Rpb24gdHlwZSgpe3ZhciBfdGhpcz10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7X3RoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSgpO190aGlzLnJlc2l6ZVRleHRhcmVhKCk7X3RoaXMudXBkYXRlSWNvbk9mZnNldCgpO30pO319LG1ldGhvZHM6e2ZvY3VzOmZ1bmN0aW9uIGZvY3VzKCl7dGhpcy5nZXRJbnB1dCgpLmZvY3VzKCk7fSxibHVyOmZ1bmN0aW9uIGJsdXIoKXt0aGlzLmdldElucHV0KCkuYmx1cigpO30sZ2V0TWlncmF0aW5nQ29uZmlnOmZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpe3JldHVybntwcm9wczp7J2ljb24nOidpY29uIGlzIHJlbW92ZWQsIHVzZSBzdWZmaXgtaWNvbiAvIHByZWZpeC1pY29uIGluc3RlYWQuJywnb24taWNvbi1jbGljayc6J29uLWljb24tY2xpY2sgaXMgcmVtb3ZlZC4nfSxldmVudHM6eydjbGljayc6J2NsaWNrIGlzIHJlbW92ZWQuJ319O30saGFuZGxlQmx1cjpmdW5jdGlvbiBoYW5kbGVCbHVyKGV2ZW50KXt0aGlzLmZvY3VzZWQ9ZmFsc2U7dGhpcy4kZW1pdCgnYmx1cicsZXZlbnQpO2lmKHRoaXMudmFsaWRhdGVFdmVudCl7dGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsJ2VsLmZvcm0uYmx1cicsW3RoaXMudmFsdWVdKTt9fSxzZWxlY3Q6ZnVuY3Rpb24gc2VsZWN0KCl7dGhpcy5nZXRJbnB1dCgpLnNlbGVjdCgpO30scmVzaXplVGV4dGFyZWE6ZnVuY3Rpb24gcmVzaXplVGV4dGFyZWEoKXtpZih0aGlzLiRpc1NlcnZlcilyZXR1cm47dmFyIGF1dG9zaXplPXRoaXMuYXV0b3NpemUsdHlwZT10aGlzLnR5cGU7aWYodHlwZSE9PSd0ZXh0YXJlYScpcmV0dXJuO2lmKCFhdXRvc2l6ZSl7dGhpcy50ZXh0YXJlYUNhbGNTdHlsZT17bWluSGVpZ2h0OmNhbGNUZXh0YXJlYUhlaWdodCh0aGlzLiRyZWZzLnRleHRhcmVhKS5taW5IZWlnaHR9O3JldHVybjt9dmFyIG1pblJvd3M9YXV0b3NpemUubWluUm93czt2YXIgbWF4Um93cz1hdXRvc2l6ZS5tYXhSb3dzO3RoaXMudGV4dGFyZWFDYWxjU3R5bGU9Y2FsY1RleHRhcmVhSGVpZ2h0KHRoaXMuJHJlZnMudGV4dGFyZWEsbWluUm93cyxtYXhSb3dzKTt9LHNldE5hdGl2ZUlucHV0VmFsdWU6ZnVuY3Rpb24gc2V0TmF0aXZlSW5wdXRWYWx1ZSgpe3ZhciBpbnB1dD10aGlzLmdldElucHV0KCk7aWYoIWlucHV0KXJldHVybjtpZihpbnB1dC52YWx1ZT09PXRoaXMubmF0aXZlSW5wdXRWYWx1ZSlyZXR1cm47aW5wdXQudmFsdWU9dGhpcy5uYXRpdmVJbnB1dFZhbHVlO30saGFuZGxlRm9jdXM6ZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpe3RoaXMuZm9jdXNlZD10cnVlO3RoaXMuJGVtaXQoJ2ZvY3VzJyxldmVudCk7fSxoYW5kbGVDb21wb3NpdGlvblN0YXJ0OmZ1bmN0aW9uIGhhbmRsZUNvbXBvc2l0aW9uU3RhcnQoKXt0aGlzLmlzQ29tcG9zaW5nPXRydWU7fSxoYW5kbGVDb21wb3NpdGlvblVwZGF0ZTpmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvblVwZGF0ZShldmVudCl7dmFyIHRleHQ9ZXZlbnQudGFyZ2V0LnZhbHVlO3ZhciBsYXN0Q2hhcmFjdGVyPXRleHRbdGV4dC5sZW5ndGgtMV18fCcnO3RoaXMuaXNDb21wb3Npbmc9IU9iamVjdChzaGFyZWRfWyJpc0tvcmVhbiJdKShsYXN0Q2hhcmFjdGVyKTt9LGhhbmRsZUNvbXBvc2l0aW9uRW5kOmZ1bmN0aW9uIGhhbmRsZUNvbXBvc2l0aW9uRW5kKGV2ZW50KXtpZih0aGlzLmlzQ29tcG9zaW5nKXt0aGlzLmlzQ29tcG9zaW5nPWZhbHNlO3RoaXMuaGFuZGxlSW5wdXQoZXZlbnQpO319LGhhbmRsZUlucHV0OmZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50KXsvLyBzaG91bGQgbm90IGVtaXQgaW5wdXQgZHVyaW5nIGNvbXBvc2l0aW9uCi8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTA1MTYKaWYodGhpcy5pc0NvbXBvc2luZylyZXR1cm47Ly8gaGFjayBmb3IgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvODU0OAovLyBzaG91bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSB3aGVuIHdlIGRvbid0IHN1cHBvcnQgSUUKaWYoZXZlbnQudGFyZ2V0LnZhbHVlPT09dGhpcy5uYXRpdmVJbnB1dFZhbHVlKXJldHVybjt0aGlzLiRlbWl0KCdpbnB1dCcsZXZlbnQudGFyZ2V0LnZhbHVlKTsvLyBlbnN1cmUgbmF0aXZlIGlucHV0IHZhbHVlIGlzIGNvbnRyb2xsZWQKLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xMjg1MAp0aGlzLiRuZXh0VGljayh0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUpO30saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldmVudCl7dGhpcy4kZW1pdCgnY2hhbmdlJyxldmVudC50YXJnZXQudmFsdWUpO30sY2FsY0ljb25PZmZzZXQ6ZnVuY3Rpb24gY2FsY0ljb25PZmZzZXQocGxhY2Upe3ZhciBlbExpc3Q9W10uc2xpY2UuY2FsbCh0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtaW5wdXRfXycrcGxhY2UpfHxbXSk7aWYoIWVsTGlzdC5sZW5ndGgpcmV0dXJuO3ZhciBlbD1udWxsO2Zvcih2YXIgaT0wO2k8ZWxMaXN0Lmxlbmd0aDtpKyspe2lmKGVsTGlzdFtpXS5wYXJlbnROb2RlPT09dGhpcy4kZWwpe2VsPWVsTGlzdFtpXTticmVhazt9fWlmKCFlbClyZXR1cm47dmFyIHBlbmRhbnRNYXA9e3N1ZmZpeDonYXBwZW5kJyxwcmVmaXg6J3ByZXBlbmQnfTt2YXIgcGVuZGFudD1wZW5kYW50TWFwW3BsYWNlXTtpZih0aGlzLiRzbG90c1twZW5kYW50XSl7ZWwuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGVYKCcrKHBsYWNlPT09J3N1ZmZpeCc/Jy0nOicnKSt0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtaW5wdXQtZ3JvdXBfXycrcGVuZGFudCkub2Zmc2V0V2lkdGgrJ3B4KSc7fWVsc2V7ZWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO319LHVwZGF0ZUljb25PZmZzZXQ6ZnVuY3Rpb24gdXBkYXRlSWNvbk9mZnNldCgpe3RoaXMuY2FsY0ljb25PZmZzZXQoJ3ByZWZpeCcpO3RoaXMuY2FsY0ljb25PZmZzZXQoJ3N1ZmZpeCcpO30sY2xlYXI6ZnVuY3Rpb24gY2xlYXIoKXt0aGlzLiRlbWl0KCdpbnB1dCcsJycpO3RoaXMuJGVtaXQoJ2NoYW5nZScsJycpO3RoaXMuJGVtaXQoJ2NsZWFyJyk7fSxoYW5kbGVQYXNzd29yZFZpc2libGU6ZnVuY3Rpb24gaGFuZGxlUGFzc3dvcmRWaXNpYmxlKCl7dGhpcy5wYXNzd29yZFZpc2libGU9IXRoaXMucGFzc3dvcmRWaXNpYmxlO3RoaXMuZm9jdXMoKTt9LGdldElucHV0OmZ1bmN0aW9uIGdldElucHV0KCl7cmV0dXJuIHRoaXMuJHJlZnMuaW5wdXR8fHRoaXMuJHJlZnMudGV4dGFyZWE7fSxnZXRTdWZmaXhWaXNpYmxlOmZ1bmN0aW9uIGdldFN1ZmZpeFZpc2libGUoKXtyZXR1cm4gdGhpcy4kc2xvdHMuc3VmZml4fHx0aGlzLnN1ZmZpeEljb258fHRoaXMuc2hvd0NsZWFyfHx0aGlzLnNob3dQYXNzd29yZHx8dGhpcy5pc1dvcmRMaW1pdFZpc2libGV8fHRoaXMudmFsaWRhdGVTdGF0ZSYmdGhpcy5uZWVkU3RhdHVzSWNvbjt9fSxjcmVhdGVkOmZ1bmN0aW9uIGNyZWF0ZWQoKXt0aGlzLiRvbignaW5wdXRTZWxlY3QnLHRoaXMuc2VsZWN0KTt9LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3RoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSgpO3RoaXMucmVzaXplVGV4dGFyZWEoKTt0aGlzLnVwZGF0ZUljb25PZmZzZXQoKTt9LHVwZGF0ZWQ6ZnVuY3Rpb24gdXBkYXRlZCgpe3RoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlSWNvbk9mZnNldCk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19pbnB1dHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1pbnB1dHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBpbnB1dF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19pbnB1dHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxpbnB1dHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0M2RkNzc0X3JlbmRlcixpbnB1dHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0M2RkNzc0X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgaW5wdXRfYXBpO31pbnB1dF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX2lucHV0PWlucHV0X2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9zcmNfaW5wdXQuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoc3JjX2lucHV0Lm5hbWUsc3JjX2lucHV0KTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfaW5wdXQ9c3JjX2lucHV0Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQyZjhjZjY2Jgp2YXIgaW5wdXRfbnVtYmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNDJmOGNmNjZfcmVuZGVyPWZ1bmN0aW9uIGlucHV0X251bWJlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQyZjhjZjY2X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7Y2xhc3M6WyJlbC1pbnB1dC1udW1iZXIiLF92bS5pbnB1dE51bWJlclNpemU/ImVsLWlucHV0LW51bWJlci0tIitfdm0uaW5wdXROdW1iZXJTaXplOiIiLHsiaXMtZGlzYWJsZWQiOl92bS5pbnB1dE51bWJlckRpc2FibGVkfSx7ImlzLXdpdGhvdXQtY29udHJvbHMiOiFfdm0uY29udHJvbHN9LHsiaXMtY29udHJvbHMtcmlnaHQiOl92bS5jb250cm9sc0F0UmlnaHR9XSxvbjp7ZHJhZ3N0YXJ0OmZ1bmN0aW9uIGRyYWdzdGFydCgkZXZlbnQpeyRldmVudC5wcmV2ZW50RGVmYXVsdCgpO319fSxbX3ZtLmNvbnRyb2xzP19jKCJzcGFuIix7ZGlyZWN0aXZlczpbe25hbWU6InJlcGVhdC1jbGljayIscmF3TmFtZToidi1yZXBlYXQtY2xpY2siLHZhbHVlOl92bS5kZWNyZWFzZSxleHByZXNzaW9uOiJkZWNyZWFzZSJ9XSxzdGF0aWNDbGFzczoiZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSIsY2xhc3M6eyJpcy1kaXNhYmxlZCI6X3ZtLm1pbkRpc2FibGVkfSxhdHRyczp7cm9sZToiYnV0dG9uIn0sb246e2tleWRvd246ZnVuY3Rpb24ga2V5ZG93bigkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsImVudGVyIiwxMywkZXZlbnQua2V5LCJFbnRlciIpKXtyZXR1cm4gbnVsbDt9cmV0dXJuIF92bS5kZWNyZWFzZSgkZXZlbnQpO319fSxbX2MoImkiLHtjbGFzczoiZWwtaWNvbi0iKyhfdm0uY29udHJvbHNBdFJpZ2h0PyJhcnJvdy1kb3duIjoibWludXMiKX0pXSk6X3ZtLl9lKCksX3ZtLmNvbnRyb2xzP19jKCJzcGFuIix7ZGlyZWN0aXZlczpbe25hbWU6InJlcGVhdC1jbGljayIscmF3TmFtZToidi1yZXBlYXQtY2xpY2siLHZhbHVlOl92bS5pbmNyZWFzZSxleHByZXNzaW9uOiJpbmNyZWFzZSJ9XSxzdGF0aWNDbGFzczoiZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZSIsY2xhc3M6eyJpcy1kaXNhYmxlZCI6X3ZtLm1heERpc2FibGVkfSxhdHRyczp7cm9sZToiYnV0dG9uIn0sb246e2tleWRvd246ZnVuY3Rpb24ga2V5ZG93bigkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsImVudGVyIiwxMywkZXZlbnQua2V5LCJFbnRlciIpKXtyZXR1cm4gbnVsbDt9cmV0dXJuIF92bS5pbmNyZWFzZSgkZXZlbnQpO319fSxbX2MoImkiLHtjbGFzczoiZWwtaWNvbi0iKyhfdm0uY29udHJvbHNBdFJpZ2h0PyJhcnJvdy11cCI6InBsdXMiKX0pXSk6X3ZtLl9lKCksX2MoImVsLWlucHV0Iix7cmVmOiJpbnB1dCIsYXR0cnM6e3ZhbHVlOl92bS5kaXNwbGF5VmFsdWUscGxhY2Vob2xkZXI6X3ZtLnBsYWNlaG9sZGVyLGRpc2FibGVkOl92bS5pbnB1dE51bWJlckRpc2FibGVkLHNpemU6X3ZtLmlucHV0TnVtYmVyU2l6ZSxtYXg6X3ZtLm1heCxtaW46X3ZtLm1pbixuYW1lOl92bS5uYW1lLGxhYmVsOl92bS5sYWJlbH0sb246e2JsdXI6X3ZtLmhhbmRsZUJsdXIsZm9jdXM6X3ZtLmhhbmRsZUZvY3VzLGlucHV0Ol92bS5oYW5kbGVJbnB1dCxjaGFuZ2U6X3ZtLmhhbmRsZUlucHV0Q2hhbmdlfSxuYXRpdmVPbjp7a2V5ZG93bjpbZnVuY3Rpb24oJGV2ZW50KXtpZighKCJidXR0b24iaW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLCJ1cCIsMzgsJGV2ZW50LmtleSxbIlVwIiwiQXJyb3dVcCJdKSl7cmV0dXJuIG51bGw7fSRldmVudC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBfdm0uaW5jcmVhc2UoJGV2ZW50KTt9LGZ1bmN0aW9uKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwiZG93biIsNDAsJGV2ZW50LmtleSxbIkRvd24iLCJBcnJvd0Rvd24iXSkpe3JldHVybiBudWxsO30kZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gX3ZtLmRlY3JlYXNlKCRldmVudCk7fV19fSldLDEpO307dmFyIGlucHV0X251bWJlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQyZjhjZjY2X3N0YXRpY1JlbmRlckZucz1bXTtpbnB1dF9udW1iZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MmY4Y2Y2Nl9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQyZjhjZjY2JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kaXJlY3RpdmVzL3JlcGVhdC1jbGljay5qcwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHJlcGVhdF9jbGljaz17YmluZDpmdW5jdGlvbiBiaW5kKGVsLGJpbmRpbmcsdm5vZGUpe3ZhciBpbnRlcnZhbD1udWxsO3ZhciBzdGFydFRpbWU9dm9pZCAwO3ZhciBoYW5kbGVyPWZ1bmN0aW9uIGhhbmRsZXIoKXtyZXR1cm4gdm5vZGUuY29udGV4dFtiaW5kaW5nLmV4cHJlc3Npb25dLmFwcGx5KCk7fTt2YXIgY2xlYXI9ZnVuY3Rpb24gY2xlYXIoKXtpZihEYXRlLm5vdygpLXN0YXJ0VGltZTwxMDApe2hhbmRsZXIoKTt9Y2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7aW50ZXJ2YWw9bnVsbDt9O09iamVjdChkb21fWyJvbiJdKShlbCwnbW91c2Vkb3duJyxmdW5jdGlvbihlKXtpZihlLmJ1dHRvbiE9PTApcmV0dXJuO3N0YXJ0VGltZT1EYXRlLm5vdygpO09iamVjdChkb21fWyJvbmNlIl0pKGRvY3VtZW50LCdtb3VzZXVwJyxjbGVhcik7Y2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7aW50ZXJ2YWw9c2V0SW50ZXJ2YWwoaGFuZGxlciwxMDApO30pO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBpbnB1dF9udW1iZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsSW5wdXROdW1iZXInLG1peGluczpbZm9jdXNfZGVmYXVsdCgpKCdpbnB1dCcpXSxpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDonJ30sZWxGb3JtSXRlbTp7ZGVmYXVsdDonJ319LGRpcmVjdGl2ZXM6e3JlcGVhdENsaWNrOnJlcGVhdF9jbGlja30sY29tcG9uZW50czp7RWxJbnB1dDppbnB1dF9kZWZhdWx0LmF9LHByb3BzOntzdGVwOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LHN0ZXBTdHJpY3RseTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ZmFsc2V9LG1heDp7dHlwZTpOdW1iZXIsZGVmYXVsdDpJbmZpbml0eX0sbWluOnt0eXBlOk51bWJlcixkZWZhdWx0Oi1JbmZpbml0eX0sdmFsdWU6e30sZGlzYWJsZWQ6Qm9vbGVhbixzaXplOlN0cmluZyxjb250cm9sczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sY29udHJvbHNQb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDonJ30sbmFtZTpTdHJpbmcsbGFiZWw6U3RyaW5nLHBsYWNlaG9sZGVyOlN0cmluZyxwcmVjaXNpb246e3R5cGU6TnVtYmVyLHZhbGlkYXRvcjpmdW5jdGlvbiB2YWxpZGF0b3IodmFsKXtyZXR1cm4gdmFsPj0wJiZ2YWw9PT1wYXJzZUludCh2YWwsMTApO319fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57Y3VycmVudFZhbHVlOjAsdXNlcklucHV0Om51bGx9O30sd2F0Y2g6e3ZhbHVlOntpbW1lZGlhdGU6dHJ1ZSxoYW5kbGVyOmZ1bmN0aW9uIGhhbmRsZXIodmFsdWUpe3ZhciBuZXdWYWw9dmFsdWU9PT11bmRlZmluZWQ/dmFsdWU6TnVtYmVyKHZhbHVlKTtpZihuZXdWYWwhPT11bmRlZmluZWQpe2lmKGlzTmFOKG5ld1ZhbCkpe3JldHVybjt9aWYodGhpcy5zdGVwU3RyaWN0bHkpe3ZhciBzdGVwUHJlY2lzaW9uPXRoaXMuZ2V0UHJlY2lzaW9uKHRoaXMuc3RlcCk7dmFyIHByZWNpc2lvbkZhY3Rvcj1NYXRoLnBvdygxMCxzdGVwUHJlY2lzaW9uKTtuZXdWYWw9TWF0aC5yb3VuZChuZXdWYWwvdGhpcy5zdGVwKSpwcmVjaXNpb25GYWN0b3IqdGhpcy5zdGVwL3ByZWNpc2lvbkZhY3Rvcjt9aWYodGhpcy5wcmVjaXNpb24hPT11bmRlZmluZWQpe25ld1ZhbD10aGlzLnRvUHJlY2lzaW9uKG5ld1ZhbCx0aGlzLnByZWNpc2lvbik7fX1pZihuZXdWYWw+PXRoaXMubWF4KW5ld1ZhbD10aGlzLm1heDtpZihuZXdWYWw8PXRoaXMubWluKW5ld1ZhbD10aGlzLm1pbjt0aGlzLmN1cnJlbnRWYWx1ZT1uZXdWYWw7dGhpcy51c2VySW5wdXQ9bnVsbDt0aGlzLiRlbWl0KCdpbnB1dCcsbmV3VmFsKTt9fX0sY29tcHV0ZWQ6e21pbkRpc2FibGVkOmZ1bmN0aW9uIG1pbkRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2RlY3JlYXNlKHRoaXMudmFsdWUsdGhpcy5zdGVwKTx0aGlzLm1pbjt9LG1heERpc2FibGVkOmZ1bmN0aW9uIG1heERpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2luY3JlYXNlKHRoaXMudmFsdWUsdGhpcy5zdGVwKT50aGlzLm1heDt9LG51bVByZWNpc2lvbjpmdW5jdGlvbiBudW1QcmVjaXNpb24oKXt2YXIgdmFsdWU9dGhpcy52YWx1ZSxzdGVwPXRoaXMuc3RlcCxnZXRQcmVjaXNpb249dGhpcy5nZXRQcmVjaXNpb24scHJlY2lzaW9uPXRoaXMucHJlY2lzaW9uO3ZhciBzdGVwUHJlY2lzaW9uPWdldFByZWNpc2lvbihzdGVwKTtpZihwcmVjaXNpb24hPT11bmRlZmluZWQpe2lmKHN0ZXBQcmVjaXNpb24+cHJlY2lzaW9uKXtjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW0lucHV0TnVtYmVyXXByZWNpc2lvbiBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB0aGUgZGVjaW1hbCBwbGFjZXMgb2Ygc3RlcCcpO31yZXR1cm4gcHJlY2lzaW9uO31lbHNle3JldHVybiBNYXRoLm1heChnZXRQcmVjaXNpb24odmFsdWUpLHN0ZXBQcmVjaXNpb24pO319LGNvbnRyb2xzQXRSaWdodDpmdW5jdGlvbiBjb250cm9sc0F0UmlnaHQoKXtyZXR1cm4gdGhpcy5jb250cm9scyYmdGhpcy5jb250cm9sc1Bvc2l0aW9uPT09J3JpZ2h0Jzt9LF9lbEZvcm1JdGVtU2l6ZTpmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKXtyZXR1cm4odGhpcy5lbEZvcm1JdGVtfHx7fSkuZWxGb3JtSXRlbVNpemU7fSxpbnB1dE51bWJlclNpemU6ZnVuY3Rpb24gaW5wdXROdW1iZXJTaXplKCl7cmV0dXJuIHRoaXMuc2l6ZXx8dGhpcy5fZWxGb3JtSXRlbVNpemV8fCh0aGlzLiRFTEVNRU5UfHx7fSkuc2l6ZTt9LGlucHV0TnVtYmVyRGlzYWJsZWQ6ZnVuY3Rpb24gaW5wdXROdW1iZXJEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhISh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkO30sZGlzcGxheVZhbHVlOmZ1bmN0aW9uIGRpc3BsYXlWYWx1ZSgpe2lmKHRoaXMudXNlcklucHV0IT09bnVsbCl7cmV0dXJuIHRoaXMudXNlcklucHV0O312YXIgY3VycmVudFZhbHVlPXRoaXMuY3VycmVudFZhbHVlO2lmKHR5cGVvZiBjdXJyZW50VmFsdWU9PT0nbnVtYmVyJyl7aWYodGhpcy5zdGVwU3RyaWN0bHkpe3ZhciBzdGVwUHJlY2lzaW9uPXRoaXMuZ2V0UHJlY2lzaW9uKHRoaXMuc3RlcCk7dmFyIHByZWNpc2lvbkZhY3Rvcj1NYXRoLnBvdygxMCxzdGVwUHJlY2lzaW9uKTtjdXJyZW50VmFsdWU9TWF0aC5yb3VuZChjdXJyZW50VmFsdWUvdGhpcy5zdGVwKSpwcmVjaXNpb25GYWN0b3IqdGhpcy5zdGVwL3ByZWNpc2lvbkZhY3Rvcjt9aWYodGhpcy5wcmVjaXNpb24hPT11bmRlZmluZWQpe2N1cnJlbnRWYWx1ZT1jdXJyZW50VmFsdWUudG9GaXhlZCh0aGlzLnByZWNpc2lvbik7fX1yZXR1cm4gY3VycmVudFZhbHVlO319LG1ldGhvZHM6e3RvUHJlY2lzaW9uOmZ1bmN0aW9uIHRvUHJlY2lzaW9uKG51bSxwcmVjaXNpb24pe2lmKHByZWNpc2lvbj09PXVuZGVmaW5lZClwcmVjaXNpb249dGhpcy5udW1QcmVjaXNpb247cmV0dXJuIHBhcnNlRmxvYXQoTWF0aC5yb3VuZChudW0qTWF0aC5wb3coMTAscHJlY2lzaW9uKSkvTWF0aC5wb3coMTAscHJlY2lzaW9uKSk7fSxnZXRQcmVjaXNpb246ZnVuY3Rpb24gZ2V0UHJlY2lzaW9uKHZhbHVlKXtpZih2YWx1ZT09PXVuZGVmaW5lZClyZXR1cm4gMDt2YXIgdmFsdWVTdHJpbmc9dmFsdWUudG9TdHJpbmcoKTt2YXIgZG90UG9zaXRpb249dmFsdWVTdHJpbmcuaW5kZXhPZignLicpO3ZhciBwcmVjaXNpb249MDtpZihkb3RQb3NpdGlvbiE9PS0xKXtwcmVjaXNpb249dmFsdWVTdHJpbmcubGVuZ3RoLWRvdFBvc2l0aW9uLTE7fXJldHVybiBwcmVjaXNpb247fSxfaW5jcmVhc2U6ZnVuY3Rpb24gX2luY3JlYXNlKHZhbCxzdGVwKXtpZih0eXBlb2YgdmFsIT09J251bWJlcicmJnZhbCE9PXVuZGVmaW5lZClyZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7dmFyIHByZWNpc2lvbkZhY3Rvcj1NYXRoLnBvdygxMCx0aGlzLm51bVByZWNpc2lvbik7Ly8gU29sdmUgdGhlIGFjY3VyYWN5IHByb2JsZW0gb2YgSlMgZGVjaW1hbCBjYWxjdWxhdGlvbiBieSBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBpbnRlZ2VyLgpyZXR1cm4gdGhpcy50b1ByZWNpc2lvbigocHJlY2lzaW9uRmFjdG9yKnZhbCtwcmVjaXNpb25GYWN0b3Iqc3RlcCkvcHJlY2lzaW9uRmFjdG9yKTt9LF9kZWNyZWFzZTpmdW5jdGlvbiBfZGVjcmVhc2UodmFsLHN0ZXApe2lmKHR5cGVvZiB2YWwhPT0nbnVtYmVyJyYmdmFsIT09dW5kZWZpbmVkKXJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZTt2YXIgcHJlY2lzaW9uRmFjdG9yPU1hdGgucG93KDEwLHRoaXMubnVtUHJlY2lzaW9uKTtyZXR1cm4gdGhpcy50b1ByZWNpc2lvbigocHJlY2lzaW9uRmFjdG9yKnZhbC1wcmVjaXNpb25GYWN0b3Iqc3RlcCkvcHJlY2lzaW9uRmFjdG9yKTt9LGluY3JlYXNlOmZ1bmN0aW9uIGluY3JlYXNlKCl7aWYodGhpcy5pbnB1dE51bWJlckRpc2FibGVkfHx0aGlzLm1heERpc2FibGVkKXJldHVybjt2YXIgdmFsdWU9dGhpcy52YWx1ZXx8MDt2YXIgbmV3VmFsPXRoaXMuX2luY3JlYXNlKHZhbHVlLHRoaXMuc3RlcCk7dGhpcy5zZXRDdXJyZW50VmFsdWUobmV3VmFsKTt9LGRlY3JlYXNlOmZ1bmN0aW9uIGRlY3JlYXNlKCl7aWYodGhpcy5pbnB1dE51bWJlckRpc2FibGVkfHx0aGlzLm1pbkRpc2FibGVkKXJldHVybjt2YXIgdmFsdWU9dGhpcy52YWx1ZXx8MDt2YXIgbmV3VmFsPXRoaXMuX2RlY3JlYXNlKHZhbHVlLHRoaXMuc3RlcCk7dGhpcy5zZXRDdXJyZW50VmFsdWUobmV3VmFsKTt9LGhhbmRsZUJsdXI6ZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCl7dGhpcy4kZW1pdCgnYmx1cicsZXZlbnQpO30saGFuZGxlRm9jdXM6ZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpe3RoaXMuJGVtaXQoJ2ZvY3VzJyxldmVudCk7fSxzZXRDdXJyZW50VmFsdWU6ZnVuY3Rpb24gc2V0Q3VycmVudFZhbHVlKG5ld1ZhbCl7dmFyIG9sZFZhbD10aGlzLmN1cnJlbnRWYWx1ZTtpZih0eXBlb2YgbmV3VmFsPT09J251bWJlcicmJnRoaXMucHJlY2lzaW9uIT09dW5kZWZpbmVkKXtuZXdWYWw9dGhpcy50b1ByZWNpc2lvbihuZXdWYWwsdGhpcy5wcmVjaXNpb24pO31pZihuZXdWYWw+PXRoaXMubWF4KW5ld1ZhbD10aGlzLm1heDtpZihuZXdWYWw8PXRoaXMubWluKW5ld1ZhbD10aGlzLm1pbjtpZihvbGRWYWw9PT1uZXdWYWwpcmV0dXJuO3RoaXMudXNlcklucHV0PW51bGw7dGhpcy4kZW1pdCgnaW5wdXQnLG5ld1ZhbCk7dGhpcy4kZW1pdCgnY2hhbmdlJyxuZXdWYWwsb2xkVmFsKTt0aGlzLmN1cnJlbnRWYWx1ZT1uZXdWYWw7fSxoYW5kbGVJbnB1dDpmdW5jdGlvbiBoYW5kbGVJbnB1dCh2YWx1ZSl7dGhpcy51c2VySW5wdXQ9dmFsdWU7fSxoYW5kbGVJbnB1dENoYW5nZTpmdW5jdGlvbiBoYW5kbGVJbnB1dENoYW5nZSh2YWx1ZSl7dmFyIG5ld1ZhbD12YWx1ZT09PScnP3VuZGVmaW5lZDpOdW1iZXIodmFsdWUpO2lmKCFpc05hTihuZXdWYWwpfHx2YWx1ZT09PScnKXt0aGlzLnNldEN1cnJlbnRWYWx1ZShuZXdWYWwpO310aGlzLnVzZXJJbnB1dD1udWxsO30sc2VsZWN0OmZ1bmN0aW9uIHNlbGVjdCgpe3RoaXMuJHJlZnMuaW5wdXQuc2VsZWN0KCk7fX0sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dmFyIGlubmVySW5wdXQ9dGhpcy4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dDtpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgncm9sZScsJ3NwaW5idXR0b24nKTtpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1heCcsdGhpcy5tYXgpO2lubmVySW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbWluJyx0aGlzLm1pbik7aW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVub3cnLHRoaXMuY3VycmVudFZhbHVlKTtpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsdGhpcy5pbnB1dE51bWJlckRpc2FibGVkKTt9LHVwZGF0ZWQ6ZnVuY3Rpb24gdXBkYXRlZCgpe2lmKCF0aGlzLiRyZWZzfHwhdGhpcy4kcmVmcy5pbnB1dClyZXR1cm47dmFyIGlubmVySW5wdXQ9dGhpcy4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dDtpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW5vdycsdGhpcy5jdXJyZW50VmFsdWUpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19pbnB1dF9udW1iZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189aW5wdXRfbnVtYmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgaW5wdXRfbnVtYmVyX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX2lucHV0X251bWJlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxpbnB1dF9udW1iZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MmY4Y2Y2Nl9yZW5kZXIsaW5wdXRfbnVtYmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNDJmOGNmNjZfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBpbnB1dF9udW1iZXJfYXBpO31pbnB1dF9udW1iZXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9pbnB1dC1udW1iZXIvc3JjL2lucHV0LW51bWJlci52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgaW5wdXRfbnVtYmVyPWlucHV0X251bWJlcl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0LW51bWJlci9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2lucHV0X251bWJlci5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChpbnB1dF9udW1iZXIubmFtZSxpbnB1dF9udW1iZXIpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19pbnB1dF9udW1iZXI9aW5wdXRfbnVtYmVyOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNkNjI2OCYKdmFyIHJhZGlvdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjljZDYyNjhfcmVuZGVyPWZ1bmN0aW9uIHJhZGlvdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjljZDYyNjhfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJsYWJlbCIse3N0YXRpY0NsYXNzOiJlbC1yYWRpbyIsY2xhc3M6W192bS5ib3JkZXImJl92bS5yYWRpb1NpemU/ImVsLXJhZGlvLS0iK192bS5yYWRpb1NpemU6IiIseyJpcy1kaXNhYmxlZCI6X3ZtLmlzRGlzYWJsZWR9LHsiaXMtZm9jdXMiOl92bS5mb2N1c30seyJpcy1ib3JkZXJlZCI6X3ZtLmJvcmRlcn0seyJpcy1jaGVja2VkIjpfdm0ubW9kZWw9PT1fdm0ubGFiZWx9XSxhdHRyczp7cm9sZToicmFkaW8iLCJhcmlhLWNoZWNrZWQiOl92bS5tb2RlbD09PV92bS5sYWJlbCwiYXJpYS1kaXNhYmxlZCI6X3ZtLmlzRGlzYWJsZWQsdGFiaW5kZXg6X3ZtLnRhYkluZGV4fSxvbjp7a2V5ZG93bjpmdW5jdGlvbiBrZXlkb3duKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwic3BhY2UiLDMyLCRldmVudC5rZXksWyIgIiwiU3BhY2ViYXIiXSkpe3JldHVybiBudWxsO30kZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7X3ZtLm1vZGVsPV92bS5pc0Rpc2FibGVkP192bS5tb2RlbDpfdm0ubGFiZWw7fX19LFtfYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1yYWRpb19faW5wdXQiLGNsYXNzOnsiaXMtZGlzYWJsZWQiOl92bS5pc0Rpc2FibGVkLCJpcy1jaGVja2VkIjpfdm0ubW9kZWw9PT1fdm0ubGFiZWx9fSxbX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtcmFkaW9fX2lubmVyIn0pLF9jKCJpbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2RlbCIsdmFsdWU6X3ZtLm1vZGVsLGV4cHJlc3Npb246Im1vZGVsIn1dLHJlZjoicmFkaW8iLHN0YXRpY0NsYXNzOiJlbC1yYWRpb19fb3JpZ2luYWwiLGF0dHJzOnt0eXBlOiJyYWRpbyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsbmFtZTpfdm0ubmFtZSxkaXNhYmxlZDpfdm0uaXNEaXNhYmxlZCx0YWJpbmRleDoiLTEifSxkb21Qcm9wczp7dmFsdWU6X3ZtLmxhYmVsLGNoZWNrZWQ6X3ZtLl9xKF92bS5tb2RlbCxfdm0ubGFiZWwpfSxvbjp7Zm9jdXM6ZnVuY3Rpb24gZm9jdXMoJGV2ZW50KXtfdm0uZm9jdXM9dHJ1ZTt9LGJsdXI6ZnVuY3Rpb24gYmx1cigkZXZlbnQpe192bS5mb2N1cz1mYWxzZTt9LGNoYW5nZTpbZnVuY3Rpb24oJGV2ZW50KXtfdm0ubW9kZWw9X3ZtLmxhYmVsO30sX3ZtLmhhbmRsZUNoYW5nZV19fSldKSxfYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1yYWRpb19fbGFiZWwiLG9uOntrZXlkb3duOmZ1bmN0aW9uIGtleWRvd24oJGV2ZW50KXskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fX19LFtfdm0uX3QoImRlZmF1bHQiKSwhX3ZtLiRzbG90cy5kZWZhdWx0P1tfdm0uX3YoX3ZtLl9zKF92bS5sYWJlbCkpXTpfdm0uX2UoKV0sMildKTt9O3ZhciByYWRpb3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY5Y2Q2MjY4X3N0YXRpY1JlbmRlckZucz1bXTtyYWRpb3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY5Y2Q2MjY4X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5Y2Q2MjY4JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHJhZGlvdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFJhZGlvJyxtaXhpbnM6W2VtaXR0ZXJfZGVmYXVsdC5hXSxpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDonJ30sZWxGb3JtSXRlbTp7ZGVmYXVsdDonJ319LGNvbXBvbmVudE5hbWU6J0VsUmFkaW8nLHByb3BzOnt2YWx1ZTp7fSxsYWJlbDp7fSxkaXNhYmxlZDpCb29sZWFuLG5hbWU6U3RyaW5nLGJvcmRlcjpCb29sZWFuLHNpemU6U3RyaW5nfSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57Zm9jdXM6ZmFsc2V9O30sY29tcHV0ZWQ6e2lzR3JvdXA6ZnVuY3Rpb24gaXNHcm91cCgpe3ZhciBwYXJlbnQ9dGhpcy4kcGFyZW50O3doaWxlKHBhcmVudCl7aWYocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUhPT0nRWxSYWRpb0dyb3VwJyl7cGFyZW50PXBhcmVudC4kcGFyZW50O31lbHNle3RoaXMuX3JhZGlvR3JvdXA9cGFyZW50O3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO30sbW9kZWw6e2dldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5pc0dyb3VwP3RoaXMuX3JhZGlvR3JvdXAudmFsdWU6dGhpcy52YWx1ZTt9LHNldDpmdW5jdGlvbiBzZXQodmFsKXtpZih0aGlzLmlzR3JvdXApe3RoaXMuZGlzcGF0Y2goJ0VsUmFkaW9Hcm91cCcsJ2lucHV0JyxbdmFsXSk7fWVsc2V7dGhpcy4kZW1pdCgnaW5wdXQnLHZhbCk7fXRoaXMuJHJlZnMucmFkaW8mJih0aGlzLiRyZWZzLnJhZGlvLmNoZWNrZWQ9dGhpcy5tb2RlbD09PXRoaXMubGFiZWwpO319LF9lbEZvcm1JdGVtU2l6ZTpmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKXtyZXR1cm4odGhpcy5lbEZvcm1JdGVtfHx7fSkuZWxGb3JtSXRlbVNpemU7fSxyYWRpb1NpemU6ZnVuY3Rpb24gcmFkaW9TaXplKCl7dmFyIHRlbVJhZGlvU2l6ZT10aGlzLnNpemV8fHRoaXMuX2VsRm9ybUl0ZW1TaXplfHwodGhpcy4kRUxFTUVOVHx8e30pLnNpemU7cmV0dXJuIHRoaXMuaXNHcm91cD90aGlzLl9yYWRpb0dyb3VwLnJhZGlvR3JvdXBTaXplfHx0ZW1SYWRpb1NpemU6dGVtUmFkaW9TaXplO30saXNEaXNhYmxlZDpmdW5jdGlvbiBpc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuaXNHcm91cD90aGlzLl9yYWRpb0dyb3VwLmRpc2FibGVkfHx0aGlzLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZDp0aGlzLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZDt9LHRhYkluZGV4OmZ1bmN0aW9uIHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNEaXNhYmxlZHx8dGhpcy5pc0dyb3VwJiZ0aGlzLm1vZGVsIT09dGhpcy5sYWJlbD8tMTowO319LG1ldGhvZHM6e2hhbmRsZUNoYW5nZTpmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoKXt2YXIgX3RoaXM9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe190aGlzLiRlbWl0KCdjaGFuZ2UnLF90aGlzLm1vZGVsKTtfdGhpcy5pc0dyb3VwJiZfdGhpcy5kaXNwYXRjaCgnRWxSYWRpb0dyb3VwJywnaGFuZGxlQ2hhbmdlJyxfdGhpcy5tb2RlbCk7fSk7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfcmFkaW92dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189cmFkaW92dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgcmFkaW9fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfcmFkaW92dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18scmFkaW92dWVfdHlwZV90ZW1wbGF0ZV9pZF82OWNkNjI2OF9yZW5kZXIscmFkaW92dWVfdHlwZV90ZW1wbGF0ZV9pZF82OWNkNjI2OF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHJhZGlvX2FwaTt9cmFkaW9fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19yYWRpbz1yYWRpb19jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovc3JjX3JhZGlvLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHNyY19yYWRpby5uYW1lLHNyY19yYWRpbyk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3JhZGlvPXNyY19yYWRpbzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODE4YTcwNGMmCnZhciByYWRpb19ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOGE3MDRjX3JlbmRlcj1mdW5jdGlvbiByYWRpb19ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOGE3MDRjX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYyhfdm0uX2VsVGFnLHt0YWc6ImNvbXBvbmVudCIsc3RhdGljQ2xhc3M6ImVsLXJhZGlvLWdyb3VwIixhdHRyczp7cm9sZToicmFkaW9ncm91cCJ9LG9uOntrZXlkb3duOl92bS5oYW5kbGVLZXlkb3dufX0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTt9O3ZhciByYWRpb19ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOGE3MDRjX3N0YXRpY1JlbmRlckZucz1bXTtyYWRpb19ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOGE3MDRjX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTgxOGE3MDRjJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwp2YXIga2V5Q29kZT1PYmplY3QuZnJlZXplKHtMRUZUOjM3LFVQOjM4LFJJR0hUOjM5LERPV046NDB9KTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHJhZGlvX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFJhZGlvR3JvdXAnLGNvbXBvbmVudE5hbWU6J0VsUmFkaW9Hcm91cCcsaW5qZWN0OntlbEZvcm1JdGVtOntkZWZhdWx0OicnfX0sbWl4aW5zOltlbWl0dGVyX2RlZmF1bHQuYV0scHJvcHM6e3ZhbHVlOnt9LHNpemU6U3RyaW5nLGZpbGw6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsZGlzYWJsZWQ6Qm9vbGVhbn0sY29tcHV0ZWQ6e19lbEZvcm1JdGVtU2l6ZTpmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKXtyZXR1cm4odGhpcy5lbEZvcm1JdGVtfHx7fSkuZWxGb3JtSXRlbVNpemU7fSxfZWxUYWc6ZnVuY3Rpb24gX2VsVGFnKCl7cmV0dXJuKHRoaXMuJHZub2RlLmRhdGF8fHt9KS50YWd8fCdkaXYnO30scmFkaW9Hcm91cFNpemU6ZnVuY3Rpb24gcmFkaW9Hcm91cFNpemUoKXtyZXR1cm4gdGhpcy5zaXplfHx0aGlzLl9lbEZvcm1JdGVtU2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplO319LGNyZWF0ZWQ6ZnVuY3Rpb24gY3JlYXRlZCgpe3ZhciBfdGhpcz10aGlzO3RoaXMuJG9uKCdoYW5kbGVDaGFuZ2UnLGZ1bmN0aW9uKHZhbHVlKXtfdGhpcy4kZW1pdCgnY2hhbmdlJyx2YWx1ZSk7fSk7fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXsvLyDlvZNyYWRpb0dyb3Vw5rKh5pyJ6buY6K6k6YCJ6aG55pe277yM56ys5LiA5Liq5Y+v5Lul6YCJ5LitVGFi5a+86IiqCnZhciByYWRpb3M9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnW3R5cGU9cmFkaW9dJyk7dmFyIGZpcnN0TGFiZWw9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9cmFkaW9dJylbMF07aWYoIVtdLnNvbWUuY2FsbChyYWRpb3MsZnVuY3Rpb24ocmFkaW8pe3JldHVybiByYWRpby5jaGVja2VkO30pJiZmaXJzdExhYmVsKXtmaXJzdExhYmVsLnRhYkluZGV4PTA7fX0sbWV0aG9kczp7aGFuZGxlS2V5ZG93bjpmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGUpey8vIOW3puWPs+S4iuS4i+aMiemUriDlj6/ku6XlnKhyYWRpb+e7hOWGheWIh+aNouS4jeWQjOmAiemhuQp2YXIgdGFyZ2V0PWUudGFyZ2V0O3ZhciBjbGFzc05hbWU9dGFyZ2V0Lm5vZGVOYW1lPT09J0lOUFVUJz8nW3R5cGU9cmFkaW9dJzonW3JvbGU9cmFkaW9dJzt2YXIgcmFkaW9zPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoY2xhc3NOYW1lKTt2YXIgbGVuZ3RoPXJhZGlvcy5sZW5ndGg7dmFyIGluZGV4PVtdLmluZGV4T2YuY2FsbChyYWRpb3MsdGFyZ2V0KTt2YXIgcm9sZVJhZGlvcz10aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1yYWRpb10nKTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIGtleUNvZGUuTEVGVDpjYXNlIGtleUNvZGUuVVA6ZS5zdG9wUHJvcGFnYXRpb24oKTtlLnByZXZlbnREZWZhdWx0KCk7aWYoaW5kZXg9PT0wKXtyb2xlUmFkaW9zW2xlbmd0aC0xXS5jbGljaygpO3JvbGVSYWRpb3NbbGVuZ3RoLTFdLmZvY3VzKCk7fWVsc2V7cm9sZVJhZGlvc1tpbmRleC0xXS5jbGljaygpO3JvbGVSYWRpb3NbaW5kZXgtMV0uZm9jdXMoKTt9YnJlYWs7Y2FzZSBrZXlDb2RlLlJJR0hUOmNhc2Uga2V5Q29kZS5ET1dOOmlmKGluZGV4PT09bGVuZ3RoLTEpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7ZS5wcmV2ZW50RGVmYXVsdCgpO3JvbGVSYWRpb3NbMF0uY2xpY2soKTtyb2xlUmFkaW9zWzBdLmZvY3VzKCk7fWVsc2V7cm9sZVJhZGlvc1tpbmRleCsxXS5jbGljaygpO3JvbGVSYWRpb3NbaW5kZXgrMV0uZm9jdXMoKTt9YnJlYWs7ZGVmYXVsdDpicmVhazt9fX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uIHZhbHVlKF92YWx1ZSl7dGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsJ2VsLmZvcm0uY2hhbmdlJyxbdGhpcy52YWx1ZV0pO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby1ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3JhZGlvX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXJhZGlvX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWdyb3VwLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHJhZGlvX2dyb3VwX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX3JhZGlvX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHJhZGlvX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfODE4YTcwNGNfcmVuZGVyLHJhZGlvX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfODE4YTcwNGNfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciByYWRpb19ncm91cF9hcGk7fXJhZGlvX2dyb3VwX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWdyb3VwLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciByYWRpb19ncm91cD1yYWRpb19ncm91cF9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvLWdyb3VwL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovcmFkaW9fZ3JvdXAuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQocmFkaW9fZ3JvdXAubmFtZSxyYWRpb19ncm91cCk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3JhZGlvX2dyb3VwPXJhZGlvX2dyb3VwOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MThhNzdhMzImCnZhciByYWRpb19idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOGE3N2EzMl9yZW5kZXI9ZnVuY3Rpb24gcmFkaW9fYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfMThhNzdhMzJfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJsYWJlbCIse3N0YXRpY0NsYXNzOiJlbC1yYWRpby1idXR0b24iLGNsYXNzOltfdm0uc2l6ZT8iZWwtcmFkaW8tYnV0dG9uLS0iK192bS5zaXplOiIiLHsiaXMtYWN0aXZlIjpfdm0udmFsdWU9PT1fdm0ubGFiZWx9LHsiaXMtZGlzYWJsZWQiOl92bS5pc0Rpc2FibGVkfSx7ImlzLWZvY3VzIjpfdm0uZm9jdXN9XSxhdHRyczp7cm9sZToicmFkaW8iLCJhcmlhLWNoZWNrZWQiOl92bS52YWx1ZT09PV92bS5sYWJlbCwiYXJpYS1kaXNhYmxlZCI6X3ZtLmlzRGlzYWJsZWQsdGFiaW5kZXg6X3ZtLnRhYkluZGV4fSxvbjp7a2V5ZG93bjpmdW5jdGlvbiBrZXlkb3duKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwic3BhY2UiLDMyLCRldmVudC5rZXksWyIgIiwiU3BhY2ViYXIiXSkpe3JldHVybiBudWxsO30kZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7X3ZtLnZhbHVlPV92bS5pc0Rpc2FibGVkP192bS52YWx1ZTpfdm0ubGFiZWw7fX19LFtfYygiaW5wdXQiLHtkaXJlY3RpdmVzOlt7bmFtZToibW9kZWwiLHJhd05hbWU6InYtbW9kZWwiLHZhbHVlOl92bS52YWx1ZSxleHByZXNzaW9uOiJ2YWx1ZSJ9XSxzdGF0aWNDbGFzczoiZWwtcmFkaW8tYnV0dG9uX19vcmlnLXJhZGlvIixhdHRyczp7dHlwZToicmFkaW8iLG5hbWU6X3ZtLm5hbWUsZGlzYWJsZWQ6X3ZtLmlzRGlzYWJsZWQsdGFiaW5kZXg6Ii0xIn0sZG9tUHJvcHM6e3ZhbHVlOl92bS5sYWJlbCxjaGVja2VkOl92bS5fcShfdm0udmFsdWUsX3ZtLmxhYmVsKX0sb246e2NoYW5nZTpbZnVuY3Rpb24oJGV2ZW50KXtfdm0udmFsdWU9X3ZtLmxhYmVsO30sX3ZtLmhhbmRsZUNoYW5nZV0sZm9jdXM6ZnVuY3Rpb24gZm9jdXMoJGV2ZW50KXtfdm0uZm9jdXM9dHJ1ZTt9LGJsdXI6ZnVuY3Rpb24gYmx1cigkZXZlbnQpe192bS5mb2N1cz1mYWxzZTt9fX0pLF9jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXJhZGlvLWJ1dHRvbl9faW5uZXIiLHN0eWxlOl92bS52YWx1ZT09PV92bS5sYWJlbD9fdm0uYWN0aXZlU3R5bGU6bnVsbCxvbjp7a2V5ZG93bjpmdW5jdGlvbiBrZXlkb3duKCRldmVudCl7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO319fSxbX3ZtLl90KCJkZWZhdWx0IiksIV92bS4kc2xvdHMuZGVmYXVsdD9bX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV06X3ZtLl9lKCldLDIpXSk7fTt2YXIgcmFkaW9fYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfMThhNzdhMzJfc3RhdGljUmVuZGVyRm5zPVtdO3JhZGlvX2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE4YTc3YTMyX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOGE3N2EzMiYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcmFkaW9fYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFJhZGlvQnV0dG9uJyxtaXhpbnM6W2VtaXR0ZXJfZGVmYXVsdC5hXSxpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDonJ30sZWxGb3JtSXRlbTp7ZGVmYXVsdDonJ319LHByb3BzOntsYWJlbDp7fSxkaXNhYmxlZDpCb29sZWFuLG5hbWU6U3RyaW5nfSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57Zm9jdXM6ZmFsc2V9O30sY29tcHV0ZWQ6e3ZhbHVlOntnZXQ6ZnVuY3Rpb24gZ2V0KCl7cmV0dXJuIHRoaXMuX3JhZGlvR3JvdXAudmFsdWU7fSxzZXQ6ZnVuY3Rpb24gc2V0KHZhbHVlKXt0aGlzLl9yYWRpb0dyb3VwLiRlbWl0KCdpbnB1dCcsdmFsdWUpO319LF9yYWRpb0dyb3VwOmZ1bmN0aW9uIF9yYWRpb0dyb3VwKCl7dmFyIHBhcmVudD10aGlzLiRwYXJlbnQ7d2hpbGUocGFyZW50KXtpZihwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSE9PSdFbFJhZGlvR3JvdXAnKXtwYXJlbnQ9cGFyZW50LiRwYXJlbnQ7fWVsc2V7cmV0dXJuIHBhcmVudDt9fXJldHVybiBmYWxzZTt9LGFjdGl2ZVN0eWxlOmZ1bmN0aW9uIGFjdGl2ZVN0eWxlKCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjp0aGlzLl9yYWRpb0dyb3VwLmZpbGx8fCcnLGJvcmRlckNvbG9yOnRoaXMuX3JhZGlvR3JvdXAuZmlsbHx8JycsYm94U2hhZG93OnRoaXMuX3JhZGlvR3JvdXAuZmlsbD8nLTFweCAwIDAgMCAnK3RoaXMuX3JhZGlvR3JvdXAuZmlsbDonJyxjb2xvcjp0aGlzLl9yYWRpb0dyb3VwLnRleHRDb2xvcnx8Jyd9O30sX2VsRm9ybUl0ZW1TaXplOmZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpe3JldHVybih0aGlzLmVsRm9ybUl0ZW18fHt9KS5lbEZvcm1JdGVtU2l6ZTt9LHNpemU6ZnVuY3Rpb24gc2l6ZSgpe3JldHVybiB0aGlzLl9yYWRpb0dyb3VwLnJhZGlvR3JvdXBTaXplfHx0aGlzLl9lbEZvcm1JdGVtU2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplO30saXNEaXNhYmxlZDpmdW5jdGlvbiBpc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuX3JhZGlvR3JvdXAuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkO30sdGFiSW5kZXg6ZnVuY3Rpb24gdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5pc0Rpc2FibGVkfHx0aGlzLl9yYWRpb0dyb3VwJiZ0aGlzLnZhbHVlIT09dGhpcy5sYWJlbD8tMTowO319LG1ldGhvZHM6e2hhbmRsZUNoYW5nZTpmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoKXt2YXIgX3RoaXM9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe190aGlzLmRpc3BhdGNoKCdFbFJhZGlvR3JvdXAnLCdoYW5kbGVDaGFuZ2UnLF90aGlzLnZhbHVlKTt9KTt9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfcmFkaW9fYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXJhZGlvX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby1idXR0b24udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgcmFkaW9fYnV0dG9uX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX3JhZGlvX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxyYWRpb19idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOGE3N2EzMl9yZW5kZXIscmFkaW9fYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfMThhNzdhMzJfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciByYWRpb19idXR0b25fYXBpO31yYWRpb19idXR0b25fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tYnV0dG9uLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciByYWRpb19idXR0b249cmFkaW9fYnV0dG9uX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8tYnV0dG9uL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovcmFkaW9fYnV0dG9uLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHJhZGlvX2J1dHRvbi5uYW1lLHJhZGlvX2J1dHRvbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3JhZGlvX2J1dHRvbj1yYWRpb19idXR0b247Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQwMzg3MDc0Jgp2YXIgY2hlY2tib3h2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kMDM4NzA3NF9yZW5kZXI9ZnVuY3Rpb24gY2hlY2tib3h2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kMDM4NzA3NF9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImxhYmVsIix7c3RhdGljQ2xhc3M6ImVsLWNoZWNrYm94IixjbGFzczpbX3ZtLmJvcmRlciYmX3ZtLmNoZWNrYm94U2l6ZT8iZWwtY2hlY2tib3gtLSIrX3ZtLmNoZWNrYm94U2l6ZToiIix7ImlzLWRpc2FibGVkIjpfdm0uaXNEaXNhYmxlZH0seyJpcy1ib3JkZXJlZCI6X3ZtLmJvcmRlcn0seyJpcy1jaGVja2VkIjpfdm0uaXNDaGVja2VkfV0sYXR0cnM6e2lkOl92bS5pZH19LFtfYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1jaGVja2JveF9faW5wdXQiLGNsYXNzOnsiaXMtZGlzYWJsZWQiOl92bS5pc0Rpc2FibGVkLCJpcy1jaGVja2VkIjpfdm0uaXNDaGVja2VkLCJpcy1pbmRldGVybWluYXRlIjpfdm0uaW5kZXRlcm1pbmF0ZSwiaXMtZm9jdXMiOl92bS5mb2N1c30sYXR0cnM6e3RhYmluZGV4Ol92bS5pbmRldGVybWluYXRlPzA6ZmFsc2Uscm9sZTpfdm0uaW5kZXRlcm1pbmF0ZT8iY2hlY2tib3giOmZhbHNlLCJhcmlhLWNoZWNrZWQiOl92bS5pbmRldGVybWluYXRlPyJtaXhlZCI6ZmFsc2V9fSxbX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtY2hlY2tib3hfX2lubmVyIn0pLF92bS50cnVlTGFiZWx8fF92bS5mYWxzZUxhYmVsP19jKCJpbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2RlbCIsdmFsdWU6X3ZtLm1vZGVsLGV4cHJlc3Npb246Im1vZGVsIn1dLHN0YXRpY0NsYXNzOiJlbC1jaGVja2JveF9fb3JpZ2luYWwiLGF0dHJzOnt0eXBlOiJjaGVja2JveCIsImFyaWEtaGlkZGVuIjpfdm0uaW5kZXRlcm1pbmF0ZT8idHJ1ZSI6ImZhbHNlIixuYW1lOl92bS5uYW1lLGRpc2FibGVkOl92bS5pc0Rpc2FibGVkLCJ0cnVlLXZhbHVlIjpfdm0udHJ1ZUxhYmVsLCJmYWxzZS12YWx1ZSI6X3ZtLmZhbHNlTGFiZWx9LGRvbVByb3BzOntjaGVja2VkOkFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKT9fdm0uX2koX3ZtLm1vZGVsLG51bGwpPi0xOl92bS5fcShfdm0ubW9kZWwsX3ZtLnRydWVMYWJlbCl9LG9uOntjaGFuZ2U6W2Z1bmN0aW9uKCRldmVudCl7dmFyICQkYT1fdm0ubW9kZWwsJCRlbD0kZXZlbnQudGFyZ2V0LCQkYz0kJGVsLmNoZWNrZWQ/X3ZtLnRydWVMYWJlbDpfdm0uZmFsc2VMYWJlbDtpZihBcnJheS5pc0FycmF5KCQkYSkpe3ZhciAkJHY9bnVsbCwkJGk9X3ZtLl9pKCQkYSwkJHYpO2lmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihfdm0ubW9kZWw9JCRhLmNvbmNhdChbJCR2XSkpO31lbHNleyQkaT4tMSYmKF92bS5tb2RlbD0kJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpKzEpKSk7fX1lbHNle192bS5tb2RlbD0kJGM7fX0sX3ZtLmhhbmRsZUNoYW5nZV0sZm9jdXM6ZnVuY3Rpb24gZm9jdXMoJGV2ZW50KXtfdm0uZm9jdXM9dHJ1ZTt9LGJsdXI6ZnVuY3Rpb24gYmx1cigkZXZlbnQpe192bS5mb2N1cz1mYWxzZTt9fX0pOl9jKCJpbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2RlbCIsdmFsdWU6X3ZtLm1vZGVsLGV4cHJlc3Npb246Im1vZGVsIn1dLHN0YXRpY0NsYXNzOiJlbC1jaGVja2JveF9fb3JpZ2luYWwiLGF0dHJzOnt0eXBlOiJjaGVja2JveCIsImFyaWEtaGlkZGVuIjpfdm0uaW5kZXRlcm1pbmF0ZT8idHJ1ZSI6ImZhbHNlIixkaXNhYmxlZDpfdm0uaXNEaXNhYmxlZCxuYW1lOl92bS5uYW1lfSxkb21Qcm9wczp7dmFsdWU6X3ZtLmxhYmVsLGNoZWNrZWQ6QXJyYXkuaXNBcnJheShfdm0ubW9kZWwpP192bS5faShfdm0ubW9kZWwsX3ZtLmxhYmVsKT4tMTpfdm0ubW9kZWx9LG9uOntjaGFuZ2U6W2Z1bmN0aW9uKCRldmVudCl7dmFyICQkYT1fdm0ubW9kZWwsJCRlbD0kZXZlbnQudGFyZ2V0LCQkYz0kJGVsLmNoZWNrZWQ/dHJ1ZTpmYWxzZTtpZihBcnJheS5pc0FycmF5KCQkYSkpe3ZhciAkJHY9X3ZtLmxhYmVsLCQkaT1fdm0uX2koJCRhLCQkdik7aWYoJCRlbC5jaGVja2VkKXskJGk8MCYmKF92bS5tb2RlbD0kJGEuY29uY2F0KFskJHZdKSk7fWVsc2V7JCRpPi0xJiYoX3ZtLm1vZGVsPSQkYS5zbGljZSgwLCQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkrMSkpKTt9fWVsc2V7X3ZtLm1vZGVsPSQkYzt9fSxfdm0uaGFuZGxlQ2hhbmdlXSxmb2N1czpmdW5jdGlvbiBmb2N1cygkZXZlbnQpe192bS5mb2N1cz10cnVlO30sYmx1cjpmdW5jdGlvbiBibHVyKCRldmVudCl7X3ZtLmZvY3VzPWZhbHNlO319fSldKSxfdm0uJHNsb3RzLmRlZmF1bHR8fF92bS5sYWJlbD9fYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1jaGVja2JveF9fbGFiZWwifSxbX3ZtLl90KCJkZWZhdWx0IiksIV92bS4kc2xvdHMuZGVmYXVsdD9bX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV06X3ZtLl9lKCldLDIpOl92bS5fZSgpXSk7fTt2YXIgY2hlY2tib3h2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kMDM4NzA3NF9zdGF0aWNSZW5kZXJGbnM9W107Y2hlY2tib3h2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kMDM4NzA3NF9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMDM4NzA3NCYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjaGVja2JveHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxDaGVja2JveCcsbWl4aW5zOltlbWl0dGVyX2RlZmF1bHQuYV0saW5qZWN0OntlbEZvcm06e2RlZmF1bHQ6Jyd9LGVsRm9ybUl0ZW06e2RlZmF1bHQ6Jyd9fSxjb21wb25lbnROYW1lOidFbENoZWNrYm94JyxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57c2VsZk1vZGVsOmZhbHNlLGZvY3VzOmZhbHNlLGlzTGltaXRFeGNlZWRlZDpmYWxzZX07fSxjb21wdXRlZDp7bW9kZWw6e2dldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5pc0dyb3VwP3RoaXMuc3RvcmU6dGhpcy52YWx1ZSE9PXVuZGVmaW5lZD90aGlzLnZhbHVlOnRoaXMuc2VsZk1vZGVsO30sc2V0OmZ1bmN0aW9uIHNldCh2YWwpe2lmKHRoaXMuaXNHcm91cCl7dGhpcy5pc0xpbWl0RXhjZWVkZWQ9ZmFsc2U7dGhpcy5fY2hlY2tib3hHcm91cC5taW4hPT11bmRlZmluZWQmJnZhbC5sZW5ndGg8dGhpcy5fY2hlY2tib3hHcm91cC5taW4mJih0aGlzLmlzTGltaXRFeGNlZWRlZD10cnVlKTt0aGlzLl9jaGVja2JveEdyb3VwLm1heCE9PXVuZGVmaW5lZCYmdmFsLmxlbmd0aD50aGlzLl9jaGVja2JveEdyb3VwLm1heCYmKHRoaXMuaXNMaW1pdEV4Y2VlZGVkPXRydWUpO3RoaXMuaXNMaW1pdEV4Y2VlZGVkPT09ZmFsc2UmJnRoaXMuZGlzcGF0Y2goJ0VsQ2hlY2tib3hHcm91cCcsJ2lucHV0JyxbdmFsXSk7fWVsc2V7dGhpcy4kZW1pdCgnaW5wdXQnLHZhbCk7dGhpcy5zZWxmTW9kZWw9dmFsO319fSxpc0NoZWNrZWQ6ZnVuY3Rpb24gaXNDaGVja2VkKCl7aWYoe30udG9TdHJpbmcuY2FsbCh0aGlzLm1vZGVsKT09PSdbb2JqZWN0IEJvb2xlYW5dJyl7cmV0dXJuIHRoaXMubW9kZWw7fWVsc2UgaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsKSl7cmV0dXJuIHRoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKT4tMTt9ZWxzZSBpZih0aGlzLm1vZGVsIT09bnVsbCYmdGhpcy5tb2RlbCE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMubW9kZWw9PT10aGlzLnRydWVMYWJlbDt9fSxpc0dyb3VwOmZ1bmN0aW9uIGlzR3JvdXAoKXt2YXIgcGFyZW50PXRoaXMuJHBhcmVudDt3aGlsZShwYXJlbnQpe2lmKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lIT09J0VsQ2hlY2tib3hHcm91cCcpe3BhcmVudD1wYXJlbnQuJHBhcmVudDt9ZWxzZXt0aGlzLl9jaGVja2JveEdyb3VwPXBhcmVudDtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9LHN0b3JlOmZ1bmN0aW9uIHN0b3JlKCl7cmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXA/dGhpcy5fY2hlY2tib3hHcm91cC52YWx1ZTp0aGlzLnZhbHVlO30sLyogdXNlZCB0byBtYWtlIHRoZSBpc0Rpc2FibGVkIGp1ZGdtZW50IHVuZGVyIG1heC9taW4gcHJvcHMgKi9pc0xpbWl0RGlzYWJsZWQ6ZnVuY3Rpb24gaXNMaW1pdERpc2FibGVkKCl7dmFyIF9jaGVja2JveEdyb3VwPXRoaXMuX2NoZWNrYm94R3JvdXAsbWF4PV9jaGVja2JveEdyb3VwLm1heCxtaW49X2NoZWNrYm94R3JvdXAubWluO3JldHVybiEhKG1heHx8bWluKSYmdGhpcy5tb2RlbC5sZW5ndGg+PW1heCYmIXRoaXMuaXNDaGVja2VkfHx0aGlzLm1vZGVsLmxlbmd0aDw9bWluJiZ0aGlzLmlzQ2hlY2tlZDt9LGlzRGlzYWJsZWQ6ZnVuY3Rpb24gaXNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmlzR3JvdXA/dGhpcy5fY2hlY2tib3hHcm91cC5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlZHx8KHRoaXMuZWxGb3JtfHx7fSkuZGlzYWJsZWR8fHRoaXMuaXNMaW1pdERpc2FibGVkOnRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkO30sX2VsRm9ybUl0ZW1TaXplOmZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpe3JldHVybih0aGlzLmVsRm9ybUl0ZW18fHt9KS5lbEZvcm1JdGVtU2l6ZTt9LGNoZWNrYm94U2l6ZTpmdW5jdGlvbiBjaGVja2JveFNpemUoKXt2YXIgdGVtQ2hlY2tib3hTaXplPXRoaXMuc2l6ZXx8dGhpcy5fZWxGb3JtSXRlbVNpemV8fCh0aGlzLiRFTEVNRU5UfHx7fSkuc2l6ZTtyZXR1cm4gdGhpcy5pc0dyb3VwP3RoaXMuX2NoZWNrYm94R3JvdXAuY2hlY2tib3hHcm91cFNpemV8fHRlbUNoZWNrYm94U2l6ZTp0ZW1DaGVja2JveFNpemU7fX0scHJvcHM6e3ZhbHVlOnt9LGxhYmVsOnt9LGluZGV0ZXJtaW5hdGU6Qm9vbGVhbixkaXNhYmxlZDpCb29sZWFuLGNoZWNrZWQ6Qm9vbGVhbixuYW1lOlN0cmluZyx0cnVlTGFiZWw6W1N0cmluZyxOdW1iZXJdLGZhbHNlTGFiZWw6W1N0cmluZyxOdW1iZXJdLGlkOlN0cmluZywvKiDlvZNpbmRldGVybWluYXRl5Li655yf5pe277yM5Li6Y29udHJvbHPmj5Dkvpvnm7jlhbPov57nmoRjaGVja2JveOeahGlk77yM6KGo5piO5YWD57Sg6Ze055qE5o6n5Yi25YWz57O7Ki9jb250cm9sczpTdHJpbmcsLyog5b2TaW5kZXRlcm1pbmF0ZeS4uuecn+aXtu+8jOS4umNvbnRyb2xz5o+Q5L6b55u45YWz6L+e55qEY2hlY2tib3jnmoRpZO+8jOihqOaYjuWFg+e0oOmXtOeahOaOp+WItuWFs+ezuyovYm9yZGVyOkJvb2xlYW4sc2l6ZTpTdHJpbmd9LG1ldGhvZHM6e2FkZFRvU3RvcmU6ZnVuY3Rpb24gYWRkVG9TdG9yZSgpe2lmKEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkmJnRoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKT09PS0xKXt0aGlzLm1vZGVsLnB1c2godGhpcy5sYWJlbCk7fWVsc2V7dGhpcy5tb2RlbD10aGlzLnRydWVMYWJlbHx8dHJ1ZTt9fSxoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2KXt2YXIgX3RoaXM9dGhpcztpZih0aGlzLmlzTGltaXRFeGNlZWRlZClyZXR1cm47dmFyIHZhbHVlPXZvaWQgMDtpZihldi50YXJnZXQuY2hlY2tlZCl7dmFsdWU9dGhpcy50cnVlTGFiZWw9PT11bmRlZmluZWQ/dHJ1ZTp0aGlzLnRydWVMYWJlbDt9ZWxzZXt2YWx1ZT10aGlzLmZhbHNlTGFiZWw9PT11bmRlZmluZWQ/ZmFsc2U6dGhpcy5mYWxzZUxhYmVsO310aGlzLiRlbWl0KCdjaGFuZ2UnLHZhbHVlLGV2KTt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lmKF90aGlzLmlzR3JvdXApe190aGlzLmRpc3BhdGNoKCdFbENoZWNrYm94R3JvdXAnLCdjaGFuZ2UnLFtfdGhpcy5fY2hlY2tib3hHcm91cC52YWx1ZV0pO319KTt9fSxjcmVhdGVkOmZ1bmN0aW9uIGNyZWF0ZWQoKXt0aGlzLmNoZWNrZWQmJnRoaXMuYWRkVG9TdG9yZSgpO30sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7Ly8g5Li6aW5kZXRlcm1pbmF0ZeWFg+e0oCDmt7vliqBhcmlhLWNvbnRyb2xzIOWxnuaApwppZih0aGlzLmluZGV0ZXJtaW5hdGUpe3RoaXMuJGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsdGhpcy5jb250cm9scyk7fX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uIHZhbHVlKF92YWx1ZSl7dGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsJ2VsLmZvcm0uY2hhbmdlJyxfdmFsdWUpO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX2NoZWNrYm94dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWNoZWNrYm94dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGNoZWNrYm94X2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX2NoZWNrYm94dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGNoZWNrYm94dnVlX3R5cGVfdGVtcGxhdGVfaWRfZDAzODcwNzRfcmVuZGVyLGNoZWNrYm94dnVlX3R5cGVfdGVtcGxhdGVfaWRfZDAzODcwNzRfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBjaGVja2JveF9hcGk7fWNoZWNrYm94X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfY2hlY2tib3g9Y2hlY2tib3hfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3NyY19jaGVja2JveC5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzcmNfY2hlY2tib3gubmFtZSxzcmNfY2hlY2tib3gpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19jaGVja2JveD1zcmNfY2hlY2tib3g7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NzhlOTA2ZSYKdmFyIGNoZWNrYm94X2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ3OGU5MDZlX3JlbmRlcj1mdW5jdGlvbiBjaGVja2JveF9idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF80NzhlOTA2ZV9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImxhYmVsIix7c3RhdGljQ2xhc3M6ImVsLWNoZWNrYm94LWJ1dHRvbiIsY2xhc3M6W192bS5zaXplPyJlbC1jaGVja2JveC1idXR0b24tLSIrX3ZtLnNpemU6IiIseyJpcy1kaXNhYmxlZCI6X3ZtLmlzRGlzYWJsZWR9LHsiaXMtY2hlY2tlZCI6X3ZtLmlzQ2hlY2tlZH0seyJpcy1mb2N1cyI6X3ZtLmZvY3VzfV0sYXR0cnM6e3JvbGU6ImNoZWNrYm94IiwiYXJpYS1jaGVja2VkIjpfdm0uaXNDaGVja2VkLCJhcmlhLWRpc2FibGVkIjpfdm0uaXNEaXNhYmxlZH19LFtfdm0udHJ1ZUxhYmVsfHxfdm0uZmFsc2VMYWJlbD9fYygiaW5wdXQiLHtkaXJlY3RpdmVzOlt7bmFtZToibW9kZWwiLHJhd05hbWU6InYtbW9kZWwiLHZhbHVlOl92bS5tb2RlbCxleHByZXNzaW9uOiJtb2RlbCJ9XSxzdGF0aWNDbGFzczoiZWwtY2hlY2tib3gtYnV0dG9uX19vcmlnaW5hbCIsYXR0cnM6e3R5cGU6ImNoZWNrYm94IixuYW1lOl92bS5uYW1lLGRpc2FibGVkOl92bS5pc0Rpc2FibGVkLCJ0cnVlLXZhbHVlIjpfdm0udHJ1ZUxhYmVsLCJmYWxzZS12YWx1ZSI6X3ZtLmZhbHNlTGFiZWx9LGRvbVByb3BzOntjaGVja2VkOkFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKT9fdm0uX2koX3ZtLm1vZGVsLG51bGwpPi0xOl92bS5fcShfdm0ubW9kZWwsX3ZtLnRydWVMYWJlbCl9LG9uOntjaGFuZ2U6W2Z1bmN0aW9uKCRldmVudCl7dmFyICQkYT1fdm0ubW9kZWwsJCRlbD0kZXZlbnQudGFyZ2V0LCQkYz0kJGVsLmNoZWNrZWQ/X3ZtLnRydWVMYWJlbDpfdm0uZmFsc2VMYWJlbDtpZihBcnJheS5pc0FycmF5KCQkYSkpe3ZhciAkJHY9bnVsbCwkJGk9X3ZtLl9pKCQkYSwkJHYpO2lmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihfdm0ubW9kZWw9JCRhLmNvbmNhdChbJCR2XSkpO31lbHNleyQkaT4tMSYmKF92bS5tb2RlbD0kJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpKzEpKSk7fX1lbHNle192bS5tb2RlbD0kJGM7fX0sX3ZtLmhhbmRsZUNoYW5nZV0sZm9jdXM6ZnVuY3Rpb24gZm9jdXMoJGV2ZW50KXtfdm0uZm9jdXM9dHJ1ZTt9LGJsdXI6ZnVuY3Rpb24gYmx1cigkZXZlbnQpe192bS5mb2N1cz1mYWxzZTt9fX0pOl9jKCJpbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2RlbCIsdmFsdWU6X3ZtLm1vZGVsLGV4cHJlc3Npb246Im1vZGVsIn1dLHN0YXRpY0NsYXNzOiJlbC1jaGVja2JveC1idXR0b25fX29yaWdpbmFsIixhdHRyczp7dHlwZToiY2hlY2tib3giLG5hbWU6X3ZtLm5hbWUsZGlzYWJsZWQ6X3ZtLmlzRGlzYWJsZWR9LGRvbVByb3BzOnt2YWx1ZTpfdm0ubGFiZWwsY2hlY2tlZDpBcnJheS5pc0FycmF5KF92bS5tb2RlbCk/X3ZtLl9pKF92bS5tb2RlbCxfdm0ubGFiZWwpPi0xOl92bS5tb2RlbH0sb246e2NoYW5nZTpbZnVuY3Rpb24oJGV2ZW50KXt2YXIgJCRhPV92bS5tb2RlbCwkJGVsPSRldmVudC50YXJnZXQsJCRjPSQkZWwuY2hlY2tlZD90cnVlOmZhbHNlO2lmKEFycmF5LmlzQXJyYXkoJCRhKSl7dmFyICQkdj1fdm0ubGFiZWwsJCRpPV92bS5faSgkJGEsJCR2KTtpZigkJGVsLmNoZWNrZWQpeyQkaTwwJiYoX3ZtLm1vZGVsPSQkYS5jb25jYXQoWyQkdl0pKTt9ZWxzZXskJGk+LTEmJihfdm0ubW9kZWw9JCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSkpO319ZWxzZXtfdm0ubW9kZWw9JCRjO319LF92bS5oYW5kbGVDaGFuZ2VdLGZvY3VzOmZ1bmN0aW9uIGZvY3VzKCRldmVudCl7X3ZtLmZvY3VzPXRydWU7fSxibHVyOmZ1bmN0aW9uIGJsdXIoJGV2ZW50KXtfdm0uZm9jdXM9ZmFsc2U7fX19KSxfdm0uJHNsb3RzLmRlZmF1bHR8fF92bS5sYWJlbD9fYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1jaGVja2JveC1idXR0b25fX2lubmVyIixzdHlsZTpfdm0uaXNDaGVja2VkP192bS5hY3RpdmVTdHlsZTpudWxsfSxbX3ZtLl90KCJkZWZhdWx0IixbX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV0pXSwyKTpfdm0uX2UoKV0pO307dmFyIGNoZWNrYm94X2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ3OGU5MDZlX3N0YXRpY1JlbmRlckZucz1bXTtjaGVja2JveF9idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF80NzhlOTA2ZV9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDc4ZTkwNmUmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNoZWNrYm94X2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxDaGVja2JveEJ1dHRvbicsbWl4aW5zOltlbWl0dGVyX2RlZmF1bHQuYV0saW5qZWN0OntlbEZvcm06e2RlZmF1bHQ6Jyd9LGVsRm9ybUl0ZW06e2RlZmF1bHQ6Jyd9fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57c2VsZk1vZGVsOmZhbHNlLGZvY3VzOmZhbHNlLGlzTGltaXRFeGNlZWRlZDpmYWxzZX07fSxwcm9wczp7dmFsdWU6e30sbGFiZWw6e30sZGlzYWJsZWQ6Qm9vbGVhbixjaGVja2VkOkJvb2xlYW4sbmFtZTpTdHJpbmcsdHJ1ZUxhYmVsOltTdHJpbmcsTnVtYmVyXSxmYWxzZUxhYmVsOltTdHJpbmcsTnVtYmVyXX0sY29tcHV0ZWQ6e21vZGVsOntnZXQ6ZnVuY3Rpb24gZ2V0KCl7cmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXA/dGhpcy5zdG9yZTp0aGlzLnZhbHVlIT09dW5kZWZpbmVkP3RoaXMudmFsdWU6dGhpcy5zZWxmTW9kZWw7fSxzZXQ6ZnVuY3Rpb24gc2V0KHZhbCl7aWYodGhpcy5fY2hlY2tib3hHcm91cCl7dGhpcy5pc0xpbWl0RXhjZWVkZWQ9ZmFsc2U7dGhpcy5fY2hlY2tib3hHcm91cC5taW4hPT11bmRlZmluZWQmJnZhbC5sZW5ndGg8dGhpcy5fY2hlY2tib3hHcm91cC5taW4mJih0aGlzLmlzTGltaXRFeGNlZWRlZD10cnVlKTt0aGlzLl9jaGVja2JveEdyb3VwLm1heCE9PXVuZGVmaW5lZCYmdmFsLmxlbmd0aD50aGlzLl9jaGVja2JveEdyb3VwLm1heCYmKHRoaXMuaXNMaW1pdEV4Y2VlZGVkPXRydWUpO3RoaXMuaXNMaW1pdEV4Y2VlZGVkPT09ZmFsc2UmJnRoaXMuZGlzcGF0Y2goJ0VsQ2hlY2tib3hHcm91cCcsJ2lucHV0JyxbdmFsXSk7fWVsc2UgaWYodGhpcy52YWx1ZSE9PXVuZGVmaW5lZCl7dGhpcy4kZW1pdCgnaW5wdXQnLHZhbCk7fWVsc2V7dGhpcy5zZWxmTW9kZWw9dmFsO319fSxpc0NoZWNrZWQ6ZnVuY3Rpb24gaXNDaGVja2VkKCl7aWYoe30udG9TdHJpbmcuY2FsbCh0aGlzLm1vZGVsKT09PSdbb2JqZWN0IEJvb2xlYW5dJyl7cmV0dXJuIHRoaXMubW9kZWw7fWVsc2UgaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsKSl7cmV0dXJuIHRoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKT4tMTt9ZWxzZSBpZih0aGlzLm1vZGVsIT09bnVsbCYmdGhpcy5tb2RlbCE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMubW9kZWw9PT10aGlzLnRydWVMYWJlbDt9fSxfY2hlY2tib3hHcm91cDpmdW5jdGlvbiBfY2hlY2tib3hHcm91cCgpe3ZhciBwYXJlbnQ9dGhpcy4kcGFyZW50O3doaWxlKHBhcmVudCl7aWYocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUhPT0nRWxDaGVja2JveEdyb3VwJyl7cGFyZW50PXBhcmVudC4kcGFyZW50O31lbHNle3JldHVybiBwYXJlbnQ7fX1yZXR1cm4gZmFsc2U7fSxzdG9yZTpmdW5jdGlvbiBzdG9yZSgpe3JldHVybiB0aGlzLl9jaGVja2JveEdyb3VwP3RoaXMuX2NoZWNrYm94R3JvdXAudmFsdWU6dGhpcy52YWx1ZTt9LGFjdGl2ZVN0eWxlOmZ1bmN0aW9uIGFjdGl2ZVN0eWxlKCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjp0aGlzLl9jaGVja2JveEdyb3VwLmZpbGx8fCcnLGJvcmRlckNvbG9yOnRoaXMuX2NoZWNrYm94R3JvdXAuZmlsbHx8JycsY29sb3I6dGhpcy5fY2hlY2tib3hHcm91cC50ZXh0Q29sb3J8fCcnLCdib3gtc2hhZG93JzonLTFweCAwIDAgMCAnK3RoaXMuX2NoZWNrYm94R3JvdXAuZmlsbH07fSxfZWxGb3JtSXRlbVNpemU6ZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCl7cmV0dXJuKHRoaXMuZWxGb3JtSXRlbXx8e30pLmVsRm9ybUl0ZW1TaXplO30sc2l6ZTpmdW5jdGlvbiBzaXplKCl7cmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXAuY2hlY2tib3hHcm91cFNpemV8fHRoaXMuX2VsRm9ybUl0ZW1TaXplfHwodGhpcy4kRUxFTUVOVHx8e30pLnNpemU7fSwvKiB1c2VkIHRvIG1ha2UgdGhlIGlzRGlzYWJsZWQganVkZ21lbnQgdW5kZXIgbWF4L21pbiBwcm9wcyAqL2lzTGltaXREaXNhYmxlZDpmdW5jdGlvbiBpc0xpbWl0RGlzYWJsZWQoKXt2YXIgX2NoZWNrYm94R3JvdXAyPXRoaXMuX2NoZWNrYm94R3JvdXAsbWF4PV9jaGVja2JveEdyb3VwMi5tYXgsbWluPV9jaGVja2JveEdyb3VwMi5taW47cmV0dXJuISEobWF4fHxtaW4pJiZ0aGlzLm1vZGVsLmxlbmd0aD49bWF4JiYhdGhpcy5pc0NoZWNrZWR8fHRoaXMubW9kZWwubGVuZ3RoPD1taW4mJnRoaXMuaXNDaGVja2VkO30saXNEaXNhYmxlZDpmdW5jdGlvbiBpc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXA/dGhpcy5fY2hlY2tib3hHcm91cC5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlZHx8KHRoaXMuZWxGb3JtfHx7fSkuZGlzYWJsZWR8fHRoaXMuaXNMaW1pdERpc2FibGVkOnRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkO319LG1ldGhvZHM6e2FkZFRvU3RvcmU6ZnVuY3Rpb24gYWRkVG9TdG9yZSgpe2lmKEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkmJnRoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKT09PS0xKXt0aGlzLm1vZGVsLnB1c2godGhpcy5sYWJlbCk7fWVsc2V7dGhpcy5tb2RlbD10aGlzLnRydWVMYWJlbHx8dHJ1ZTt9fSxoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2KXt2YXIgX3RoaXM9dGhpcztpZih0aGlzLmlzTGltaXRFeGNlZWRlZClyZXR1cm47dmFyIHZhbHVlPXZvaWQgMDtpZihldi50YXJnZXQuY2hlY2tlZCl7dmFsdWU9dGhpcy50cnVlTGFiZWw9PT11bmRlZmluZWQ/dHJ1ZTp0aGlzLnRydWVMYWJlbDt9ZWxzZXt2YWx1ZT10aGlzLmZhbHNlTGFiZWw9PT11bmRlZmluZWQ/ZmFsc2U6dGhpcy5mYWxzZUxhYmVsO310aGlzLiRlbWl0KCdjaGFuZ2UnLHZhbHVlLGV2KTt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lmKF90aGlzLl9jaGVja2JveEdyb3VwKXtfdGhpcy5kaXNwYXRjaCgnRWxDaGVja2JveEdyb3VwJywnY2hhbmdlJyxbX3RoaXMuX2NoZWNrYm94R3JvdXAudmFsdWVdKTt9fSk7fX0sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dGhpcy5jaGVja2VkJiZ0aGlzLmFkZFRvU3RvcmUoKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19jaGVja2JveF9idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189Y2hlY2tib3hfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWJ1dHRvbi52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBjaGVja2JveF9idXR0b25fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfY2hlY2tib3hfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGNoZWNrYm94X2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ3OGU5MDZlX3JlbmRlcixjaGVja2JveF9idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF80NzhlOTA2ZV9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGNoZWNrYm94X2J1dHRvbl9hcGk7fWNoZWNrYm94X2J1dHRvbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1idXR0b24udnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNoZWNrYm94X2J1dHRvbj1jaGVja2JveF9idXR0b25fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC1idXR0b24vaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9jaGVja2JveF9idXR0b24uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoY2hlY2tib3hfYnV0dG9uLm5hbWUsY2hlY2tib3hfYnV0dG9uKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfY2hlY2tib3hfYnV0dG9uPWNoZWNrYm94X2J1dHRvbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzI4OWEyOTAmCnZhciBjaGVja2JveF9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzcyODlhMjkwX3JlbmRlcj1mdW5jdGlvbiBjaGVja2JveF9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzcyODlhMjkwX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNoZWNrYm94LWdyb3VwIixhdHRyczp7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjoiY2hlY2tib3gtZ3JvdXAifX0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTt9O3ZhciBjaGVja2JveF9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzcyODlhMjkwX3N0YXRpY1JlbmRlckZucz1bXTtjaGVja2JveF9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzcyODlhMjkwX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyODlhMjkwJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNoZWNrYm94X2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbENoZWNrYm94R3JvdXAnLGNvbXBvbmVudE5hbWU6J0VsQ2hlY2tib3hHcm91cCcsbWl4aW5zOltlbWl0dGVyX2RlZmF1bHQuYV0saW5qZWN0OntlbEZvcm1JdGVtOntkZWZhdWx0OicnfX0scHJvcHM6e3ZhbHVlOnt9LGRpc2FibGVkOkJvb2xlYW4sbWluOk51bWJlcixtYXg6TnVtYmVyLHNpemU6U3RyaW5nLGZpbGw6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmd9LGNvbXB1dGVkOntfZWxGb3JtSXRlbVNpemU6ZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCl7cmV0dXJuKHRoaXMuZWxGb3JtSXRlbXx8e30pLmVsRm9ybUl0ZW1TaXplO30sY2hlY2tib3hHcm91cFNpemU6ZnVuY3Rpb24gY2hlY2tib3hHcm91cFNpemUoKXtyZXR1cm4gdGhpcy5zaXplfHx0aGlzLl9lbEZvcm1JdGVtU2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplO319LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbiB2YWx1ZShfdmFsdWUpe3RoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCdlbC5mb3JtLmNoYW5nZScsW192YWx1ZV0pO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX2NoZWNrYm94X2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWNoZWNrYm94X2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWdyb3VwLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGNoZWNrYm94X2dyb3VwX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX2NoZWNrYm94X2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGNoZWNrYm94X2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzI4OWEyOTBfcmVuZGVyLGNoZWNrYm94X2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzI4OWEyOTBfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBjaGVja2JveF9ncm91cF9hcGk7fWNoZWNrYm94X2dyb3VwX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWdyb3VwLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjaGVja2JveF9ncm91cD1jaGVja2JveF9ncm91cF9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94LWdyb3VwL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovY2hlY2tib3hfZ3JvdXAuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoY2hlY2tib3hfZ3JvdXAubmFtZSxjaGVja2JveF9ncm91cCk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2NoZWNrYm94X2dyb3VwPWNoZWNrYm94X2dyb3VwOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3dpdGNoL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkY2Q4ZmJiJgp2YXIgY29tcG9uZW50dnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRjZDhmYmJfcmVuZGVyPWZ1bmN0aW9uIGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkY2Q4ZmJiX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXN3aXRjaCIsY2xhc3M6eyJpcy1kaXNhYmxlZCI6X3ZtLnN3aXRjaERpc2FibGVkLCJpcy1jaGVja2VkIjpfdm0uY2hlY2tlZH0sYXR0cnM6e3JvbGU6InN3aXRjaCIsImFyaWEtY2hlY2tlZCI6X3ZtLmNoZWNrZWQsImFyaWEtZGlzYWJsZWQiOl92bS5zd2l0Y2hEaXNhYmxlZH0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIF92bS5zd2l0Y2hWYWx1ZSgkZXZlbnQpO319fSxbX2MoImlucHV0Iix7cmVmOiJpbnB1dCIsc3RhdGljQ2xhc3M6ImVsLXN3aXRjaF9faW5wdXQiLGF0dHJzOnt0eXBlOiJjaGVja2JveCIsaWQ6X3ZtLmlkLG5hbWU6X3ZtLm5hbWUsInRydWUtdmFsdWUiOl92bS5hY3RpdmVWYWx1ZSwiZmFsc2UtdmFsdWUiOl92bS5pbmFjdGl2ZVZhbHVlLGRpc2FibGVkOl92bS5zd2l0Y2hEaXNhYmxlZH0sb246e2NoYW5nZTpfdm0uaGFuZGxlQ2hhbmdlLGtleWRvd246ZnVuY3Rpb24ga2V5ZG93bigkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsImVudGVyIiwxMywkZXZlbnQua2V5LCJFbnRlciIpKXtyZXR1cm4gbnVsbDt9cmV0dXJuIF92bS5zd2l0Y2hWYWx1ZSgkZXZlbnQpO319fSksX3ZtLmluYWN0aXZlSWNvbkNsYXNzfHxfdm0uaW5hY3RpdmVUZXh0P19jKCJzcGFuIix7Y2xhc3M6WyJlbC1zd2l0Y2hfX2xhYmVsIiwiZWwtc3dpdGNoX19sYWJlbC0tbGVmdCIsIV92bS5jaGVja2VkPyJpcy1hY3RpdmUiOiIiXX0sW192bS5pbmFjdGl2ZUljb25DbGFzcz9fYygiaSIse2NsYXNzOltfdm0uaW5hY3RpdmVJY29uQ2xhc3NdfSk6X3ZtLl9lKCksIV92bS5pbmFjdGl2ZUljb25DbGFzcyYmX3ZtLmluYWN0aXZlVGV4dD9fYygic3BhbiIse2F0dHJzOnsiYXJpYS1oaWRkZW4iOl92bS5jaGVja2VkfX0sW192bS5fdihfdm0uX3MoX3ZtLmluYWN0aXZlVGV4dCkpXSk6X3ZtLl9lKCldKTpfdm0uX2UoKSxfYygic3BhbiIse3JlZjoiY29yZSIsc3RhdGljQ2xhc3M6ImVsLXN3aXRjaF9fY29yZSIsc3R5bGU6e3dpZHRoOl92bS5jb3JlV2lkdGgrInB4In19KSxfdm0uYWN0aXZlSWNvbkNsYXNzfHxfdm0uYWN0aXZlVGV4dD9fYygic3BhbiIse2NsYXNzOlsiZWwtc3dpdGNoX19sYWJlbCIsImVsLXN3aXRjaF9fbGFiZWwtLXJpZ2h0Iixfdm0uY2hlY2tlZD8iaXMtYWN0aXZlIjoiIl19LFtfdm0uYWN0aXZlSWNvbkNsYXNzP19jKCJpIix7Y2xhc3M6W192bS5hY3RpdmVJY29uQ2xhc3NdfSk6X3ZtLl9lKCksIV92bS5hY3RpdmVJY29uQ2xhc3MmJl92bS5hY3RpdmVUZXh0P19jKCJzcGFuIix7YXR0cnM6eyJhcmlhLWhpZGRlbiI6IV92bS5jaGVja2VkfX0sW192bS5fdihfdm0uX3MoX3ZtLmFjdGl2ZVRleHQpKV0pOl92bS5fZSgpXSk6X3ZtLl9lKCldKTt9O3ZhciBjb21wb25lbnR2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGNkOGZiYl9zdGF0aWNSZW5kZXJGbnM9W107Y29tcG9uZW50dnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRjZDhmYmJfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N3aXRjaC9zcmMvY29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZGNkOGZiYiYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3dpdGNoL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHN3aXRjaF9zcmNfY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFN3aXRjaCcsbWl4aW5zOltmb2N1c19kZWZhdWx0KCkoJ2lucHV0JyksbWlncmF0aW5nX2RlZmF1bHQuYSxlbWl0dGVyX2RlZmF1bHQuYV0saW5qZWN0OntlbEZvcm06e2RlZmF1bHQ6Jyd9fSxwcm9wczp7dmFsdWU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nLE51bWJlcl0sZGVmYXVsdDpmYWxzZX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSx3aWR0aDp7dHlwZTpOdW1iZXIsZGVmYXVsdDo0MH0sYWN0aXZlSWNvbkNsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OicnfSxpbmFjdGl2ZUljb25DbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDonJ30sYWN0aXZlVGV4dDpTdHJpbmcsaW5hY3RpdmVUZXh0OlN0cmluZyxhY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDonJ30saW5hY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDonJ30sYWN0aXZlVmFsdWU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nLE51bWJlcl0sZGVmYXVsdDp0cnVlfSxpbmFjdGl2ZVZhbHVlOnt0eXBlOltCb29sZWFuLFN0cmluZyxOdW1iZXJdLGRlZmF1bHQ6ZmFsc2V9LG5hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Jyd9LHZhbGlkYXRlRXZlbnQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGlkOlN0cmluZ30sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2NvcmVXaWR0aDp0aGlzLndpZHRofTt9LGNyZWF0ZWQ6ZnVuY3Rpb24gY3JlYXRlZCgpe2lmKCF+W3RoaXMuYWN0aXZlVmFsdWUsdGhpcy5pbmFjdGl2ZVZhbHVlXS5pbmRleE9mKHRoaXMudmFsdWUpKXt0aGlzLiRlbWl0KCdpbnB1dCcsdGhpcy5pbmFjdGl2ZVZhbHVlKTt9fSxjb21wdXRlZDp7Y2hlY2tlZDpmdW5jdGlvbiBjaGVja2VkKCl7cmV0dXJuIHRoaXMudmFsdWU9PT10aGlzLmFjdGl2ZVZhbHVlO30sc3dpdGNoRGlzYWJsZWQ6ZnVuY3Rpb24gc3dpdGNoRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8KHRoaXMuZWxGb3JtfHx7fSkuZGlzYWJsZWQ7fX0sd2F0Y2g6e2NoZWNrZWQ6ZnVuY3Rpb24gY2hlY2tlZCgpe3RoaXMuJHJlZnMuaW5wdXQuY2hlY2tlZD10aGlzLmNoZWNrZWQ7aWYodGhpcy5hY3RpdmVDb2xvcnx8dGhpcy5pbmFjdGl2ZUNvbG9yKXt0aGlzLnNldEJhY2tncm91bmRDb2xvcigpO31pZih0aGlzLnZhbGlkYXRlRXZlbnQpe3RoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCdlbC5mb3JtLmNoYW5nZScsW3RoaXMudmFsdWVdKTt9fX0sbWV0aG9kczp7aGFuZGxlQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldmVudCl7dmFyIF90aGlzPXRoaXM7dmFyIHZhbD10aGlzLmNoZWNrZWQ/dGhpcy5pbmFjdGl2ZVZhbHVlOnRoaXMuYWN0aXZlVmFsdWU7dGhpcy4kZW1pdCgnaW5wdXQnLHZhbCk7dGhpcy4kZW1pdCgnY2hhbmdlJyx2YWwpO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7Ly8gc2V0IGlucHV0J3MgY2hlY2tlZCBwcm9wZXJ0eQovLyBpbiBjYXNlIHBhcmVudCByZWZ1c2VzIHRvIGNoYW5nZSBjb21wb25lbnQncyB2YWx1ZQpfdGhpcy4kcmVmcy5pbnB1dC5jaGVja2VkPV90aGlzLmNoZWNrZWQ7fSk7fSxzZXRCYWNrZ3JvdW5kQ29sb3I6ZnVuY3Rpb24gc2V0QmFja2dyb3VuZENvbG9yKCl7dmFyIG5ld0NvbG9yPXRoaXMuY2hlY2tlZD90aGlzLmFjdGl2ZUNvbG9yOnRoaXMuaW5hY3RpdmVDb2xvcjt0aGlzLiRyZWZzLmNvcmUuc3R5bGUuYm9yZGVyQ29sb3I9bmV3Q29sb3I7dGhpcy4kcmVmcy5jb3JlLnN0eWxlLmJhY2tncm91bmRDb2xvcj1uZXdDb2xvcjt9LHN3aXRjaFZhbHVlOmZ1bmN0aW9uIHN3aXRjaFZhbHVlKCl7IXRoaXMuc3dpdGNoRGlzYWJsZWQmJnRoaXMuaGFuZGxlQ2hhbmdlKCk7fSxnZXRNaWdyYXRpbmdDb25maWc6ZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCl7cmV0dXJue3Byb3BzOnsnb24tY29sb3InOidvbi1jb2xvciBpcyByZW5hbWVkIHRvIGFjdGl2ZS1jb2xvci4nLCdvZmYtY29sb3InOidvZmYtY29sb3IgaXMgcmVuYW1lZCB0byBpbmFjdGl2ZS1jb2xvci4nLCdvbi10ZXh0Jzonb24tdGV4dCBpcyByZW5hbWVkIHRvIGFjdGl2ZS10ZXh0LicsJ29mZi10ZXh0Jzonb2ZmLXRleHQgaXMgcmVuYW1lZCB0byBpbmFjdGl2ZS10ZXh0LicsJ29uLXZhbHVlJzonb24tdmFsdWUgaXMgcmVuYW1lZCB0byBhY3RpdmUtdmFsdWUuJywnb2ZmLXZhbHVlJzonb2ZmLXZhbHVlIGlzIHJlbmFtZWQgdG8gaW5hY3RpdmUtdmFsdWUuJywnb24taWNvbi1jbGFzcyc6J29uLWljb24tY2xhc3MgaXMgcmVuYW1lZCB0byBhY3RpdmUtaWNvbi1jbGFzcy4nLCdvZmYtaWNvbi1jbGFzcyc6J29mZi1pY29uLWNsYXNzIGlzIHJlbmFtZWQgdG8gaW5hY3RpdmUtaWNvbi1jbGFzcy4nfX07fX0sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7LyogaXN0YW5idWwgaWdub3JlIGlmICovdGhpcy5jb3JlV2lkdGg9dGhpcy53aWR0aHx8NDA7aWYodGhpcy5hY3RpdmVDb2xvcnx8dGhpcy5pbmFjdGl2ZUNvbG9yKXt0aGlzLnNldEJhY2tncm91bmRDb2xvcigpO310aGlzLiRyZWZzLmlucHV0LmNoZWNrZWQ9dGhpcy5jaGVja2VkO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3dpdGNoL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3N3aXRjaF9zcmNfY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXN3aXRjaF9zcmNfY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3dpdGNoL3NyYy9jb21wb25lbnQudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgc3JjX2NvbXBvbmVudF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhY2thZ2VzX3N3aXRjaF9zcmNfY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkY2Q4ZmJiX3JlbmRlcixjb21wb25lbnR2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGNkOGZiYl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHNyY19jb21wb25lbnRfYXBpO31zcmNfY29tcG9uZW50X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvc3dpdGNoL3NyYy9jb21wb25lbnQudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHN3aXRjaF9zcmNfY29tcG9uZW50PXNyY19jb21wb25lbnRfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zd2l0Y2gvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9zd2l0Y2hfc3JjX2NvbXBvbmVudC5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzd2l0Y2hfc3JjX2NvbXBvbmVudC5uYW1lLHN3aXRjaF9zcmNfY29tcG9uZW50KTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfc3dpdGNoPXN3aXRjaF9zcmNfY29tcG9uZW50Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBlNGFhZGU2Jgp2YXIgc2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMGU0YWFkZTZfcmVuZGVyPWZ1bmN0aW9uIHNlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBlNGFhZGU2X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6ImNsaWNrb3V0c2lkZSIscmF3TmFtZToidi1jbGlja291dHNpZGUiLHZhbHVlOl92bS5oYW5kbGVDbG9zZSxleHByZXNzaW9uOiJoYW5kbGVDbG9zZSJ9XSxzdGF0aWNDbGFzczoiZWwtc2VsZWN0IixjbGFzczpbX3ZtLnNlbGVjdFNpemU/ImVsLXNlbGVjdC0tIitfdm0uc2VsZWN0U2l6ZToiIl0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBfdm0udG9nZ2xlTWVudSgkZXZlbnQpO319fSxbX3ZtLm11bHRpcGxlP19jKCJkaXYiLHtyZWY6InRhZ3MiLHN0YXRpY0NsYXNzOiJlbC1zZWxlY3RfX3RhZ3MiLHN0eWxlOnsibWF4LXdpZHRoIjpfdm0uaW5wdXRXaWR0aC0zMisicHgiLHdpZHRoOiIxMDAlIn19LFtfdm0uY29sbGFwc2VUYWdzJiZfdm0uc2VsZWN0ZWQubGVuZ3RoP19jKCJzcGFuIixbX2MoImVsLXRhZyIse2F0dHJzOntjbG9zYWJsZTohX3ZtLnNlbGVjdERpc2FibGVkLHNpemU6X3ZtLmNvbGxhcHNlVGFnU2l6ZSxoaXQ6X3ZtLnNlbGVjdGVkWzBdLmhpdFN0YXRlLHR5cGU6ImluZm8iLCJkaXNhYmxlLXRyYW5zaXRpb25zIjoiIn0sb246e2Nsb3NlOmZ1bmN0aW9uIGNsb3NlKCRldmVudCl7X3ZtLmRlbGV0ZVRhZygkZXZlbnQsX3ZtLnNlbGVjdGVkWzBdKTt9fX0sW19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9fdGFncy10ZXh0In0sW192bS5fdihfdm0uX3MoX3ZtLnNlbGVjdGVkWzBdLmN1cnJlbnRMYWJlbCkpXSldKSxfdm0uc2VsZWN0ZWQubGVuZ3RoPjE/X2MoImVsLXRhZyIse2F0dHJzOntjbG9zYWJsZTpmYWxzZSxzaXplOl92bS5jb2xsYXBzZVRhZ1NpemUsdHlwZToiaW5mbyIsImRpc2FibGUtdHJhbnNpdGlvbnMiOiIifX0sW19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9fdGFncy10ZXh0In0sW192bS5fdigiKyAiK192bS5fcyhfdm0uc2VsZWN0ZWQubGVuZ3RoLTEpKV0pXSk6X3ZtLl9lKCldLDEpOl92bS5fZSgpLCFfdm0uY29sbGFwc2VUYWdzP19jKCJ0cmFuc2l0aW9uLWdyb3VwIix7b246eyJhZnRlci1sZWF2ZSI6X3ZtLnJlc2V0SW5wdXRIZWlnaHR9fSxfdm0uX2woX3ZtLnNlbGVjdGVkLGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBfYygiZWwtdGFnIix7a2V5Ol92bS5nZXRWYWx1ZUtleShpdGVtKSxhdHRyczp7Y2xvc2FibGU6IV92bS5zZWxlY3REaXNhYmxlZCxzaXplOl92bS5jb2xsYXBzZVRhZ1NpemUsaGl0Oml0ZW0uaGl0U3RhdGUsdHlwZToiaW5mbyIsImRpc2FibGUtdHJhbnNpdGlvbnMiOiIifSxvbjp7Y2xvc2U6ZnVuY3Rpb24gY2xvc2UoJGV2ZW50KXtfdm0uZGVsZXRlVGFnKCRldmVudCxpdGVtKTt9fX0sW19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9fdGFncy10ZXh0In0sW192bS5fdihfdm0uX3MoaXRlbS5jdXJyZW50TGFiZWwpKV0pXSk7fSksMSk6X3ZtLl9lKCksX3ZtLmZpbHRlcmFibGU/X2MoImlucHV0Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTpfdm0ucXVlcnksZXhwcmVzc2lvbjoicXVlcnkifV0scmVmOiJpbnB1dCIsc3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9faW5wdXQiLGNsYXNzOltfdm0uc2VsZWN0U2l6ZT8iaXMtIitfdm0uc2VsZWN0U2l6ZToiIl0sc3R5bGU6eyJmbGV4LWdyb3ciOiIxIix3aWR0aDpfdm0uaW5wdXRMZW5ndGgvKF92bS5pbnB1dFdpZHRoLTMyKSsiJSIsIm1heC13aWR0aCI6X3ZtLmlucHV0V2lkdGgtNDIrInB4In0sYXR0cnM6e3R5cGU6InRleHQiLGRpc2FibGVkOl92bS5zZWxlY3REaXNhYmxlZCxhdXRvY29tcGxldGU6X3ZtLmF1dG9Db21wbGV0ZXx8X3ZtLmF1dG9jb21wbGV0ZX0sZG9tUHJvcHM6e3ZhbHVlOl92bS5xdWVyeX0sb246e2ZvY3VzOl92bS5oYW5kbGVGb2N1cyxibHVyOmZ1bmN0aW9uIGJsdXIoJGV2ZW50KXtfdm0uc29mdEZvY3VzPWZhbHNlO30sa2V5dXA6X3ZtLm1hbmFnZVBsYWNlaG9sZGVyLGtleWRvd246W192bS5yZXNldElucHV0U3RhdGUsZnVuY3Rpb24oJGV2ZW50KXtpZighKCJidXR0b24iaW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLCJkb3duIiw0MCwkZXZlbnQua2V5LFsiRG93biIsIkFycm93RG93biJdKSl7cmV0dXJuIG51bGw7fSRldmVudC5wcmV2ZW50RGVmYXVsdCgpO192bS5uYXZpZ2F0ZU9wdGlvbnMoIm5leHQiKTt9LGZ1bmN0aW9uKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwidXAiLDM4LCRldmVudC5rZXksWyJVcCIsIkFycm93VXAiXSkpe3JldHVybiBudWxsO30kZXZlbnQucHJldmVudERlZmF1bHQoKTtfdm0ubmF2aWdhdGVPcHRpb25zKCJwcmV2Iik7fSxmdW5jdGlvbigkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsImVudGVyIiwxMywkZXZlbnQua2V5LCJFbnRlciIpKXtyZXR1cm4gbnVsbDt9JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIF92bS5zZWxlY3RPcHRpb24oJGV2ZW50KTt9LGZ1bmN0aW9uKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwiZXNjIiwyNywkZXZlbnQua2V5LFsiRXNjIiwiRXNjYXBlIl0pKXtyZXR1cm4gbnVsbDt9JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyRldmVudC5wcmV2ZW50RGVmYXVsdCgpO192bS52aXNpYmxlPWZhbHNlO30sZnVuY3Rpb24oJGV2ZW50KXtpZighKCJidXR0b24iaW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLCJkZWxldGUiLFs4LDQ2XSwkZXZlbnQua2V5LFsiQmFja3NwYWNlIiwiRGVsZXRlIiwiRGVsIl0pKXtyZXR1cm4gbnVsbDt9cmV0dXJuIF92bS5kZWxldGVQcmV2VGFnKCRldmVudCk7fSxmdW5jdGlvbigkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsInRhYiIsOSwkZXZlbnQua2V5LCJUYWIiKSl7cmV0dXJuIG51bGw7fV92bS52aXNpYmxlPWZhbHNlO31dLGNvbXBvc2l0aW9uc3RhcnQ6X3ZtLmhhbmRsZUNvbXBvc2l0aW9uLGNvbXBvc2l0aW9udXBkYXRlOl92bS5oYW5kbGVDb21wb3NpdGlvbixjb21wb3NpdGlvbmVuZDpfdm0uaGFuZGxlQ29tcG9zaXRpb24saW5wdXQ6W2Z1bmN0aW9uKCRldmVudCl7aWYoJGV2ZW50LnRhcmdldC5jb21wb3Npbmcpe3JldHVybjt9X3ZtLnF1ZXJ5PSRldmVudC50YXJnZXQudmFsdWU7fSxfdm0uZGVib3VuY2VkUXVlcnlDaGFuZ2VdfX0pOl92bS5fZSgpXSwxKTpfdm0uX2UoKSxfYygiZWwtaW5wdXQiLHtyZWY6InJlZmVyZW5jZSIsY2xhc3M6eyJpcy1mb2N1cyI6X3ZtLnZpc2libGV9LGF0dHJzOnt0eXBlOiJ0ZXh0IixwbGFjZWhvbGRlcjpfdm0uY3VycmVudFBsYWNlaG9sZGVyLG5hbWU6X3ZtLm5hbWUsaWQ6X3ZtLmlkLGF1dG9jb21wbGV0ZTpfdm0uYXV0b0NvbXBsZXRlfHxfdm0uYXV0b2NvbXBsZXRlLHNpemU6X3ZtLnNlbGVjdFNpemUsZGlzYWJsZWQ6X3ZtLnNlbGVjdERpc2FibGVkLHJlYWRvbmx5Ol92bS5yZWFkb25seSwidmFsaWRhdGUtZXZlbnQiOmZhbHNlLHRhYmluZGV4Ol92bS5tdWx0aXBsZSYmX3ZtLmZpbHRlcmFibGU/Ii0xIjpudWxsfSxvbjp7Zm9jdXM6X3ZtLmhhbmRsZUZvY3VzLGJsdXI6X3ZtLmhhbmRsZUJsdXJ9LG5hdGl2ZU9uOntrZXl1cDpmdW5jdGlvbiBrZXl1cCgkZXZlbnQpe3JldHVybiBfdm0uZGVib3VuY2VkT25JbnB1dENoYW5nZSgkZXZlbnQpO30sa2V5ZG93bjpbZnVuY3Rpb24oJGV2ZW50KXtpZighKCJidXR0b24iaW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLCJkb3duIiw0MCwkZXZlbnQua2V5LFsiRG93biIsIkFycm93RG93biJdKSl7cmV0dXJuIG51bGw7fSRldmVudC5zdG9wUHJvcGFnYXRpb24oKTskZXZlbnQucHJldmVudERlZmF1bHQoKTtfdm0ubmF2aWdhdGVPcHRpb25zKCJuZXh0Iik7fSxmdW5jdGlvbigkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsInVwIiwzOCwkZXZlbnQua2V5LFsiVXAiLCJBcnJvd1VwIl0pKXtyZXR1cm4gbnVsbDt9JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyRldmVudC5wcmV2ZW50RGVmYXVsdCgpO192bS5uYXZpZ2F0ZU9wdGlvbnMoInByZXYiKTt9LGZ1bmN0aW9uKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwiZW50ZXIiLDEzLCRldmVudC5rZXksIkVudGVyIikpe3JldHVybiBudWxsO30kZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gX3ZtLnNlbGVjdE9wdGlvbigkZXZlbnQpO30sZnVuY3Rpb24oJGV2ZW50KXtpZighKCJidXR0b24iaW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLCJlc2MiLDI3LCRldmVudC5rZXksWyJFc2MiLCJFc2NhcGUiXSkpe3JldHVybiBudWxsO30kZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7X3ZtLnZpc2libGU9ZmFsc2U7fSxmdW5jdGlvbigkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsInRhYiIsOSwkZXZlbnQua2V5LCJUYWIiKSl7cmV0dXJuIG51bGw7fV92bS52aXNpYmxlPWZhbHNlO31dLHBhc3RlOmZ1bmN0aW9uIHBhc3RlKCRldmVudCl7cmV0dXJuIF92bS5kZWJvdW5jZWRPbklucHV0Q2hhbmdlKCRldmVudCk7fSxtb3VzZWVudGVyOmZ1bmN0aW9uIG1vdXNlZW50ZXIoJGV2ZW50KXtfdm0uaW5wdXRIb3ZlcmluZz10cnVlO30sbW91c2VsZWF2ZTpmdW5jdGlvbiBtb3VzZWxlYXZlKCRldmVudCl7X3ZtLmlucHV0SG92ZXJpbmc9ZmFsc2U7fX0sbW9kZWw6e3ZhbHVlOl92bS5zZWxlY3RlZExhYmVsLGNhbGxiYWNrOmZ1bmN0aW9uIGNhbGxiYWNrKCQkdil7X3ZtLnNlbGVjdGVkTGFiZWw9JCR2O30sZXhwcmVzc2lvbjoic2VsZWN0ZWRMYWJlbCJ9fSxbX3ZtLiRzbG90cy5wcmVmaXg/X2MoInRlbXBsYXRlIix7c2xvdDoicHJlZml4In0sW192bS5fdCgicHJlZml4IildLDIpOl92bS5fZSgpLF9jKCJ0ZW1wbGF0ZSIse3Nsb3Q6InN1ZmZpeCJ9LFtfYygiaSIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiFfdm0uc2hvd0Nsb3NlLGV4cHJlc3Npb246IiFzaG93Q2xvc2UifV0sY2xhc3M6WyJlbC1zZWxlY3RfX2NhcmV0IiwiZWwtaW5wdXRfX2ljb24iLCJlbC1pY29uLSIrX3ZtLmljb25DbGFzc119KSxfdm0uc2hvd0Nsb3NlP19jKCJpIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9fY2FyZXQgZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1jaXJjbGUtY2xvc2UiLG9uOntjbGljazpfdm0uaGFuZGxlQ2xlYXJDbGlja319KTpfdm0uX2UoKV0pXSwyKSxfYygidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYmVmb3JlLWVudGVyIjpfdm0uaGFuZGxlTWVudUVudGVyLCJhZnRlci1sZWF2ZSI6X3ZtLmRvRGVzdHJveX19LFtfYygiZWwtc2VsZWN0LW1lbnUiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0udmlzaWJsZSYmX3ZtLmVtcHR5VGV4dCE9PWZhbHNlLGV4cHJlc3Npb246InZpc2libGUgJiYgZW1wdHlUZXh0ICE9PSBmYWxzZSJ9XSxyZWY6InBvcHBlciIsYXR0cnM6eyJhcHBlbmQtdG8tYm9keSI6X3ZtLnBvcHBlckFwcGVuZFRvQm9keX19LFtfYygiZWwtc2Nyb2xsYmFyIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLm9wdGlvbnMubGVuZ3RoPjAmJiFfdm0ubG9hZGluZyxleHByZXNzaW9uOiJvcHRpb25zLmxlbmd0aCA+IDAgJiYgIWxvYWRpbmcifV0scmVmOiJzY3JvbGxiYXIiLGNsYXNzOnsiaXMtZW1wdHkiOiFfdm0uYWxsb3dDcmVhdGUmJl92bS5xdWVyeSYmX3ZtLmZpbHRlcmVkT3B0aW9uc0NvdW50PT09MH0sYXR0cnM6e3RhZzoidWwiLCJ3cmFwLWNsYXNzIjoiZWwtc2VsZWN0LWRyb3Bkb3duX193cmFwIiwidmlldy1jbGFzcyI6ImVsLXNlbGVjdC1kcm9wZG93bl9fbGlzdCJ9fSxbX3ZtLnNob3dOZXdPcHRpb24/X2MoImVsLW9wdGlvbiIse2F0dHJzOnt2YWx1ZTpfdm0ucXVlcnksY3JlYXRlZDoiIn19KTpfdm0uX2UoKSxfdm0uX3QoImRlZmF1bHQiKV0sMiksX3ZtLmVtcHR5VGV4dCYmKCFfdm0uYWxsb3dDcmVhdGV8fF92bS5sb2FkaW5nfHxfdm0uYWxsb3dDcmVhdGUmJl92bS5vcHRpb25zLmxlbmd0aD09PTApP1tfdm0uJHNsb3RzLmVtcHR5P192bS5fdCgiZW1wdHkiKTpfYygicCIse3N0YXRpY0NsYXNzOiJlbC1zZWxlY3QtZHJvcGRvd25fX2VtcHR5In0sW192bS5fdigiXG4gICAgICAgICAgIitfdm0uX3MoX3ZtLmVtcHR5VGV4dCkrIlxuICAgICAgICAiKV0pXTpfdm0uX2UoKV0sMildLDEpXSwxKTt9O3ZhciBzZWxlY3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZTRhYWRlNl9zdGF0aWNSZW5kZXJGbnM9W107c2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMGU0YWFkZTZfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZTRhYWRlNiYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDY4Mjg3NDgmCnZhciBzZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9yZW5kZXI9ZnVuY3Rpb24gc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4Mjg3NDhfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc2VsZWN0LWRyb3Bkb3duIGVsLXBvcHBlciIsY2xhc3M6W3siaXMtbXVsdGlwbGUiOl92bS4kcGFyZW50Lm11bHRpcGxlfSxfdm0ucG9wcGVyQ2xhc3NdLHN0eWxlOnttaW5XaWR0aDpfdm0ubWluV2lkdGh9fSxbX3ZtLl90KCJkZWZhdWx0IildLDIpO307dmFyIHNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ODI4NzQ4X3N0YXRpY1JlbmRlckZucz1bXTtzZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QtZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2ODI4NzQ4JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFNlbGVjdERyb3Bkb3duJyxjb21wb25lbnROYW1lOidFbFNlbGVjdERyb3Bkb3duJyxtaXhpbnM6W3Z1ZV9wb3BwZXJfZGVmYXVsdC5hXSxwcm9wczp7cGxhY2VtZW50OntkZWZhdWx0Oidib3R0b20tc3RhcnQnfSxib3VuZGFyaWVzUGFkZGluZzp7ZGVmYXVsdDowfSxwb3BwZXJPcHRpb25zOntkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJue2dwdUFjY2VsZXJhdGlvbjpmYWxzZX07fX0sdmlzaWJsZUFycm93OntkZWZhdWx0OnRydWV9LGFwcGVuZFRvQm9keTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnttaW5XaWR0aDonJ307fSxjb21wdXRlZDp7cG9wcGVyQ2xhc3M6ZnVuY3Rpb24gcG9wcGVyQ2xhc3MoKXtyZXR1cm4gdGhpcy4kcGFyZW50LnBvcHBlckNsYXNzO319LHdhdGNoOnsnJHBhcmVudC5pbnB1dFdpZHRoJzpmdW5jdGlvbiAkcGFyZW50SW5wdXRXaWR0aCgpe3RoaXMubWluV2lkdGg9dGhpcy4kcGFyZW50LiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCsncHgnO319LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3ZhciBfdGhpcz10aGlzO3RoaXMucmVmZXJlbmNlRWxtPXRoaXMuJHBhcmVudC4kcmVmcy5yZWZlcmVuY2UuJGVsO3RoaXMuJHBhcmVudC5wb3BwZXJFbG09dGhpcy5wb3BwZXJFbG09dGhpcy4kZWw7dGhpcy4kb24oJ3VwZGF0ZVBvcHBlcicsZnVuY3Rpb24oKXtpZihfdGhpcy4kcGFyZW50LnZpc2libGUpX3RoaXMudXBkYXRlUG9wcGVyKCk7fSk7dGhpcy4kb24oJ2Rlc3Ryb3lQb3BwZXInLHRoaXMuZGVzdHJveVBvcHBlcik7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3NlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1zZWxlY3RfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBzZWxlY3RfZHJvcGRvd25fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ODI4NzQ4X3JlbmRlcixzZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHNlbGVjdF9kcm9wZG93bl9hcGk7fXNlbGVjdF9kcm9wZG93bl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LWRyb3Bkb3duLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzZWxlY3RfZHJvcGRvd249c2VsZWN0X2Ryb3Bkb3duX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdhNDRjNjQyJgp2YXIgb3B0aW9udnVlX3R5cGVfdGVtcGxhdGVfaWRfN2E0NGM2NDJfcmVuZGVyPWZ1bmN0aW9uIG9wdGlvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdhNDRjNjQyX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygibGkiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0udmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0iLGNsYXNzOntzZWxlY3RlZDpfdm0uaXRlbVNlbGVjdGVkLCJpcy1kaXNhYmxlZCI6X3ZtLmRpc2FibGVkfHxfdm0uZ3JvdXBEaXNhYmxlZHx8X3ZtLmxpbWl0UmVhY2hlZCxob3Zlcjpfdm0uaG92ZXJ9LG9uOnttb3VzZWVudGVyOl92bS5ob3Zlckl0ZW0sY2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIF92bS5zZWxlY3RPcHRpb25DbGljaygkZXZlbnQpO319fSxbX3ZtLl90KCJkZWZhdWx0IixbX2MoInNwYW4iLFtfdm0uX3YoX3ZtLl9zKF92bS5jdXJyZW50TGFiZWwpKV0pXSldLDIpO307dmFyIG9wdGlvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdhNDRjNjQyX3N0YXRpY1JlbmRlckZucz1bXTtvcHRpb252dWVfdHlwZV90ZW1wbGF0ZV9pZF83YTQ0YzY0Ml9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdhNDRjNjQyJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCnZhciBfdHlwZW9mPXR5cGVvZiBTeW1ib2w9PT0iZnVuY3Rpb24iJiZfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpPT09InN5bWJvbCI/ZnVuY3Rpb24ob2JqKXtyZXR1cm4gX3R5cGVvZjIob2JqKTt9OmZ1bmN0aW9uKG9iail7cmV0dXJuIG9iaiYmdHlwZW9mIFN5bWJvbD09PSJmdW5jdGlvbiImJm9iai5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmb2JqIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjpfdHlwZW9mMihvYmopO307Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBvcHRpb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e21peGluczpbZW1pdHRlcl9kZWZhdWx0LmFdLG5hbWU6J0VsT3B0aW9uJyxjb21wb25lbnROYW1lOidFbE9wdGlvbicsaW5qZWN0Olsnc2VsZWN0J10scHJvcHM6e3ZhbHVlOntyZXF1aXJlZDp0cnVlfSxsYWJlbDpbU3RyaW5nLE51bWJlcl0sY3JlYXRlZDpCb29sZWFuLGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntpbmRleDotMSxncm91cERpc2FibGVkOmZhbHNlLHZpc2libGU6dHJ1ZSxoaXRTdGF0ZTpmYWxzZSxob3ZlcjpmYWxzZX07fSxjb21wdXRlZDp7aXNPYmplY3Q6ZnVuY3Rpb24gaXNPYmplY3QoKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMudmFsdWUpLnRvTG93ZXJDYXNlKCk9PT0nW29iamVjdCBvYmplY3RdJzt9LGN1cnJlbnRMYWJlbDpmdW5jdGlvbiBjdXJyZW50TGFiZWwoKXtyZXR1cm4gdGhpcy5sYWJlbHx8KHRoaXMuaXNPYmplY3Q/Jyc6dGhpcy52YWx1ZSk7fSxjdXJyZW50VmFsdWU6ZnVuY3Rpb24gY3VycmVudFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV8fHRoaXMubGFiZWx8fCcnO30saXRlbVNlbGVjdGVkOmZ1bmN0aW9uIGl0ZW1TZWxlY3RlZCgpe2lmKCF0aGlzLnNlbGVjdC5tdWx0aXBsZSl7cmV0dXJuIHRoaXMuaXNFcXVhbCh0aGlzLnZhbHVlLHRoaXMuc2VsZWN0LnZhbHVlKTt9ZWxzZXtyZXR1cm4gdGhpcy5jb250YWlucyh0aGlzLnNlbGVjdC52YWx1ZSx0aGlzLnZhbHVlKTt9fSxsaW1pdFJlYWNoZWQ6ZnVuY3Rpb24gbGltaXRSZWFjaGVkKCl7aWYodGhpcy5zZWxlY3QubXVsdGlwbGUpe3JldHVybiF0aGlzLml0ZW1TZWxlY3RlZCYmKHRoaXMuc2VsZWN0LnZhbHVlfHxbXSkubGVuZ3RoPj10aGlzLnNlbGVjdC5tdWx0aXBsZUxpbWl0JiZ0aGlzLnNlbGVjdC5tdWx0aXBsZUxpbWl0PjA7fWVsc2V7cmV0dXJuIGZhbHNlO319fSx3YXRjaDp7Y3VycmVudExhYmVsOmZ1bmN0aW9uIGN1cnJlbnRMYWJlbCgpe2lmKCF0aGlzLmNyZWF0ZWQmJiF0aGlzLnNlbGVjdC5yZW1vdGUpdGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCdzZXRTZWxlY3RlZCcpO30sdmFsdWU6ZnVuY3Rpb24gdmFsdWUodmFsLG9sZFZhbCl7dmFyIF9zZWxlY3Q9dGhpcy5zZWxlY3QscmVtb3RlPV9zZWxlY3QucmVtb3RlLHZhbHVlS2V5PV9zZWxlY3QudmFsdWVLZXk7aWYoIXRoaXMuY3JlYXRlZCYmIXJlbW90ZSl7aWYodmFsdWVLZXkmJih0eXBlb2YgdmFsPT09J3VuZGVmaW5lZCc/J3VuZGVmaW5lZCc6X3R5cGVvZih2YWwpKT09PSdvYmplY3QnJiYodHlwZW9mIG9sZFZhbD09PSd1bmRlZmluZWQnPyd1bmRlZmluZWQnOl90eXBlb2Yob2xkVmFsKSk9PT0nb2JqZWN0JyYmdmFsW3ZhbHVlS2V5XT09PW9sZFZhbFt2YWx1ZUtleV0pe3JldHVybjt9dGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCdzZXRTZWxlY3RlZCcpO319fSxtZXRob2RzOntpc0VxdWFsOmZ1bmN0aW9uIGlzRXF1YWwoYSxiKXtpZighdGhpcy5pc09iamVjdCl7cmV0dXJuIGE9PT1iO31lbHNle3ZhciB2YWx1ZUtleT10aGlzLnNlbGVjdC52YWx1ZUtleTtyZXR1cm4gT2JqZWN0KHV0aWxfWyJnZXRWYWx1ZUJ5UGF0aCJdKShhLHZhbHVlS2V5KT09PU9iamVjdCh1dGlsX1siZ2V0VmFsdWVCeVBhdGgiXSkoYix2YWx1ZUtleSk7fX0sY29udGFpbnM6ZnVuY3Rpb24gY29udGFpbnMoKXt2YXIgYXJyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTpbXTt2YXIgdGFyZ2V0PWFyZ3VtZW50c1sxXTtpZighdGhpcy5pc09iamVjdCl7cmV0dXJuIGFyciYmYXJyLmluZGV4T2YodGFyZ2V0KT4tMTt9ZWxzZXt2YXIgdmFsdWVLZXk9dGhpcy5zZWxlY3QudmFsdWVLZXk7cmV0dXJuIGFyciYmYXJyLnNvbWUoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIE9iamVjdCh1dGlsX1siZ2V0VmFsdWVCeVBhdGgiXSkoaXRlbSx2YWx1ZUtleSk9PT1PYmplY3QodXRpbF9bImdldFZhbHVlQnlQYXRoIl0pKHRhcmdldCx2YWx1ZUtleSk7fSk7fX0saGFuZGxlR3JvdXBEaXNhYmxlZDpmdW5jdGlvbiBoYW5kbGVHcm91cERpc2FibGVkKHZhbCl7dGhpcy5ncm91cERpc2FibGVkPXZhbDt9LGhvdmVySXRlbTpmdW5jdGlvbiBob3Zlckl0ZW0oKXtpZighdGhpcy5kaXNhYmxlZCYmIXRoaXMuZ3JvdXBEaXNhYmxlZCl7dGhpcy5zZWxlY3QuaG92ZXJJbmRleD10aGlzLnNlbGVjdC5vcHRpb25zLmluZGV4T2YodGhpcyk7fX0sc2VsZWN0T3B0aW9uQ2xpY2s6ZnVuY3Rpb24gc2VsZWN0T3B0aW9uQ2xpY2soKXtpZih0aGlzLmRpc2FibGVkIT09dHJ1ZSYmdGhpcy5ncm91cERpc2FibGVkIT09dHJ1ZSl7dGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCdoYW5kbGVPcHRpb25DbGljaycsW3RoaXMsdHJ1ZV0pO319LHF1ZXJ5Q2hhbmdlOmZ1bmN0aW9uIHF1ZXJ5Q2hhbmdlKHF1ZXJ5KXt0aGlzLnZpc2libGU9bmV3IFJlZ0V4cChPYmplY3QodXRpbF9bImVzY2FwZVJlZ2V4cFN0cmluZyJdKShxdWVyeSksJ2knKS50ZXN0KHRoaXMuY3VycmVudExhYmVsKXx8dGhpcy5jcmVhdGVkO2lmKCF0aGlzLnZpc2libGUpe3RoaXMuc2VsZWN0LmZpbHRlcmVkT3B0aW9uc0NvdW50LS07fX19LGNyZWF0ZWQ6ZnVuY3Rpb24gY3JlYXRlZCgpe3RoaXMuc2VsZWN0Lm9wdGlvbnMucHVzaCh0aGlzKTt0aGlzLnNlbGVjdC5jYWNoZWRPcHRpb25zLnB1c2godGhpcyk7dGhpcy5zZWxlY3Qub3B0aW9uc0NvdW50Kys7dGhpcy5zZWxlY3QuZmlsdGVyZWRPcHRpb25zQ291bnQrKzt0aGlzLiRvbigncXVlcnlDaGFuZ2UnLHRoaXMucXVlcnlDaGFuZ2UpO3RoaXMuJG9uKCdoYW5kbGVHcm91cERpc2FibGVkJyx0aGlzLmhhbmRsZUdyb3VwRGlzYWJsZWQpO30sYmVmb3JlRGVzdHJveTpmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCl7dmFyIF9zZWxlY3QyPXRoaXMuc2VsZWN0LHNlbGVjdGVkPV9zZWxlY3QyLnNlbGVjdGVkLG11bHRpcGxlPV9zZWxlY3QyLm11bHRpcGxlO3ZhciBzZWxlY3RlZE9wdGlvbnM9bXVsdGlwbGU/c2VsZWN0ZWQ6W3NlbGVjdGVkXTt2YXIgaW5kZXg9dGhpcy5zZWxlY3QuY2FjaGVkT3B0aW9ucy5pbmRleE9mKHRoaXMpO3ZhciBzZWxlY3RlZEluZGV4PXNlbGVjdGVkT3B0aW9ucy5pbmRleE9mKHRoaXMpOy8vIGlmIG9wdGlvbiBpcyBub3Qgc2VsZWN0ZWQsIHJlbW92ZSBpdCBmcm9tIGNhY2hlCmlmKGluZGV4Pi0xJiZzZWxlY3RlZEluZGV4PDApe3RoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMuc3BsaWNlKGluZGV4LDEpO310aGlzLnNlbGVjdC5vbk9wdGlvbkRlc3Ryb3kodGhpcy5zZWxlY3Qub3B0aW9ucy5pbmRleE9mKHRoaXMpKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfb3B0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPW9wdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIG9wdGlvbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19vcHRpb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sb3B0aW9udnVlX3R5cGVfdGVtcGxhdGVfaWRfN2E0NGM2NDJfcmVuZGVyLG9wdGlvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdhNDRjNjQyX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgb3B0aW9uX2FwaTt9b3B0aW9uX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19vcHRpb249b3B0aW9uX2NvbXBvbmVudC5leHBvcnRzOy8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL3RhZyIKdmFyIHRhZ189X193ZWJwYWNrX3JlcXVpcmVfXygzMCk7dmFyIHRhZ19kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odGFnXyk7Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvdXRpbHMvcmVzaXplLWV2ZW50Igp2YXIgcmVzaXplX2V2ZW50Xz1fX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsvLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi9sb2NhbGUiCnZhciBsaWJfbG9jYWxlXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDExKTt2YXIgbGliX2xvY2FsZV9kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obGliX2xvY2FsZV8pOy8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbC1pbnRvLXZpZXciCnZhciBzY3JvbGxfaW50b192aWV3Xz1fX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTt2YXIgc2Nyb2xsX2ludG9fdmlld19kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc2Nyb2xsX2ludG9fdmlld18pOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9uYXZpZ2F0aW9uLW1peGluLmpzCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbmF2aWdhdGlvbl9taXhpbj17ZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2hvdmVyT3B0aW9uOi0xfTt9LGNvbXB1dGVkOntvcHRpb25zQWxsRGlzYWJsZWQ6ZnVuY3Rpb24gb3B0aW9uc0FsbERpc2FibGVkKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gb3B0aW9uLnZpc2libGU7fSkuZXZlcnkoZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gb3B0aW9uLmRpc2FibGVkO30pO319LHdhdGNoOntob3ZlckluZGV4OmZ1bmN0aW9uIGhvdmVySW5kZXgodmFsKXt2YXIgX3RoaXM9dGhpcztpZih0eXBlb2YgdmFsPT09J251bWJlcicmJnZhbD4tMSl7dGhpcy5ob3Zlck9wdGlvbj10aGlzLm9wdGlvbnNbdmFsXXx8e307fXRoaXMub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG9wdGlvbil7b3B0aW9uLmhvdmVyPV90aGlzLmhvdmVyT3B0aW9uPT09b3B0aW9uO30pO319LG1ldGhvZHM6e25hdmlnYXRlT3B0aW9uczpmdW5jdGlvbiBuYXZpZ2F0ZU9wdGlvbnMoZGlyZWN0aW9uKXt2YXIgX3RoaXMyPXRoaXM7aWYoIXRoaXMudmlzaWJsZSl7dGhpcy52aXNpYmxlPXRydWU7cmV0dXJuO31pZih0aGlzLm9wdGlvbnMubGVuZ3RoPT09MHx8dGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudD09PTApcmV0dXJuO2lmKCF0aGlzLm9wdGlvbnNBbGxEaXNhYmxlZCl7aWYoZGlyZWN0aW9uPT09J25leHQnKXt0aGlzLmhvdmVySW5kZXgrKztpZih0aGlzLmhvdmVySW5kZXg9PT10aGlzLm9wdGlvbnMubGVuZ3RoKXt0aGlzLmhvdmVySW5kZXg9MDt9fWVsc2UgaWYoZGlyZWN0aW9uPT09J3ByZXYnKXt0aGlzLmhvdmVySW5kZXgtLTtpZih0aGlzLmhvdmVySW5kZXg8MCl7dGhpcy5ob3ZlckluZGV4PXRoaXMub3B0aW9ucy5sZW5ndGgtMTt9fXZhciBvcHRpb249dGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF07aWYob3B0aW9uLmRpc2FibGVkPT09dHJ1ZXx8b3B0aW9uLmdyb3VwRGlzYWJsZWQ9PT10cnVlfHwhb3B0aW9uLnZpc2libGUpe3RoaXMubmF2aWdhdGVPcHRpb25zKGRpcmVjdGlvbik7fXRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIF90aGlzMi5zY3JvbGxUb09wdGlvbihfdGhpczIuaG92ZXJPcHRpb24pO30pO319fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bWl4aW5zOltlbWl0dGVyX2RlZmF1bHQuYSxsb2NhbGVfZGVmYXVsdC5hLGZvY3VzX2RlZmF1bHQoKSgncmVmZXJlbmNlJyksbmF2aWdhdGlvbl9taXhpbl0sbmFtZTonRWxTZWxlY3QnLGNvbXBvbmVudE5hbWU6J0VsU2VsZWN0JyxpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDonJ30sZWxGb3JtSXRlbTp7ZGVmYXVsdDonJ319LHByb3ZpZGU6ZnVuY3Rpb24gcHJvdmlkZSgpe3JldHVybnsnc2VsZWN0Jzp0aGlzfTt9LGNvbXB1dGVkOntfZWxGb3JtSXRlbVNpemU6ZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCl7cmV0dXJuKHRoaXMuZWxGb3JtSXRlbXx8e30pLmVsRm9ybUl0ZW1TaXplO30scmVhZG9ubHk6ZnVuY3Rpb24gcmVhZG9ubHkoKXtyZXR1cm4hdGhpcy5maWx0ZXJhYmxlfHx0aGlzLm11bHRpcGxlfHwhT2JqZWN0KHV0aWxfWyJpc0lFIl0pKCkmJiFPYmplY3QodXRpbF9bImlzRWRnZSJdKSgpJiYhdGhpcy52aXNpYmxlO30sc2hvd0Nsb3NlOmZ1bmN0aW9uIHNob3dDbG9zZSgpe3ZhciBoYXNWYWx1ZT10aGlzLm11bHRpcGxlP0FycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUubGVuZ3RoPjA6dGhpcy52YWx1ZSE9PXVuZGVmaW5lZCYmdGhpcy52YWx1ZSE9PW51bGwmJnRoaXMudmFsdWUhPT0nJzt2YXIgY3JpdGVyaWE9dGhpcy5jbGVhcmFibGUmJiF0aGlzLnNlbGVjdERpc2FibGVkJiZ0aGlzLmlucHV0SG92ZXJpbmcmJmhhc1ZhbHVlO3JldHVybiBjcml0ZXJpYTt9LGljb25DbGFzczpmdW5jdGlvbiBpY29uQ2xhc3MoKXtyZXR1cm4gdGhpcy5yZW1vdGUmJnRoaXMuZmlsdGVyYWJsZT8nJzp0aGlzLnZpc2libGU/J2Fycm93LXVwIGlzLXJldmVyc2UnOidhcnJvdy11cCc7fSxkZWJvdW5jZTpmdW5jdGlvbiBkZWJvdW5jZSgpe3JldHVybiB0aGlzLnJlbW90ZT8zMDA6MDt9LGVtcHR5VGV4dDpmdW5jdGlvbiBlbXB0eVRleHQoKXtpZih0aGlzLmxvYWRpbmcpe3JldHVybiB0aGlzLmxvYWRpbmdUZXh0fHx0aGlzLnQoJ2VsLnNlbGVjdC5sb2FkaW5nJyk7fWVsc2V7aWYodGhpcy5yZW1vdGUmJnRoaXMucXVlcnk9PT0nJyYmdGhpcy5vcHRpb25zLmxlbmd0aD09PTApcmV0dXJuIGZhbHNlO2lmKHRoaXMuZmlsdGVyYWJsZSYmdGhpcy5xdWVyeSYmdGhpcy5vcHRpb25zLmxlbmd0aD4wJiZ0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50PT09MCl7cmV0dXJuIHRoaXMubm9NYXRjaFRleHR8fHRoaXMudCgnZWwuc2VsZWN0Lm5vTWF0Y2gnKTt9aWYodGhpcy5vcHRpb25zLmxlbmd0aD09PTApe3JldHVybiB0aGlzLm5vRGF0YVRleHR8fHRoaXMudCgnZWwuc2VsZWN0Lm5vRGF0YScpO319cmV0dXJuIG51bGw7fSxzaG93TmV3T3B0aW9uOmZ1bmN0aW9uIHNob3dOZXdPcHRpb24oKXt2YXIgX3RoaXM9dGhpczt2YXIgaGFzRXhpc3RpbmdPcHRpb249dGhpcy5vcHRpb25zLmZpbHRlcihmdW5jdGlvbihvcHRpb24pe3JldHVybiFvcHRpb24uY3JlYXRlZDt9KS5zb21lKGZ1bmN0aW9uKG9wdGlvbil7cmV0dXJuIG9wdGlvbi5jdXJyZW50TGFiZWw9PT1fdGhpcy5xdWVyeTt9KTtyZXR1cm4gdGhpcy5maWx0ZXJhYmxlJiZ0aGlzLmFsbG93Q3JlYXRlJiZ0aGlzLnF1ZXJ5IT09JycmJiFoYXNFeGlzdGluZ09wdGlvbjt9LHNlbGVjdFNpemU6ZnVuY3Rpb24gc2VsZWN0U2l6ZSgpe3JldHVybiB0aGlzLnNpemV8fHRoaXMuX2VsRm9ybUl0ZW1TaXplfHwodGhpcy4kRUxFTUVOVHx8e30pLnNpemU7fSxzZWxlY3REaXNhYmxlZDpmdW5jdGlvbiBzZWxlY3REaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZDt9LGNvbGxhcHNlVGFnU2l6ZTpmdW5jdGlvbiBjb2xsYXBzZVRhZ1NpemUoKXtyZXR1cm5bJ3NtYWxsJywnbWluaSddLmluZGV4T2YodGhpcy5zZWxlY3RTaXplKT4tMT8nbWluaSc6J3NtYWxsJzt9fSxjb21wb25lbnRzOntFbElucHV0OmlucHV0X2RlZmF1bHQuYSxFbFNlbGVjdE1lbnU6c2VsZWN0X2Ryb3Bkb3duLEVsT3B0aW9uOnNyY19vcHRpb24sRWxUYWc6dGFnX2RlZmF1bHQuYSxFbFNjcm9sbGJhcjpzY3JvbGxiYXJfZGVmYXVsdC5hfSxkaXJlY3RpdmVzOntDbGlja291dHNpZGU6Y2xpY2tvdXRzaWRlX2RlZmF1bHQuYX0scHJvcHM6e25hbWU6U3RyaW5nLGlkOlN0cmluZyx2YWx1ZTp7cmVxdWlyZWQ6dHJ1ZX0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyxkZWZhdWx0OidvZmYnfSwvKiogQERlcHJlY2F0ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uICovYXV0b0NvbXBsZXRlOnt0eXBlOlN0cmluZyx2YWxpZGF0b3I6ZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCl7ZmFsc2UmJmZhbHNlO3JldHVybiB0cnVlO319LGF1dG9tYXRpY0Ryb3Bkb3duOkJvb2xlYW4sc2l6ZTpTdHJpbmcsZGlzYWJsZWQ6Qm9vbGVhbixjbGVhcmFibGU6Qm9vbGVhbixmaWx0ZXJhYmxlOkJvb2xlYW4sYWxsb3dDcmVhdGU6Qm9vbGVhbixsb2FkaW5nOkJvb2xlYW4scG9wcGVyQ2xhc3M6U3RyaW5nLHJlbW90ZTpCb29sZWFuLGxvYWRpbmdUZXh0OlN0cmluZyxub01hdGNoVGV4dDpTdHJpbmcsbm9EYXRhVGV4dDpTdHJpbmcscmVtb3RlTWV0aG9kOkZ1bmN0aW9uLGZpbHRlck1ldGhvZDpGdW5jdGlvbixtdWx0aXBsZTpCb29sZWFuLG11bHRpcGxlTGltaXQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm4gT2JqZWN0KGxpYl9sb2NhbGVfWyJ0Il0pKCdlbC5zZWxlY3QucGxhY2Vob2xkZXInKTt9fSxkZWZhdWx0Rmlyc3RPcHRpb246Qm9vbGVhbixyZXNlcnZlS2V5d29yZDpCb29sZWFuLHZhbHVlS2V5Ont0eXBlOlN0cmluZyxkZWZhdWx0Oid2YWx1ZSd9LGNvbGxhcHNlVGFnczpCb29sZWFuLHBvcHBlckFwcGVuZFRvQm9keTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntvcHRpb25zOltdLGNhY2hlZE9wdGlvbnM6W10sY3JlYXRlZExhYmVsOm51bGwsY3JlYXRlZFNlbGVjdGVkOmZhbHNlLHNlbGVjdGVkOnRoaXMubXVsdGlwbGU/W106e30saW5wdXRMZW5ndGg6MjAsaW5wdXRXaWR0aDowLGluaXRpYWxJbnB1dEhlaWdodDowLGNhY2hlZFBsYWNlSG9sZGVyOicnLG9wdGlvbnNDb3VudDowLGZpbHRlcmVkT3B0aW9uc0NvdW50OjAsdmlzaWJsZTpmYWxzZSxzb2Z0Rm9jdXM6ZmFsc2Usc2VsZWN0ZWRMYWJlbDonJyxob3ZlckluZGV4Oi0xLHF1ZXJ5OicnLHByZXZpb3VzUXVlcnk6bnVsbCxpbnB1dEhvdmVyaW5nOmZhbHNlLGN1cnJlbnRQbGFjZWhvbGRlcjonJyxtZW51VmlzaWJsZU9uRm9jdXM6ZmFsc2UsaXNPbkNvbXBvc2l0aW9uOmZhbHNlLGlzU2lsZW50Qmx1cjpmYWxzZX07fSx3YXRjaDp7c2VsZWN0RGlzYWJsZWQ6ZnVuY3Rpb24gc2VsZWN0RGlzYWJsZWQoKXt2YXIgX3RoaXMyPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtfdGhpczIucmVzZXRJbnB1dEhlaWdodCgpO30pO30scGxhY2Vob2xkZXI6ZnVuY3Rpb24gcGxhY2Vob2xkZXIodmFsKXt0aGlzLmNhY2hlZFBsYWNlSG9sZGVyPXRoaXMuY3VycmVudFBsYWNlaG9sZGVyPXZhbDt9LHZhbHVlOmZ1bmN0aW9uIHZhbHVlKHZhbCxvbGRWYWwpe2lmKHRoaXMubXVsdGlwbGUpe3RoaXMucmVzZXRJbnB1dEhlaWdodCgpO2lmKHZhbCYmdmFsLmxlbmd0aD4wfHx0aGlzLiRyZWZzLmlucHV0JiZ0aGlzLnF1ZXJ5IT09Jycpe3RoaXMuY3VycmVudFBsYWNlaG9sZGVyPScnO31lbHNle3RoaXMuY3VycmVudFBsYWNlaG9sZGVyPXRoaXMuY2FjaGVkUGxhY2VIb2xkZXI7fWlmKHRoaXMuZmlsdGVyYWJsZSYmIXRoaXMucmVzZXJ2ZUtleXdvcmQpe3RoaXMucXVlcnk9Jyc7dGhpcy5oYW5kbGVRdWVyeUNoYW5nZSh0aGlzLnF1ZXJ5KTt9fXRoaXMuc2V0U2VsZWN0ZWQoKTtpZih0aGlzLmZpbHRlcmFibGUmJiF0aGlzLm11bHRpcGxlKXt0aGlzLmlucHV0TGVuZ3RoPTIwO31pZighT2JqZWN0KHV0aWxfWyJ2YWx1ZUVxdWFscyJdKSh2YWwsb2xkVmFsKSl7dGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsJ2VsLmZvcm0uY2hhbmdlJyx2YWwpO319LHZpc2libGU6ZnVuY3Rpb24gdmlzaWJsZSh2YWwpe3ZhciBfdGhpczM9dGhpcztpZighdmFsKXt0aGlzLmJyb2FkY2FzdCgnRWxTZWxlY3REcm9wZG93bicsJ2Rlc3Ryb3lQb3BwZXInKTtpZih0aGlzLiRyZWZzLmlucHV0KXt0aGlzLiRyZWZzLmlucHV0LmJsdXIoKTt9dGhpcy5xdWVyeT0nJzt0aGlzLnByZXZpb3VzUXVlcnk9bnVsbDt0aGlzLnNlbGVjdGVkTGFiZWw9Jyc7dGhpcy5pbnB1dExlbmd0aD0yMDt0aGlzLm1lbnVWaXNpYmxlT25Gb2N1cz1mYWxzZTt0aGlzLnJlc2V0SG92ZXJJbmRleCgpO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aWYoX3RoaXMzLiRyZWZzLmlucHV0JiZfdGhpczMuJHJlZnMuaW5wdXQudmFsdWU9PT0nJyYmX3RoaXMzLnNlbGVjdGVkLmxlbmd0aD09PTApe190aGlzMy5jdXJyZW50UGxhY2Vob2xkZXI9X3RoaXMzLmNhY2hlZFBsYWNlSG9sZGVyO319KTtpZighdGhpcy5tdWx0aXBsZSl7aWYodGhpcy5zZWxlY3RlZCl7aWYodGhpcy5maWx0ZXJhYmxlJiZ0aGlzLmFsbG93Q3JlYXRlJiZ0aGlzLmNyZWF0ZWRTZWxlY3RlZCYmdGhpcy5jcmVhdGVkTGFiZWwpe3RoaXMuc2VsZWN0ZWRMYWJlbD10aGlzLmNyZWF0ZWRMYWJlbDt9ZWxzZXt0aGlzLnNlbGVjdGVkTGFiZWw9dGhpcy5zZWxlY3RlZC5jdXJyZW50TGFiZWw7fWlmKHRoaXMuZmlsdGVyYWJsZSl0aGlzLnF1ZXJ5PXRoaXMuc2VsZWN0ZWRMYWJlbDt9aWYodGhpcy5maWx0ZXJhYmxlKXt0aGlzLmN1cnJlbnRQbGFjZWhvbGRlcj10aGlzLmNhY2hlZFBsYWNlSG9sZGVyO319fWVsc2V7dGhpcy5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCd1cGRhdGVQb3BwZXInKTtpZih0aGlzLmZpbHRlcmFibGUpe3RoaXMucXVlcnk9dGhpcy5yZW1vdGU/Jyc6dGhpcy5zZWxlY3RlZExhYmVsO3RoaXMuaGFuZGxlUXVlcnlDaGFuZ2UodGhpcy5xdWVyeSk7aWYodGhpcy5tdWx0aXBsZSl7dGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpO31lbHNle2lmKCF0aGlzLnJlbW90ZSl7dGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uJywncXVlcnlDaGFuZ2UnLCcnKTt0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb25Hcm91cCcsJ3F1ZXJ5Q2hhbmdlJyk7fWlmKHRoaXMuc2VsZWN0ZWRMYWJlbCl7dGhpcy5jdXJyZW50UGxhY2Vob2xkZXI9dGhpcy5zZWxlY3RlZExhYmVsO3RoaXMuc2VsZWN0ZWRMYWJlbD0nJzt9fX19dGhpcy4kZW1pdCgndmlzaWJsZS1jaGFuZ2UnLHZhbCk7fSxvcHRpb25zOmZ1bmN0aW9uIG9wdGlvbnMoKXt2YXIgX3RoaXM0PXRoaXM7aWYodGhpcy4kaXNTZXJ2ZXIpcmV0dXJuO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7X3RoaXM0LmJyb2FkY2FzdCgnRWxTZWxlY3REcm9wZG93bicsJ3VwZGF0ZVBvcHBlcicpO30pO2lmKHRoaXMubXVsdGlwbGUpe3RoaXMucmVzZXRJbnB1dEhlaWdodCgpO312YXIgaW5wdXRzPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0Jyk7aWYoW10uaW5kZXhPZi5jYWxsKGlucHV0cyxkb2N1bWVudC5hY3RpdmVFbGVtZW50KT09PS0xKXt0aGlzLnNldFNlbGVjdGVkKCk7fWlmKHRoaXMuZGVmYXVsdEZpcnN0T3B0aW9uJiYodGhpcy5maWx0ZXJhYmxlfHx0aGlzLnJlbW90ZSkmJnRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQpe3RoaXMuY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb24oKTt9fX0sbWV0aG9kczp7aGFuZGxlQ29tcG9zaXRpb246ZnVuY3Rpb24gaGFuZGxlQ29tcG9zaXRpb24oZXZlbnQpe3ZhciBfdGhpczU9dGhpczt2YXIgdGV4dD1ldmVudC50YXJnZXQudmFsdWU7aWYoZXZlbnQudHlwZT09PSdjb21wb3NpdGlvbmVuZCcpe3RoaXMuaXNPbkNvbXBvc2l0aW9uPWZhbHNlO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKF8pe3JldHVybiBfdGhpczUuaGFuZGxlUXVlcnlDaGFuZ2UodGV4dCk7fSk7fWVsc2V7dmFyIGxhc3RDaGFyYWN0ZXI9dGV4dFt0ZXh0Lmxlbmd0aC0xXXx8Jyc7dGhpcy5pc09uQ29tcG9zaXRpb249IU9iamVjdChzaGFyZWRfWyJpc0tvcmVhbiJdKShsYXN0Q2hhcmFjdGVyKTt9fSxoYW5kbGVRdWVyeUNoYW5nZTpmdW5jdGlvbiBoYW5kbGVRdWVyeUNoYW5nZSh2YWwpe3ZhciBfdGhpczY9dGhpcztpZih0aGlzLnByZXZpb3VzUXVlcnk9PT12YWx8fHRoaXMuaXNPbkNvbXBvc2l0aW9uKXJldHVybjtpZih0aGlzLnByZXZpb3VzUXVlcnk9PT1udWxsJiYodHlwZW9mIHRoaXMuZmlsdGVyTWV0aG9kPT09J2Z1bmN0aW9uJ3x8dHlwZW9mIHRoaXMucmVtb3RlTWV0aG9kPT09J2Z1bmN0aW9uJykpe3RoaXMucHJldmlvdXNRdWVyeT12YWw7cmV0dXJuO310aGlzLnByZXZpb3VzUXVlcnk9dmFsO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aWYoX3RoaXM2LnZpc2libGUpX3RoaXM2LmJyb2FkY2FzdCgnRWxTZWxlY3REcm9wZG93bicsJ3VwZGF0ZVBvcHBlcicpO30pO3RoaXMuaG92ZXJJbmRleD0tMTtpZih0aGlzLm11bHRpcGxlJiZ0aGlzLmZpbHRlcmFibGUpe3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dmFyIGxlbmd0aD1fdGhpczYuJHJlZnMuaW5wdXQudmFsdWUubGVuZ3RoKjE1KzIwO190aGlzNi5pbnB1dExlbmd0aD1fdGhpczYuY29sbGFwc2VUYWdzP01hdGgubWluKDUwLGxlbmd0aCk6bGVuZ3RoO190aGlzNi5tYW5hZ2VQbGFjZWhvbGRlcigpO190aGlzNi5yZXNldElucHV0SGVpZ2h0KCk7fSk7fWlmKHRoaXMucmVtb3RlJiZ0eXBlb2YgdGhpcy5yZW1vdGVNZXRob2Q9PT0nZnVuY3Rpb24nKXt0aGlzLmhvdmVySW5kZXg9LTE7dGhpcy5yZW1vdGVNZXRob2QodmFsKTt9ZWxzZSBpZih0eXBlb2YgdGhpcy5maWx0ZXJNZXRob2Q9PT0nZnVuY3Rpb24nKXt0aGlzLmZpbHRlck1ldGhvZCh2YWwpO3RoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbkdyb3VwJywncXVlcnlDaGFuZ2UnKTt9ZWxzZXt0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50PXRoaXMub3B0aW9uc0NvdW50O3RoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbicsJ3F1ZXJ5Q2hhbmdlJyx2YWwpO3RoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbkdyb3VwJywncXVlcnlDaGFuZ2UnKTt9aWYodGhpcy5kZWZhdWx0Rmlyc3RPcHRpb24mJih0aGlzLmZpbHRlcmFibGV8fHRoaXMucmVtb3RlKSYmdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCl7dGhpcy5jaGVja0RlZmF1bHRGaXJzdE9wdGlvbigpO319LHNjcm9sbFRvT3B0aW9uOmZ1bmN0aW9uIHNjcm9sbFRvT3B0aW9uKG9wdGlvbil7dmFyIHRhcmdldD1BcnJheS5pc0FycmF5KG9wdGlvbikmJm9wdGlvblswXT9vcHRpb25bMF0uJGVsOm9wdGlvbi4kZWw7aWYodGhpcy4kcmVmcy5wb3BwZXImJnRhcmdldCl7dmFyIG1lbnU9dGhpcy4kcmVmcy5wb3BwZXIuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1zZWxlY3QtZHJvcGRvd25fX3dyYXAnKTtzY3JvbGxfaW50b192aWV3X2RlZmF1bHQoKShtZW51LHRhcmdldCk7fXRoaXMuJHJlZnMuc2Nyb2xsYmFyJiZ0aGlzLiRyZWZzLnNjcm9sbGJhci5oYW5kbGVTY3JvbGwoKTt9LGhhbmRsZU1lbnVFbnRlcjpmdW5jdGlvbiBoYW5kbGVNZW51RW50ZXIoKXt2YXIgX3RoaXM3PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXM3LnNjcm9sbFRvT3B0aW9uKF90aGlzNy5zZWxlY3RlZCk7fSk7fSxlbWl0Q2hhbmdlOmZ1bmN0aW9uIGVtaXRDaGFuZ2UodmFsKXtpZighT2JqZWN0KHV0aWxfWyJ2YWx1ZUVxdWFscyJdKSh0aGlzLnZhbHVlLHZhbCkpe3RoaXMuJGVtaXQoJ2NoYW5nZScsdmFsKTt9fSxnZXRPcHRpb246ZnVuY3Rpb24gZ2V0T3B0aW9uKHZhbHVlKXt2YXIgb3B0aW9uPXZvaWQgMDt2YXIgaXNPYmplY3Q9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS50b0xvd2VyQ2FzZSgpPT09J1tvYmplY3Qgb2JqZWN0XSc7dmFyIGlzTnVsbD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnRvTG93ZXJDYXNlKCk9PT0nW29iamVjdCBudWxsXSc7dmFyIGlzVW5kZWZpbmVkPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkudG9Mb3dlckNhc2UoKT09PSdbb2JqZWN0IHVuZGVmaW5lZF0nO2Zvcih2YXIgaT10aGlzLmNhY2hlZE9wdGlvbnMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBjYWNoZWRPcHRpb249dGhpcy5jYWNoZWRPcHRpb25zW2ldO3ZhciBpc0VxdWFsPWlzT2JqZWN0P09iamVjdCh1dGlsX1siZ2V0VmFsdWVCeVBhdGgiXSkoY2FjaGVkT3B0aW9uLnZhbHVlLHRoaXMudmFsdWVLZXkpPT09T2JqZWN0KHV0aWxfWyJnZXRWYWx1ZUJ5UGF0aCJdKSh2YWx1ZSx0aGlzLnZhbHVlS2V5KTpjYWNoZWRPcHRpb24udmFsdWU9PT12YWx1ZTtpZihpc0VxdWFsKXtvcHRpb249Y2FjaGVkT3B0aW9uO2JyZWFrO319aWYob3B0aW9uKXJldHVybiBvcHRpb247dmFyIGxhYmVsPSFpc09iamVjdCYmIWlzTnVsbCYmIWlzVW5kZWZpbmVkP3ZhbHVlOicnO3ZhciBuZXdPcHRpb249e3ZhbHVlOnZhbHVlLGN1cnJlbnRMYWJlbDpsYWJlbH07aWYodGhpcy5tdWx0aXBsZSl7bmV3T3B0aW9uLmhpdFN0YXRlPWZhbHNlO31yZXR1cm4gbmV3T3B0aW9uO30sc2V0U2VsZWN0ZWQ6ZnVuY3Rpb24gc2V0U2VsZWN0ZWQoKXt2YXIgX3RoaXM4PXRoaXM7aWYoIXRoaXMubXVsdGlwbGUpe3ZhciBvcHRpb249dGhpcy5nZXRPcHRpb24odGhpcy52YWx1ZSk7aWYob3B0aW9uLmNyZWF0ZWQpe3RoaXMuY3JlYXRlZExhYmVsPW9wdGlvbi5jdXJyZW50TGFiZWw7dGhpcy5jcmVhdGVkU2VsZWN0ZWQ9dHJ1ZTt9ZWxzZXt0aGlzLmNyZWF0ZWRTZWxlY3RlZD1mYWxzZTt9dGhpcy5zZWxlY3RlZExhYmVsPW9wdGlvbi5jdXJyZW50TGFiZWw7dGhpcy5zZWxlY3RlZD1vcHRpb247aWYodGhpcy5maWx0ZXJhYmxlKXRoaXMucXVlcnk9dGhpcy5zZWxlY3RlZExhYmVsO3JldHVybjt9dmFyIHJlc3VsdD1bXTtpZihBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKXt0aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24odmFsdWUpe3Jlc3VsdC5wdXNoKF90aGlzOC5nZXRPcHRpb24odmFsdWUpKTt9KTt9dGhpcy5zZWxlY3RlZD1yZXN1bHQ7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtfdGhpczgucmVzZXRJbnB1dEhlaWdodCgpO30pO30saGFuZGxlRm9jdXM6ZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpe2lmKCF0aGlzLnNvZnRGb2N1cyl7aWYodGhpcy5hdXRvbWF0aWNEcm9wZG93bnx8dGhpcy5maWx0ZXJhYmxlKXt0aGlzLnZpc2libGU9dHJ1ZTtpZih0aGlzLmZpbHRlcmFibGUpe3RoaXMubWVudVZpc2libGVPbkZvY3VzPXRydWU7fX10aGlzLiRlbWl0KCdmb2N1cycsZXZlbnQpO31lbHNle3RoaXMuc29mdEZvY3VzPWZhbHNlO319LGJsdXI6ZnVuY3Rpb24gYmx1cigpe3RoaXMudmlzaWJsZT1mYWxzZTt0aGlzLiRyZWZzLnJlZmVyZW5jZS5ibHVyKCk7fSxoYW5kbGVCbHVyOmZ1bmN0aW9uIGhhbmRsZUJsdXIoZXZlbnQpe3ZhciBfdGhpczk9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoX3RoaXM5LmlzU2lsZW50Qmx1cil7X3RoaXM5LmlzU2lsZW50Qmx1cj1mYWxzZTt9ZWxzZXtfdGhpczkuJGVtaXQoJ2JsdXInLGV2ZW50KTt9fSw1MCk7dGhpcy5zb2Z0Rm9jdXM9ZmFsc2U7fSxoYW5kbGVDbGVhckNsaWNrOmZ1bmN0aW9uIGhhbmRsZUNsZWFyQ2xpY2soZXZlbnQpe3RoaXMuZGVsZXRlU2VsZWN0ZWQoZXZlbnQpO30sZG9EZXN0cm95OmZ1bmN0aW9uIGRvRGVzdHJveSgpe3RoaXMuJHJlZnMucG9wcGVyJiZ0aGlzLiRyZWZzLnBvcHBlci5kb0Rlc3Ryb3koKTt9LGhhbmRsZUNsb3NlOmZ1bmN0aW9uIGhhbmRsZUNsb3NlKCl7dGhpcy52aXNpYmxlPWZhbHNlO30sdG9nZ2xlTGFzdE9wdGlvbkhpdFN0YXRlOmZ1bmN0aW9uIHRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZShoaXQpe2lmKCFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpKXJldHVybjt2YXIgb3B0aW9uPXRoaXMuc2VsZWN0ZWRbdGhpcy5zZWxlY3RlZC5sZW5ndGgtMV07aWYoIW9wdGlvbilyZXR1cm47aWYoaGl0PT09dHJ1ZXx8aGl0PT09ZmFsc2Upe29wdGlvbi5oaXRTdGF0ZT1oaXQ7cmV0dXJuIGhpdDt9b3B0aW9uLmhpdFN0YXRlPSFvcHRpb24uaGl0U3RhdGU7cmV0dXJuIG9wdGlvbi5oaXRTdGF0ZTt9LGRlbGV0ZVByZXZUYWc6ZnVuY3Rpb24gZGVsZXRlUHJldlRhZyhlKXtpZihlLnRhcmdldC52YWx1ZS5sZW5ndGg8PTAmJiF0aGlzLnRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZSgpKXt2YXIgdmFsdWU9dGhpcy52YWx1ZS5zbGljZSgpO3ZhbHVlLnBvcCgpO3RoaXMuJGVtaXQoJ2lucHV0Jyx2YWx1ZSk7dGhpcy5lbWl0Q2hhbmdlKHZhbHVlKTt9fSxtYW5hZ2VQbGFjZWhvbGRlcjpmdW5jdGlvbiBtYW5hZ2VQbGFjZWhvbGRlcigpe2lmKHRoaXMuY3VycmVudFBsYWNlaG9sZGVyIT09Jycpe3RoaXMuY3VycmVudFBsYWNlaG9sZGVyPXRoaXMuJHJlZnMuaW5wdXQudmFsdWU/Jyc6dGhpcy5jYWNoZWRQbGFjZUhvbGRlcjt9fSxyZXNldElucHV0U3RhdGU6ZnVuY3Rpb24gcmVzZXRJbnB1dFN0YXRlKGUpe2lmKGUua2V5Q29kZSE9PTgpdGhpcy50b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGUoZmFsc2UpO3RoaXMuaW5wdXRMZW5ndGg9dGhpcy4kcmVmcy5pbnB1dC52YWx1ZS5sZW5ndGgqMTUrMjA7dGhpcy5yZXNldElucHV0SGVpZ2h0KCk7fSxyZXNldElucHV0SGVpZ2h0OmZ1bmN0aW9uIHJlc2V0SW5wdXRIZWlnaHQoKXt2YXIgX3RoaXMxMD10aGlzO2lmKHRoaXMuY29sbGFwc2VUYWdzJiYhdGhpcy5maWx0ZXJhYmxlKXJldHVybjt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lmKCFfdGhpczEwLiRyZWZzLnJlZmVyZW5jZSlyZXR1cm47dmFyIGlucHV0Q2hpbGROb2Rlcz1fdGhpczEwLiRyZWZzLnJlZmVyZW5jZS4kZWwuY2hpbGROb2Rlczt2YXIgaW5wdXQ9W10uZmlsdGVyLmNhbGwoaW5wdXRDaGlsZE5vZGVzLGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBpdGVtLnRhZ05hbWU9PT0nSU5QVVQnO30pWzBdO3ZhciB0YWdzPV90aGlzMTAuJHJlZnMudGFnczt2YXIgc2l6ZUluTWFwPV90aGlzMTAuaW5pdGlhbElucHV0SGVpZ2h0fHw0MDtpbnB1dC5zdHlsZS5oZWlnaHQ9X3RoaXMxMC5zZWxlY3RlZC5sZW5ndGg9PT0wP3NpemVJbk1hcCsncHgnOk1hdGgubWF4KHRhZ3M/dGFncy5jbGllbnRIZWlnaHQrKHRhZ3MuY2xpZW50SGVpZ2h0PnNpemVJbk1hcD82OjApOjAsc2l6ZUluTWFwKSsncHgnO2lmKF90aGlzMTAudmlzaWJsZSYmX3RoaXMxMC5lbXB0eVRleHQhPT1mYWxzZSl7X3RoaXMxMC5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCd1cGRhdGVQb3BwZXInKTt9fSk7fSxyZXNldEhvdmVySW5kZXg6ZnVuY3Rpb24gcmVzZXRIb3ZlckluZGV4KCl7dmFyIF90aGlzMTE9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIV90aGlzMTEubXVsdGlwbGUpe190aGlzMTEuaG92ZXJJbmRleD1fdGhpczExLm9wdGlvbnMuaW5kZXhPZihfdGhpczExLnNlbGVjdGVkKTt9ZWxzZXtpZihfdGhpczExLnNlbGVjdGVkLmxlbmd0aD4wKXtfdGhpczExLmhvdmVySW5kZXg9TWF0aC5taW4uYXBwbHkobnVsbCxfdGhpczExLnNlbGVjdGVkLm1hcChmdW5jdGlvbihpdGVtKXtyZXR1cm4gX3RoaXMxMS5vcHRpb25zLmluZGV4T2YoaXRlbSk7fSkpO31lbHNle190aGlzMTEuaG92ZXJJbmRleD0tMTt9fX0sMzAwKTt9LGhhbmRsZU9wdGlvblNlbGVjdDpmdW5jdGlvbiBoYW5kbGVPcHRpb25TZWxlY3Qob3B0aW9uLGJ5Q2xpY2spe3ZhciBfdGhpczEyPXRoaXM7aWYodGhpcy5tdWx0aXBsZSl7dmFyIHZhbHVlPSh0aGlzLnZhbHVlfHxbXSkuc2xpY2UoKTt2YXIgb3B0aW9uSW5kZXg9dGhpcy5nZXRWYWx1ZUluZGV4KHZhbHVlLG9wdGlvbi52YWx1ZSk7aWYob3B0aW9uSW5kZXg+LTEpe3ZhbHVlLnNwbGljZShvcHRpb25JbmRleCwxKTt9ZWxzZSBpZih0aGlzLm11bHRpcGxlTGltaXQ8PTB8fHZhbHVlLmxlbmd0aDx0aGlzLm11bHRpcGxlTGltaXQpe3ZhbHVlLnB1c2gob3B0aW9uLnZhbHVlKTt9dGhpcy4kZW1pdCgnaW5wdXQnLHZhbHVlKTt0aGlzLmVtaXRDaGFuZ2UodmFsdWUpO2lmKG9wdGlvbi5jcmVhdGVkKXt0aGlzLnF1ZXJ5PScnO3RoaXMuaGFuZGxlUXVlcnlDaGFuZ2UoJycpO3RoaXMuaW5wdXRMZW5ndGg9MjA7fWlmKHRoaXMuZmlsdGVyYWJsZSl0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCk7fWVsc2V7dGhpcy4kZW1pdCgnaW5wdXQnLG9wdGlvbi52YWx1ZSk7dGhpcy5lbWl0Q2hhbmdlKG9wdGlvbi52YWx1ZSk7dGhpcy52aXNpYmxlPWZhbHNlO310aGlzLmlzU2lsZW50Qmx1cj1ieUNsaWNrO3RoaXMuc2V0U29mdEZvY3VzKCk7aWYodGhpcy52aXNpYmxlKXJldHVybjt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe190aGlzMTIuc2Nyb2xsVG9PcHRpb24ob3B0aW9uKTt9KTt9LHNldFNvZnRGb2N1czpmdW5jdGlvbiBzZXRTb2Z0Rm9jdXMoKXt0aGlzLnNvZnRGb2N1cz10cnVlO3ZhciBpbnB1dD10aGlzLiRyZWZzLmlucHV0fHx0aGlzLiRyZWZzLnJlZmVyZW5jZTtpZihpbnB1dCl7aW5wdXQuZm9jdXMoKTt9fSxnZXRWYWx1ZUluZGV4OmZ1bmN0aW9uIGdldFZhbHVlSW5kZXgoKXt2YXIgYXJyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTpbXTt2YXIgdmFsdWU9YXJndW1lbnRzWzFdO3ZhciBpc09iamVjdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnRvTG93ZXJDYXNlKCk9PT0nW29iamVjdCBvYmplY3RdJztpZighaXNPYmplY3Qpe3JldHVybiBhcnIuaW5kZXhPZih2YWx1ZSk7fWVsc2V7dmFyIHZhbHVlS2V5PXRoaXMudmFsdWVLZXk7dmFyIGluZGV4PS0xO2Fyci5zb21lKGZ1bmN0aW9uKGl0ZW0saSl7aWYoT2JqZWN0KHV0aWxfWyJnZXRWYWx1ZUJ5UGF0aCJdKShpdGVtLHZhbHVlS2V5KT09PU9iamVjdCh1dGlsX1siZ2V0VmFsdWVCeVBhdGgiXSkodmFsdWUsdmFsdWVLZXkpKXtpbmRleD1pO3JldHVybiB0cnVlO31yZXR1cm4gZmFsc2U7fSk7cmV0dXJuIGluZGV4O319LHRvZ2dsZU1lbnU6ZnVuY3Rpb24gdG9nZ2xlTWVudSgpe2lmKCF0aGlzLnNlbGVjdERpc2FibGVkKXtpZih0aGlzLm1lbnVWaXNpYmxlT25Gb2N1cyl7dGhpcy5tZW51VmlzaWJsZU9uRm9jdXM9ZmFsc2U7fWVsc2V7dGhpcy52aXNpYmxlPSF0aGlzLnZpc2libGU7fWlmKHRoaXMudmlzaWJsZSl7KHRoaXMuJHJlZnMuaW5wdXR8fHRoaXMuJHJlZnMucmVmZXJlbmNlKS5mb2N1cygpO319fSxzZWxlY3RPcHRpb246ZnVuY3Rpb24gc2VsZWN0T3B0aW9uKCl7aWYoIXRoaXMudmlzaWJsZSl7dGhpcy50b2dnbGVNZW51KCk7fWVsc2V7aWYodGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0pe3RoaXMuaGFuZGxlT3B0aW9uU2VsZWN0KHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdKTt9fX0sZGVsZXRlU2VsZWN0ZWQ6ZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoZXZlbnQpe2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciB2YWx1ZT10aGlzLm11bHRpcGxlP1tdOicnO3RoaXMuJGVtaXQoJ2lucHV0Jyx2YWx1ZSk7dGhpcy5lbWl0Q2hhbmdlKHZhbHVlKTt0aGlzLnZpc2libGU9ZmFsc2U7dGhpcy4kZW1pdCgnY2xlYXInKTt9LGRlbGV0ZVRhZzpmdW5jdGlvbiBkZWxldGVUYWcoZXZlbnQsdGFnKXt2YXIgaW5kZXg9dGhpcy5zZWxlY3RlZC5pbmRleE9mKHRhZyk7aWYoaW5kZXg+LTEmJiF0aGlzLnNlbGVjdERpc2FibGVkKXt2YXIgdmFsdWU9dGhpcy52YWx1ZS5zbGljZSgpO3ZhbHVlLnNwbGljZShpbmRleCwxKTt0aGlzLiRlbWl0KCdpbnB1dCcsdmFsdWUpO3RoaXMuZW1pdENoYW5nZSh2YWx1ZSk7dGhpcy4kZW1pdCgncmVtb3ZlLXRhZycsdGFnLnZhbHVlKTt9ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fSxvbklucHV0Q2hhbmdlOmZ1bmN0aW9uIG9uSW5wdXRDaGFuZ2UoKXtpZih0aGlzLmZpbHRlcmFibGUmJnRoaXMucXVlcnkhPT10aGlzLnNlbGVjdGVkTGFiZWwpe3RoaXMucXVlcnk9dGhpcy5zZWxlY3RlZExhYmVsO3RoaXMuaGFuZGxlUXVlcnlDaGFuZ2UodGhpcy5xdWVyeSk7fX0sb25PcHRpb25EZXN0cm95OmZ1bmN0aW9uIG9uT3B0aW9uRGVzdHJveShpbmRleCl7aWYoaW5kZXg+LTEpe3RoaXMub3B0aW9uc0NvdW50LS07dGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudC0tO3RoaXMub3B0aW9ucy5zcGxpY2UoaW5kZXgsMSk7fX0scmVzZXRJbnB1dFdpZHRoOmZ1bmN0aW9uIHJlc2V0SW5wdXRXaWR0aCgpe3RoaXMuaW5wdXRXaWR0aD10aGlzLiRyZWZzLnJlZmVyZW5jZS4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7fSxoYW5kbGVSZXNpemU6ZnVuY3Rpb24gaGFuZGxlUmVzaXplKCl7dGhpcy5yZXNldElucHV0V2lkdGgoKTtpZih0aGlzLm11bHRpcGxlKXRoaXMucmVzZXRJbnB1dEhlaWdodCgpO30sY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb246ZnVuY3Rpb24gY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb24oKXt0aGlzLmhvdmVySW5kZXg9LTE7Ly8gaGlnaGxpZ2h0IHRoZSBjcmVhdGVkIG9wdGlvbgp2YXIgaGFzQ3JlYXRlZD1mYWxzZTtmb3IodmFyIGk9dGhpcy5vcHRpb25zLmxlbmd0aC0xO2k+PTA7aS0tKXtpZih0aGlzLm9wdGlvbnNbaV0uY3JlYXRlZCl7aGFzQ3JlYXRlZD10cnVlO3RoaXMuaG92ZXJJbmRleD1pO2JyZWFrO319aWYoaGFzQ3JlYXRlZClyZXR1cm47Zm9yKHZhciBfaT0wO19pIT09dGhpcy5vcHRpb25zLmxlbmd0aDsrK19pKXt2YXIgb3B0aW9uPXRoaXMub3B0aW9uc1tfaV07aWYodGhpcy5xdWVyeSl7Ly8gaGlnaGxpZ2h0IGZpcnN0IG9wdGlvbnMgdGhhdCBwYXNzZXMgdGhlIGZpbHRlcgppZighb3B0aW9uLmRpc2FibGVkJiYhb3B0aW9uLmdyb3VwRGlzYWJsZWQmJm9wdGlvbi52aXNpYmxlKXt0aGlzLmhvdmVySW5kZXg9X2k7YnJlYWs7fX1lbHNley8vIGhpZ2hsaWdodCBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uCmlmKG9wdGlvbi5pdGVtU2VsZWN0ZWQpe3RoaXMuaG92ZXJJbmRleD1faTticmVhazt9fX19LGdldFZhbHVlS2V5OmZ1bmN0aW9uIGdldFZhbHVlS2V5KGl0ZW0pe2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVtLnZhbHVlKS50b0xvd2VyQ2FzZSgpIT09J1tvYmplY3Qgb2JqZWN0XScpe3JldHVybiBpdGVtLnZhbHVlO31lbHNle3JldHVybiBPYmplY3QodXRpbF9bImdldFZhbHVlQnlQYXRoIl0pKGl0ZW0udmFsdWUsdGhpcy52YWx1ZUtleSk7fX19LGNyZWF0ZWQ6ZnVuY3Rpb24gY3JlYXRlZCgpe3ZhciBfdGhpczEzPXRoaXM7dGhpcy5jYWNoZWRQbGFjZUhvbGRlcj10aGlzLmN1cnJlbnRQbGFjZWhvbGRlcj10aGlzLnBsYWNlaG9sZGVyO2lmKHRoaXMubXVsdGlwbGUmJiFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKXt0aGlzLiRlbWl0KCdpbnB1dCcsW10pO31pZighdGhpcy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSl7dGhpcy4kZW1pdCgnaW5wdXQnLCcnKTt9dGhpcy5kZWJvdW5jZWRPbklucHV0Q2hhbmdlPWRlYm91bmNlX2RlZmF1bHQoKSh0aGlzLmRlYm91bmNlLGZ1bmN0aW9uKCl7X3RoaXMxMy5vbklucHV0Q2hhbmdlKCk7fSk7dGhpcy5kZWJvdW5jZWRRdWVyeUNoYW5nZT1kZWJvdW5jZV9kZWZhdWx0KCkodGhpcy5kZWJvdW5jZSxmdW5jdGlvbihlKXtfdGhpczEzLmhhbmRsZVF1ZXJ5Q2hhbmdlKGUudGFyZ2V0LnZhbHVlKTt9KTt0aGlzLiRvbignaGFuZGxlT3B0aW9uQ2xpY2snLHRoaXMuaGFuZGxlT3B0aW9uU2VsZWN0KTt0aGlzLiRvbignc2V0U2VsZWN0ZWQnLHRoaXMuc2V0U2VsZWN0ZWQpO30sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dmFyIF90aGlzMTQ9dGhpcztpZih0aGlzLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmxlbmd0aD4wKXt0aGlzLmN1cnJlbnRQbGFjZWhvbGRlcj0nJzt9T2JqZWN0KHJlc2l6ZV9ldmVudF9bImFkZFJlc2l6ZUxpc3RlbmVyIl0pKHRoaXMuJGVsLHRoaXMuaGFuZGxlUmVzaXplKTt2YXIgcmVmZXJlbmNlPXRoaXMuJHJlZnMucmVmZXJlbmNlO2lmKHJlZmVyZW5jZSYmcmVmZXJlbmNlLiRlbCl7dmFyIHNpemVNYXA9e21lZGl1bTozNixzbWFsbDozMixtaW5pOjI4fTt2YXIgaW5wdXQ9cmVmZXJlbmNlLiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO3RoaXMuaW5pdGlhbElucHV0SGVpZ2h0PWlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodHx8c2l6ZU1hcFt0aGlzLnNlbGVjdFNpemVdO31pZih0aGlzLnJlbW90ZSYmdGhpcy5tdWx0aXBsZSl7dGhpcy5yZXNldElucHV0SGVpZ2h0KCk7fXRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aWYocmVmZXJlbmNlJiZyZWZlcmVuY2UuJGVsKXtfdGhpczE0LmlucHV0V2lkdGg9cmVmZXJlbmNlLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDt9fSk7dGhpcy5zZXRTZWxlY3RlZCgpO30sYmVmb3JlRGVzdHJveTpmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCl7aWYodGhpcy4kZWwmJnRoaXMuaGFuZGxlUmVzaXplKU9iamVjdChyZXNpemVfZXZlbnRfWyJyZW1vdmVSZXNpemVMaXN0ZW5lciJdKSh0aGlzLiRlbCx0aGlzLmhhbmRsZVJlc2l6ZSk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3NlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1zZWxlY3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBzZWxlY3RfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHNlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBlNGFhZGU2X3JlbmRlcixzZWxlY3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZTRhYWRlNl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHNlbGVjdF9hcGk7fXNlbGVjdF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfc2VsZWN0PXNlbGVjdF9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3NyY19zZWxlY3QuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoc3JjX3NlbGVjdC5uYW1lLHNyY19zZWxlY3QpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19zZWxlY3Q9c3JjX3NlbGVjdDsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL29wdGlvbi9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3NyY19vcHRpb24uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoc3JjX29wdGlvbi5uYW1lLHNyY19vcHRpb24pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19vcHRpb249c3JjX29wdGlvbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02Njg1ZTVkZSYKdmFyIG9wdGlvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY2ODVlNWRlX3JlbmRlcj1mdW5jdGlvbiBvcHRpb25fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF82Njg1ZTVkZV9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInVsIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtc2VsZWN0LWdyb3VwX193cmFwIn0sW19jKCJsaSIse3N0YXRpY0NsYXNzOiJlbC1zZWxlY3QtZ3JvdXBfX3RpdGxlIn0sW192bS5fdihfdm0uX3MoX3ZtLmxhYmVsKSldKSxfYygibGkiLFtfYygidWwiLHtzdGF0aWNDbGFzczoiZWwtc2VsZWN0LWdyb3VwIn0sW192bS5fdCgiZGVmYXVsdCIpXSwyKV0pXSk7fTt2YXIgb3B0aW9uX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjY4NWU1ZGVfc3RhdGljUmVuZGVyRm5zPVtdO29wdGlvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY2ODVlNWRlX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjY4NWU1ZGUmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBvcHRpb25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e21peGluczpbZW1pdHRlcl9kZWZhdWx0LmFdLG5hbWU6J0VsT3B0aW9uR3JvdXAnLGNvbXBvbmVudE5hbWU6J0VsT3B0aW9uR3JvdXAnLHByb3BzOntsYWJlbDpTdHJpbmcsZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3Zpc2libGU6dHJ1ZX07fSx3YXRjaDp7ZGlzYWJsZWQ6ZnVuY3Rpb24gZGlzYWJsZWQodmFsKXt0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb24nLCdoYW5kbGVHcm91cERpc2FibGVkJyx2YWwpO319LG1ldGhvZHM6e3F1ZXJ5Q2hhbmdlOmZ1bmN0aW9uIHF1ZXJ5Q2hhbmdlKCl7dGhpcy52aXNpYmxlPXRoaXMuJGNoaWxkcmVuJiZBcnJheS5pc0FycmF5KHRoaXMuJGNoaWxkcmVuKSYmdGhpcy4kY2hpbGRyZW4uc29tZShmdW5jdGlvbihvcHRpb24pe3JldHVybiBvcHRpb24udmlzaWJsZT09PXRydWU7fSk7fX0sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dGhpcy4kb24oJ3F1ZXJ5Q2hhbmdlJyx0aGlzLnF1ZXJ5Q2hhbmdlKTt9LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe2lmKHRoaXMuZGlzYWJsZWQpe3RoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbicsJ2hhbmRsZUdyb3VwRGlzYWJsZWQnLHRoaXMuZGlzYWJsZWQpO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfb3B0aW9uX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPW9wdGlvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLWdyb3VwLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIG9wdGlvbl9ncm91cF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19vcHRpb25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sb3B0aW9uX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjY4NWU1ZGVfcmVuZGVyLG9wdGlvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY2ODVlNWRlX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgb3B0aW9uX2dyb3VwX2FwaTt9b3B0aW9uX2dyb3VwX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24tZ3JvdXAudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIG9wdGlvbl9ncm91cD1vcHRpb25fZ3JvdXBfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9vcHRpb24tZ3JvdXAvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9vcHRpb25fZ3JvdXAuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQob3B0aW9uX2dyb3VwLm5hbWUsb3B0aW9uX2dyb3VwKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfb3B0aW9uX2dyb3VwPW9wdGlvbl9ncm91cDsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYTg1OWZiNCYKdmFyIGJ1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NhODU5ZmI0X3JlbmRlcj1mdW5jdGlvbiBidXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9jYTg1OWZiNF9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1idXR0b24iLGNsYXNzOltfdm0udHlwZT8iZWwtYnV0dG9uLS0iK192bS50eXBlOiIiLF92bS5idXR0b25TaXplPyJlbC1idXR0b24tLSIrX3ZtLmJ1dHRvblNpemU6IiIseyJpcy1kaXNhYmxlZCI6X3ZtLmJ1dHRvbkRpc2FibGVkLCJpcy1sb2FkaW5nIjpfdm0ubG9hZGluZywiaXMtcGxhaW4iOl92bS5wbGFpbiwiaXMtcm91bmQiOl92bS5yb3VuZCwiaXMtY2lyY2xlIjpfdm0uY2lyY2xlfV0sYXR0cnM6e2Rpc2FibGVkOl92bS5idXR0b25EaXNhYmxlZHx8X3ZtLmxvYWRpbmcsYXV0b2ZvY3VzOl92bS5hdXRvZm9jdXMsdHlwZTpfdm0ubmF0aXZlVHlwZX0sb246e2NsaWNrOl92bS5oYW5kbGVDbGlja319LFtfdm0ubG9hZGluZz9fYygiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWxvYWRpbmcifSk6X3ZtLl9lKCksX3ZtLmljb24mJiFfdm0ubG9hZGluZz9fYygiaSIse2NsYXNzOl92bS5pY29ufSk6X3ZtLl9lKCksX3ZtLiRzbG90cy5kZWZhdWx0P19jKCJzcGFuIixbX3ZtLl90KCJkZWZhdWx0IildLDIpOl92bS5fZSgpXSk7fTt2YXIgYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2E4NTlmYjRfc3RhdGljUmVuZGVyRm5zPVtdO2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NhODU5ZmI0X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2E4NTlmYjQmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBidXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsQnV0dG9uJyxpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDonJ30sZWxGb3JtSXRlbTp7ZGVmYXVsdDonJ319LHByb3BzOnt0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OidkZWZhdWx0J30sc2l6ZTpTdHJpbmcsaWNvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDonJ30sbmF0aXZlVHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDonYnV0dG9uJ30sbG9hZGluZzpCb29sZWFuLGRpc2FibGVkOkJvb2xlYW4scGxhaW46Qm9vbGVhbixhdXRvZm9jdXM6Qm9vbGVhbixyb3VuZDpCb29sZWFuLGNpcmNsZTpCb29sZWFufSxjb21wdXRlZDp7X2VsRm9ybUl0ZW1TaXplOmZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpe3JldHVybih0aGlzLmVsRm9ybUl0ZW18fHt9KS5lbEZvcm1JdGVtU2l6ZTt9LGJ1dHRvblNpemU6ZnVuY3Rpb24gYnV0dG9uU2l6ZSgpe3JldHVybiB0aGlzLnNpemV8fHRoaXMuX2VsRm9ybUl0ZW1TaXplfHwodGhpcy4kRUxFTUVOVHx8e30pLnNpemU7fSxidXR0b25EaXNhYmxlZDpmdW5jdGlvbiBidXR0b25EaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZDt9fSxtZXRob2RzOntoYW5kbGVDbGljazpmdW5jdGlvbiBoYW5kbGVDbGljayhldnQpe3RoaXMuJGVtaXQoJ2NsaWNrJyxldnQpO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWJ1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGJ1dHRvbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2E4NTlmYjRfcmVuZGVyLGJ1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NhODU5ZmI0X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgYnV0dG9uX2FwaTt9YnV0dG9uX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19idXR0b249YnV0dG9uX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnV0dG9uL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovc3JjX2J1dHRvbi5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzcmNfYnV0dG9uLm5hbWUsc3JjX2J1dHRvbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2J1dHRvbj1zcmNfYnV0dG9uOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNkODY2MWQwJgp2YXIgYnV0dG9uX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2Q4NjYxZDBfcmVuZGVyPWZ1bmN0aW9uIGJ1dHRvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkODY2MWQwX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWJ1dHRvbi1ncm91cCJ9LFtfdm0uX3QoImRlZmF1bHQiKV0sMik7fTt2YXIgYnV0dG9uX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2Q4NjYxZDBfc3RhdGljUmVuZGVyRm5zPVtdO2J1dHRvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkODY2MWQwX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2Q4NjYxZDAmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBidXR0b25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsQnV0dG9uR3JvdXAnfTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfYnV0dG9uX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWJ1dHRvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGJ1dHRvbl9ncm91cF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19idXR0b25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sYnV0dG9uX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2Q4NjYxZDBfcmVuZGVyLGJ1dHRvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkODY2MWQwX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgYnV0dG9uX2dyb3VwX2FwaTt9YnV0dG9uX2dyb3VwX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24tZ3JvdXAudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGJ1dHRvbl9ncm91cD1idXR0b25fZ3JvdXBfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24tZ3JvdXAvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9idXR0b25fZ3JvdXAuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoYnV0dG9uX2dyb3VwLm5hbWUsYnV0dG9uX2dyb3VwKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfYnV0dG9uX2dyb3VwPWJ1dHRvbl9ncm91cDsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDkzZmUzNGUmCnZhciB0YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ5M2ZlMzRlX3JlbmRlcj1mdW5jdGlvbiB0YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ5M2ZlMzRlX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRhYmxlIixjbGFzczpbeyJlbC10YWJsZS0tZml0Ijpfdm0uZml0LCJlbC10YWJsZS0tc3RyaXBlZCI6X3ZtLnN0cmlwZSwiZWwtdGFibGUtLWJvcmRlciI6X3ZtLmJvcmRlcnx8X3ZtLmlzR3JvdXAsImVsLXRhYmxlLS1oaWRkZW4iOl92bS5pc0hpZGRlbiwiZWwtdGFibGUtLWdyb3VwIjpfdm0uaXNHcm91cCwiZWwtdGFibGUtLWZsdWlkLWhlaWdodCI6X3ZtLm1heEhlaWdodCwiZWwtdGFibGUtLXNjcm9sbGFibGUteCI6X3ZtLmxheW91dC5zY3JvbGxYLCJlbC10YWJsZS0tc2Nyb2xsYWJsZS15Ijpfdm0ubGF5b3V0LnNjcm9sbFksImVsLXRhYmxlLS1lbmFibGUtcm93LWhvdmVyIjohX3ZtLnN0b3JlLnN0YXRlcy5pc0NvbXBsZXgsImVsLXRhYmxlLS1lbmFibGUtcm93LXRyYW5zaXRpb24iOihfdm0uc3RvcmUuc3RhdGVzLmRhdGF8fFtdKS5sZW5ndGghPT0wJiYoX3ZtLnN0b3JlLnN0YXRlcy5kYXRhfHxbXSkubGVuZ3RoPDEwMH0sX3ZtLnRhYmxlU2l6ZT8iZWwtdGFibGUtLSIrX3ZtLnRhYmxlU2l6ZToiIl0sb246e21vdXNlbGVhdmU6ZnVuY3Rpb24gbW91c2VsZWF2ZSgkZXZlbnQpe192bS5oYW5kbGVNb3VzZUxlYXZlKCRldmVudCk7fX19LFtfYygiZGl2Iix7cmVmOiJoaWRkZW5Db2x1bW5zIixzdGF0aWNDbGFzczoiaGlkZGVuLWNvbHVtbnMifSxbX3ZtLl90KCJkZWZhdWx0IildLDIpLF92bS5zaG93SGVhZGVyP19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToibW91c2V3aGVlbCIscmF3TmFtZToidi1tb3VzZXdoZWVsIix2YWx1ZTpfdm0uaGFuZGxlSGVhZGVyRm9vdGVyTW91c2V3aGVlbCxleHByZXNzaW9uOiJoYW5kbGVIZWFkZXJGb290ZXJNb3VzZXdoZWVsIn1dLHJlZjoiaGVhZGVyV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19oZWFkZXItd3JhcHBlciJ9LFtfYygidGFibGUtaGVhZGVyIix7cmVmOiJ0YWJsZUhlYWRlciIsc3R5bGU6e3dpZHRoOl92bS5sYXlvdXQuYm9keVdpZHRoP192bS5sYXlvdXQuYm9keVdpZHRoKyJweCI6IiJ9LGF0dHJzOntzdG9yZTpfdm0uc3RvcmUsYm9yZGVyOl92bS5ib3JkZXIsImRlZmF1bHQtc29ydCI6X3ZtLmRlZmF1bHRTb3J0fX0pXSwxKTpfdm0uX2UoKSxfYygiZGl2Iix7cmVmOiJib2R5V3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19ib2R5LXdyYXBwZXIiLGNsYXNzOltfdm0ubGF5b3V0LnNjcm9sbFg/ImlzLXNjcm9sbGluZy0iK192bS5zY3JvbGxQb3NpdGlvbjoiaXMtc2Nyb2xsaW5nLW5vbmUiXSxzdHlsZTpbX3ZtLmJvZHlIZWlnaHRdfSxbX2MoInRhYmxlLWJvZHkiLHtzdHlsZTp7d2lkdGg6X3ZtLmJvZHlXaWR0aH0sYXR0cnM6e2NvbnRleHQ6X3ZtLmNvbnRleHQsc3RvcmU6X3ZtLnN0b3JlLHN0cmlwZTpfdm0uc3RyaXBlLCJyb3ctY2xhc3MtbmFtZSI6X3ZtLnJvd0NsYXNzTmFtZSwicm93LXN0eWxlIjpfdm0ucm93U3R5bGUsaGlnaGxpZ2h0Ol92bS5oaWdobGlnaHRDdXJyZW50Um93fX0pLCFfdm0uZGF0YXx8X3ZtLmRhdGEubGVuZ3RoPT09MD9fYygiZGl2Iix7cmVmOiJlbXB0eUJsb2NrIixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2VtcHR5LWJsb2NrIixzdHlsZTpfdm0uZW1wdHlCbG9ja1N0eWxlfSxbX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtdGFibGVfX2VtcHR5LXRleHQifSxbX3ZtLl90KCJlbXB0eSIsW192bS5fdihfdm0uX3MoX3ZtLmVtcHR5VGV4dHx8X3ZtLnQoImVsLnRhYmxlLmVtcHR5VGV4dCIpKSldKV0sMildKTpfdm0uX2UoKSxfdm0uJHNsb3RzLmFwcGVuZD9fYygiZGl2Iix7cmVmOiJhcHBlbmRXcmFwcGVyIixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2FwcGVuZC13cmFwcGVyIn0sW192bS5fdCgiYXBwZW5kIildLDIpOl92bS5fZSgpXSwxKSxfdm0uc2hvd1N1bW1hcnk/X2MoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS5kYXRhJiZfdm0uZGF0YS5sZW5ndGg+MCxleHByZXNzaW9uOiJkYXRhICYmIGRhdGEubGVuZ3RoID4gMCJ9LHtuYW1lOiJtb3VzZXdoZWVsIixyYXdOYW1lOiJ2LW1vdXNld2hlZWwiLHZhbHVlOl92bS5oYW5kbGVIZWFkZXJGb290ZXJNb3VzZXdoZWVsLGV4cHJlc3Npb246ImhhbmRsZUhlYWRlckZvb3Rlck1vdXNld2hlZWwifV0scmVmOiJmb290ZXJXcmFwcGVyIixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyIn0sW19jKCJ0YWJsZS1mb290ZXIiLHtzdHlsZTp7d2lkdGg6X3ZtLmxheW91dC5ib2R5V2lkdGg/X3ZtLmxheW91dC5ib2R5V2lkdGgrInB4IjoiIn0sYXR0cnM6e3N0b3JlOl92bS5zdG9yZSxib3JkZXI6X3ZtLmJvcmRlciwic3VtLXRleHQiOl92bS5zdW1UZXh0fHxfdm0udCgiZWwudGFibGUuc3VtVGV4dCIpLCJzdW1tYXJ5LW1ldGhvZCI6X3ZtLnN1bW1hcnlNZXRob2QsImRlZmF1bHQtc29ydCI6X3ZtLmRlZmF1bHRTb3J0fX0pXSwxKTpfdm0uX2UoKSxfdm0uZml4ZWRDb2x1bW5zLmxlbmd0aD4wP19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToibW91c2V3aGVlbCIscmF3TmFtZToidi1tb3VzZXdoZWVsIix2YWx1ZTpfdm0uaGFuZGxlRml4ZWRNb3VzZXdoZWVsLGV4cHJlc3Npb246ImhhbmRsZUZpeGVkTW91c2V3aGVlbCJ9XSxyZWY6ImZpeGVkV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZCIsc3R5bGU6W3t3aWR0aDpfdm0ubGF5b3V0LmZpeGVkV2lkdGg/X3ZtLmxheW91dC5maXhlZFdpZHRoKyJweCI6IiJ9LF92bS5maXhlZEhlaWdodF19LFtfdm0uc2hvd0hlYWRlcj9fYygiZGl2Iix7cmVmOiJmaXhlZEhlYWRlcldyYXBwZXIiLHN0YXRpY0NsYXNzOiJlbC10YWJsZV9fZml4ZWQtaGVhZGVyLXdyYXBwZXIifSxbX2MoInRhYmxlLWhlYWRlciIse3JlZjoiZml4ZWRUYWJsZUhlYWRlciIsc3R5bGU6e3dpZHRoOl92bS5ib2R5V2lkdGh9LGF0dHJzOntmaXhlZDoibGVmdCIsYm9yZGVyOl92bS5ib3JkZXIsc3RvcmU6X3ZtLnN0b3JlfX0pXSwxKTpfdm0uX2UoKSxfYygiZGl2Iix7cmVmOiJmaXhlZEJvZHlXcmFwcGVyIixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2ZpeGVkLWJvZHktd3JhcHBlciIsc3R5bGU6W3t0b3A6X3ZtLmxheW91dC5oZWFkZXJIZWlnaHQrInB4In0sX3ZtLmZpeGVkQm9keUhlaWdodF19LFtfYygidGFibGUtYm9keSIse3N0eWxlOnt3aWR0aDpfdm0uYm9keVdpZHRofSxhdHRyczp7Zml4ZWQ6ImxlZnQiLHN0b3JlOl92bS5zdG9yZSxzdHJpcGU6X3ZtLnN0cmlwZSxoaWdobGlnaHQ6X3ZtLmhpZ2hsaWdodEN1cnJlbnRSb3csInJvdy1jbGFzcy1uYW1lIjpfdm0ucm93Q2xhc3NOYW1lLCJyb3ctc3R5bGUiOl92bS5yb3dTdHlsZX19KSxfdm0uJHNsb3RzLmFwcGVuZD9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRhYmxlX19hcHBlbmQtZ3V0dGVyIixzdHlsZTp7aGVpZ2h0Ol92bS5sYXlvdXQuYXBwZW5kSGVpZ2h0KyJweCJ9fSk6X3ZtLl9lKCldLDEpLF92bS5zaG93U3VtbWFyeT9fYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLmRhdGEmJl92bS5kYXRhLmxlbmd0aD4wLGV4cHJlc3Npb246ImRhdGEgJiYgZGF0YS5sZW5ndGggPiAwIn1dLHJlZjoiZml4ZWRGb290ZXJXcmFwcGVyIixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2ZpeGVkLWZvb3Rlci13cmFwcGVyIn0sW19jKCJ0YWJsZS1mb290ZXIiLHtzdHlsZTp7d2lkdGg6X3ZtLmJvZHlXaWR0aH0sYXR0cnM6e2ZpeGVkOiJsZWZ0Iixib3JkZXI6X3ZtLmJvcmRlciwic3VtLXRleHQiOl92bS5zdW1UZXh0fHxfdm0udCgiZWwudGFibGUuc3VtVGV4dCIpLCJzdW1tYXJ5LW1ldGhvZCI6X3ZtLnN1bW1hcnlNZXRob2Qsc3RvcmU6X3ZtLnN0b3JlfX0pXSwxKTpfdm0uX2UoKV0pOl92bS5fZSgpLF92bS5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGg+MD9fYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vdXNld2hlZWwiLHJhd05hbWU6InYtbW91c2V3aGVlbCIsdmFsdWU6X3ZtLmhhbmRsZUZpeGVkTW91c2V3aGVlbCxleHByZXNzaW9uOiJoYW5kbGVGaXhlZE1vdXNld2hlZWwifV0scmVmOiJyaWdodEZpeGVkV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1yaWdodCIsc3R5bGU6W3t3aWR0aDpfdm0ubGF5b3V0LnJpZ2h0Rml4ZWRXaWR0aD9fdm0ubGF5b3V0LnJpZ2h0Rml4ZWRXaWR0aCsicHgiOiIiLHJpZ2h0Ol92bS5sYXlvdXQuc2Nyb2xsWT8oX3ZtLmJvcmRlcj9fdm0ubGF5b3V0Lmd1dHRlcldpZHRoOl92bS5sYXlvdXQuZ3V0dGVyV2lkdGh8fDApKyJweCI6IiJ9LF92bS5maXhlZEhlaWdodF19LFtfdm0uc2hvd0hlYWRlcj9fYygiZGl2Iix7cmVmOiJyaWdodEZpeGVkSGVhZGVyV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1oZWFkZXItd3JhcHBlciJ9LFtfYygidGFibGUtaGVhZGVyIix7cmVmOiJyaWdodEZpeGVkVGFibGVIZWFkZXIiLHN0eWxlOnt3aWR0aDpfdm0uYm9keVdpZHRofSxhdHRyczp7Zml4ZWQ6InJpZ2h0Iixib3JkZXI6X3ZtLmJvcmRlcixzdG9yZTpfdm0uc3RvcmV9fSldLDEpOl92bS5fZSgpLF9jKCJkaXYiLHtyZWY6InJpZ2h0Rml4ZWRCb2R5V3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1ib2R5LXdyYXBwZXIiLHN0eWxlOlt7dG9wOl92bS5sYXlvdXQuaGVhZGVySGVpZ2h0KyJweCJ9LF92bS5maXhlZEJvZHlIZWlnaHRdfSxbX2MoInRhYmxlLWJvZHkiLHtzdHlsZTp7d2lkdGg6X3ZtLmJvZHlXaWR0aH0sYXR0cnM6e2ZpeGVkOiJyaWdodCIsc3RvcmU6X3ZtLnN0b3JlLHN0cmlwZTpfdm0uc3RyaXBlLCJyb3ctY2xhc3MtbmFtZSI6X3ZtLnJvd0NsYXNzTmFtZSwicm93LXN0eWxlIjpfdm0ucm93U3R5bGUsaGlnaGxpZ2h0Ol92bS5oaWdobGlnaHRDdXJyZW50Um93fX0pLF92bS4kc2xvdHMuYXBwZW5kP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGFibGVfX2FwcGVuZC1ndXR0ZXIiLHN0eWxlOntoZWlnaHQ6X3ZtLmxheW91dC5hcHBlbmRIZWlnaHQrInB4In19KTpfdm0uX2UoKV0sMSksX3ZtLnNob3dTdW1tYXJ5P19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uZGF0YSYmX3ZtLmRhdGEubGVuZ3RoPjAsZXhwcmVzc2lvbjoiZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAifV0scmVmOiJyaWdodEZpeGVkRm9vdGVyV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1mb290ZXItd3JhcHBlciJ9LFtfYygidGFibGUtZm9vdGVyIix7c3R5bGU6e3dpZHRoOl92bS5ib2R5V2lkdGh9LGF0dHJzOntmaXhlZDoicmlnaHQiLGJvcmRlcjpfdm0uYm9yZGVyLCJzdW0tdGV4dCI6X3ZtLnN1bVRleHR8fF92bS50KCJlbC50YWJsZS5zdW1UZXh0IiksInN1bW1hcnktbWV0aG9kIjpfdm0uc3VtbWFyeU1ldGhvZCxzdG9yZTpfdm0uc3RvcmV9fSldLDEpOl92bS5fZSgpXSk6X3ZtLl9lKCksX3ZtLnJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aD4wP19jKCJkaXYiLHtyZWY6InJpZ2h0Rml4ZWRQYXRjaCIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1yaWdodC1wYXRjaCIsc3R5bGU6e3dpZHRoOl92bS5sYXlvdXQuc2Nyb2xsWT9fdm0ubGF5b3V0Lmd1dHRlcldpZHRoKyJweCI6IjAiLGhlaWdodDpfdm0ubGF5b3V0LmhlYWRlckhlaWdodCsicHgifX0pOl92bS5fZSgpLF9jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0ucmVzaXplUHJveHlWaXNpYmxlLGV4cHJlc3Npb246InJlc2l6ZVByb3h5VmlzaWJsZSJ9XSxyZWY6InJlc2l6ZVByb3h5IixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2NvbHVtbi1yZXNpemUtcHJveHkifSldKTt9O3ZhciB0YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ5M2ZlMzRlX3N0YXRpY1JlbmRlckZucz1bXTt0YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ5M2ZlMzRlX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvdGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ5M2ZlMzRlJgovLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi9jaGVja2JveCIKdmFyIGNoZWNrYm94Xz1fX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTt2YXIgY2hlY2tib3hfZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNoZWNrYm94Xyk7Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAidGhyb3R0bGUtZGVib3VuY2UiCnZhciBleHRlcm5hbF90aHJvdHRsZV9kZWJvdW5jZV89X193ZWJwYWNrX3JlcXVpcmVfXygzNSk7Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAibm9ybWFsaXplLXdoZWVsIgp2YXIgZXh0ZXJuYWxfbm9ybWFsaXplX3doZWVsXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTt2YXIgZXh0ZXJuYWxfbm9ybWFsaXplX3doZWVsX2RlZmF1bHQ9LyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9ub3JtYWxpemVfd2hlZWxfKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kaXJlY3RpdmVzL21vdXNld2hlZWwuanMKdmFyIGlzRmlyZWZveD10eXBlb2YgbmF2aWdhdG9yIT09J3VuZGVmaW5lZCcmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94Jyk+LTE7dmFyIG1vdXNld2hlZWxfbW91c2V3aGVlbD1mdW5jdGlvbiBtb3VzZXdoZWVsKGVsZW1lbnQsY2FsbGJhY2spe2lmKGVsZW1lbnQmJmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcil7ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGlzRmlyZWZveD8nRE9NTW91c2VTY3JvbGwnOidtb3VzZXdoZWVsJyxmdW5jdGlvbihldmVudCl7dmFyIG5vcm1hbGl6ZWQ9ZXh0ZXJuYWxfbm9ybWFsaXplX3doZWVsX2RlZmF1bHQoKShldmVudCk7Y2FsbGJhY2smJmNhbGxiYWNrLmFwcGx5KHRoaXMsW2V2ZW50LG5vcm1hbGl6ZWRdKTt9KTt9fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGRpcmVjdGl2ZXNfbW91c2V3aGVlbD17YmluZDpmdW5jdGlvbiBiaW5kKGVsLGJpbmRpbmcpe21vdXNld2hlZWxfbW91c2V3aGVlbChlbCxiaW5kaW5nLnZhbHVlKTt9fTsvLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJ2dWUiCnZhciBleHRlcm5hbF92dWVfPV9fd2VicGFja19yZXF1aXJlX18oNik7dmFyIGV4dGVybmFsX3Z1ZV9kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfdnVlXyk7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvdXRpbC5qcwp2YXIgdXRpbF90eXBlb2Y9dHlwZW9mIFN5bWJvbD09PSJmdW5jdGlvbiImJl90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcik9PT0ic3ltYm9sIj9mdW5jdGlvbihvYmope3JldHVybiBfdHlwZW9mMihvYmopO306ZnVuY3Rpb24ob2JqKXtyZXR1cm4gb2JqJiZ0eXBlb2YgU3ltYm9sPT09ImZ1bmN0aW9uIiYmb2JqLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZvYmohPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOl90eXBlb2YyKG9iaik7fTt2YXIgZ2V0Q2VsbD1mdW5jdGlvbiBnZXRDZWxsKGV2ZW50KXt2YXIgY2VsbD1ldmVudC50YXJnZXQ7d2hpbGUoY2VsbCYmY2VsbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkhPT0nSFRNTCcpe2lmKGNlbGwudGFnTmFtZS50b1VwcGVyQ2FzZSgpPT09J1REJyl7cmV0dXJuIGNlbGw7fWNlbGw9Y2VsbC5wYXJlbnROb2RlO31yZXR1cm4gbnVsbDt9O3ZhciB1dGlsX2lzT2JqZWN0PWZ1bmN0aW9uIGlzT2JqZWN0KG9iail7cmV0dXJuIG9iaiE9PW51bGwmJih0eXBlb2Ygb2JqPT09J3VuZGVmaW5lZCc/J3VuZGVmaW5lZCc6dXRpbF90eXBlb2Yob2JqKSk9PT0nb2JqZWN0Jzt9O3ZhciB1dGlsX29yZGVyQnk9ZnVuY3Rpb24gb3JkZXJCeShhcnJheSxzb3J0S2V5LHJldmVyc2Usc29ydE1ldGhvZCxzb3J0Qnkpe2lmKCFzb3J0S2V5JiYhc29ydE1ldGhvZCYmKCFzb3J0Qnl8fEFycmF5LmlzQXJyYXkoc29ydEJ5KSYmIXNvcnRCeS5sZW5ndGgpKXtyZXR1cm4gYXJyYXk7fWlmKHR5cGVvZiByZXZlcnNlPT09J3N0cmluZycpe3JldmVyc2U9cmV2ZXJzZT09PSdkZXNjZW5kaW5nJz8tMToxO31lbHNle3JldmVyc2U9cmV2ZXJzZSYmcmV2ZXJzZTwwPy0xOjE7fXZhciBnZXRLZXk9c29ydE1ldGhvZD9udWxsOmZ1bmN0aW9uKHZhbHVlLGluZGV4KXtpZihzb3J0Qnkpe2lmKCFBcnJheS5pc0FycmF5KHNvcnRCeSkpe3NvcnRCeT1bc29ydEJ5XTt9cmV0dXJuIHNvcnRCeS5tYXAoZnVuY3Rpb24oYnkpe2lmKHR5cGVvZiBieT09PSdzdHJpbmcnKXtyZXR1cm4gT2JqZWN0KHV0aWxfWyJnZXRWYWx1ZUJ5UGF0aCJdKSh2YWx1ZSxieSk7fWVsc2V7cmV0dXJuIGJ5KHZhbHVlLGluZGV4LGFycmF5KTt9fSk7fWlmKHNvcnRLZXkhPT0nJGtleScpe2lmKHV0aWxfaXNPYmplY3QodmFsdWUpJiYnJHZhbHVlJ2luIHZhbHVlKXZhbHVlPXZhbHVlLiR2YWx1ZTt9cmV0dXJuW3V0aWxfaXNPYmplY3QodmFsdWUpP09iamVjdCh1dGlsX1siZ2V0VmFsdWVCeVBhdGgiXSkodmFsdWUsc29ydEtleSk6dmFsdWVdO307dmFyIGNvbXBhcmU9ZnVuY3Rpb24gY29tcGFyZShhLGIpe2lmKHNvcnRNZXRob2Qpe3JldHVybiBzb3J0TWV0aG9kKGEudmFsdWUsYi52YWx1ZSk7fWZvcih2YXIgaT0wLGxlbj1hLmtleS5sZW5ndGg7aTxsZW47aSsrKXtpZihhLmtleVtpXTxiLmtleVtpXSl7cmV0dXJuLTE7fWlmKGEua2V5W2ldPmIua2V5W2ldKXtyZXR1cm4gMTt9fXJldHVybiAwO307cmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbih2YWx1ZSxpbmRleCl7cmV0dXJue3ZhbHVlOnZhbHVlLGluZGV4OmluZGV4LGtleTpnZXRLZXk/Z2V0S2V5KHZhbHVlLGluZGV4KTpudWxsfTt9KS5zb3J0KGZ1bmN0aW9uKGEsYil7dmFyIG9yZGVyPWNvbXBhcmUoYSxiKTtpZighb3JkZXIpey8vIG1ha2Ugc3RhYmxlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NvcnRpbmdfYWxnb3JpdGhtI1N0YWJpbGl0eQpvcmRlcj1hLmluZGV4LWIuaW5kZXg7fXJldHVybiBvcmRlcipyZXZlcnNlO30pLm1hcChmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbS52YWx1ZTt9KTt9O3ZhciBnZXRDb2x1bW5CeUlkPWZ1bmN0aW9uIGdldENvbHVtbkJ5SWQodGFibGUsY29sdW1uSWQpe3ZhciBjb2x1bW49bnVsbDt0YWJsZS5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aWYoaXRlbS5pZD09PWNvbHVtbklkKXtjb2x1bW49aXRlbTt9fSk7cmV0dXJuIGNvbHVtbjt9O3ZhciBnZXRDb2x1bW5CeUtleT1mdW5jdGlvbiBnZXRDb2x1bW5CeUtleSh0YWJsZSxjb2x1bW5LZXkpe3ZhciBjb2x1bW49bnVsbDtmb3IodmFyIGk9MDtpPHRhYmxlLmNvbHVtbnMubGVuZ3RoO2krKyl7dmFyIGl0ZW09dGFibGUuY29sdW1uc1tpXTtpZihpdGVtLmNvbHVtbktleT09PWNvbHVtbktleSl7Y29sdW1uPWl0ZW07YnJlYWs7fX1yZXR1cm4gY29sdW1uO307dmFyIGdldENvbHVtbkJ5Q2VsbD1mdW5jdGlvbiBnZXRDb2x1bW5CeUNlbGwodGFibGUsY2VsbCl7dmFyIG1hdGNoZXM9KGNlbGwuY2xhc3NOYW1lfHwnJykubWF0Y2goL2VsLXRhYmxlX1teXHNdKy9nbSk7aWYobWF0Y2hlcyl7cmV0dXJuIGdldENvbHVtbkJ5SWQodGFibGUsbWF0Y2hlc1swXSk7fXJldHVybiBudWxsO307dmFyIGdldFJvd0lkZW50aXR5PWZ1bmN0aW9uIGdldFJvd0lkZW50aXR5KHJvdyxyb3dLZXkpe2lmKCFyb3cpdGhyb3cgbmV3IEVycm9yKCdyb3cgaXMgcmVxdWlyZWQgd2hlbiBnZXQgcm93IGlkZW50aXR5Jyk7aWYodHlwZW9mIHJvd0tleT09PSdzdHJpbmcnKXtpZihyb3dLZXkuaW5kZXhPZignLicpPDApe3JldHVybiByb3dbcm93S2V5XTt9dmFyIGtleT1yb3dLZXkuc3BsaXQoJy4nKTt2YXIgY3VycmVudD1yb3c7Zm9yKHZhciBpPTA7aTxrZXkubGVuZ3RoO2krKyl7Y3VycmVudD1jdXJyZW50W2tleVtpXV07fXJldHVybiBjdXJyZW50O31lbHNlIGlmKHR5cGVvZiByb3dLZXk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gcm93S2V5LmNhbGwobnVsbCxyb3cpO319O3ZhciBnZXRLZXlzTWFwPWZ1bmN0aW9uIGdldEtleXNNYXAoYXJyYXkscm93S2V5KXt2YXIgYXJyYXlNYXA9e307KGFycmF5fHxbXSkuZm9yRWFjaChmdW5jdGlvbihyb3csaW5kZXgpe2FycmF5TWFwW2dldFJvd0lkZW50aXR5KHJvdyxyb3dLZXkpXT17cm93OnJvdyxpbmRleDppbmRleH07fSk7cmV0dXJuIGFycmF5TWFwO307ZnVuY3Rpb24gaGFzT3duKG9iaixrZXkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLGtleSk7fWZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhkZWZhdWx0cyxjb25maWcpe3ZhciBvcHRpb25zPXt9O3ZhciBrZXk9dm9pZCAwO2ZvcihrZXkgaW4gZGVmYXVsdHMpe29wdGlvbnNba2V5XT1kZWZhdWx0c1trZXldO31mb3Ioa2V5IGluIGNvbmZpZyl7aWYoaGFzT3duKGNvbmZpZyxrZXkpKXt2YXIgdmFsdWU9Y29uZmlnW2tleV07aWYodHlwZW9mIHZhbHVlIT09J3VuZGVmaW5lZCcpe29wdGlvbnNba2V5XT12YWx1ZTt9fX1yZXR1cm4gb3B0aW9uczt9ZnVuY3Rpb24gcGFyc2VXaWR0aCh3aWR0aCl7aWYod2lkdGghPT11bmRlZmluZWQpe3dpZHRoPXBhcnNlSW50KHdpZHRoLDEwKTtpZihpc05hTih3aWR0aCkpe3dpZHRoPW51bGw7fX1yZXR1cm4gd2lkdGg7fWZ1bmN0aW9uIHBhcnNlTWluV2lkdGgobWluV2lkdGgpe2lmKHR5cGVvZiBtaW5XaWR0aCE9PSd1bmRlZmluZWQnKXttaW5XaWR0aD1wYXJzZVdpZHRoKG1pbldpZHRoKTtpZihpc05hTihtaW5XaWR0aCkpe21pbldpZHRoPTgwO319cmV0dXJuIG1pbldpZHRoO307ZnVuY3Rpb24gcGFyc2VIZWlnaHQoaGVpZ2h0KXtpZih0eXBlb2YgaGVpZ2h0PT09J251bWJlcicpe3JldHVybiBoZWlnaHQ7fWlmKHR5cGVvZiBoZWlnaHQ9PT0nc3RyaW5nJyl7aWYoL15cZCsoPzpweCk/JC8udGVzdChoZWlnaHQpKXtyZXR1cm4gcGFyc2VJbnQoaGVpZ2h0LDEwKTt9ZWxzZXtyZXR1cm4gaGVpZ2h0O319cmV0dXJuIG51bGw7fS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWR1eGpzL3JlZHV4L2Jsb2IvbWFzdGVyL3NyYy9jb21wb3NlLmpzCmZ1bmN0aW9uIGNvbXBvc2UoKXtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxmdW5jcz1BcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKyl7ZnVuY3NbX2tleV09YXJndW1lbnRzW19rZXldO31pZihmdW5jcy5sZW5ndGg9PT0wKXtyZXR1cm4gZnVuY3Rpb24oYXJnKXtyZXR1cm4gYXJnO307fWlmKGZ1bmNzLmxlbmd0aD09PTEpe3JldHVybiBmdW5jc1swXTt9cmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhKGIuYXBwbHkodW5kZWZpbmVkLGFyZ3VtZW50cykpO307fSk7fWZ1bmN0aW9uIHRvZ2dsZVJvd1N0YXR1cyhzdGF0dXNBcnIscm93LG5ld1ZhbCl7dmFyIGNoYW5nZWQ9ZmFsc2U7dmFyIGluZGV4PXN0YXR1c0Fyci5pbmRleE9mKHJvdyk7dmFyIGluY2x1ZGVkPWluZGV4IT09LTE7dmFyIGFkZFJvdz1mdW5jdGlvbiBhZGRSb3coKXtzdGF0dXNBcnIucHVzaChyb3cpO2NoYW5nZWQ9dHJ1ZTt9O3ZhciByZW1vdmVSb3c9ZnVuY3Rpb24gcmVtb3ZlUm93KCl7c3RhdHVzQXJyLnNwbGljZShpbmRleCwxKTtjaGFuZ2VkPXRydWU7fTtpZih0eXBlb2YgbmV3VmFsPT09J2Jvb2xlYW4nKXtpZihuZXdWYWwmJiFpbmNsdWRlZCl7YWRkUm93KCk7fWVsc2UgaWYoIW5ld1ZhbCYmaW5jbHVkZWQpe3JlbW92ZVJvdygpO319ZWxzZXtpZihpbmNsdWRlZCl7cmVtb3ZlUm93KCk7fWVsc2V7YWRkUm93KCk7fX1yZXR1cm4gY2hhbmdlZDt9ZnVuY3Rpb24gd2Fsa1RyZWVOb2RlKHJvb3QsY2Ipe3ZhciBjaGlsZHJlbktleT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMl06J2NoaWxkcmVuJzt2YXIgbGF6eUtleT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbM106J2hhc0NoaWxkcmVuJzt2YXIgaXNOaWw9ZnVuY3Rpb24gaXNOaWwoYXJyYXkpe3JldHVybiEoQXJyYXkuaXNBcnJheShhcnJheSkmJmFycmF5Lmxlbmd0aCk7fTtmdW5jdGlvbiBfd2Fsa2VyKHBhcmVudCxjaGlsZHJlbixsZXZlbCl7Y2IocGFyZW50LGNoaWxkcmVuLGxldmVsKTtjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2lmKGl0ZW1bbGF6eUtleV0pe2NiKGl0ZW0sbnVsbCxsZXZlbCsxKTtyZXR1cm47fXZhciBjaGlsZHJlbj1pdGVtW2NoaWxkcmVuS2V5XTtpZighaXNOaWwoY2hpbGRyZW4pKXtfd2Fsa2VyKGl0ZW0sY2hpbGRyZW4sbGV2ZWwrMSk7fX0pO31yb290LmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aWYoaXRlbVtsYXp5S2V5XSl7Y2IoaXRlbSxudWxsLDApO3JldHVybjt9dmFyIGNoaWxkcmVuPWl0ZW1bY2hpbGRyZW5LZXldO2lmKCFpc05pbChjaGlsZHJlbikpe193YWxrZXIoaXRlbSxjaGlsZHJlbiwwKTt9fSk7fS8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL3N0b3JlL2V4cGFuZC5qcwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGV4cGFuZD17ZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3N0YXRlczp7ZGVmYXVsdEV4cGFuZEFsbDpmYWxzZSxleHBhbmRSb3dzOltdfX07fSxtZXRob2RzOnt1cGRhdGVFeHBhbmRSb3dzOmZ1bmN0aW9uIHVwZGF0ZUV4cGFuZFJvd3MoKXt2YXIgX3N0YXRlcz10aGlzLnN0YXRlcyxfc3RhdGVzJGRhdGE9X3N0YXRlcy5kYXRhLGRhdGE9X3N0YXRlcyRkYXRhPT09dW5kZWZpbmVkP1tdOl9zdGF0ZXMkZGF0YSxyb3dLZXk9X3N0YXRlcy5yb3dLZXksZGVmYXVsdEV4cGFuZEFsbD1fc3RhdGVzLmRlZmF1bHRFeHBhbmRBbGwsZXhwYW5kUm93cz1fc3RhdGVzLmV4cGFuZFJvd3M7aWYoZGVmYXVsdEV4cGFuZEFsbCl7dGhpcy5zdGF0ZXMuZXhwYW5kUm93cz1kYXRhLnNsaWNlKCk7fWVsc2UgaWYocm93S2V5KXsvLyBUT0RP77ya6L+Z6YeM55qE5Luj56CB5Y+v5Lul5LyY5YyWCnZhciBleHBhbmRSb3dzTWFwPWdldEtleXNNYXAoZXhwYW5kUm93cyxyb3dLZXkpO3RoaXMuc3RhdGVzLmV4cGFuZFJvd3M9ZGF0YS5yZWR1Y2UoZnVuY3Rpb24ocHJldixyb3cpe3ZhciByb3dJZD1nZXRSb3dJZGVudGl0eShyb3cscm93S2V5KTt2YXIgcm93SW5mbz1leHBhbmRSb3dzTWFwW3Jvd0lkXTtpZihyb3dJbmZvKXtwcmV2LnB1c2gocm93KTt9cmV0dXJuIHByZXY7fSxbXSk7fWVsc2V7dGhpcy5zdGF0ZXMuZXhwYW5kUm93cz1bXTt9fSx0b2dnbGVSb3dFeHBhbnNpb246ZnVuY3Rpb24gdG9nZ2xlUm93RXhwYW5zaW9uKHJvdyxleHBhbmRlZCl7dmFyIGNoYW5nZWQ9dG9nZ2xlUm93U3RhdHVzKHRoaXMuc3RhdGVzLmV4cGFuZFJvd3Mscm93LGV4cGFuZGVkKTtpZihjaGFuZ2VkKXt0aGlzLnRhYmxlLiRlbWl0KCdleHBhbmQtY2hhbmdlJyxyb3csdGhpcy5zdGF0ZXMuZXhwYW5kUm93cy5zbGljZSgpKTt0aGlzLnNjaGVkdWxlTGF5b3V0KCk7fX0sc2V0RXhwYW5kUm93S2V5czpmdW5jdGlvbiBzZXRFeHBhbmRSb3dLZXlzKHJvd0tleXMpe3RoaXMuYXNzZXJ0Um93S2V5KCk7Ly8gVE9ET++8mui/memHjOeahOS7o+eggeWPr+S7peS8mOWMlgp2YXIgX3N0YXRlczI9dGhpcy5zdGF0ZXMsZGF0YT1fc3RhdGVzMi5kYXRhLHJvd0tleT1fc3RhdGVzMi5yb3dLZXk7dmFyIGtleXNNYXA9Z2V0S2V5c01hcChkYXRhLHJvd0tleSk7dGhpcy5zdGF0ZXMuZXhwYW5kUm93cz1yb3dLZXlzLnJlZHVjZShmdW5jdGlvbihwcmV2LGN1cil7dmFyIGluZm89a2V5c01hcFtjdXJdO2lmKGluZm8pe3ByZXYucHVzaChpbmZvLnJvdyk7fXJldHVybiBwcmV2O30sW10pO30saXNSb3dFeHBhbmRlZDpmdW5jdGlvbiBpc1Jvd0V4cGFuZGVkKHJvdyl7dmFyIF9zdGF0ZXMzPXRoaXMuc3RhdGVzLF9zdGF0ZXMzJGV4cGFuZFJvd3M9X3N0YXRlczMuZXhwYW5kUm93cyxleHBhbmRSb3dzPV9zdGF0ZXMzJGV4cGFuZFJvd3M9PT11bmRlZmluZWQ/W106X3N0YXRlczMkZXhwYW5kUm93cyxyb3dLZXk9X3N0YXRlczMucm93S2V5O2lmKHJvd0tleSl7dmFyIGV4cGFuZE1hcD1nZXRLZXlzTWFwKGV4cGFuZFJvd3Mscm93S2V5KTtyZXR1cm4hIWV4cGFuZE1hcFtnZXRSb3dJZGVudGl0eShyb3cscm93S2V5KV07fXJldHVybiBleHBhbmRSb3dzLmluZGV4T2Yocm93KSE9PS0xO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9zdG9yZS9jdXJyZW50LmpzCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY3VycmVudD17ZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3N0YXRlczp7Ly8g5LiN5Y+v5ZON5bqU55qE77yM6K6+572uIGN1cnJlbnRSb3dLZXkg5pe277yMZGF0YSDkuI3kuIDlrprlrZjlnKjvvIzkuZ/orrjml6Dms5Xnrpflh7rmraPnoa7nmoQgY3VycmVudFJvdwovLyDmioror6XlgLznvJPlrZjkuIDkuIvvvIzlvZPnlKjmiLfngrnlh7vkv67mlLkgY3VycmVudFJvdyDml7bvvIzmioror6XlgLzph43nva7kuLogbnVsbApfY3VycmVudFJvd0tleTpudWxsLGN1cnJlbnRSb3c6bnVsbH19O30sbWV0aG9kczp7c2V0Q3VycmVudFJvd0tleTpmdW5jdGlvbiBzZXRDdXJyZW50Um93S2V5KGtleSl7dGhpcy5hc3NlcnRSb3dLZXkoKTt0aGlzLnN0YXRlcy5fY3VycmVudFJvd0tleT1rZXk7dGhpcy5zZXRDdXJyZW50Um93QnlLZXkoa2V5KTt9LHJlc3RvcmVDdXJyZW50Um93S2V5OmZ1bmN0aW9uIHJlc3RvcmVDdXJyZW50Um93S2V5KCl7dGhpcy5zdGF0ZXMuX2N1cnJlbnRSb3dLZXk9bnVsbDt9LHNldEN1cnJlbnRSb3dCeUtleTpmdW5jdGlvbiBzZXRDdXJyZW50Um93QnlLZXkoa2V5KXt2YXIgc3RhdGVzPXRoaXMuc3RhdGVzO3ZhciBfc3RhdGVzJGRhdGE9c3RhdGVzLmRhdGEsZGF0YT1fc3RhdGVzJGRhdGE9PT11bmRlZmluZWQ/W106X3N0YXRlcyRkYXRhLHJvd0tleT1zdGF0ZXMucm93S2V5O3ZhciBjdXJyZW50Um93PW51bGw7aWYocm93S2V5KXtjdXJyZW50Um93PU9iamVjdCh1dGlsX1siYXJyYXlGaW5kIl0pKGRhdGEsZnVuY3Rpb24oaXRlbSl7cmV0dXJuIGdldFJvd0lkZW50aXR5KGl0ZW0scm93S2V5KT09PWtleTt9KTt9c3RhdGVzLmN1cnJlbnRSb3c9Y3VycmVudFJvdzt9LHVwZGF0ZUN1cnJlbnRSb3c6ZnVuY3Rpb24gdXBkYXRlQ3VycmVudFJvdyhjdXJyZW50Um93KXt2YXIgc3RhdGVzPXRoaXMuc3RhdGVzLHRhYmxlPXRoaXMudGFibGU7dmFyIG9sZEN1cnJlbnRSb3c9c3RhdGVzLmN1cnJlbnRSb3c7aWYoY3VycmVudFJvdyYmY3VycmVudFJvdyE9PW9sZEN1cnJlbnRSb3cpe3N0YXRlcy5jdXJyZW50Um93PWN1cnJlbnRSb3c7dGFibGUuJGVtaXQoJ2N1cnJlbnQtY2hhbmdlJyxjdXJyZW50Um93LG9sZEN1cnJlbnRSb3cpO3JldHVybjt9aWYoIWN1cnJlbnRSb3cmJm9sZEN1cnJlbnRSb3cpe3N0YXRlcy5jdXJyZW50Um93PW51bGw7dGFibGUuJGVtaXQoJ2N1cnJlbnQtY2hhbmdlJyxudWxsLG9sZEN1cnJlbnRSb3cpO319LHVwZGF0ZUN1cnJlbnRSb3dEYXRhOmZ1bmN0aW9uIHVwZGF0ZUN1cnJlbnRSb3dEYXRhKCl7dmFyIHN0YXRlcz10aGlzLnN0YXRlcyx0YWJsZT10aGlzLnRhYmxlO3ZhciByb3dLZXk9c3RhdGVzLnJvd0tleSxfY3VycmVudFJvd0tleT1zdGF0ZXMuX2N1cnJlbnRSb3dLZXk7Ly8gZGF0YSDkuLogbnVsbCDml7bvvIzop6PmnoTml7bnmoTpu5jorqTlgLzkvJrooqvlv73nlaUKdmFyIGRhdGE9c3RhdGVzLmRhdGF8fFtdO3ZhciBvbGRDdXJyZW50Um93PXN0YXRlcy5jdXJyZW50Um93Oy8vIOW9kyBjdXJyZW50Um93IOS4jeWcqCBkYXRhIOS4reaXtuWwneivleabtOaWsOaVsOaNrgppZihkYXRhLmluZGV4T2Yob2xkQ3VycmVudFJvdyk9PT0tMSYmb2xkQ3VycmVudFJvdyl7aWYocm93S2V5KXt2YXIgY3VycmVudFJvd0tleT1nZXRSb3dJZGVudGl0eShvbGRDdXJyZW50Um93LHJvd0tleSk7dGhpcy5zZXRDdXJyZW50Um93QnlLZXkoY3VycmVudFJvd0tleSk7fWVsc2V7c3RhdGVzLmN1cnJlbnRSb3c9bnVsbDt9aWYoc3RhdGVzLmN1cnJlbnRSb3c9PT1udWxsKXt0YWJsZS4kZW1pdCgnY3VycmVudC1jaGFuZ2UnLG51bGwsb2xkQ3VycmVudFJvdyk7fX1lbHNlIGlmKF9jdXJyZW50Um93S2V5KXsvLyDmiorliJ3lp4vml7bkuIvorr7nva7nmoQgcm93S2V5IOi9rOWMluaIkCByb3dEYXRhCnRoaXMuc2V0Q3VycmVudFJvd0J5S2V5KF9jdXJyZW50Um93S2V5KTt0aGlzLnJlc3RvcmVDdXJyZW50Um93S2V5KCk7fX19fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9zdG9yZS90cmVlLmpzCnZhciBfZXh0ZW5kcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9YXJndW1lbnRzW2ldO2Zvcih2YXIga2V5IGluIHNvdXJjZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSxrZXkpKXt0YXJnZXRba2V5XT1zb3VyY2Vba2V5XTt9fX1yZXR1cm4gdGFyZ2V0O307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0cmVlPXtkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57c3RhdGVzOnsvLyBkZWZhdWx0RXhwYW5kQWxsIOWtmOWcqOS6jiBleHBhbmQuanMg5Lit77yM6L+Z6YeM5LiN6YeN5aSN5re75YqgCi8vIOWcqOWxleW8gOihjOS4re+8jGV4cGFuZFJvd0tleXMg5Lya6KKr6L2s5YyW5oiQIGV4cGFuZFJvd3PvvIxleHBhbmRSb3dLZXlzIOi/meS4quWxnuaAp+WPquaYr+iusOW9leS6hiBUcmVlVGFibGUg6KGM55qE5bGV5byACi8vIFRPRE86IOaLhuWIhuS4uueLrOeri+eahCBUcmVlVGFibGXvvIznu5/kuIDnlKjms5UKZXhwYW5kUm93S2V5czpbXSx0cmVlRGF0YTp7fSxpbmRlbnQ6MTYsbGF6eTpmYWxzZSxsYXp5VHJlZU5vZGVNYXA6e30sbGF6eUNvbHVtbklkZW50aWZpZXI6J2hhc0NoaWxkcmVuJyxjaGlsZHJlbkNvbHVtbk5hbWU6J2NoaWxkcmVuJ319O30sY29tcHV0ZWQ6ey8vIOW1jOWFpeWei+eahOaVsOaNru+8jHdhdGNoIOaXoOazleaYr+ajgOa1i+WIsOWPmOWMliBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xNDk5OAovLyBUT0RPOiDkvb/nlKggY29tcHV0ZWQg6Kej5Yaz6K+l6Zeu6aKY77yM5piv5ZCm5Lya6YCg5oiQ5oCn6IO96Zeu6aKY77yfCi8vIEByZXR1cm4geyBpZDogeyBsZXZlbCwgY2hpbGRyZW4gfSB9Cm5vcm1hbGl6ZWREYXRhOmZ1bmN0aW9uIG5vcm1hbGl6ZWREYXRhKCl7aWYoIXRoaXMuc3RhdGVzLnJvd0tleSlyZXR1cm57fTt2YXIgZGF0YT10aGlzLnN0YXRlcy5kYXRhfHxbXTtyZXR1cm4gdGhpcy5ub3JtYWxpemUoZGF0YSk7fSwvLyBAcmV0dXJuIHsgaWQ6IHsgY2hpbGRyZW4gfSB9Ci8vIOmSiOWvueaHkuWKoOi9veeahOaDheW9ou+8jOS4jeWkhOeQhuW1jOWll+aVsOaNrgpub3JtYWxpemVkTGF6eU5vZGU6ZnVuY3Rpb24gbm9ybWFsaXplZExhenlOb2RlKCl7dmFyIF9zdGF0ZXM9dGhpcy5zdGF0ZXMscm93S2V5PV9zdGF0ZXMucm93S2V5LGxhenlUcmVlTm9kZU1hcD1fc3RhdGVzLmxhenlUcmVlTm9kZU1hcCxsYXp5Q29sdW1uSWRlbnRpZmllcj1fc3RhdGVzLmxhenlDb2x1bW5JZGVudGlmaWVyO3ZhciBrZXlzPU9iamVjdC5rZXlzKGxhenlUcmVlTm9kZU1hcCk7dmFyIHJlcz17fTtpZigha2V5cy5sZW5ndGgpcmV0dXJuIHJlcztrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KXtpZihsYXp5VHJlZU5vZGVNYXBba2V5XS5sZW5ndGgpe3ZhciBpdGVtPXtjaGlsZHJlbjpbXX07bGF6eVRyZWVOb2RlTWFwW2tleV0uZm9yRWFjaChmdW5jdGlvbihyb3cpe3ZhciBjdXJyZW50Um93S2V5PWdldFJvd0lkZW50aXR5KHJvdyxyb3dLZXkpO2l0ZW0uY2hpbGRyZW4ucHVzaChjdXJyZW50Um93S2V5KTtpZihyb3dbbGF6eUNvbHVtbklkZW50aWZpZXJdJiYhcmVzW2N1cnJlbnRSb3dLZXldKXtyZXNbY3VycmVudFJvd0tleV09e2NoaWxkcmVuOltdfTt9fSk7cmVzW2tleV09aXRlbTt9fSk7cmV0dXJuIHJlczt9fSx3YXRjaDp7bm9ybWFsaXplZERhdGE6J3VwZGF0ZVRyZWVEYXRhJyxub3JtYWxpemVkTGF6eU5vZGU6J3VwZGF0ZVRyZWVEYXRhJ30sbWV0aG9kczp7bm9ybWFsaXplOmZ1bmN0aW9uIG5vcm1hbGl6ZShkYXRhKXt2YXIgX3N0YXRlczI9dGhpcy5zdGF0ZXMsY2hpbGRyZW5Db2x1bW5OYW1lPV9zdGF0ZXMyLmNoaWxkcmVuQ29sdW1uTmFtZSxsYXp5Q29sdW1uSWRlbnRpZmllcj1fc3RhdGVzMi5sYXp5Q29sdW1uSWRlbnRpZmllcixyb3dLZXk9X3N0YXRlczIucm93S2V5LGxhenk9X3N0YXRlczIubGF6eTt2YXIgcmVzPXt9O3dhbGtUcmVlTm9kZShkYXRhLGZ1bmN0aW9uKHBhcmVudCxjaGlsZHJlbixsZXZlbCl7dmFyIHBhcmVudElkPWdldFJvd0lkZW50aXR5KHBhcmVudCxyb3dLZXkpO2lmKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKXtyZXNbcGFyZW50SWRdPXtjaGlsZHJlbjpjaGlsZHJlbi5tYXAoZnVuY3Rpb24ocm93KXtyZXR1cm4gZ2V0Um93SWRlbnRpdHkocm93LHJvd0tleSk7fSksbGV2ZWw6bGV2ZWx9O31lbHNlIGlmKGxhenkpey8vIOW9kyBjaGlsZHJlbiDkuI3lrZjlnKjkuJQgbGF6eSDkuLogdHJ1Ze+8jOivpeiKgueCueWNs+S4uuaHkuWKoOi9veeahOiKgueCuQpyZXNbcGFyZW50SWRdPXtjaGlsZHJlbjpbXSxsYXp5OnRydWUsbGV2ZWw6bGV2ZWx9O319LGNoaWxkcmVuQ29sdW1uTmFtZSxsYXp5Q29sdW1uSWRlbnRpZmllcik7cmV0dXJuIHJlczt9LHVwZGF0ZVRyZWVEYXRhOmZ1bmN0aW9uIHVwZGF0ZVRyZWVEYXRhKCl7dmFyIG5lc3RlZD10aGlzLm5vcm1hbGl6ZWREYXRhO3ZhciBub3JtYWxpemVkTGF6eU5vZGU9dGhpcy5ub3JtYWxpemVkTGF6eU5vZGU7dmFyIGtleXM9T2JqZWN0LmtleXMobmVzdGVkKTt2YXIgbmV3VHJlZURhdGE9e307aWYoa2V5cy5sZW5ndGgpe3ZhciBfc3RhdGVzMz10aGlzLnN0YXRlcyxvbGRUcmVlRGF0YT1fc3RhdGVzMy50cmVlRGF0YSxkZWZhdWx0RXhwYW5kQWxsPV9zdGF0ZXMzLmRlZmF1bHRFeHBhbmRBbGwsZXhwYW5kUm93S2V5cz1fc3RhdGVzMy5leHBhbmRSb3dLZXlzLGxhenk9X3N0YXRlczMubGF6eTt2YXIgcm9vdExhenlSb3dLZXlzPVtdO3ZhciBnZXRFeHBhbmRlZD1mdW5jdGlvbiBnZXRFeHBhbmRlZChvbGRWYWx1ZSxrZXkpe3ZhciBpbmNsdWRlZD1kZWZhdWx0RXhwYW5kQWxsfHxleHBhbmRSb3dLZXlzJiZleHBhbmRSb3dLZXlzLmluZGV4T2Yoa2V5KSE9PS0xO3JldHVybiEhKG9sZFZhbHVlJiZvbGRWYWx1ZS5leHBhbmRlZHx8aW5jbHVkZWQpO307Ly8g5ZCI5bm2IGV4cGFuZGVkIOS4jiBkaXNwbGF577yM56Gu5L+d5pWw5o2u5Yi35paw5ZCO77yM54q25oCB5LiN5Y+YCmtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpe3ZhciBvbGRWYWx1ZT1vbGRUcmVlRGF0YVtrZXldO3ZhciBuZXdWYWx1ZT1fZXh0ZW5kcyh7fSxuZXN0ZWRba2V5XSk7bmV3VmFsdWUuZXhwYW5kZWQ9Z2V0RXhwYW5kZWQob2xkVmFsdWUsa2V5KTtpZihuZXdWYWx1ZS5sYXp5KXt2YXIgX3JlZj1vbGRWYWx1ZXx8e30sX3JlZiRsb2FkZWQ9X3JlZi5sb2FkZWQsbG9hZGVkPV9yZWYkbG9hZGVkPT09dW5kZWZpbmVkP2ZhbHNlOl9yZWYkbG9hZGVkLF9yZWYkbG9hZGluZz1fcmVmLmxvYWRpbmcsbG9hZGluZz1fcmVmJGxvYWRpbmc9PT11bmRlZmluZWQ/ZmFsc2U6X3JlZiRsb2FkaW5nO25ld1ZhbHVlLmxvYWRlZD0hIWxvYWRlZDtuZXdWYWx1ZS5sb2FkaW5nPSEhbG9hZGluZztyb290TGF6eVJvd0tleXMucHVzaChrZXkpO31uZXdUcmVlRGF0YVtrZXldPW5ld1ZhbHVlO30pOy8vIOagueaNruaHkuWKoOi9veaVsOaNruabtOaWsCB0cmVlRGF0YQp2YXIgbGF6eUtleXM9T2JqZWN0LmtleXMobm9ybWFsaXplZExhenlOb2RlKTtpZihsYXp5JiZsYXp5S2V5cy5sZW5ndGgmJnJvb3RMYXp5Um93S2V5cy5sZW5ndGgpe2xhenlLZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KXt2YXIgb2xkVmFsdWU9b2xkVHJlZURhdGFba2V5XTt2YXIgbGF6eU5vZGVDaGlsZHJlbj1ub3JtYWxpemVkTGF6eU5vZGVba2V5XS5jaGlsZHJlbjtpZihyb290TGF6eVJvd0tleXMuaW5kZXhPZihrZXkpIT09LTEpey8vIOaHkuWKoOi9veeahCByb290IOiKgueCue+8jOabtOaWsOS4gOS4i+WOn+acieeahOaVsOaNru+8jOWOn+adpeeahCBjaGlsZHJlbiDkuIDlrprmmK/nqbrmlbDnu4QKaWYobmV3VHJlZURhdGFba2V5XS5jaGlsZHJlbi5sZW5ndGghPT0wKXt0aHJvdyBuZXcgRXJyb3IoJ1tFbFRhYmxlXWNoaWxkcmVuIG11c3QgYmUgYW4gZW1wdHkgYXJyYXkuJyk7fW5ld1RyZWVEYXRhW2tleV0uY2hpbGRyZW49bGF6eU5vZGVDaGlsZHJlbjt9ZWxzZXt2YXIgX3JlZjI9b2xkVmFsdWV8fHt9LF9yZWYyJGxvYWRlZD1fcmVmMi5sb2FkZWQsbG9hZGVkPV9yZWYyJGxvYWRlZD09PXVuZGVmaW5lZD9mYWxzZTpfcmVmMiRsb2FkZWQsX3JlZjIkbG9hZGluZz1fcmVmMi5sb2FkaW5nLGxvYWRpbmc9X3JlZjIkbG9hZGluZz09PXVuZGVmaW5lZD9mYWxzZTpfcmVmMiRsb2FkaW5nO25ld1RyZWVEYXRhW2tleV09e2xhenk6dHJ1ZSxsb2FkZWQ6ISFsb2FkZWQsbG9hZGluZzohIWxvYWRpbmcsZXhwYW5kZWQ6Z2V0RXhwYW5kZWQob2xkVmFsdWUsa2V5KSxjaGlsZHJlbjpsYXp5Tm9kZUNoaWxkcmVuLGxldmVsOicnfTt9fSk7fX10aGlzLnN0YXRlcy50cmVlRGF0YT1uZXdUcmVlRGF0YTt0aGlzLnVwZGF0ZVRhYmxlU2Nyb2xsWSgpO30sdXBkYXRlVHJlZUV4cGFuZEtleXM6ZnVuY3Rpb24gdXBkYXRlVHJlZUV4cGFuZEtleXModmFsdWUpe3RoaXMuc3RhdGVzLmV4cGFuZFJvd0tleXM9dmFsdWU7dGhpcy51cGRhdGVUcmVlRGF0YSgpO30sdG9nZ2xlVHJlZUV4cGFuc2lvbjpmdW5jdGlvbiB0b2dnbGVUcmVlRXhwYW5zaW9uKHJvdyxleHBhbmRlZCl7dGhpcy5hc3NlcnRSb3dLZXkoKTt2YXIgX3N0YXRlczQ9dGhpcy5zdGF0ZXMscm93S2V5PV9zdGF0ZXM0LnJvd0tleSx0cmVlRGF0YT1fc3RhdGVzNC50cmVlRGF0YTt2YXIgaWQ9Z2V0Um93SWRlbnRpdHkocm93LHJvd0tleSk7dmFyIGRhdGE9aWQmJnRyZWVEYXRhW2lkXTtpZihpZCYmZGF0YSYmJ2V4cGFuZGVkJ2luIGRhdGEpe3ZhciBvbGRFeHBhbmRlZD1kYXRhLmV4cGFuZGVkO2V4cGFuZGVkPXR5cGVvZiBleHBhbmRlZD09PSd1bmRlZmluZWQnPyFkYXRhLmV4cGFuZGVkOmV4cGFuZGVkO3RyZWVEYXRhW2lkXS5leHBhbmRlZD1leHBhbmRlZDtpZihvbGRFeHBhbmRlZCE9PWV4cGFuZGVkKXt0aGlzLnRhYmxlLiRlbWl0KCdleHBhbmQtY2hhbmdlJyxyb3csZXhwYW5kZWQpO310aGlzLnVwZGF0ZVRhYmxlU2Nyb2xsWSgpO319LGxvYWRPclRvZ2dsZTpmdW5jdGlvbiBsb2FkT3JUb2dnbGUocm93KXt0aGlzLmFzc2VydFJvd0tleSgpO3ZhciBfc3RhdGVzNT10aGlzLnN0YXRlcyxsYXp5PV9zdGF0ZXM1LmxhenksdHJlZURhdGE9X3N0YXRlczUudHJlZURhdGEscm93S2V5PV9zdGF0ZXM1LnJvd0tleTt2YXIgaWQ9Z2V0Um93SWRlbnRpdHkocm93LHJvd0tleSk7dmFyIGRhdGE9dHJlZURhdGFbaWRdO2lmKGxhenkmJmRhdGEmJidsb2FkZWQnaW4gZGF0YSYmIWRhdGEubG9hZGVkKXt0aGlzLmxvYWREYXRhKHJvdyxpZCxkYXRhKTt9ZWxzZXt0aGlzLnRvZ2dsZVRyZWVFeHBhbnNpb24ocm93KTt9fSxsb2FkRGF0YTpmdW5jdGlvbiBsb2FkRGF0YShyb3csa2V5LHRyZWVOb2RlKXt2YXIgX3RoaXM9dGhpczt2YXIgbG9hZD10aGlzLnRhYmxlLmxvYWQ7dmFyIF9zdGF0ZXM2PXRoaXMuc3RhdGVzLGxhenlUcmVlTm9kZU1hcD1fc3RhdGVzNi5sYXp5VHJlZU5vZGVNYXAsdHJlZURhdGE9X3N0YXRlczYudHJlZURhdGE7aWYobG9hZCYmIXRyZWVEYXRhW2tleV0ubG9hZGVkKXt0cmVlRGF0YVtrZXldLmxvYWRpbmc9dHJ1ZTtsb2FkKHJvdyx0cmVlTm9kZSxmdW5jdGlvbihkYXRhKXtpZighQXJyYXkuaXNBcnJheShkYXRhKSl7dGhyb3cgbmV3IEVycm9yKCdbRWxUYWJsZV0gZGF0YSBtdXN0IGJlIGFuIGFycmF5Jyk7fXRyZWVEYXRhW2tleV0ubG9hZGluZz1mYWxzZTt0cmVlRGF0YVtrZXldLmxvYWRlZD10cnVlO3RyZWVEYXRhW2tleV0uZXhwYW5kZWQ9dHJ1ZTtpZihkYXRhLmxlbmd0aCl7X3RoaXMuJHNldChsYXp5VHJlZU5vZGVNYXAsa2V5LGRhdGEpO31fdGhpcy50YWJsZS4kZW1pdCgnZXhwYW5kLWNoYW5nZScscm93LHRydWUpO30pO319fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvc3RvcmUvd2F0Y2hlci5qcwp2YXIgd2F0Y2hlcl9zb3J0RGF0YT1mdW5jdGlvbiBzb3J0RGF0YShkYXRhLHN0YXRlcyl7dmFyIHNvcnRpbmdDb2x1bW49c3RhdGVzLnNvcnRpbmdDb2x1bW47aWYoIXNvcnRpbmdDb2x1bW58fHR5cGVvZiBzb3J0aW5nQ29sdW1uLnNvcnRhYmxlPT09J3N0cmluZycpe3JldHVybiBkYXRhO31yZXR1cm4gdXRpbF9vcmRlckJ5KGRhdGEsc3RhdGVzLnNvcnRQcm9wLHN0YXRlcy5zb3J0T3JkZXIsc29ydGluZ0NvbHVtbi5zb3J0TWV0aG9kLHNvcnRpbmdDb2x1bW4uc29ydEJ5KTt9O3ZhciBkb0ZsYXR0ZW5Db2x1bW5zPWZ1bmN0aW9uIGRvRmxhdHRlbkNvbHVtbnMoY29sdW1ucyl7dmFyIHJlc3VsdD1bXTtjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24oY29sdW1uKXtpZihjb2x1bW4uY2hpbGRyZW4pe3Jlc3VsdC5wdXNoLmFwcGx5KHJlc3VsdCxkb0ZsYXR0ZW5Db2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO31lbHNle3Jlc3VsdC5wdXNoKGNvbHVtbik7fX0pO3JldHVybiByZXN1bHQ7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHdhdGNoZXI9ZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5leHRlbmQoe2RhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntzdGF0ZXM6ey8vIDMuMCDniYjmnKzlkI7opoHmsYLlv4Xpobvorr7nva7or6XlsZ7mgKcKcm93S2V5Om51bGwsLy8g5riy5p+T55qE5pWw5o2u5p2l5rqQ77yM5piv5a+5IHRhYmxlIOS4reeahCBkYXRhIOi/h+a7pOaOkuW6j+WQjueahOe7k+aenApkYXRhOltdLC8vIOaYr+WQpuWMheWQq+WbuuWumuWIlwppc0NvbXBsZXg6ZmFsc2UsLy8g5YiXCl9jb2x1bW5zOltdLC8vIOS4jeWPr+WTjeW6lOeahApvcmlnaW5Db2x1bW5zOltdLGNvbHVtbnM6W10sZml4ZWRDb2x1bW5zOltdLHJpZ2h0Rml4ZWRDb2x1bW5zOltdLGxlYWZDb2x1bW5zOltdLGZpeGVkTGVhZkNvbHVtbnM6W10scmlnaHRGaXhlZExlYWZDb2x1bW5zOltdLGxlYWZDb2x1bW5zTGVuZ3RoOjAsZml4ZWRMZWFmQ29sdW1uc0xlbmd0aDowLHJpZ2h0Rml4ZWRMZWFmQ29sdW1uc0xlbmd0aDowLC8vIOmAieaLqQppc0FsbFNlbGVjdGVkOmZhbHNlLHNlbGVjdGlvbjpbXSxyZXNlcnZlU2VsZWN0aW9uOmZhbHNlLHNlbGVjdE9uSW5kZXRlcm1pbmF0ZTpmYWxzZSxzZWxlY3RhYmxlOm51bGwsLy8g6L+H5rukCmZpbHRlcnM6e30sLy8g5LiN5Y+v5ZON5bqU55qECmZpbHRlcmVkRGF0YTpudWxsLC8vIOaOkuW6jwpzb3J0aW5nQ29sdW1uOm51bGwsc29ydFByb3A6bnVsbCxzb3J0T3JkZXI6bnVsbCxob3ZlclJvdzpudWxsfX07fSxtaXhpbnM6W2V4cGFuZCxjdXJyZW50LHRyZWVdLG1ldGhvZHM6ey8vIOajgOafpSByb3dLZXkg5piv5ZCm5a2Y5ZyoCmFzc2VydFJvd0tleTpmdW5jdGlvbiBhc3NlcnRSb3dLZXkoKXt2YXIgcm93S2V5PXRoaXMuc3RhdGVzLnJvd0tleTtpZighcm93S2V5KXRocm93IG5ldyBFcnJvcignW0VsVGFibGVdIHByb3Agcm93LWtleSBpcyByZXF1aXJlZCcpO30sLy8g5pu05paw5YiXCnVwZGF0ZUNvbHVtbnM6ZnVuY3Rpb24gdXBkYXRlQ29sdW1ucygpe3ZhciBzdGF0ZXM9dGhpcy5zdGF0ZXM7dmFyIF9jb2x1bW5zPXN0YXRlcy5fY29sdW1uc3x8W107c3RhdGVzLmZpeGVkQ29sdW1ucz1fY29sdW1ucy5maWx0ZXIoZnVuY3Rpb24oY29sdW1uKXtyZXR1cm4gY29sdW1uLmZpeGVkPT09dHJ1ZXx8Y29sdW1uLmZpeGVkPT09J2xlZnQnO30pO3N0YXRlcy5yaWdodEZpeGVkQ29sdW1ucz1fY29sdW1ucy5maWx0ZXIoZnVuY3Rpb24oY29sdW1uKXtyZXR1cm4gY29sdW1uLmZpeGVkPT09J3JpZ2h0Jzt9KTtpZihzdGF0ZXMuZml4ZWRDb2x1bW5zLmxlbmd0aD4wJiZfY29sdW1uc1swXSYmX2NvbHVtbnNbMF0udHlwZT09PSdzZWxlY3Rpb24nJiYhX2NvbHVtbnNbMF0uZml4ZWQpe19jb2x1bW5zWzBdLmZpeGVkPXRydWU7c3RhdGVzLmZpeGVkQ29sdW1ucy51bnNoaWZ0KF9jb2x1bW5zWzBdKTt9dmFyIG5vdEZpeGVkQ29sdW1ucz1fY29sdW1ucy5maWx0ZXIoZnVuY3Rpb24oY29sdW1uKXtyZXR1cm4hY29sdW1uLmZpeGVkO30pO3N0YXRlcy5vcmlnaW5Db2x1bW5zPVtdLmNvbmNhdChzdGF0ZXMuZml4ZWRDb2x1bW5zKS5jb25jYXQobm90Rml4ZWRDb2x1bW5zKS5jb25jYXQoc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zKTt2YXIgbGVhZkNvbHVtbnM9ZG9GbGF0dGVuQ29sdW1ucyhub3RGaXhlZENvbHVtbnMpO3ZhciBmaXhlZExlYWZDb2x1bW5zPWRvRmxhdHRlbkNvbHVtbnMoc3RhdGVzLmZpeGVkQ29sdW1ucyk7dmFyIHJpZ2h0Rml4ZWRMZWFmQ29sdW1ucz1kb0ZsYXR0ZW5Db2x1bW5zKHN0YXRlcy5yaWdodEZpeGVkQ29sdW1ucyk7c3RhdGVzLmxlYWZDb2x1bW5zTGVuZ3RoPWxlYWZDb2x1bW5zLmxlbmd0aDtzdGF0ZXMuZml4ZWRMZWFmQ29sdW1uc0xlbmd0aD1maXhlZExlYWZDb2x1bW5zLmxlbmd0aDtzdGF0ZXMucmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoPXJpZ2h0Rml4ZWRMZWFmQ29sdW1ucy5sZW5ndGg7c3RhdGVzLmNvbHVtbnM9W10uY29uY2F0KGZpeGVkTGVhZkNvbHVtbnMpLmNvbmNhdChsZWFmQ29sdW1ucykuY29uY2F0KHJpZ2h0Rml4ZWRMZWFmQ29sdW1ucyk7c3RhdGVzLmlzQ29tcGxleD1zdGF0ZXMuZml4ZWRDb2x1bW5zLmxlbmd0aD4wfHxzdGF0ZXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoPjA7fSwvLyDmm7TmlrAgRE9NCnNjaGVkdWxlTGF5b3V0OmZ1bmN0aW9uIHNjaGVkdWxlTGF5b3V0KG5lZWRVcGRhdGVDb2x1bW5zKXtpZihuZWVkVXBkYXRlQ29sdW1ucyl7dGhpcy51cGRhdGVDb2x1bW5zKCk7fXRoaXMudGFibGUuZGVib3VuY2VkVXBkYXRlTGF5b3V0KCk7fSwvLyDpgInmi6kKaXNTZWxlY3RlZDpmdW5jdGlvbiBpc1NlbGVjdGVkKHJvdyl7dmFyIF9zdGF0ZXMkc2VsZWN0aW9uPXRoaXMuc3RhdGVzLnNlbGVjdGlvbixzZWxlY3Rpb249X3N0YXRlcyRzZWxlY3Rpb249PT11bmRlZmluZWQ/W106X3N0YXRlcyRzZWxlY3Rpb247cmV0dXJuIHNlbGVjdGlvbi5pbmRleE9mKHJvdyk+LTE7fSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbiBjbGVhclNlbGVjdGlvbigpe3ZhciBzdGF0ZXM9dGhpcy5zdGF0ZXM7c3RhdGVzLmlzQWxsU2VsZWN0ZWQ9ZmFsc2U7dmFyIG9sZFNlbGVjdGlvbj1zdGF0ZXMuc2VsZWN0aW9uO2lmKG9sZFNlbGVjdGlvbi5sZW5ndGgpe3N0YXRlcy5zZWxlY3Rpb249W107dGhpcy50YWJsZS4kZW1pdCgnc2VsZWN0aW9uLWNoYW5nZScsW10pO319LGNsZWFuU2VsZWN0aW9uOmZ1bmN0aW9uIGNsZWFuU2VsZWN0aW9uKCl7dmFyIHN0YXRlcz10aGlzLnN0YXRlczt2YXIgZGF0YT1zdGF0ZXMuZGF0YSxyb3dLZXk9c3RhdGVzLnJvd0tleSxzZWxlY3Rpb249c3RhdGVzLnNlbGVjdGlvbjt2YXIgZGVsZXRlZD12b2lkIDA7aWYocm93S2V5KXtkZWxldGVkPVtdO3ZhciBzZWxlY3RlZE1hcD1nZXRLZXlzTWFwKHNlbGVjdGlvbixyb3dLZXkpO3ZhciBkYXRhTWFwPWdldEtleXNNYXAoZGF0YSxyb3dLZXkpO2Zvcih2YXIga2V5IGluIHNlbGVjdGVkTWFwKXtpZihzZWxlY3RlZE1hcC5oYXNPd25Qcm9wZXJ0eShrZXkpJiYhZGF0YU1hcFtrZXldKXtkZWxldGVkLnB1c2goc2VsZWN0ZWRNYXBba2V5XS5yb3cpO319fWVsc2V7ZGVsZXRlZD1zZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBkYXRhLmluZGV4T2YoaXRlbSk9PT0tMTt9KTt9aWYoZGVsZXRlZC5sZW5ndGgpe3ZhciBuZXdTZWxlY3Rpb249c2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbihpdGVtKXtyZXR1cm4gZGVsZXRlZC5pbmRleE9mKGl0ZW0pPT09LTE7fSk7c3RhdGVzLnNlbGVjdGlvbj1uZXdTZWxlY3Rpb247dGhpcy50YWJsZS4kZW1pdCgnc2VsZWN0aW9uLWNoYW5nZScsbmV3U2VsZWN0aW9uLnNsaWNlKCkpO319LHRvZ2dsZVJvd1NlbGVjdGlvbjpmdW5jdGlvbiB0b2dnbGVSb3dTZWxlY3Rpb24ocm93LHNlbGVjdGVkKXt2YXIgZW1pdENoYW5nZT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMl06dHJ1ZTt2YXIgY2hhbmdlZD10b2dnbGVSb3dTdGF0dXModGhpcy5zdGF0ZXMuc2VsZWN0aW9uLHJvdyxzZWxlY3RlZCk7aWYoY2hhbmdlZCl7dmFyIG5ld1NlbGVjdGlvbj0odGhpcy5zdGF0ZXMuc2VsZWN0aW9ufHxbXSkuc2xpY2UoKTsvLyDosIPnlKggQVBJIOS/ruaUuemAieS4reWAvO+8jOS4jeinpuWPkSBzZWxlY3Qg5LqL5Lu2CmlmKGVtaXRDaGFuZ2Upe3RoaXMudGFibGUuJGVtaXQoJ3NlbGVjdCcsbmV3U2VsZWN0aW9uLHJvdyk7fXRoaXMudGFibGUuJGVtaXQoJ3NlbGVjdGlvbi1jaGFuZ2UnLG5ld1NlbGVjdGlvbik7fX0sX3RvZ2dsZUFsbFNlbGVjdGlvbjpmdW5jdGlvbiBfdG9nZ2xlQWxsU2VsZWN0aW9uKCl7dmFyIHN0YXRlcz10aGlzLnN0YXRlczt2YXIgX3N0YXRlcyRkYXRhPXN0YXRlcy5kYXRhLGRhdGE9X3N0YXRlcyRkYXRhPT09dW5kZWZpbmVkP1tdOl9zdGF0ZXMkZGF0YSxzZWxlY3Rpb249c3RhdGVzLnNlbGVjdGlvbjsvLyB3aGVuIG9ubHkgc29tZSByb3dzIGFyZSBzZWxlY3RlZCAoYnV0IG5vdCBhbGwpLCBzZWxlY3Qgb3IgZGVzZWxlY3QgYWxsIG9mIHRoZW0KLy8gZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBzZWxlY3RPbkluZGV0ZXJtaW5hdGUKdmFyIHZhbHVlPXN0YXRlcy5zZWxlY3RPbkluZGV0ZXJtaW5hdGU/IXN0YXRlcy5pc0FsbFNlbGVjdGVkOiEoc3RhdGVzLmlzQWxsU2VsZWN0ZWR8fHNlbGVjdGlvbi5sZW5ndGgpO3N0YXRlcy5pc0FsbFNlbGVjdGVkPXZhbHVlO3ZhciBzZWxlY3Rpb25DaGFuZ2VkPWZhbHNlO2RhdGEuZm9yRWFjaChmdW5jdGlvbihyb3csaW5kZXgpe2lmKHN0YXRlcy5zZWxlY3RhYmxlKXtpZihzdGF0ZXMuc2VsZWN0YWJsZS5jYWxsKG51bGwscm93LGluZGV4KSYmdG9nZ2xlUm93U3RhdHVzKHNlbGVjdGlvbixyb3csdmFsdWUpKXtzZWxlY3Rpb25DaGFuZ2VkPXRydWU7fX1lbHNle2lmKHRvZ2dsZVJvd1N0YXR1cyhzZWxlY3Rpb24scm93LHZhbHVlKSl7c2VsZWN0aW9uQ2hhbmdlZD10cnVlO319fSk7aWYoc2VsZWN0aW9uQ2hhbmdlZCl7dGhpcy50YWJsZS4kZW1pdCgnc2VsZWN0aW9uLWNoYW5nZScsc2VsZWN0aW9uP3NlbGVjdGlvbi5zbGljZSgpOltdKTt9dGhpcy50YWJsZS4kZW1pdCgnc2VsZWN0LWFsbCcsc2VsZWN0aW9uKTt9LHVwZGF0ZVNlbGVjdGlvbkJ5Um93S2V5OmZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbkJ5Um93S2V5KCl7dmFyIHN0YXRlcz10aGlzLnN0YXRlczt2YXIgc2VsZWN0aW9uPXN0YXRlcy5zZWxlY3Rpb24scm93S2V5PXN0YXRlcy5yb3dLZXksZGF0YT1zdGF0ZXMuZGF0YTt2YXIgc2VsZWN0ZWRNYXA9Z2V0S2V5c01hcChzZWxlY3Rpb24scm93S2V5KTtkYXRhLmZvckVhY2goZnVuY3Rpb24ocm93KXt2YXIgcm93SWQ9Z2V0Um93SWRlbnRpdHkocm93LHJvd0tleSk7dmFyIHJvd0luZm89c2VsZWN0ZWRNYXBbcm93SWRdO2lmKHJvd0luZm8pe3NlbGVjdGlvbltyb3dJbmZvLmluZGV4XT1yb3c7fX0pO30sdXBkYXRlQWxsU2VsZWN0ZWQ6ZnVuY3Rpb24gdXBkYXRlQWxsU2VsZWN0ZWQoKXt2YXIgc3RhdGVzPXRoaXMuc3RhdGVzO3ZhciBzZWxlY3Rpb249c3RhdGVzLnNlbGVjdGlvbixyb3dLZXk9c3RhdGVzLnJvd0tleSxzZWxlY3RhYmxlPXN0YXRlcy5zZWxlY3RhYmxlOy8vIGRhdGEg5Li6IG51bGwg5pe277yM6Kej5p6E5pe255qE6buY6K6k5YC85Lya6KKr5b+955WlCnZhciBkYXRhPXN0YXRlcy5kYXRhfHxbXTtpZihkYXRhLmxlbmd0aD09PTApe3N0YXRlcy5pc0FsbFNlbGVjdGVkPWZhbHNlO3JldHVybjt9dmFyIHNlbGVjdGVkTWFwPXZvaWQgMDtpZihyb3dLZXkpe3NlbGVjdGVkTWFwPWdldEtleXNNYXAoc2VsZWN0aW9uLHJvd0tleSk7fXZhciBpc1NlbGVjdGVkPWZ1bmN0aW9uIGlzU2VsZWN0ZWQocm93KXtpZihzZWxlY3RlZE1hcCl7cmV0dXJuISFzZWxlY3RlZE1hcFtnZXRSb3dJZGVudGl0eShyb3cscm93S2V5KV07fWVsc2V7cmV0dXJuIHNlbGVjdGlvbi5pbmRleE9mKHJvdykhPT0tMTt9fTt2YXIgaXNBbGxTZWxlY3RlZD10cnVlO3ZhciBzZWxlY3RlZENvdW50PTA7Zm9yKHZhciBpPTAsaj1kYXRhLmxlbmd0aDtpPGo7aSsrKXt2YXIgaXRlbT1kYXRhW2ldO3ZhciBpc1Jvd1NlbGVjdGFibGU9c2VsZWN0YWJsZSYmc2VsZWN0YWJsZS5jYWxsKG51bGwsaXRlbSxpKTtpZighaXNTZWxlY3RlZChpdGVtKSl7aWYoIXNlbGVjdGFibGV8fGlzUm93U2VsZWN0YWJsZSl7aXNBbGxTZWxlY3RlZD1mYWxzZTticmVhazt9fWVsc2V7c2VsZWN0ZWRDb3VudCsrO319aWYoc2VsZWN0ZWRDb3VudD09PTApaXNBbGxTZWxlY3RlZD1mYWxzZTtzdGF0ZXMuaXNBbGxTZWxlY3RlZD1pc0FsbFNlbGVjdGVkO30sLy8g6L+H5ruk5LiO5o6S5bqPCnVwZGF0ZUZpbHRlcnM6ZnVuY3Rpb24gdXBkYXRlRmlsdGVycyhjb2x1bW5zLHZhbHVlcyl7aWYoIUFycmF5LmlzQXJyYXkoY29sdW1ucykpe2NvbHVtbnM9W2NvbHVtbnNdO312YXIgc3RhdGVzPXRoaXMuc3RhdGVzO3ZhciBmaWx0ZXJzPXt9O2NvbHVtbnMuZm9yRWFjaChmdW5jdGlvbihjb2wpe3N0YXRlcy5maWx0ZXJzW2NvbC5pZF09dmFsdWVzO2ZpbHRlcnNbY29sLmNvbHVtbktleXx8Y29sLmlkXT12YWx1ZXM7fSk7cmV0dXJuIGZpbHRlcnM7fSx1cGRhdGVTb3J0OmZ1bmN0aW9uIHVwZGF0ZVNvcnQoY29sdW1uLHByb3Asb3JkZXIpe2lmKHRoaXMuc3RhdGVzLnNvcnRpbmdDb2x1bW4mJnRoaXMuc3RhdGVzLnNvcnRpbmdDb2x1bW4hPT1jb2x1bW4pe3RoaXMuc3RhdGVzLnNvcnRpbmdDb2x1bW4ub3JkZXI9bnVsbDt9dGhpcy5zdGF0ZXMuc29ydGluZ0NvbHVtbj1jb2x1bW47dGhpcy5zdGF0ZXMuc29ydFByb3A9cHJvcDt0aGlzLnN0YXRlcy5zb3J0T3JkZXI9b3JkZXI7fSxleGVjRmlsdGVyOmZ1bmN0aW9uIGV4ZWNGaWx0ZXIoKXt2YXIgX3RoaXM9dGhpczt2YXIgc3RhdGVzPXRoaXMuc3RhdGVzO3ZhciBfZGF0YT1zdGF0ZXMuX2RhdGEsZmlsdGVycz1zdGF0ZXMuZmlsdGVyczt2YXIgZGF0YT1fZGF0YTtPYmplY3Qua2V5cyhmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbklkKXt2YXIgdmFsdWVzPXN0YXRlcy5maWx0ZXJzW2NvbHVtbklkXTtpZighdmFsdWVzfHx2YWx1ZXMubGVuZ3RoPT09MClyZXR1cm47dmFyIGNvbHVtbj1nZXRDb2x1bW5CeUlkKF90aGlzLnN0YXRlcyxjb2x1bW5JZCk7aWYoY29sdW1uJiZjb2x1bW4uZmlsdGVyTWV0aG9kKXtkYXRhPWRhdGEuZmlsdGVyKGZ1bmN0aW9uKHJvdyl7cmV0dXJuIHZhbHVlcy5zb21lKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gY29sdW1uLmZpbHRlck1ldGhvZC5jYWxsKG51bGwsdmFsdWUscm93LGNvbHVtbik7fSk7fSk7fX0pO3N0YXRlcy5maWx0ZXJlZERhdGE9ZGF0YTt9LGV4ZWNTb3J0OmZ1bmN0aW9uIGV4ZWNTb3J0KCl7dmFyIHN0YXRlcz10aGlzLnN0YXRlcztzdGF0ZXMuZGF0YT13YXRjaGVyX3NvcnREYXRhKHN0YXRlcy5maWx0ZXJlZERhdGEsc3RhdGVzKTt9LC8vIOagueaNriBmaWx0ZXJzIOS4jiBzb3J0IOWOu+i/h+a7pCBkYXRhCmV4ZWNRdWVyeTpmdW5jdGlvbiBleGVjUXVlcnkoaWdub3JlKXtpZighKGlnbm9yZSYmaWdub3JlLmZpbHRlcikpe3RoaXMuZXhlY0ZpbHRlcigpO310aGlzLmV4ZWNTb3J0KCk7fSxjbGVhckZpbHRlcjpmdW5jdGlvbiBjbGVhckZpbHRlcihjb2x1bW5LZXlzKXt2YXIgc3RhdGVzPXRoaXMuc3RhdGVzO3ZhciBfdGFibGUkJHJlZnM9dGhpcy50YWJsZS4kcmVmcyx0YWJsZUhlYWRlcj1fdGFibGUkJHJlZnMudGFibGVIZWFkZXIsZml4ZWRUYWJsZUhlYWRlcj1fdGFibGUkJHJlZnMuZml4ZWRUYWJsZUhlYWRlcixyaWdodEZpeGVkVGFibGVIZWFkZXI9X3RhYmxlJCRyZWZzLnJpZ2h0Rml4ZWRUYWJsZUhlYWRlcjt2YXIgcGFuZWxzPXt9O2lmKHRhYmxlSGVhZGVyKXBhbmVscz1tZXJnZV9kZWZhdWx0KCkocGFuZWxzLHRhYmxlSGVhZGVyLmZpbHRlclBhbmVscyk7aWYoZml4ZWRUYWJsZUhlYWRlcilwYW5lbHM9bWVyZ2VfZGVmYXVsdCgpKHBhbmVscyxmaXhlZFRhYmxlSGVhZGVyLmZpbHRlclBhbmVscyk7aWYocmlnaHRGaXhlZFRhYmxlSGVhZGVyKXBhbmVscz1tZXJnZV9kZWZhdWx0KCkocGFuZWxzLHJpZ2h0Rml4ZWRUYWJsZUhlYWRlci5maWx0ZXJQYW5lbHMpO3ZhciBrZXlzPU9iamVjdC5rZXlzKHBhbmVscyk7aWYoIWtleXMubGVuZ3RoKXJldHVybjtpZih0eXBlb2YgY29sdW1uS2V5cz09PSdzdHJpbmcnKXtjb2x1bW5LZXlzPVtjb2x1bW5LZXlzXTt9aWYoQXJyYXkuaXNBcnJheShjb2x1bW5LZXlzKSl7dmFyIGNvbHVtbnM9Y29sdW1uS2V5cy5tYXAoZnVuY3Rpb24oa2V5KXtyZXR1cm4gZ2V0Q29sdW1uQnlLZXkoc3RhdGVzLGtleSk7fSk7a2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7dmFyIGNvbHVtbj1jb2x1bW5zLmZpbmQoZnVuY3Rpb24oY29sKXtyZXR1cm4gY29sLmlkPT09a2V5O30pO2lmKGNvbHVtbil7Ly8gVE9ETzog5LyY5YyW6L+Z6YeM55qE5Luj56CBCnBhbmVsc1trZXldLmZpbHRlcmVkVmFsdWU9W107fX0pO3RoaXMuY29tbWl0KCdmaWx0ZXJDaGFuZ2UnLHtjb2x1bW46Y29sdW1ucyx2YWx1ZXM6W10sc2lsZW50OnRydWUsbXVsdGk6dHJ1ZX0pO31lbHNle2tleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpey8vIFRPRE86IOS8mOWMlui/memHjOeahOS7o+eggQpwYW5lbHNba2V5XS5maWx0ZXJlZFZhbHVlPVtdO30pO3N0YXRlcy5maWx0ZXJzPXt9O3RoaXMuY29tbWl0KCdmaWx0ZXJDaGFuZ2UnLHtjb2x1bW46e30sdmFsdWVzOltdLHNpbGVudDp0cnVlfSk7fX0sY2xlYXJTb3J0OmZ1bmN0aW9uIGNsZWFyU29ydCgpe3ZhciBzdGF0ZXM9dGhpcy5zdGF0ZXM7aWYoIXN0YXRlcy5zb3J0aW5nQ29sdW1uKXJldHVybjt0aGlzLnVwZGF0ZVNvcnQobnVsbCxudWxsLG51bGwpO3RoaXMuY29tbWl0KCdjaGFuZ2VTb3J0Q29uZGl0aW9uJyx7c2lsZW50OnRydWV9KTt9LC8vIOmAgumFjeWxgu+8jGV4cGFuZC1yb3cta2V5cyDlnKggRXhwYW5kIOS4jiBUcmVlVGFibGUg5Lit6YO95pyJ5L2/55SoCnNldEV4cGFuZFJvd0tleXNBZGFwdGVyOmZ1bmN0aW9uIHNldEV4cGFuZFJvd0tleXNBZGFwdGVyKHZhbCl7Ly8g6L+Z6YeM5Lya6Kem5Y+R6aKd5aSW55qE6K6h566X77yM5L2G5Li65LqG5YW85a655oCn77yM5pqC5pe26L+Z5LmI5YGaCnRoaXMuc2V0RXhwYW5kUm93S2V5cyh2YWwpO3RoaXMudXBkYXRlVHJlZUV4cGFuZEtleXModmFsKTt9LC8vIOWxleW8gOihjOS4jiBUcmVlVGFibGUg6YO96KaB5L2/55SoCnRvZ2dsZVJvd0V4cGFuc2lvbkFkYXB0ZXI6ZnVuY3Rpb24gdG9nZ2xlUm93RXhwYW5zaW9uQWRhcHRlcihyb3csZXhwYW5kZWQpe3ZhciBoYXNFeHBhbmRDb2x1bW49dGhpcy5zdGF0ZXMuY29sdW1ucy5zb21lKGZ1bmN0aW9uKF9yZWYpe3ZhciB0eXBlPV9yZWYudHlwZTtyZXR1cm4gdHlwZT09PSdleHBhbmQnO30pO2lmKGhhc0V4cGFuZENvbHVtbil7dGhpcy50b2dnbGVSb3dFeHBhbnNpb24ocm93LGV4cGFuZGVkKTt9ZWxzZXt0aGlzLnRvZ2dsZVRyZWVFeHBhbnNpb24ocm93LGV4cGFuZGVkKTt9fX19KTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9zdG9yZS9pbmRleC5qcwp3YXRjaGVyLnByb3RvdHlwZS5tdXRhdGlvbnM9e3NldERhdGE6ZnVuY3Rpb24gc2V0RGF0YShzdGF0ZXMsZGF0YSl7dmFyIGRhdGFJbnN0YW5jZUNoYW5nZWQ9c3RhdGVzLl9kYXRhIT09ZGF0YTtzdGF0ZXMuX2RhdGE9ZGF0YTt0aGlzLmV4ZWNRdWVyeSgpOy8vIOaVsOaNruWPmOWMlu+8jOabtOaWsOmDqOWIhuaVsOaNruOAggovLyDmsqHmnInkvb/nlKggY29tcHV0ZWTvvIzogIzmmK/miYvliqjmm7TmlrDpg6jliIbmlbDmja4gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNjY2MCNpc3N1ZWNvbW1lbnQtMzMxNDE3MTQwCnRoaXMudXBkYXRlQ3VycmVudFJvd0RhdGEoKTt0aGlzLnVwZGF0ZUV4cGFuZFJvd3MoKTtpZihzdGF0ZXMucmVzZXJ2ZVNlbGVjdGlvbil7dGhpcy5hc3NlcnRSb3dLZXkoKTt0aGlzLnVwZGF0ZVNlbGVjdGlvbkJ5Um93S2V5KCk7fWVsc2V7aWYoZGF0YUluc3RhbmNlQ2hhbmdlZCl7dGhpcy5jbGVhclNlbGVjdGlvbigpO31lbHNle3RoaXMuY2xlYW5TZWxlY3Rpb24oKTt9fXRoaXMudXBkYXRlQWxsU2VsZWN0ZWQoKTt0aGlzLnVwZGF0ZVRhYmxlU2Nyb2xsWSgpO30saW5zZXJ0Q29sdW1uOmZ1bmN0aW9uIGluc2VydENvbHVtbihzdGF0ZXMsY29sdW1uLGluZGV4LHBhcmVudCl7dmFyIGFycmF5PXN0YXRlcy5fY29sdW1ucztpZihwYXJlbnQpe2FycmF5PXBhcmVudC5jaGlsZHJlbjtpZighYXJyYXkpYXJyYXk9cGFyZW50LmNoaWxkcmVuPVtdO31pZih0eXBlb2YgaW5kZXghPT0ndW5kZWZpbmVkJyl7YXJyYXkuc3BsaWNlKGluZGV4LDAsY29sdW1uKTt9ZWxzZXthcnJheS5wdXNoKGNvbHVtbik7fWlmKGNvbHVtbi50eXBlPT09J3NlbGVjdGlvbicpe3N0YXRlcy5zZWxlY3RhYmxlPWNvbHVtbi5zZWxlY3RhYmxlO3N0YXRlcy5yZXNlcnZlU2VsZWN0aW9uPWNvbHVtbi5yZXNlcnZlU2VsZWN0aW9uO31pZih0aGlzLnRhYmxlLiRyZWFkeSl7dGhpcy51cGRhdGVDb2x1bW5zKCk7Ly8gaGFjayBmb3IgZHluYW1pY3MgaW5zZXJ0IGNvbHVtbgp0aGlzLnNjaGVkdWxlTGF5b3V0KCk7fX0scmVtb3ZlQ29sdW1uOmZ1bmN0aW9uIHJlbW92ZUNvbHVtbihzdGF0ZXMsY29sdW1uLHBhcmVudCl7dmFyIGFycmF5PXN0YXRlcy5fY29sdW1ucztpZihwYXJlbnQpe2FycmF5PXBhcmVudC5jaGlsZHJlbjtpZighYXJyYXkpYXJyYXk9cGFyZW50LmNoaWxkcmVuPVtdO31pZihhcnJheSl7YXJyYXkuc3BsaWNlKGFycmF5LmluZGV4T2YoY29sdW1uKSwxKTt9aWYodGhpcy50YWJsZS4kcmVhZHkpe3RoaXMudXBkYXRlQ29sdW1ucygpOy8vIGhhY2sgZm9yIGR5bmFtaWNzIHJlbW92ZSBjb2x1bW4KdGhpcy5zY2hlZHVsZUxheW91dCgpO319LHNvcnQ6ZnVuY3Rpb24gc29ydChzdGF0ZXMsb3B0aW9ucyl7dmFyIHByb3A9b3B0aW9ucy5wcm9wLG9yZGVyPW9wdGlvbnMub3JkZXIsaW5pdD1vcHRpb25zLmluaXQ7aWYocHJvcCl7dmFyIGNvbHVtbj1PYmplY3QodXRpbF9bImFycmF5RmluZCJdKShzdGF0ZXMuY29sdW1ucyxmdW5jdGlvbihjb2x1bW4pe3JldHVybiBjb2x1bW4ucHJvcGVydHk9PT1wcm9wO30pO2lmKGNvbHVtbil7Y29sdW1uLm9yZGVyPW9yZGVyO3RoaXMudXBkYXRlU29ydChjb2x1bW4scHJvcCxvcmRlcik7dGhpcy5jb21taXQoJ2NoYW5nZVNvcnRDb25kaXRpb24nLHtpbml0OmluaXR9KTt9fX0sY2hhbmdlU29ydENvbmRpdGlvbjpmdW5jdGlvbiBjaGFuZ2VTb3J0Q29uZGl0aW9uKHN0YXRlcyxvcHRpb25zKXsvLyDkv67lpI0gcHIgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9wdWxsLzE1MDEyIOWvvOiHtOeahCBidWcKdmFyIGNvbHVtbj1zdGF0ZXMuc29ydGluZ0NvbHVtbixwcm9wPXN0YXRlcy5zb3J0UHJvcCxvcmRlcj1zdGF0ZXMuc29ydE9yZGVyO2lmKG9yZGVyPT09bnVsbCl7c3RhdGVzLnNvcnRpbmdDb2x1bW49bnVsbDtzdGF0ZXMuc29ydFByb3A9bnVsbDt9dmFyIGluZ29yZT17ZmlsdGVyOnRydWV9O3RoaXMuZXhlY1F1ZXJ5KGluZ29yZSk7aWYoIW9wdGlvbnN8fCEob3B0aW9ucy5zaWxlbnR8fG9wdGlvbnMuaW5pdCkpe3RoaXMudGFibGUuJGVtaXQoJ3NvcnQtY2hhbmdlJyx7Y29sdW1uOmNvbHVtbixwcm9wOnByb3Asb3JkZXI6b3JkZXJ9KTt9dGhpcy51cGRhdGVUYWJsZVNjcm9sbFkoKTt9LGZpbHRlckNoYW5nZTpmdW5jdGlvbiBmaWx0ZXJDaGFuZ2Uoc3RhdGVzLG9wdGlvbnMpe3ZhciBjb2x1bW49b3B0aW9ucy5jb2x1bW4sdmFsdWVzPW9wdGlvbnMudmFsdWVzLHNpbGVudD1vcHRpb25zLnNpbGVudDt2YXIgbmV3RmlsdGVycz10aGlzLnVwZGF0ZUZpbHRlcnMoY29sdW1uLHZhbHVlcyk7dGhpcy5leGVjUXVlcnkoKTtpZighc2lsZW50KXt0aGlzLnRhYmxlLiRlbWl0KCdmaWx0ZXItY2hhbmdlJyxuZXdGaWx0ZXJzKTt9dGhpcy51cGRhdGVUYWJsZVNjcm9sbFkoKTt9LHRvZ2dsZUFsbFNlbGVjdGlvbjpmdW5jdGlvbiB0b2dnbGVBbGxTZWxlY3Rpb24oKXt0aGlzLnRvZ2dsZUFsbFNlbGVjdGlvbigpO30scm93U2VsZWN0ZWRDaGFuZ2VkOmZ1bmN0aW9uIHJvd1NlbGVjdGVkQ2hhbmdlZChzdGF0ZXMscm93KXt0aGlzLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpO3RoaXMudXBkYXRlQWxsU2VsZWN0ZWQoKTt9LHNldEhvdmVyUm93OmZ1bmN0aW9uIHNldEhvdmVyUm93KHN0YXRlcyxyb3cpe3N0YXRlcy5ob3ZlclJvdz1yb3c7fSxzZXRDdXJyZW50Um93OmZ1bmN0aW9uIHNldEN1cnJlbnRSb3coc3RhdGVzLHJvdyl7dGhpcy51cGRhdGVDdXJyZW50Um93KHJvdyk7fX07d2F0Y2hlci5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKG5hbWUpe3ZhciBtdXRhdGlvbnM9dGhpcy5tdXRhdGlvbnM7aWYobXV0YXRpb25zW25hbWVdKXtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPUFycmF5KF9sZW4+MT9fbGVuLTE6MCksX2tleT0xO19rZXk8X2xlbjtfa2V5Kyspe2FyZ3NbX2tleS0xXT1hcmd1bWVudHNbX2tleV07fW11dGF0aW9uc1tuYW1lXS5hcHBseSh0aGlzLFt0aGlzLnN0YXRlc10uY29uY2F0KGFyZ3MpKTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbiBub3QgZm91bmQ6ICcrbmFtZSk7fX07d2F0Y2hlci5wcm90b3R5cGUudXBkYXRlVGFibGVTY3JvbGxZPWZ1bmN0aW9uKCl7ZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5uZXh0VGljayh0aGlzLnRhYmxlLnVwZGF0ZVNjcm9sbFkpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfc3RvcmU9d2F0Y2hlcjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9zdG9yZS9oZWxwZXIuanMKZnVuY3Rpb24gY3JlYXRlU3RvcmUodGFibGUpe3ZhciBpbml0aWFsU3RhdGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzFdOnt9O2lmKCF0YWJsZSl7dGhyb3cgbmV3IEVycm9yKCdUYWJsZSBpcyByZXF1aXJlZC4nKTt9dmFyIHN0b3JlPW5ldyBzcmNfc3RvcmUoKTtzdG9yZS50YWJsZT10YWJsZTsvLyBmaXggaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQwNzUKLy8gcmVsYXRlZCBwciBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L3B1bGwvMTQxNDYKc3RvcmUudG9nZ2xlQWxsU2VsZWN0aW9uPWRlYm91bmNlX2RlZmF1bHQoKSgxMCxzdG9yZS5fdG9nZ2xlQWxsU2VsZWN0aW9uKTtPYmplY3Qua2V5cyhpbml0aWFsU3RhdGUpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtzdG9yZS5zdGF0ZXNba2V5XT1pbml0aWFsU3RhdGVba2V5XTt9KTtyZXR1cm4gc3RvcmU7fWZ1bmN0aW9uIG1hcFN0YXRlcyhtYXBwZXIpe3ZhciByZXM9e307T2JqZWN0LmtleXMobWFwcGVyKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7dmFyIHZhbHVlPW1hcHBlcltrZXldO3ZhciBmbj12b2lkIDA7aWYodHlwZW9mIHZhbHVlPT09J3N0cmluZycpe2ZuPWZ1bmN0aW9uIGZuKCl7cmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVzW3ZhbHVlXTt9O31lbHNlIGlmKHR5cGVvZiB2YWx1ZT09PSdmdW5jdGlvbicpe2ZuPWZ1bmN0aW9uIGZuKCl7cmV0dXJuIHZhbHVlLmNhbGwodGhpcyx0aGlzLnN0b3JlLnN0YXRlcyk7fTt9ZWxzZXtjb25zb2xlLmVycm9yKCdpbnZhbGlkIHZhbHVlIHR5cGUnKTt9aWYoZm4pe3Jlc1trZXldPWZuO319KTtyZXR1cm4gcmVzO307Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsYmFyLXdpZHRoIgp2YXIgc2Nyb2xsYmFyX3dpZHRoXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTt2YXIgc2Nyb2xsYmFyX3dpZHRoX2RlZmF1bHQ9LyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzY3JvbGxiYXJfd2lkdGhfKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS1sYXlvdXQuanMKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTt9fXZhciB0YWJsZV9sYXlvdXRfVGFibGVMYXlvdXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBUYWJsZUxheW91dChvcHRpb25zKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxUYWJsZUxheW91dCk7dGhpcy5vYnNlcnZlcnM9W107dGhpcy50YWJsZT1udWxsO3RoaXMuc3RvcmU9bnVsbDt0aGlzLmNvbHVtbnM9bnVsbDt0aGlzLmZpdD10cnVlO3RoaXMuc2hvd0hlYWRlcj10cnVlO3RoaXMuaGVpZ2h0PW51bGw7dGhpcy5zY3JvbGxYPWZhbHNlO3RoaXMuc2Nyb2xsWT1mYWxzZTt0aGlzLmJvZHlXaWR0aD1udWxsO3RoaXMuZml4ZWRXaWR0aD1udWxsO3RoaXMucmlnaHRGaXhlZFdpZHRoPW51bGw7dGhpcy50YWJsZUhlaWdodD1udWxsO3RoaXMuaGVhZGVySGVpZ2h0PTQ0Oy8vIFRhYmxlIEhlYWRlciBIZWlnaHQKdGhpcy5hcHBlbmRIZWlnaHQ9MDsvLyBBcHBlbmQgU2xvdCBIZWlnaHQKdGhpcy5mb290ZXJIZWlnaHQ9NDQ7Ly8gVGFibGUgRm9vdGVyIEhlaWdodAp0aGlzLnZpZXdwb3J0SGVpZ2h0PW51bGw7Ly8gVGFibGUgSGVpZ2h0IC0gU2Nyb2xsIEJhciBIZWlnaHQKdGhpcy5ib2R5SGVpZ2h0PW51bGw7Ly8gVGFibGUgSGVpZ2h0IC0gVGFibGUgSGVhZGVyIEhlaWdodAp0aGlzLmZpeGVkQm9keUhlaWdodD1udWxsOy8vIFRhYmxlIEhlaWdodCAtIFRhYmxlIEhlYWRlciBIZWlnaHQgLSBTY3JvbGwgQmFyIEhlaWdodAp0aGlzLmd1dHRlcldpZHRoPXNjcm9sbGJhcl93aWR0aF9kZWZhdWx0KCkoKTtmb3IodmFyIG5hbWUgaW4gb3B0aW9ucyl7aWYob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSl7dGhpc1tuYW1lXT1vcHRpb25zW25hbWVdO319aWYoIXRoaXMudGFibGUpe3Rocm93IG5ldyBFcnJvcigndGFibGUgaXMgcmVxdWlyZWQgZm9yIFRhYmxlIExheW91dCcpO31pZighdGhpcy5zdG9yZSl7dGhyb3cgbmV3IEVycm9yKCdzdG9yZSBpcyByZXF1aXJlZCBmb3IgVGFibGUgTGF5b3V0Jyk7fX1UYWJsZUxheW91dC5wcm90b3R5cGUudXBkYXRlU2Nyb2xsWT1mdW5jdGlvbiB1cGRhdGVTY3JvbGxZKCl7dmFyIGhlaWdodD10aGlzLmhlaWdodDtpZihoZWlnaHQ9PT1udWxsKXJldHVybiBmYWxzZTt2YXIgYm9keVdyYXBwZXI9dGhpcy50YWJsZS5ib2R5V3JhcHBlcjtpZih0aGlzLnRhYmxlLiRlbCYmYm9keVdyYXBwZXIpe3ZhciBib2R5PWJvZHlXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5lbC10YWJsZV9fYm9keScpO3ZhciBwcmV2U2Nyb2xsWT10aGlzLnNjcm9sbFk7dmFyIHNjcm9sbFk9Ym9keS5vZmZzZXRIZWlnaHQ+dGhpcy5ib2R5SGVpZ2h0O3RoaXMuc2Nyb2xsWT1zY3JvbGxZO3JldHVybiBwcmV2U2Nyb2xsWSE9PXNjcm9sbFk7fXJldHVybiBmYWxzZTt9O1RhYmxlTGF5b3V0LnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24gc2V0SGVpZ2h0KHZhbHVlKXt2YXIgX3RoaXM9dGhpczt2YXIgcHJvcD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMV06J2hlaWdodCc7aWYoZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5wcm90b3R5cGUuJGlzU2VydmVyKXJldHVybjt2YXIgZWw9dGhpcy50YWJsZS4kZWw7dmFsdWU9cGFyc2VIZWlnaHQodmFsdWUpO3RoaXMuaGVpZ2h0PXZhbHVlO2lmKCFlbCYmKHZhbHVlfHx2YWx1ZT09PTApKXJldHVybiBleHRlcm5hbF92dWVfZGVmYXVsdC5hLm5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIF90aGlzLnNldEhlaWdodCh2YWx1ZSxwcm9wKTt9KTtpZih0eXBlb2YgdmFsdWU9PT0nbnVtYmVyJyl7ZWwuc3R5bGVbcHJvcF09dmFsdWUrJ3B4Jzt0aGlzLnVwZGF0ZUVsc0hlaWdodCgpO31lbHNlIGlmKHR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnKXtlbC5zdHlsZVtwcm9wXT12YWx1ZTt0aGlzLnVwZGF0ZUVsc0hlaWdodCgpO319O1RhYmxlTGF5b3V0LnByb3RvdHlwZS5zZXRNYXhIZWlnaHQ9ZnVuY3Rpb24gc2V0TWF4SGVpZ2h0KHZhbHVlKXt0aGlzLnNldEhlaWdodCh2YWx1ZSwnbWF4LWhlaWdodCcpO307VGFibGVMYXlvdXQucHJvdG90eXBlLmdldEZsYXR0ZW5Db2x1bW5zPWZ1bmN0aW9uIGdldEZsYXR0ZW5Db2x1bW5zKCl7dmFyIGZsYXR0ZW5Db2x1bW5zPVtdO3ZhciBjb2x1bW5zPXRoaXMudGFibGUuY29sdW1ucztjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24oY29sdW1uKXtpZihjb2x1bW4uaXNDb2x1bW5Hcm91cCl7ZmxhdHRlbkNvbHVtbnMucHVzaC5hcHBseShmbGF0dGVuQ29sdW1ucyxjb2x1bW4uY29sdW1ucyk7fWVsc2V7ZmxhdHRlbkNvbHVtbnMucHVzaChjb2x1bW4pO319KTtyZXR1cm4gZmxhdHRlbkNvbHVtbnM7fTtUYWJsZUxheW91dC5wcm90b3R5cGUudXBkYXRlRWxzSGVpZ2h0PWZ1bmN0aW9uIHVwZGF0ZUVsc0hlaWdodCgpe3ZhciBfdGhpczI9dGhpcztpZighdGhpcy50YWJsZS4kcmVhZHkpcmV0dXJuIGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEubmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMyLnVwZGF0ZUVsc0hlaWdodCgpO30pO3ZhciBfdGFibGUkJHJlZnM9dGhpcy50YWJsZS4kcmVmcyxoZWFkZXJXcmFwcGVyPV90YWJsZSQkcmVmcy5oZWFkZXJXcmFwcGVyLGFwcGVuZFdyYXBwZXI9X3RhYmxlJCRyZWZzLmFwcGVuZFdyYXBwZXIsZm9vdGVyV3JhcHBlcj1fdGFibGUkJHJlZnMuZm9vdGVyV3JhcHBlcjt0aGlzLmFwcGVuZEhlaWdodD1hcHBlbmRXcmFwcGVyP2FwcGVuZFdyYXBwZXIub2Zmc2V0SGVpZ2h0OjA7aWYodGhpcy5zaG93SGVhZGVyJiYhaGVhZGVyV3JhcHBlcilyZXR1cm47Ly8gZml4IGlzc3VlIChodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L3B1bGwvMTY5NTYpCnZhciBoZWFkZXJUckVsbT1oZWFkZXJXcmFwcGVyP2hlYWRlcldyYXBwZXIucXVlcnlTZWxlY3RvcignLmVsLXRhYmxlX19oZWFkZXIgdHInKTpudWxsO3ZhciBub25lSGVhZGVyPXRoaXMuaGVhZGVyRGlzcGxheU5vbmUoaGVhZGVyVHJFbG0pO3ZhciBoZWFkZXJIZWlnaHQ9dGhpcy5oZWFkZXJIZWlnaHQ9IXRoaXMuc2hvd0hlYWRlcj8wOmhlYWRlcldyYXBwZXIub2Zmc2V0SGVpZ2h0O2lmKHRoaXMuc2hvd0hlYWRlciYmIW5vbmVIZWFkZXImJmhlYWRlcldyYXBwZXIub2Zmc2V0V2lkdGg+MCYmKHRoaXMudGFibGUuY29sdW1uc3x8W10pLmxlbmd0aD4wJiZoZWFkZXJIZWlnaHQ8Mil7cmV0dXJuIGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEubmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMyLnVwZGF0ZUVsc0hlaWdodCgpO30pO312YXIgdGFibGVIZWlnaHQ9dGhpcy50YWJsZUhlaWdodD10aGlzLnRhYmxlLiRlbC5jbGllbnRIZWlnaHQ7dmFyIGZvb3RlckhlaWdodD10aGlzLmZvb3RlckhlaWdodD1mb290ZXJXcmFwcGVyP2Zvb3RlcldyYXBwZXIub2Zmc2V0SGVpZ2h0OjA7aWYodGhpcy5oZWlnaHQhPT1udWxsKXt0aGlzLmJvZHlIZWlnaHQ9dGFibGVIZWlnaHQtaGVhZGVySGVpZ2h0LWZvb3RlckhlaWdodCsoZm9vdGVyV3JhcHBlcj8xOjApO310aGlzLmZpeGVkQm9keUhlaWdodD10aGlzLnNjcm9sbFg/dGhpcy5ib2R5SGVpZ2h0LXRoaXMuZ3V0dGVyV2lkdGg6dGhpcy5ib2R5SGVpZ2h0O3ZhciBub0RhdGE9ISh0aGlzLnN0b3JlLnN0YXRlcy5kYXRhJiZ0aGlzLnN0b3JlLnN0YXRlcy5kYXRhLmxlbmd0aCk7dGhpcy52aWV3cG9ydEhlaWdodD10aGlzLnNjcm9sbFg/dGFibGVIZWlnaHQtKG5vRGF0YT8wOnRoaXMuZ3V0dGVyV2lkdGgpOnRhYmxlSGVpZ2h0O3RoaXMudXBkYXRlU2Nyb2xsWSgpO3RoaXMubm90aWZ5T2JzZXJ2ZXJzKCdzY3JvbGxhYmxlJyk7fTtUYWJsZUxheW91dC5wcm90b3R5cGUuaGVhZGVyRGlzcGxheU5vbmU9ZnVuY3Rpb24gaGVhZGVyRGlzcGxheU5vbmUoZWxtKXtpZighZWxtKXJldHVybiB0cnVlO3ZhciBoZWFkZXJDaGlsZD1lbG07d2hpbGUoaGVhZGVyQ2hpbGQudGFnTmFtZSE9PSdESVYnKXtpZihnZXRDb21wdXRlZFN0eWxlKGhlYWRlckNoaWxkKS5kaXNwbGF5PT09J25vbmUnKXtyZXR1cm4gdHJ1ZTt9aGVhZGVyQ2hpbGQ9aGVhZGVyQ2hpbGQucGFyZW50RWxlbWVudDt9cmV0dXJuIGZhbHNlO307VGFibGVMYXlvdXQucHJvdG90eXBlLnVwZGF0ZUNvbHVtbnNXaWR0aD1mdW5jdGlvbiB1cGRhdGVDb2x1bW5zV2lkdGgoKXtpZihleHRlcm5hbF92dWVfZGVmYXVsdC5hLnByb3RvdHlwZS4kaXNTZXJ2ZXIpcmV0dXJuO3ZhciBmaXQ9dGhpcy5maXQ7dmFyIGJvZHlXaWR0aD10aGlzLnRhYmxlLiRlbC5jbGllbnRXaWR0aDt2YXIgYm9keU1pbldpZHRoPTA7dmFyIGZsYXR0ZW5Db2x1bW5zPXRoaXMuZ2V0RmxhdHRlbkNvbHVtbnMoKTt2YXIgZmxleENvbHVtbnM9ZmxhdHRlbkNvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uKGNvbHVtbil7cmV0dXJuIHR5cGVvZiBjb2x1bW4ud2lkdGghPT0nbnVtYmVyJzt9KTtmbGF0dGVuQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbil7Ly8gQ2xlYW4gdGhvc2UgY29sdW1ucyB3aG9zZSB3aWR0aCBjaGFuZ2VkIGZyb20gZmxleCB0byB1bmZsZXgKaWYodHlwZW9mIGNvbHVtbi53aWR0aD09PSdudW1iZXInJiZjb2x1bW4ucmVhbFdpZHRoKWNvbHVtbi5yZWFsV2lkdGg9bnVsbDt9KTtpZihmbGV4Q29sdW1ucy5sZW5ndGg+MCYmZml0KXtmbGF0dGVuQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbil7Ym9keU1pbldpZHRoKz1jb2x1bW4ud2lkdGh8fGNvbHVtbi5taW5XaWR0aHx8ODA7fSk7dmFyIHNjcm9sbFlXaWR0aD10aGlzLnNjcm9sbFk/dGhpcy5ndXR0ZXJXaWR0aDowO2lmKGJvZHlNaW5XaWR0aDw9Ym9keVdpZHRoLXNjcm9sbFlXaWR0aCl7Ly8gRE9OJ1QgSEFWRSBTQ1JPTEwgQkFSCnRoaXMuc2Nyb2xsWD1mYWxzZTt2YXIgdG90YWxGbGV4V2lkdGg9Ym9keVdpZHRoLXNjcm9sbFlXaWR0aC1ib2R5TWluV2lkdGg7aWYoZmxleENvbHVtbnMubGVuZ3RoPT09MSl7ZmxleENvbHVtbnNbMF0ucmVhbFdpZHRoPShmbGV4Q29sdW1uc1swXS5taW5XaWR0aHx8ODApK3RvdGFsRmxleFdpZHRoO31lbHNle3ZhciBhbGxDb2x1bW5zV2lkdGg9ZmxleENvbHVtbnMucmVkdWNlKGZ1bmN0aW9uKHByZXYsY29sdW1uKXtyZXR1cm4gcHJldisoY29sdW1uLm1pbldpZHRofHw4MCk7fSwwKTt2YXIgZmxleFdpZHRoUGVyUGl4ZWw9dG90YWxGbGV4V2lkdGgvYWxsQ29sdW1uc1dpZHRoO3ZhciBub25lRmlyc3RXaWR0aD0wO2ZsZXhDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24oY29sdW1uLGluZGV4KXtpZihpbmRleD09PTApcmV0dXJuO3ZhciBmbGV4V2lkdGg9TWF0aC5mbG9vcigoY29sdW1uLm1pbldpZHRofHw4MCkqZmxleFdpZHRoUGVyUGl4ZWwpO25vbmVGaXJzdFdpZHRoKz1mbGV4V2lkdGg7Y29sdW1uLnJlYWxXaWR0aD0oY29sdW1uLm1pbldpZHRofHw4MCkrZmxleFdpZHRoO30pO2ZsZXhDb2x1bW5zWzBdLnJlYWxXaWR0aD0oZmxleENvbHVtbnNbMF0ubWluV2lkdGh8fDgwKSt0b3RhbEZsZXhXaWR0aC1ub25lRmlyc3RXaWR0aDt9fWVsc2V7Ly8gSEFWRSBIT1JJWk9OVEFMIFNDUk9MTCBCQVIKdGhpcy5zY3JvbGxYPXRydWU7ZmxleENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbihjb2x1bW4pe2NvbHVtbi5yZWFsV2lkdGg9Y29sdW1uLm1pbldpZHRoO30pO310aGlzLmJvZHlXaWR0aD1NYXRoLm1heChib2R5TWluV2lkdGgsYm9keVdpZHRoKTt0aGlzLnRhYmxlLnJlc2l6ZVN0YXRlLndpZHRoPXRoaXMuYm9keVdpZHRoO31lbHNle2ZsYXR0ZW5Db2x1bW5zLmZvckVhY2goZnVuY3Rpb24oY29sdW1uKXtpZighY29sdW1uLndpZHRoJiYhY29sdW1uLm1pbldpZHRoKXtjb2x1bW4ucmVhbFdpZHRoPTgwO31lbHNle2NvbHVtbi5yZWFsV2lkdGg9Y29sdW1uLndpZHRofHxjb2x1bW4ubWluV2lkdGg7fWJvZHlNaW5XaWR0aCs9Y29sdW1uLnJlYWxXaWR0aDt9KTt0aGlzLnNjcm9sbFg9Ym9keU1pbldpZHRoPmJvZHlXaWR0aDt0aGlzLmJvZHlXaWR0aD1ib2R5TWluV2lkdGg7fXZhciBmaXhlZENvbHVtbnM9dGhpcy5zdG9yZS5zdGF0ZXMuZml4ZWRDb2x1bW5zO2lmKGZpeGVkQ29sdW1ucy5sZW5ndGg+MCl7dmFyIGZpeGVkV2lkdGg9MDtmaXhlZENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbihjb2x1bW4pe2ZpeGVkV2lkdGgrPWNvbHVtbi5yZWFsV2lkdGh8fGNvbHVtbi53aWR0aDt9KTt0aGlzLmZpeGVkV2lkdGg9Zml4ZWRXaWR0aDt9dmFyIHJpZ2h0Rml4ZWRDb2x1bW5zPXRoaXMuc3RvcmUuc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zO2lmKHJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aD4wKXt2YXIgcmlnaHRGaXhlZFdpZHRoPTA7cmlnaHRGaXhlZENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbihjb2x1bW4pe3JpZ2h0Rml4ZWRXaWR0aCs9Y29sdW1uLnJlYWxXaWR0aHx8Y29sdW1uLndpZHRoO30pO3RoaXMucmlnaHRGaXhlZFdpZHRoPXJpZ2h0Rml4ZWRXaWR0aDt9dGhpcy5ub3RpZnlPYnNlcnZlcnMoJ2NvbHVtbnMnKTt9O1RhYmxlTGF5b3V0LnByb3RvdHlwZS5hZGRPYnNlcnZlcj1mdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcil7dGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7fTtUYWJsZUxheW91dC5wcm90b3R5cGUucmVtb3ZlT2JzZXJ2ZXI9ZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2ZXIpe3ZhciBpbmRleD10aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKTtpZihpbmRleCE9PS0xKXt0aGlzLm9ic2VydmVycy5zcGxpY2UoaW5kZXgsMSk7fX07VGFibGVMYXlvdXQucHJvdG90eXBlLm5vdGlmeU9ic2VydmVycz1mdW5jdGlvbiBub3RpZnlPYnNlcnZlcnMoZXZlbnQpe3ZhciBfdGhpczM9dGhpczt2YXIgb2JzZXJ2ZXJzPXRoaXMub2JzZXJ2ZXJzO29ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uKG9ic2VydmVyKXtzd2l0Y2goZXZlbnQpe2Nhc2UnY29sdW1ucyc6b2JzZXJ2ZXIub25Db2x1bW5zQ2hhbmdlKF90aGlzMyk7YnJlYWs7Y2FzZSdzY3JvbGxhYmxlJzpvYnNlcnZlci5vblNjcm9sbGFibGVDaGFuZ2UoX3RoaXMzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignVGFibGUgTGF5b3V0IGRvblwndCBoYXZlIGV2ZW50ICcrZXZlbnQrJy4nKTt9fSk7fTtyZXR1cm4gVGFibGVMYXlvdXQ7fSgpOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGFibGVfbGF5b3V0PXRhYmxlX2xheW91dF9UYWJsZUxheW91dDsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9sYXlvdXQtb2JzZXJ2ZXIuanMKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBsYXlvdXRfb2JzZXJ2ZXI9e2NyZWF0ZWQ6ZnVuY3Rpb24gY3JlYXRlZCgpe3RoaXMudGFibGVMYXlvdXQuYWRkT2JzZXJ2ZXIodGhpcyk7fSxkZXN0cm95ZWQ6ZnVuY3Rpb24gZGVzdHJveWVkKCl7dGhpcy50YWJsZUxheW91dC5yZW1vdmVPYnNlcnZlcih0aGlzKTt9LGNvbXB1dGVkOnt0YWJsZUxheW91dDpmdW5jdGlvbiB0YWJsZUxheW91dCgpe3ZhciBsYXlvdXQ9dGhpcy5sYXlvdXQ7aWYoIWxheW91dCYmdGhpcy50YWJsZSl7bGF5b3V0PXRoaXMudGFibGUubGF5b3V0O31pZighbGF5b3V0KXt0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCB0YWJsZSBsYXlvdXQuJyk7fXJldHVybiBsYXlvdXQ7fX0sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dGhpcy5vbkNvbHVtbnNDaGFuZ2UodGhpcy50YWJsZUxheW91dCk7dGhpcy5vblNjcm9sbGFibGVDaGFuZ2UodGhpcy50YWJsZUxheW91dCk7fSx1cGRhdGVkOmZ1bmN0aW9uIHVwZGF0ZWQoKXtpZih0aGlzLl9fdXBkYXRlZF9fKXJldHVybjt0aGlzLm9uQ29sdW1uc0NoYW5nZSh0aGlzLnRhYmxlTGF5b3V0KTt0aGlzLm9uU2Nyb2xsYWJsZUNoYW5nZSh0aGlzLnRhYmxlTGF5b3V0KTt0aGlzLl9fdXBkYXRlZF9fPXRydWU7fSxtZXRob2RzOntvbkNvbHVtbnNDaGFuZ2U6ZnVuY3Rpb24gb25Db2x1bW5zQ2hhbmdlKGxheW91dCl7dmFyIGNvbHM9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnY29sZ3JvdXAgPiBjb2wnKTtpZighY29scy5sZW5ndGgpcmV0dXJuO3ZhciBmbGF0dGVuQ29sdW1ucz1sYXlvdXQuZ2V0RmxhdHRlbkNvbHVtbnMoKTt2YXIgY29sdW1uc01hcD17fTtmbGF0dGVuQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbil7Y29sdW1uc01hcFtjb2x1bW4uaWRdPWNvbHVtbjt9KTtmb3IodmFyIGk9MCxqPWNvbHMubGVuZ3RoO2k8ajtpKyspe3ZhciBjb2w9Y29sc1tpXTt2YXIgbmFtZT1jb2wuZ2V0QXR0cmlidXRlKCduYW1lJyk7dmFyIGNvbHVtbj1jb2x1bW5zTWFwW25hbWVdO2lmKGNvbHVtbil7Y29sLnNldEF0dHJpYnV0ZSgnd2lkdGgnLGNvbHVtbi5yZWFsV2lkdGh8fGNvbHVtbi53aWR0aCk7fX19LG9uU2Nyb2xsYWJsZUNoYW5nZTpmdW5jdGlvbiBvblNjcm9sbGFibGVDaGFuZ2UobGF5b3V0KXt2YXIgY29scz10aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdjb2xncm91cCA+IGNvbFtuYW1lPWd1dHRlcl0nKTtmb3IodmFyIGk9MCxqPWNvbHMubGVuZ3RoO2k8ajtpKyspe3ZhciBjb2w9Y29sc1tpXTtjb2wuc2V0QXR0cmlidXRlKCd3aWR0aCcsbGF5b3V0LnNjcm9sbFk/bGF5b3V0Lmd1dHRlcldpZHRoOicwJyk7fXZhciB0aHM9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgndGguZ3V0dGVyJyk7Zm9yKHZhciBfaT0wLF9qPXRocy5sZW5ndGg7X2k8X2o7X2krKyl7dmFyIHRoPXRoc1tfaV07dGguc3R5bGUud2lkdGg9bGF5b3V0LnNjcm9sbFk/bGF5b3V0Lmd1dHRlcldpZHRoKydweCc6JzAnO3RoLnN0eWxlLmRpc3BsYXk9bGF5b3V0LnNjcm9sbFk/Jyc6J25vbmUnO319fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvdGFibGUtYm9keS5qcwp2YXIgdGFibGVfYm9keV90eXBlb2Y9dHlwZW9mIFN5bWJvbD09PSJmdW5jdGlvbiImJl90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcik9PT0ic3ltYm9sIj9mdW5jdGlvbihvYmope3JldHVybiBfdHlwZW9mMihvYmopO306ZnVuY3Rpb24ob2JqKXtyZXR1cm4gb2JqJiZ0eXBlb2YgU3ltYm9sPT09ImZ1bmN0aW9uIiYmb2JqLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZvYmohPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOl90eXBlb2YyKG9iaik7fTt2YXIgdGFibGVfYm9keV9leHRlbmRzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1hcmd1bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gc291cmNlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLGtleSkpe3RhcmdldFtrZXldPXNvdXJjZVtrZXldO319fXJldHVybiB0YXJnZXQ7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHRhYmxlX2JvZHk9e25hbWU6J0VsVGFibGVCb2R5JyxtaXhpbnM6W2xheW91dF9vYnNlcnZlcl0sY29tcG9uZW50czp7RWxDaGVja2JveDpjaGVja2JveF9kZWZhdWx0LmEsRWxUb29sdGlwOnRvb2x0aXBfZGVmYXVsdC5hfSxwcm9wczp7c3RvcmU6e3JlcXVpcmVkOnRydWV9LHN0cmlwZTpCb29sZWFuLGNvbnRleHQ6e30scm93Q2xhc3NOYW1lOltTdHJpbmcsRnVuY3Rpb25dLHJvd1N0eWxlOltPYmplY3QsRnVuY3Rpb25dLGZpeGVkOlN0cmluZyxoaWdobGlnaHQ6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihoKXt2YXIgX3RoaXM9dGhpczt2YXIgZGF0YT10aGlzLmRhdGF8fFtdO3JldHVybiBoKCd0YWJsZScseydjbGFzcyc6J2VsLXRhYmxlX19ib2R5JyxhdHRyczp7Y2VsbHNwYWNpbmc6JzAnLGNlbGxwYWRkaW5nOicwJyxib3JkZXI6JzAnfX0sW2goJ2NvbGdyb3VwJyxbdGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4pe3JldHVybiBoKCdjb2wnLHthdHRyczp7bmFtZTpjb2x1bW4uaWR9LGtleTpjb2x1bW4uaWR9KTt9KV0pLGgoJ3Rib2R5JyxbZGF0YS5yZWR1Y2UoZnVuY3Rpb24oYWNjLHJvdyl7cmV0dXJuIGFjYy5jb25jYXQoX3RoaXMud3JhcHBlZFJvd1JlbmRlcihyb3csYWNjLmxlbmd0aCkpO30sW10pLGgoJ2VsLXRvb2x0aXAnLHthdHRyczp7ZWZmZWN0OnRoaXMudGFibGUudG9vbHRpcEVmZmVjdCxwbGFjZW1lbnQ6J3RvcCcsY29udGVudDp0aGlzLnRvb2x0aXBDb250ZW50fSxyZWY6J3Rvb2x0aXAnfSldKV0pO30sY29tcHV0ZWQ6dGFibGVfYm9keV9leHRlbmRzKHt0YWJsZTpmdW5jdGlvbiB0YWJsZSgpe3JldHVybiB0aGlzLiRwYXJlbnQ7fX0sbWFwU3RhdGVzKHtkYXRhOidkYXRhJyxjb2x1bW5zOidjb2x1bW5zJyx0cmVlSW5kZW50OidpbmRlbnQnLGxlZnRGaXhlZExlYWZDb3VudDonZml4ZWRMZWFmQ29sdW1uc0xlbmd0aCcscmlnaHRGaXhlZExlYWZDb3VudDoncmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoJyxjb2x1bW5zQ291bnQ6ZnVuY3Rpb24gY29sdW1uc0NvdW50KHN0YXRlcyl7cmV0dXJuIHN0YXRlcy5jb2x1bW5zLmxlbmd0aDt9LGxlZnRGaXhlZENvdW50OmZ1bmN0aW9uIGxlZnRGaXhlZENvdW50KHN0YXRlcyl7cmV0dXJuIHN0YXRlcy5maXhlZENvbHVtbnMubGVuZ3RoO30scmlnaHRGaXhlZENvdW50OmZ1bmN0aW9uIHJpZ2h0Rml4ZWRDb3VudChzdGF0ZXMpe3JldHVybiBzdGF0ZXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoO30saGFzRXhwYW5kQ29sdW1uOmZ1bmN0aW9uIGhhc0V4cGFuZENvbHVtbihzdGF0ZXMpe3JldHVybiBzdGF0ZXMuY29sdW1ucy5zb21lKGZ1bmN0aW9uKF9yZWYpe3ZhciB0eXBlPV9yZWYudHlwZTtyZXR1cm4gdHlwZT09PSdleHBhbmQnO30pO319KSx7Zmlyc3REZWZhdWx0Q29sdW1uSW5kZXg6ZnVuY3Rpb24gZmlyc3REZWZhdWx0Q29sdW1uSW5kZXgoKXtyZXR1cm4gT2JqZWN0KHV0aWxfWyJhcnJheUZpbmRJbmRleCJdKSh0aGlzLmNvbHVtbnMsZnVuY3Rpb24oX3JlZjIpe3ZhciB0eXBlPV9yZWYyLnR5cGU7cmV0dXJuIHR5cGU9PT0nZGVmYXVsdCc7fSk7fX0pLHdhdGNoOnsvLyBkb24ndCB0cmlnZ2VyIGdldHRlciBvZiBjdXJyZW50Um93IGluIGdldENlbGxDbGFzcy4gc2VlIGh0dHBzOi8vanNmaWRkbGUubmV0L29lMmI0aHF0LwovLyB1cGRhdGUgRE9NIG1hbnVhbGx5LiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9wdWxsLzEzOTU0L2ZpbGVzI2RpZmYtOWI0NTBjMDBkMGE5ZGVjMGZmYWQ1YTMxNzY5NzJlNDAKJ3N0b3JlLnN0YXRlcy5ob3ZlclJvdyc6ZnVuY3Rpb24gc3RvcmVTdGF0ZXNIb3ZlclJvdyhuZXdWYWwsb2xkVmFsKXt2YXIgX3RoaXMyPXRoaXM7aWYoIXRoaXMuc3RvcmUuc3RhdGVzLmlzQ29tcGxleHx8dGhpcy4kaXNTZXJ2ZXIpcmV0dXJuO3ZhciByYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtpZighcmFmKXtyYWY9ZnVuY3Rpb24gcmFmKGZuKXtyZXR1cm4gc2V0VGltZW91dChmbiwxNik7fTt9cmFmKGZ1bmN0aW9uKCl7dmFyIHJvd3M9X3RoaXMyLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtdGFibGVfX3JvdycpO3ZhciBvbGRSb3c9cm93c1tvbGRWYWxdO3ZhciBuZXdSb3c9cm93c1tuZXdWYWxdO2lmKG9sZFJvdyl7T2JqZWN0KGRvbV9bInJlbW92ZUNsYXNzIl0pKG9sZFJvdywnaG92ZXItcm93Jyk7fWlmKG5ld1Jvdyl7T2JqZWN0KGRvbV9bImFkZENsYXNzIl0pKG5ld1JvdywnaG92ZXItcm93Jyk7fX0pO319LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnt0b29sdGlwQ29udGVudDonJ307fSxjcmVhdGVkOmZ1bmN0aW9uIGNyZWF0ZWQoKXt0aGlzLmFjdGl2YXRlVG9vbHRpcD1kZWJvdW5jZV9kZWZhdWx0KCkoNTAsZnVuY3Rpb24odG9vbHRpcCl7cmV0dXJuIHRvb2x0aXAuaGFuZGxlU2hvd1BvcHBlcigpO30pO30sbWV0aG9kczp7Z2V0S2V5T2ZSb3c6ZnVuY3Rpb24gZ2V0S2V5T2ZSb3cocm93LGluZGV4KXt2YXIgcm93S2V5PXRoaXMudGFibGUucm93S2V5O2lmKHJvd0tleSl7cmV0dXJuIGdldFJvd0lkZW50aXR5KHJvdyxyb3dLZXkpO31yZXR1cm4gaW5kZXg7fSxpc0NvbHVtbkhpZGRlbjpmdW5jdGlvbiBpc0NvbHVtbkhpZGRlbihpbmRleCl7aWYodGhpcy5maXhlZD09PXRydWV8fHRoaXMuZml4ZWQ9PT0nbGVmdCcpe3JldHVybiBpbmRleD49dGhpcy5sZWZ0Rml4ZWRMZWFmQ291bnQ7fWVsc2UgaWYodGhpcy5maXhlZD09PSdyaWdodCcpe3JldHVybiBpbmRleDx0aGlzLmNvbHVtbnNDb3VudC10aGlzLnJpZ2h0Rml4ZWRMZWFmQ291bnQ7fWVsc2V7cmV0dXJuIGluZGV4PHRoaXMubGVmdEZpeGVkTGVhZkNvdW50fHxpbmRleD49dGhpcy5jb2x1bW5zQ291bnQtdGhpcy5yaWdodEZpeGVkTGVhZkNvdW50O319LGdldFNwYW46ZnVuY3Rpb24gZ2V0U3Bhbihyb3csY29sdW1uLHJvd0luZGV4LGNvbHVtbkluZGV4KXt2YXIgcm93c3Bhbj0xO3ZhciBjb2xzcGFuPTE7dmFyIGZuPXRoaXMudGFibGUuc3Bhbk1ldGhvZDtpZih0eXBlb2YgZm49PT0nZnVuY3Rpb24nKXt2YXIgcmVzdWx0PWZuKHtyb3c6cm93LGNvbHVtbjpjb2x1bW4scm93SW5kZXg6cm93SW5kZXgsY29sdW1uSW5kZXg6Y29sdW1uSW5kZXh9KTtpZihBcnJheS5pc0FycmF5KHJlc3VsdCkpe3Jvd3NwYW49cmVzdWx0WzBdO2NvbHNwYW49cmVzdWx0WzFdO31lbHNlIGlmKCh0eXBlb2YgcmVzdWx0PT09J3VuZGVmaW5lZCc/J3VuZGVmaW5lZCc6dGFibGVfYm9keV90eXBlb2YocmVzdWx0KSk9PT0nb2JqZWN0Jyl7cm93c3Bhbj1yZXN1bHQucm93c3Bhbjtjb2xzcGFuPXJlc3VsdC5jb2xzcGFuO319cmV0dXJue3Jvd3NwYW46cm93c3Bhbixjb2xzcGFuOmNvbHNwYW59O30sZ2V0Um93U3R5bGU6ZnVuY3Rpb24gZ2V0Um93U3R5bGUocm93LHJvd0luZGV4KXt2YXIgcm93U3R5bGU9dGhpcy50YWJsZS5yb3dTdHlsZTtpZih0eXBlb2Ygcm93U3R5bGU9PT0nZnVuY3Rpb24nKXtyZXR1cm4gcm93U3R5bGUuY2FsbChudWxsLHtyb3c6cm93LHJvd0luZGV4OnJvd0luZGV4fSk7fXJldHVybiByb3dTdHlsZXx8bnVsbDt9LGdldFJvd0NsYXNzOmZ1bmN0aW9uIGdldFJvd0NsYXNzKHJvdyxyb3dJbmRleCl7dmFyIGNsYXNzZXM9WydlbC10YWJsZV9fcm93J107aWYodGhpcy50YWJsZS5oaWdobGlnaHRDdXJyZW50Um93JiZyb3c9PT10aGlzLnN0b3JlLnN0YXRlcy5jdXJyZW50Um93KXtjbGFzc2VzLnB1c2goJ2N1cnJlbnQtcm93Jyk7fWlmKHRoaXMuc3RyaXBlJiZyb3dJbmRleCUyPT09MSl7Y2xhc3Nlcy5wdXNoKCdlbC10YWJsZV9fcm93LS1zdHJpcGVkJyk7fXZhciByb3dDbGFzc05hbWU9dGhpcy50YWJsZS5yb3dDbGFzc05hbWU7aWYodHlwZW9mIHJvd0NsYXNzTmFtZT09PSdzdHJpbmcnKXtjbGFzc2VzLnB1c2gocm93Q2xhc3NOYW1lKTt9ZWxzZSBpZih0eXBlb2Ygcm93Q2xhc3NOYW1lPT09J2Z1bmN0aW9uJyl7Y2xhc3Nlcy5wdXNoKHJvd0NsYXNzTmFtZS5jYWxsKG51bGwse3Jvdzpyb3cscm93SW5kZXg6cm93SW5kZXh9KSk7fWlmKHRoaXMuc3RvcmUuc3RhdGVzLmV4cGFuZFJvd3MuaW5kZXhPZihyb3cpPi0xKXtjbGFzc2VzLnB1c2goJ2V4cGFuZGVkJyk7fXJldHVybiBjbGFzc2VzO30sZ2V0Q2VsbFN0eWxlOmZ1bmN0aW9uIGdldENlbGxTdHlsZShyb3dJbmRleCxjb2x1bW5JbmRleCxyb3csY29sdW1uKXt2YXIgY2VsbFN0eWxlPXRoaXMudGFibGUuY2VsbFN0eWxlO2lmKHR5cGVvZiBjZWxsU3R5bGU9PT0nZnVuY3Rpb24nKXtyZXR1cm4gY2VsbFN0eWxlLmNhbGwobnVsbCx7cm93SW5kZXg6cm93SW5kZXgsY29sdW1uSW5kZXg6Y29sdW1uSW5kZXgscm93OnJvdyxjb2x1bW46Y29sdW1ufSk7fXJldHVybiBjZWxsU3R5bGU7fSxnZXRDZWxsQ2xhc3M6ZnVuY3Rpb24gZ2V0Q2VsbENsYXNzKHJvd0luZGV4LGNvbHVtbkluZGV4LHJvdyxjb2x1bW4pe3ZhciBjbGFzc2VzPVtjb2x1bW4uaWQsY29sdW1uLmFsaWduLGNvbHVtbi5jbGFzc05hbWVdO2lmKHRoaXMuaXNDb2x1bW5IaWRkZW4oY29sdW1uSW5kZXgpKXtjbGFzc2VzLnB1c2goJ2lzLWhpZGRlbicpO312YXIgY2VsbENsYXNzTmFtZT10aGlzLnRhYmxlLmNlbGxDbGFzc05hbWU7aWYodHlwZW9mIGNlbGxDbGFzc05hbWU9PT0nc3RyaW5nJyl7Y2xhc3Nlcy5wdXNoKGNlbGxDbGFzc05hbWUpO31lbHNlIGlmKHR5cGVvZiBjZWxsQ2xhc3NOYW1lPT09J2Z1bmN0aW9uJyl7Y2xhc3Nlcy5wdXNoKGNlbGxDbGFzc05hbWUuY2FsbChudWxsLHtyb3dJbmRleDpyb3dJbmRleCxjb2x1bW5JbmRleDpjb2x1bW5JbmRleCxyb3c6cm93LGNvbHVtbjpjb2x1bW59KSk7fXJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTt9LGdldENvbHNwYW5SZWFsV2lkdGg6ZnVuY3Rpb24gZ2V0Q29sc3BhblJlYWxXaWR0aChjb2x1bW5zLGNvbHNwYW4saW5kZXgpe2lmKGNvbHNwYW48MSl7cmV0dXJuIGNvbHVtbnNbaW5kZXhdLnJlYWxXaWR0aDt9dmFyIHdpZHRoQXJyPWNvbHVtbnMubWFwKGZ1bmN0aW9uKF9yZWYzKXt2YXIgcmVhbFdpZHRoPV9yZWYzLnJlYWxXaWR0aDtyZXR1cm4gcmVhbFdpZHRoO30pLnNsaWNlKGluZGV4LGluZGV4K2NvbHNwYW4pO3JldHVybiB3aWR0aEFyci5yZWR1Y2UoZnVuY3Rpb24oYWNjLHdpZHRoKXtyZXR1cm4gYWNjK3dpZHRoO30sLTEpO30saGFuZGxlQ2VsbE1vdXNlRW50ZXI6ZnVuY3Rpb24gaGFuZGxlQ2VsbE1vdXNlRW50ZXIoZXZlbnQscm93KXt2YXIgdGFibGU9dGhpcy50YWJsZTt2YXIgY2VsbD1nZXRDZWxsKGV2ZW50KTtpZihjZWxsKXt2YXIgY29sdW1uPWdldENvbHVtbkJ5Q2VsbCh0YWJsZSxjZWxsKTt2YXIgaG92ZXJTdGF0ZT10YWJsZS5ob3ZlclN0YXRlPXtjZWxsOmNlbGwsY29sdW1uOmNvbHVtbixyb3c6cm93fTt0YWJsZS4kZW1pdCgnY2VsbC1tb3VzZS1lbnRlcicsaG92ZXJTdGF0ZS5yb3csaG92ZXJTdGF0ZS5jb2x1bW4saG92ZXJTdGF0ZS5jZWxsLGV2ZW50KTt9Ly8g5Yik5pat5piv5ZCmdGV4dC1vdmVyZmxvdywg5aaC5p6c5piv5bCx5pi+56S6dG9vbHRpcAp2YXIgY2VsbENoaWxkPWV2ZW50LnRhcmdldC5xdWVyeVNlbGVjdG9yKCcuY2VsbCcpO2lmKCEoT2JqZWN0KGRvbV9bImhhc0NsYXNzIl0pKGNlbGxDaGlsZCwnZWwtdG9vbHRpcCcpJiZjZWxsQ2hpbGQuY2hpbGROb2Rlcy5sZW5ndGgpKXtyZXR1cm47fS8vIHVzZSByYW5nZSB3aWR0aCBpbnN0ZWFkIG9mIHNjcm9sbFdpZHRoIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0ZXh0IGlzIG92ZXJmbG93aW5nCi8vIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgRmlyZUZveCBidWc6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ1NDMjYzMKdmFyIHJhbmdlPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7cmFuZ2Uuc2V0U3RhcnQoY2VsbENoaWxkLDApO3JhbmdlLnNldEVuZChjZWxsQ2hpbGQsY2VsbENoaWxkLmNoaWxkTm9kZXMubGVuZ3RoKTt2YXIgcmFuZ2VXaWR0aD1yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDt2YXIgcGFkZGluZz0ocGFyc2VJbnQoT2JqZWN0KGRvbV9bImdldFN0eWxlIl0pKGNlbGxDaGlsZCwncGFkZGluZ0xlZnQnKSwxMCl8fDApKyhwYXJzZUludChPYmplY3QoZG9tX1siZ2V0U3R5bGUiXSkoY2VsbENoaWxkLCdwYWRkaW5nUmlnaHQnKSwxMCl8fDApO2lmKChyYW5nZVdpZHRoK3BhZGRpbmc+Y2VsbENoaWxkLm9mZnNldFdpZHRofHxjZWxsQ2hpbGQuc2Nyb2xsV2lkdGg+Y2VsbENoaWxkLm9mZnNldFdpZHRoKSYmdGhpcy4kcmVmcy50b29sdGlwKXt2YXIgdG9vbHRpcD10aGlzLiRyZWZzLnRvb2x0aXA7Ly8gVE9ETyDkvJrlvJXotbfmlbTkuKogVGFibGUg55qE6YeN5paw5riy5p+T77yM6ZyA6KaB5LyY5YyWCnRoaXMudG9vbHRpcENvbnRlbnQ9Y2VsbC5pbm5lclRleHR8fGNlbGwudGV4dENvbnRlbnQ7dG9vbHRpcC5yZWZlcmVuY2VFbG09Y2VsbDt0b29sdGlwLiRyZWZzLnBvcHBlciYmKHRvb2x0aXAuJHJlZnMucG9wcGVyLnN0eWxlLmRpc3BsYXk9J25vbmUnKTt0b29sdGlwLmRvRGVzdHJveSgpO3Rvb2x0aXAuc2V0RXhwZWN0ZWRTdGF0ZSh0cnVlKTt0aGlzLmFjdGl2YXRlVG9vbHRpcCh0b29sdGlwKTt9fSxoYW5kbGVDZWxsTW91c2VMZWF2ZTpmdW5jdGlvbiBoYW5kbGVDZWxsTW91c2VMZWF2ZShldmVudCl7dmFyIHRvb2x0aXA9dGhpcy4kcmVmcy50b29sdGlwO2lmKHRvb2x0aXApe3Rvb2x0aXAuc2V0RXhwZWN0ZWRTdGF0ZShmYWxzZSk7dG9vbHRpcC5oYW5kbGVDbG9zZVBvcHBlcigpO312YXIgY2VsbD1nZXRDZWxsKGV2ZW50KTtpZighY2VsbClyZXR1cm47dmFyIG9sZEhvdmVyU3RhdGU9dGhpcy50YWJsZS5ob3ZlclN0YXRlfHx7fTt0aGlzLnRhYmxlLiRlbWl0KCdjZWxsLW1vdXNlLWxlYXZlJyxvbGRIb3ZlclN0YXRlLnJvdyxvbGRIb3ZlclN0YXRlLmNvbHVtbixvbGRIb3ZlclN0YXRlLmNlbGwsZXZlbnQpO30saGFuZGxlTW91c2VFbnRlcjpkZWJvdW5jZV9kZWZhdWx0KCkoMzAsZnVuY3Rpb24oaW5kZXgpe3RoaXMuc3RvcmUuY29tbWl0KCdzZXRIb3ZlclJvdycsaW5kZXgpO30pLGhhbmRsZU1vdXNlTGVhdmU6ZGVib3VuY2VfZGVmYXVsdCgpKDMwLGZ1bmN0aW9uKCl7dGhpcy5zdG9yZS5jb21taXQoJ3NldEhvdmVyUm93JyxudWxsKTt9KSxoYW5kbGVDb250ZXh0TWVudTpmdW5jdGlvbiBoYW5kbGVDb250ZXh0TWVudShldmVudCxyb3cpe3RoaXMuaGFuZGxlRXZlbnQoZXZlbnQscm93LCdjb250ZXh0bWVudScpO30saGFuZGxlRG91YmxlQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlRG91YmxlQ2xpY2soZXZlbnQscm93KXt0aGlzLmhhbmRsZUV2ZW50KGV2ZW50LHJvdywnZGJsY2xpY2snKTt9LGhhbmRsZUNsaWNrOmZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50LHJvdyl7dGhpcy5zdG9yZS5jb21taXQoJ3NldEN1cnJlbnRSb3cnLHJvdyk7dGhpcy5oYW5kbGVFdmVudChldmVudCxyb3csJ2NsaWNrJyk7fSxoYW5kbGVFdmVudDpmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudCxyb3csbmFtZSl7dmFyIHRhYmxlPXRoaXMudGFibGU7dmFyIGNlbGw9Z2V0Q2VsbChldmVudCk7dmFyIGNvbHVtbj12b2lkIDA7aWYoY2VsbCl7Y29sdW1uPWdldENvbHVtbkJ5Q2VsbCh0YWJsZSxjZWxsKTtpZihjb2x1bW4pe3RhYmxlLiRlbWl0KCdjZWxsLScrbmFtZSxyb3csY29sdW1uLGNlbGwsZXZlbnQpO319dGFibGUuJGVtaXQoJ3Jvdy0nK25hbWUscm93LGNvbHVtbixldmVudCk7fSxyb3dSZW5kZXI6ZnVuY3Rpb24gcm93UmVuZGVyKHJvdywkaW5kZXgsdHJlZVJvd0RhdGEpe3ZhciBfdGhpczM9dGhpczt2YXIgaD10aGlzLiRjcmVhdGVFbGVtZW50O3ZhciB0cmVlSW5kZW50PXRoaXMudHJlZUluZGVudCxjb2x1bW5zPXRoaXMuY29sdW1ucyxmaXJzdERlZmF1bHRDb2x1bW5JbmRleD10aGlzLmZpcnN0RGVmYXVsdENvbHVtbkluZGV4O3ZhciBjb2x1bW5zSGlkZGVuPWNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbixpbmRleCl7cmV0dXJuIF90aGlzMy5pc0NvbHVtbkhpZGRlbihpbmRleCk7fSk7dmFyIHJvd0NsYXNzZXM9dGhpcy5nZXRSb3dDbGFzcyhyb3csJGluZGV4KTt2YXIgZGlzcGxheT10cnVlO2lmKHRyZWVSb3dEYXRhKXtyb3dDbGFzc2VzLnB1c2goJ2VsLXRhYmxlX19yb3ctLWxldmVsLScrdHJlZVJvd0RhdGEubGV2ZWwpO2Rpc3BsYXk9dHJlZVJvd0RhdGEuZGlzcGxheTt9Ly8g5oyH5LukIHYtc2hvdyDkvJropobnm5Ygcm93LXN0eWxlIOS4rSBkaXNwbGF5Ci8vIOS9v+eUqCA6c3R5bGUg5Luj5pu/IHYtc2hvdyBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xNjk5NQp2YXIgZGlzcGxheVN0eWxlPWRpc3BsYXk/bnVsbDp7ZGlzcGxheTonbm9uZSd9O3JldHVybiBoKCd0cicse3N0eWxlOltkaXNwbGF5U3R5bGUsdGhpcy5nZXRSb3dTdHlsZShyb3csJGluZGV4KV0sJ2NsYXNzJzpyb3dDbGFzc2VzLGtleTp0aGlzLmdldEtleU9mUm93KHJvdywkaW5kZXgpLG9uOnsnZGJsY2xpY2snOmZ1bmN0aW9uIGRibGNsaWNrKCRldmVudCl7cmV0dXJuIF90aGlzMy5oYW5kbGVEb3VibGVDbGljaygkZXZlbnQscm93KTt9LCdjbGljayc6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtyZXR1cm4gX3RoaXMzLmhhbmRsZUNsaWNrKCRldmVudCxyb3cpO30sJ2NvbnRleHRtZW51JzpmdW5jdGlvbiBjb250ZXh0bWVudSgkZXZlbnQpe3JldHVybiBfdGhpczMuaGFuZGxlQ29udGV4dE1lbnUoJGV2ZW50LHJvdyk7fSwnbW91c2VlbnRlcic6ZnVuY3Rpb24gbW91c2VlbnRlcihfKXtyZXR1cm4gX3RoaXMzLmhhbmRsZU1vdXNlRW50ZXIoJGluZGV4KTt9LCdtb3VzZWxlYXZlJzp0aGlzLmhhbmRsZU1vdXNlTGVhdmV9fSxbY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uLGNlbGxJbmRleCl7dmFyIF9nZXRTcGFuPV90aGlzMy5nZXRTcGFuKHJvdyxjb2x1bW4sJGluZGV4LGNlbGxJbmRleCkscm93c3Bhbj1fZ2V0U3Bhbi5yb3dzcGFuLGNvbHNwYW49X2dldFNwYW4uY29sc3BhbjtpZighcm93c3Bhbnx8IWNvbHNwYW4pe3JldHVybiBudWxsO312YXIgY29sdW1uRGF0YT10YWJsZV9ib2R5X2V4dGVuZHMoe30sY29sdW1uKTtjb2x1bW5EYXRhLnJlYWxXaWR0aD1fdGhpczMuZ2V0Q29sc3BhblJlYWxXaWR0aChjb2x1bW5zLGNvbHNwYW4sY2VsbEluZGV4KTt2YXIgZGF0YT17c3RvcmU6X3RoaXMzLnN0b3JlLF9zZWxmOl90aGlzMy5jb250ZXh0fHxfdGhpczMudGFibGUuJHZub2RlLmNvbnRleHQsY29sdW1uOmNvbHVtbkRhdGEscm93OnJvdywkaW5kZXg6JGluZGV4fTtpZihjZWxsSW5kZXg9PT1maXJzdERlZmF1bHRDb2x1bW5JbmRleCYmdHJlZVJvd0RhdGEpe2RhdGEudHJlZU5vZGU9e2luZGVudDp0cmVlUm93RGF0YS5sZXZlbCp0cmVlSW5kZW50LGxldmVsOnRyZWVSb3dEYXRhLmxldmVsfTtpZih0eXBlb2YgdHJlZVJvd0RhdGEuZXhwYW5kZWQ9PT0nYm9vbGVhbicpe2RhdGEudHJlZU5vZGUuZXhwYW5kZWQ9dHJlZVJvd0RhdGEuZXhwYW5kZWQ7Ly8g6KGo5piO5piv5oeS5Yqg6L29CmlmKCdsb2FkaW5nJ2luIHRyZWVSb3dEYXRhKXtkYXRhLnRyZWVOb2RlLmxvYWRpbmc9dHJlZVJvd0RhdGEubG9hZGluZzt9aWYoJ25vTGF6eUNoaWxkcmVuJ2luIHRyZWVSb3dEYXRhKXtkYXRhLnRyZWVOb2RlLm5vTGF6eUNoaWxkcmVuPXRyZWVSb3dEYXRhLm5vTGF6eUNoaWxkcmVuO319fXJldHVybiBoKCd0ZCcse3N0eWxlOl90aGlzMy5nZXRDZWxsU3R5bGUoJGluZGV4LGNlbGxJbmRleCxyb3csY29sdW1uKSwnY2xhc3MnOl90aGlzMy5nZXRDZWxsQ2xhc3MoJGluZGV4LGNlbGxJbmRleCxyb3csY29sdW1uKSxhdHRyczp7cm93c3Bhbjpyb3dzcGFuLGNvbHNwYW46Y29sc3Bhbn0sb246eydtb3VzZWVudGVyJzpmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCl7cmV0dXJuIF90aGlzMy5oYW5kbGVDZWxsTW91c2VFbnRlcigkZXZlbnQscm93KTt9LCdtb3VzZWxlYXZlJzpfdGhpczMuaGFuZGxlQ2VsbE1vdXNlTGVhdmV9fSxbY29sdW1uLnJlbmRlckNlbGwuY2FsbChfdGhpczMuX3JlbmRlclByb3h5LF90aGlzMy4kY3JlYXRlRWxlbWVudCxkYXRhLGNvbHVtbnNIaWRkZW5bY2VsbEluZGV4XSldKTt9KV0pO30sd3JhcHBlZFJvd1JlbmRlcjpmdW5jdGlvbiB3cmFwcGVkUm93UmVuZGVyKHJvdywkaW5kZXgpe3ZhciBfdGhpczQ9dGhpczt2YXIgaD10aGlzLiRjcmVhdGVFbGVtZW50O3ZhciBzdG9yZT10aGlzLnN0b3JlO3ZhciBpc1Jvd0V4cGFuZGVkPXN0b3JlLmlzUm93RXhwYW5kZWQsYXNzZXJ0Um93S2V5PXN0b3JlLmFzc2VydFJvd0tleTt2YXIgX3N0b3JlJHN0YXRlcz1zdG9yZS5zdGF0ZXMsdHJlZURhdGE9X3N0b3JlJHN0YXRlcy50cmVlRGF0YSxsYXp5VHJlZU5vZGVNYXA9X3N0b3JlJHN0YXRlcy5sYXp5VHJlZU5vZGVNYXAsY2hpbGRyZW5Db2x1bW5OYW1lPV9zdG9yZSRzdGF0ZXMuY2hpbGRyZW5Db2x1bW5OYW1lLHJvd0tleT1fc3RvcmUkc3RhdGVzLnJvd0tleTtpZih0aGlzLmhhc0V4cGFuZENvbHVtbiYmaXNSb3dFeHBhbmRlZChyb3cpKXt2YXIgcmVuZGVyRXhwYW5kZWQ9dGhpcy50YWJsZS5yZW5kZXJFeHBhbmRlZDt2YXIgdHI9dGhpcy5yb3dSZW5kZXIocm93LCRpbmRleCk7aWYoIXJlbmRlckV4cGFuZGVkKXtjb25zb2xlLmVycm9yKCdbRWxlbWVudCBFcnJvcl1yZW5kZXJFeHBhbmRlZCBpcyByZXF1aXJlZC4nKTtyZXR1cm4gdHI7fS8vIOS9v+eUqOS6jOe7tOaVsOe7hO+8jOmBv+WFjeS/ruaUuSAkaW5kZXgKcmV0dXJuW1t0cixoKCd0cicse2tleTonZXhwYW5kZWQtcm93X18nK3RyLmtleX0sW2goJ3RkJyx7YXR0cnM6e2NvbHNwYW46dGhpcy5jb2x1bW5zQ291bnR9LCdjbGFzcyc6J2VsLXRhYmxlX19leHBhbmRlZC1jZWxsJ30sW3JlbmRlckV4cGFuZGVkKHRoaXMuJGNyZWF0ZUVsZW1lbnQse3Jvdzpyb3csJGluZGV4OiRpbmRleCxzdG9yZTp0aGlzLnN0b3JlfSldKV0pXV07fWVsc2UgaWYoT2JqZWN0LmtleXModHJlZURhdGEpLmxlbmd0aCl7YXNzZXJ0Um93S2V5KCk7Ly8gVHJlZVRhYmxlIOaXtu+8jHJvd0tleSDlv4XpobvnlLHnlKjmiLforr7lrprvvIzkuI3kvb/nlKggZ2V0S2V5T2ZSb3cg6K6h566XCi8vIOWcqOiwg+eUqCByb3dSZW5kZXIg5Ye95pWw5pe277yM5LuN54S25Lya6K6h566XIHJvd0tlee+8jOS4jeWkquWlveeahOaTjeS9nAp2YXIga2V5PWdldFJvd0lkZW50aXR5KHJvdyxyb3dLZXkpO3ZhciBjdXI9dHJlZURhdGFba2V5XTt2YXIgdHJlZVJvd0RhdGE9bnVsbDtpZihjdXIpe3RyZWVSb3dEYXRhPXtleHBhbmRlZDpjdXIuZXhwYW5kZWQsbGV2ZWw6Y3VyLmxldmVsLGRpc3BsYXk6dHJ1ZX07aWYodHlwZW9mIGN1ci5sYXp5PT09J2Jvb2xlYW4nKXtpZih0eXBlb2YgY3VyLmxvYWRlZD09PSdib29sZWFuJyYmY3VyLmxvYWRlZCl7dHJlZVJvd0RhdGEubm9MYXp5Q2hpbGRyZW49IShjdXIuY2hpbGRyZW4mJmN1ci5jaGlsZHJlbi5sZW5ndGgpO310cmVlUm93RGF0YS5sb2FkaW5nPWN1ci5sb2FkaW5nO319dmFyIHRtcD1bdGhpcy5yb3dSZW5kZXIocm93LCRpbmRleCx0cmVlUm93RGF0YSldOy8vIOa4suafk+W1jOWll+aVsOaNrgppZihjdXIpey8vIGN1cnJlbnRSb3cg6K6w5b2V55qE5pivIGluZGV477yM5omA5Lul6L+Y6ZyA5Li75Yqo5aKe5YqgIFRyZWVUYWJsZSDnmoQgaW5kZXgKdmFyIGk9MDt2YXIgdHJhdmVyc2U9ZnVuY3Rpb24gdHJhdmVyc2UoY2hpbGRyZW4scGFyZW50KXtpZighKGNoaWxkcmVuJiZjaGlsZHJlbi5sZW5ndGgmJnBhcmVudCkpcmV0dXJuO2NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24obm9kZSl7Ly8g54i26IqC54K555qEIGRpc3BsYXkg54q25oCB5b2x5ZON5a2Q6IqC54K555qE5pi+56S654q25oCBCnZhciBpbm5lclRyZWVSb3dEYXRhPXtkaXNwbGF5OnBhcmVudC5kaXNwbGF5JiZwYXJlbnQuZXhwYW5kZWQsbGV2ZWw6cGFyZW50LmxldmVsKzF9O3ZhciBjaGlsZEtleT1nZXRSb3dJZGVudGl0eShub2RlLHJvd0tleSk7aWYoY2hpbGRLZXk9PT11bmRlZmluZWR8fGNoaWxkS2V5PT09bnVsbCl7dGhyb3cgbmV3IEVycm9yKCdmb3IgbmVzdGVkIGRhdGEgaXRlbSwgcm93LWtleSBpcyByZXF1aXJlZC4nKTt9Y3VyPXRhYmxlX2JvZHlfZXh0ZW5kcyh7fSx0cmVlRGF0YVtjaGlsZEtleV0pOy8vIOWvueS6juW9k+WJjeiKgueCue+8jOWIhuaIkOacieaXoOWtkOiKgueCueS4pOenjeaDheWGteOAggovLyDlpoLmnpzljIXlkKvlrZDoioLngrnnmoTvvIzorr7nva4gZXhwYW5kZWQg5bGe5oCn44CCCi8vIOWvueS6juWug+WtkOiKgueCueeahCBkaXNwbGF5IOWxnuaAp+eUseWug+acrOi6q+eahCBleHBhbmRlZCDkuI4gZGlzcGxheSDlhbHlkIzlhrPlrprjgIIKaWYoY3VyKXtpbm5lclRyZWVSb3dEYXRhLmV4cGFuZGVkPWN1ci5leHBhbmRlZDsvLyDmh5LliqDovb3nmoTmn5DkupvoioLngrnvvIxsZXZlbCDmnKrnn6UKY3VyLmxldmVsPWN1ci5sZXZlbHx8aW5uZXJUcmVlUm93RGF0YS5sZXZlbDtjdXIuZGlzcGxheT0hIShjdXIuZXhwYW5kZWQmJmlubmVyVHJlZVJvd0RhdGEuZGlzcGxheSk7aWYodHlwZW9mIGN1ci5sYXp5PT09J2Jvb2xlYW4nKXtpZih0eXBlb2YgY3VyLmxvYWRlZD09PSdib29sZWFuJyYmY3VyLmxvYWRlZCl7aW5uZXJUcmVlUm93RGF0YS5ub0xhenlDaGlsZHJlbj0hKGN1ci5jaGlsZHJlbiYmY3VyLmNoaWxkcmVuLmxlbmd0aCk7fWlubmVyVHJlZVJvd0RhdGEubG9hZGluZz1jdXIubG9hZGluZzt9fWkrKzt0bXAucHVzaChfdGhpczQucm93UmVuZGVyKG5vZGUsJGluZGV4K2ksaW5uZXJUcmVlUm93RGF0YSkpO2lmKGN1cil7dmFyIF9ub2Rlcz1sYXp5VHJlZU5vZGVNYXBbY2hpbGRLZXldfHxub2RlW2NoaWxkcmVuQ29sdW1uTmFtZV07dHJhdmVyc2UoX25vZGVzLGN1cik7fX0pO307Ly8g5a+55LqOIHJvb3Qg6IqC54K577yMZGlzcGxheSDkuIDlrprkuLogdHJ1ZQpjdXIuZGlzcGxheT10cnVlO3ZhciBub2Rlcz1sYXp5VHJlZU5vZGVNYXBba2V5XXx8cm93W2NoaWxkcmVuQ29sdW1uTmFtZV07dHJhdmVyc2Uobm9kZXMsY3VyKTt9cmV0dXJuIHRtcDt9ZWxzZXtyZXR1cm4gdGhpcy5yb3dSZW5kZXIocm93LCRpbmRleCk7fX19fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYmxlL3NyYy9maWx0ZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmMmM5MTlmJgp2YXIgZmlsdGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2YyYzkxOWZfcmVuZGVyPWZ1bmN0aW9uIGZpbHRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmMmM5MTlmX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9fSxbX3ZtLm11bHRpcGxlP19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToiY2xpY2tvdXRzaWRlIixyYXdOYW1lOiJ2LWNsaWNrb3V0c2lkZSIsdmFsdWU6X3ZtLmhhbmRsZU91dHNpZGVDbGljayxleHByZXNzaW9uOiJoYW5kbGVPdXRzaWRlQ2xpY2sifSx7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uc2hvd1BvcHBlcixleHByZXNzaW9uOiJzaG93UG9wcGVyIn1dLHN0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXIifSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2NvbnRlbnQifSxbX2MoImVsLXNjcm9sbGJhciIse2F0dHJzOnsid3JhcC1jbGFzcyI6ImVsLXRhYmxlLWZpbHRlcl9fd3JhcCJ9fSxbX2MoImVsLWNoZWNrYm94LWdyb3VwIix7c3RhdGljQ2xhc3M6ImVsLXRhYmxlLWZpbHRlcl9fY2hlY2tib3gtZ3JvdXAiLG1vZGVsOnt2YWx1ZTpfdm0uZmlsdGVyZWRWYWx1ZSxjYWxsYmFjazpmdW5jdGlvbiBjYWxsYmFjaygkJHYpe192bS5maWx0ZXJlZFZhbHVlPSQkdjt9LGV4cHJlc3Npb246ImZpbHRlcmVkVmFsdWUifX0sX3ZtLl9sKF92bS5maWx0ZXJzLGZ1bmN0aW9uKGZpbHRlcil7cmV0dXJuIF9jKCJlbC1jaGVja2JveCIse2tleTpmaWx0ZXIudmFsdWUsYXR0cnM6e2xhYmVsOmZpbHRlci52YWx1ZX19LFtfdm0uX3YoX3ZtLl9zKGZpbHRlci50ZXh0KSldKTt9KSwxKV0sMSldLDEpLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGFibGUtZmlsdGVyX19ib3R0b20ifSxbX2MoImJ1dHRvbiIse2NsYXNzOnsiaXMtZGlzYWJsZWQiOl92bS5maWx0ZXJlZFZhbHVlLmxlbmd0aD09PTB9LGF0dHJzOntkaXNhYmxlZDpfdm0uZmlsdGVyZWRWYWx1ZS5sZW5ndGg9PT0wfSxvbjp7Y2xpY2s6X3ZtLmhhbmRsZUNvbmZpcm19fSxbX3ZtLl92KF92bS5fcyhfdm0udCgiZWwudGFibGUuY29uZmlybUZpbHRlciIpKSldKSxfYygiYnV0dG9uIix7b246e2NsaWNrOl92bS5oYW5kbGVSZXNldH19LFtfdm0uX3YoX3ZtLl9zKF92bS50KCJlbC50YWJsZS5yZXNldEZpbHRlciIpKSldKV0pXSk6X2MoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJjbGlja291dHNpZGUiLHJhd05hbWU6InYtY2xpY2tvdXRzaWRlIix2YWx1ZTpfdm0uaGFuZGxlT3V0c2lkZUNsaWNrLGV4cHJlc3Npb246ImhhbmRsZU91dHNpZGVDbGljayJ9LHtuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS5zaG93UG9wcGVyLGV4cHJlc3Npb246InNob3dQb3BwZXIifV0sc3RhdGljQ2xhc3M6ImVsLXRhYmxlLWZpbHRlciJ9LFtfYygidWwiLHtzdGF0aWNDbGFzczoiZWwtdGFibGUtZmlsdGVyX19saXN0In0sW19jKCJsaSIse3N0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2xpc3QtaXRlbSIsY2xhc3M6eyJpcy1hY3RpdmUiOl92bS5maWx0ZXJWYWx1ZT09PXVuZGVmaW5lZHx8X3ZtLmZpbHRlclZhbHVlPT09bnVsbH0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLmhhbmRsZVNlbGVjdChudWxsKTt9fX0sW192bS5fdihfdm0uX3MoX3ZtLnQoImVsLnRhYmxlLmNsZWFyRmlsdGVyIikpKV0pLF92bS5fbChfdm0uZmlsdGVycyxmdW5jdGlvbihmaWx0ZXIpe3JldHVybiBfYygibGkiLHtrZXk6ZmlsdGVyLnZhbHVlLHN0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2xpc3QtaXRlbSIsY2xhc3M6eyJpcy1hY3RpdmUiOl92bS5pc0FjdGl2ZShmaWx0ZXIpfSxhdHRyczp7bGFiZWw6ZmlsdGVyLnZhbHVlfSxvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtfdm0uaGFuZGxlU2VsZWN0KGZpbHRlci52YWx1ZSk7fX19LFtfdm0uX3YoX3ZtLl9zKGZpbHRlci50ZXh0KSldKTt9KV0sMildKV0pO307dmFyIGZpbHRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmMmM5MTlmX3N0YXRpY1JlbmRlckZucz1bXTtmaWx0ZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZjJjOTE5Zl9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL2ZpbHRlci1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2YyYzkxOWYmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL2Ryb3Bkb3duLmpzCnZhciBkcm9wZG93bnM9W107IWV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEucHJvdG90eXBlLiRpc1NlcnZlciYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXtkcm9wZG93bnMuZm9yRWFjaChmdW5jdGlvbihkcm9wZG93bil7dmFyIHRhcmdldD1ldmVudC50YXJnZXQ7aWYoIWRyb3Bkb3dufHwhZHJvcGRvd24uJGVsKXJldHVybjtpZih0YXJnZXQ9PT1kcm9wZG93bi4kZWx8fGRyb3Bkb3duLiRlbC5jb250YWlucyh0YXJnZXQpKXtyZXR1cm47fWRyb3Bkb3duLmhhbmRsZU91dHNpZGVDbGljayYmZHJvcGRvd24uaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50KTt9KTt9KTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19kcm9wZG93bj17b3BlbjpmdW5jdGlvbiBvcGVuKGluc3RhbmNlKXtpZihpbnN0YW5jZSl7ZHJvcGRvd25zLnB1c2goaW5zdGFuY2UpO319LGNsb3NlOmZ1bmN0aW9uIGNsb3NlKGluc3RhbmNlKXt2YXIgaW5kZXg9ZHJvcGRvd25zLmluZGV4T2YoaW5zdGFuY2UpO2lmKGluZGV4IT09LTEpe2Ryb3Bkb3ducy5zcGxpY2UoaW5zdGFuY2UsMSk7fX19Oy8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL2NoZWNrYm94LWdyb3VwIgp2YXIgY2hlY2tib3hfZ3JvdXBfPV9fd2VicGFja19yZXF1aXJlX18oMzIpO3ZhciBjaGVja2JveF9ncm91cF9kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY2hlY2tib3hfZ3JvdXBfKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90YWJsZS9zcmMvZmlsdGVyLXBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBmaWx0ZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsVGFibGVGaWx0ZXJQYW5lbCcsbWl4aW5zOlt2dWVfcG9wcGVyX2RlZmF1bHQuYSxsb2NhbGVfZGVmYXVsdC5hXSxkaXJlY3RpdmVzOntDbGlja291dHNpZGU6Y2xpY2tvdXRzaWRlX2RlZmF1bHQuYX0sY29tcG9uZW50czp7RWxDaGVja2JveDpjaGVja2JveF9kZWZhdWx0LmEsRWxDaGVja2JveEdyb3VwOmNoZWNrYm94X2dyb3VwX2RlZmF1bHQuYSxFbFNjcm9sbGJhcjpzY3JvbGxiYXJfZGVmYXVsdC5hfSxwcm9wczp7cGxhY2VtZW50Ont0eXBlOlN0cmluZyxkZWZhdWx0Oidib3R0b20tZW5kJ319LG1ldGhvZHM6e2lzQWN0aXZlOmZ1bmN0aW9uIGlzQWN0aXZlKGZpbHRlcil7cmV0dXJuIGZpbHRlci52YWx1ZT09PXRoaXMuZmlsdGVyVmFsdWU7fSxoYW5kbGVPdXRzaWRlQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlT3V0c2lkZUNsaWNrKCl7dmFyIF90aGlzPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe190aGlzLnNob3dQb3BwZXI9ZmFsc2U7fSwxNik7fSxoYW5kbGVDb25maXJtOmZ1bmN0aW9uIGhhbmRsZUNvbmZpcm0oKXt0aGlzLmNvbmZpcm1GaWx0ZXIodGhpcy5maWx0ZXJlZFZhbHVlKTt0aGlzLmhhbmRsZU91dHNpZGVDbGljaygpO30saGFuZGxlUmVzZXQ6ZnVuY3Rpb24gaGFuZGxlUmVzZXQoKXt0aGlzLmZpbHRlcmVkVmFsdWU9W107dGhpcy5jb25maXJtRmlsdGVyKHRoaXMuZmlsdGVyZWRWYWx1ZSk7dGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKTt9LGhhbmRsZVNlbGVjdDpmdW5jdGlvbiBoYW5kbGVTZWxlY3QoZmlsdGVyVmFsdWUpe3RoaXMuZmlsdGVyVmFsdWU9ZmlsdGVyVmFsdWU7aWYodHlwZW9mIGZpbHRlclZhbHVlIT09J3VuZGVmaW5lZCcmJmZpbHRlclZhbHVlIT09bnVsbCl7dGhpcy5jb25maXJtRmlsdGVyKHRoaXMuZmlsdGVyZWRWYWx1ZSk7fWVsc2V7dGhpcy5jb25maXJtRmlsdGVyKFtdKTt9dGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKTt9LGNvbmZpcm1GaWx0ZXI6ZnVuY3Rpb24gY29uZmlybUZpbHRlcihmaWx0ZXJlZFZhbHVlKXt0aGlzLnRhYmxlLnN0b3JlLmNvbW1pdCgnZmlsdGVyQ2hhbmdlJyx7Y29sdW1uOnRoaXMuY29sdW1uLHZhbHVlczpmaWx0ZXJlZFZhbHVlfSk7dGhpcy50YWJsZS5zdG9yZS51cGRhdGVBbGxTZWxlY3RlZCgpO319LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnt0YWJsZTpudWxsLGNlbGw6bnVsbCxjb2x1bW46bnVsbH07fSxjb21wdXRlZDp7ZmlsdGVyczpmdW5jdGlvbiBmaWx0ZXJzKCl7cmV0dXJuIHRoaXMuY29sdW1uJiZ0aGlzLmNvbHVtbi5maWx0ZXJzO30sZmlsdGVyVmFsdWU6e2dldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4odGhpcy5jb2x1bW4uZmlsdGVyZWRWYWx1ZXx8W10pWzBdO30sc2V0OmZ1bmN0aW9uIHNldCh2YWx1ZSl7aWYodGhpcy5maWx0ZXJlZFZhbHVlKXtpZih0eXBlb2YgdmFsdWUhPT0ndW5kZWZpbmVkJyYmdmFsdWUhPT1udWxsKXt0aGlzLmZpbHRlcmVkVmFsdWUuc3BsaWNlKDAsMSx2YWx1ZSk7fWVsc2V7dGhpcy5maWx0ZXJlZFZhbHVlLnNwbGljZSgwLDEpO319fX0sZmlsdGVyZWRWYWx1ZTp7Z2V0OmZ1bmN0aW9uIGdldCgpe2lmKHRoaXMuY29sdW1uKXtyZXR1cm4gdGhpcy5jb2x1bW4uZmlsdGVyZWRWYWx1ZXx8W107fXJldHVybltdO30sc2V0OmZ1bmN0aW9uIHNldCh2YWx1ZSl7aWYodGhpcy5jb2x1bW4pe3RoaXMuY29sdW1uLmZpbHRlcmVkVmFsdWU9dmFsdWU7fX19LG11bHRpcGxlOmZ1bmN0aW9uIG11bHRpcGxlKCl7aWYodGhpcy5jb2x1bW4pe3JldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJNdWx0aXBsZTt9cmV0dXJuIHRydWU7fX0sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dmFyIF90aGlzMj10aGlzO3RoaXMucG9wcGVyRWxtPXRoaXMuJGVsO3RoaXMucmVmZXJlbmNlRWxtPXRoaXMuY2VsbDt0aGlzLnRhYmxlLmJvZHlXcmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsZnVuY3Rpb24oKXtfdGhpczIudXBkYXRlUG9wcGVyKCk7fSk7dGhpcy4kd2F0Y2goJ3Nob3dQb3BwZXInLGZ1bmN0aW9uKHZhbHVlKXtpZihfdGhpczIuY29sdW1uKV90aGlzMi5jb2x1bW4uZmlsdGVyT3BlbmVkPXZhbHVlO2lmKHZhbHVlKXtzcmNfZHJvcGRvd24ub3BlbihfdGhpczIpO31lbHNle3NyY19kcm9wZG93bi5jbG9zZShfdGhpczIpO319KTt9LHdhdGNoOntzaG93UG9wcGVyOmZ1bmN0aW9uIHNob3dQb3BwZXIodmFsKXtpZih2YWw9PT10cnVlJiZwYXJzZUludCh0aGlzLnBvcHBlckpTLl9wb3BwZXIuc3R5bGUuekluZGV4LDEwKTxwb3B1cF9bIlBvcHVwTWFuYWdlciJdLnpJbmRleCl7dGhpcy5wb3BwZXJKUy5fcG9wcGVyLnN0eWxlLnpJbmRleD1wb3B1cF9bIlBvcHVwTWFuYWdlciJdLm5leHRaSW5kZXgoKTt9fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL2ZpbHRlci1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX2ZpbHRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1maWx0ZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvZmlsdGVyLXBhbmVsLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGZpbHRlcl9wYW5lbF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19maWx0ZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sZmlsdGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2YyYzkxOWZfcmVuZGVyLGZpbHRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmMmM5MTlmX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgZmlsdGVyX3BhbmVsX2FwaTt9ZmlsdGVyX3BhbmVsX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvdGFibGUvc3JjL2ZpbHRlci1wYW5lbC52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZmlsdGVyX3BhbmVsPWZpbHRlcl9wYW5lbF9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS1oZWFkZXIuanMKdmFyIHRhYmxlX2hlYWRlcl9leHRlbmRzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1hcmd1bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gc291cmNlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLGtleSkpe3RhcmdldFtrZXldPXNvdXJjZVtrZXldO319fXJldHVybiB0YXJnZXQ7fTt2YXIgZ2V0QWxsQ29sdW1ucz1mdW5jdGlvbiBnZXRBbGxDb2x1bW5zKGNvbHVtbnMpe3ZhciByZXN1bHQ9W107Y29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbil7aWYoY29sdW1uLmNoaWxkcmVuKXtyZXN1bHQucHVzaChjb2x1bW4pO3Jlc3VsdC5wdXNoLmFwcGx5KHJlc3VsdCxnZXRBbGxDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO31lbHNle3Jlc3VsdC5wdXNoKGNvbHVtbik7fX0pO3JldHVybiByZXN1bHQ7fTt2YXIgY29udmVydFRvUm93cz1mdW5jdGlvbiBjb252ZXJ0VG9Sb3dzKG9yaWdpbkNvbHVtbnMpe3ZhciBtYXhMZXZlbD0xO3ZhciB0cmF2ZXJzZT1mdW5jdGlvbiB0cmF2ZXJzZShjb2x1bW4scGFyZW50KXtpZihwYXJlbnQpe2NvbHVtbi5sZXZlbD1wYXJlbnQubGV2ZWwrMTtpZihtYXhMZXZlbDxjb2x1bW4ubGV2ZWwpe21heExldmVsPWNvbHVtbi5sZXZlbDt9fWlmKGNvbHVtbi5jaGlsZHJlbil7dmFyIGNvbFNwYW49MDtjb2x1bW4uY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihzdWJDb2x1bW4pe3RyYXZlcnNlKHN1YkNvbHVtbixjb2x1bW4pO2NvbFNwYW4rPXN1YkNvbHVtbi5jb2xTcGFuO30pO2NvbHVtbi5jb2xTcGFuPWNvbFNwYW47fWVsc2V7Y29sdW1uLmNvbFNwYW49MTt9fTtvcmlnaW5Db2x1bW5zLmZvckVhY2goZnVuY3Rpb24oY29sdW1uKXtjb2x1bW4ubGV2ZWw9MTt0cmF2ZXJzZShjb2x1bW4pO30pO3ZhciByb3dzPVtdO2Zvcih2YXIgaT0wO2k8bWF4TGV2ZWw7aSsrKXtyb3dzLnB1c2goW10pO312YXIgYWxsQ29sdW1ucz1nZXRBbGxDb2x1bW5zKG9yaWdpbkNvbHVtbnMpO2FsbENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbihjb2x1bW4pe2lmKCFjb2x1bW4uY2hpbGRyZW4pe2NvbHVtbi5yb3dTcGFuPW1heExldmVsLWNvbHVtbi5sZXZlbCsxO31lbHNle2NvbHVtbi5yb3dTcGFuPTE7fXJvd3NbY29sdW1uLmxldmVsLTFdLnB1c2goY29sdW1uKTt9KTtyZXR1cm4gcm93czt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGFibGVfaGVhZGVyPXtuYW1lOidFbFRhYmxlSGVhZGVyJyxtaXhpbnM6W2xheW91dF9vYnNlcnZlcl0scmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihoKXt2YXIgX3RoaXM9dGhpczt2YXIgb3JpZ2luQ29sdW1ucz10aGlzLnN0b3JlLnN0YXRlcy5vcmlnaW5Db2x1bW5zO3ZhciBjb2x1bW5Sb3dzPWNvbnZlcnRUb1Jvd3Mob3JpZ2luQ29sdW1ucyx0aGlzLmNvbHVtbnMpOy8vIOaYr+WQpuaLpeacieWkmue6p+ihqOWktAp2YXIgaXNHcm91cD1jb2x1bW5Sb3dzLmxlbmd0aD4xO2lmKGlzR3JvdXApdGhpcy4kcGFyZW50LmlzR3JvdXA9dHJ1ZTtyZXR1cm4gaCgndGFibGUnLHsnY2xhc3MnOidlbC10YWJsZV9faGVhZGVyJyxhdHRyczp7Y2VsbHNwYWNpbmc6JzAnLGNlbGxwYWRkaW5nOicwJyxib3JkZXI6JzAnfX0sW2goJ2NvbGdyb3VwJyxbdGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4pe3JldHVybiBoKCdjb2wnLHthdHRyczp7bmFtZTpjb2x1bW4uaWR9LGtleTpjb2x1bW4uaWR9KTt9KSx0aGlzLmhhc0d1dHRlcj9oKCdjb2wnLHthdHRyczp7bmFtZTonZ3V0dGVyJ319KTonJ10pLGgoJ3RoZWFkJyx7J2NsYXNzJzpbeydpcy1ncm91cCc6aXNHcm91cCwnaGFzLWd1dHRlcic6dGhpcy5oYXNHdXR0ZXJ9XX0sW3RoaXMuX2woY29sdW1uUm93cyxmdW5jdGlvbihjb2x1bW5zLHJvd0luZGV4KXtyZXR1cm4gaCgndHInLHtzdHlsZTpfdGhpcy5nZXRIZWFkZXJSb3dTdHlsZShyb3dJbmRleCksJ2NsYXNzJzpfdGhpcy5nZXRIZWFkZXJSb3dDbGFzcyhyb3dJbmRleCl9LFtjb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4sY2VsbEluZGV4KXtyZXR1cm4gaCgndGgnLHthdHRyczp7Y29sc3Bhbjpjb2x1bW4uY29sU3Bhbixyb3dzcGFuOmNvbHVtbi5yb3dTcGFufSxvbjp7J21vdXNlbW92ZSc6ZnVuY3Rpb24gbW91c2Vtb3ZlKCRldmVudCl7cmV0dXJuIF90aGlzLmhhbmRsZU1vdXNlTW92ZSgkZXZlbnQsY29sdW1uKTt9LCdtb3VzZW91dCc6X3RoaXMuaGFuZGxlTW91c2VPdXQsJ21vdXNlZG93bic6ZnVuY3Rpb24gbW91c2Vkb3duKCRldmVudCl7cmV0dXJuIF90aGlzLmhhbmRsZU1vdXNlRG93bigkZXZlbnQsY29sdW1uKTt9LCdjbGljayc6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtyZXR1cm4gX3RoaXMuaGFuZGxlSGVhZGVyQ2xpY2soJGV2ZW50LGNvbHVtbik7fSwnY29udGV4dG1lbnUnOmZ1bmN0aW9uIGNvbnRleHRtZW51KCRldmVudCl7cmV0dXJuIF90aGlzLmhhbmRsZUhlYWRlckNvbnRleHRNZW51KCRldmVudCxjb2x1bW4pO319LHN0eWxlOl90aGlzLmdldEhlYWRlckNlbGxTdHlsZShyb3dJbmRleCxjZWxsSW5kZXgsY29sdW1ucyxjb2x1bW4pLCdjbGFzcyc6X3RoaXMuZ2V0SGVhZGVyQ2VsbENsYXNzKHJvd0luZGV4LGNlbGxJbmRleCxjb2x1bW5zLGNvbHVtbiksa2V5OmNvbHVtbi5pZH0sW2goJ2RpdicseydjbGFzcyc6WydjZWxsJyxjb2x1bW4uZmlsdGVyZWRWYWx1ZSYmY29sdW1uLmZpbHRlcmVkVmFsdWUubGVuZ3RoPjA/J2hpZ2hsaWdodCc6JycsY29sdW1uLmxhYmVsQ2xhc3NOYW1lXX0sW2NvbHVtbi5yZW5kZXJIZWFkZXI/Y29sdW1uLnJlbmRlckhlYWRlci5jYWxsKF90aGlzLl9yZW5kZXJQcm94eSxoLHtjb2x1bW46Y29sdW1uLCRpbmRleDpjZWxsSW5kZXgsc3RvcmU6X3RoaXMuc3RvcmUsX3NlbGY6X3RoaXMuJHBhcmVudC4kdm5vZGUuY29udGV4dH0pOmNvbHVtbi5sYWJlbCxjb2x1bW4uc29ydGFibGU/aCgnc3BhbicseydjbGFzcyc6J2NhcmV0LXdyYXBwZXInLG9uOnsnY2xpY2snOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7cmV0dXJuIF90aGlzLmhhbmRsZVNvcnRDbGljaygkZXZlbnQsY29sdW1uKTt9fX0sW2goJ2knLHsnY2xhc3MnOidzb3J0LWNhcmV0IGFzY2VuZGluZycsb246eydjbGljayc6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtyZXR1cm4gX3RoaXMuaGFuZGxlU29ydENsaWNrKCRldmVudCxjb2x1bW4sJ2FzY2VuZGluZycpO319fSksaCgnaScseydjbGFzcyc6J3NvcnQtY2FyZXQgZGVzY2VuZGluZycsb246eydjbGljayc6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtyZXR1cm4gX3RoaXMuaGFuZGxlU29ydENsaWNrKCRldmVudCxjb2x1bW4sJ2Rlc2NlbmRpbmcnKTt9fX0pXSk6JycsY29sdW1uLmZpbHRlcmFibGU/aCgnc3BhbicseydjbGFzcyc6J2VsLXRhYmxlX19jb2x1bW4tZmlsdGVyLXRyaWdnZXInLG9uOnsnY2xpY2snOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7cmV0dXJuIF90aGlzLmhhbmRsZUZpbHRlckNsaWNrKCRldmVudCxjb2x1bW4pO319fSxbaCgnaScseydjbGFzcyc6WydlbC1pY29uLWFycm93LWRvd24nLGNvbHVtbi5maWx0ZXJPcGVuZWQ/J2VsLWljb24tYXJyb3ctdXAnOicnXX0pXSk6JyddKV0pO30pLF90aGlzLmhhc0d1dHRlcj9oKCd0aCcseydjbGFzcyc6J2d1dHRlcid9KTonJ10pO30pXSldKTt9LHByb3BzOntmaXhlZDpTdHJpbmcsc3RvcmU6e3JlcXVpcmVkOnRydWV9LGJvcmRlcjpCb29sZWFuLGRlZmF1bHRTb3J0Ont0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJue3Byb3A6Jycsb3JkZXI6Jyd9O319fSxjb21wb25lbnRzOntFbENoZWNrYm94OmNoZWNrYm94X2RlZmF1bHQuYX0sY29tcHV0ZWQ6dGFibGVfaGVhZGVyX2V4dGVuZHMoe3RhYmxlOmZ1bmN0aW9uIHRhYmxlKCl7cmV0dXJuIHRoaXMuJHBhcmVudDt9LGhhc0d1dHRlcjpmdW5jdGlvbiBoYXNHdXR0ZXIoKXtyZXR1cm4hdGhpcy5maXhlZCYmdGhpcy50YWJsZUxheW91dC5ndXR0ZXJXaWR0aDt9fSxtYXBTdGF0ZXMoe2NvbHVtbnM6J2NvbHVtbnMnLGlzQWxsU2VsZWN0ZWQ6J2lzQWxsU2VsZWN0ZWQnLGxlZnRGaXhlZExlYWZDb3VudDonZml4ZWRMZWFmQ29sdW1uc0xlbmd0aCcscmlnaHRGaXhlZExlYWZDb3VudDoncmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoJyxjb2x1bW5zQ291bnQ6ZnVuY3Rpb24gY29sdW1uc0NvdW50KHN0YXRlcyl7cmV0dXJuIHN0YXRlcy5jb2x1bW5zLmxlbmd0aDt9LGxlZnRGaXhlZENvdW50OmZ1bmN0aW9uIGxlZnRGaXhlZENvdW50KHN0YXRlcyl7cmV0dXJuIHN0YXRlcy5maXhlZENvbHVtbnMubGVuZ3RoO30scmlnaHRGaXhlZENvdW50OmZ1bmN0aW9uIHJpZ2h0Rml4ZWRDb3VudChzdGF0ZXMpe3JldHVybiBzdGF0ZXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoO319KSksY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dGhpcy5maWx0ZXJQYW5lbHM9e307fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt2YXIgX3RoaXMyPXRoaXM7Ly8gbmV4dFRpY2sg5piv5pyJ5b+F6KaB55qEIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvcHVsbC8xMTMxMQp0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3ZhciBfZGVmYXVsdFNvcnQ9X3RoaXMyLmRlZmF1bHRTb3J0LHByb3A9X2RlZmF1bHRTb3J0LnByb3Asb3JkZXI9X2RlZmF1bHRTb3J0Lm9yZGVyO3ZhciBpbml0PXRydWU7X3RoaXMyLnN0b3JlLmNvbW1pdCgnc29ydCcse3Byb3A6cHJvcCxvcmRlcjpvcmRlcixpbml0OmluaXR9KTt9KTt9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpe3ZhciBwYW5lbHM9dGhpcy5maWx0ZXJQYW5lbHM7Zm9yKHZhciBwcm9wIGluIHBhbmVscyl7aWYocGFuZWxzLmhhc093blByb3BlcnR5KHByb3ApJiZwYW5lbHNbcHJvcF0pe3BhbmVsc1twcm9wXS4kZGVzdHJveSh0cnVlKTt9fX0sbWV0aG9kczp7aXNDZWxsSGlkZGVuOmZ1bmN0aW9uIGlzQ2VsbEhpZGRlbihpbmRleCxjb2x1bW5zKXt2YXIgc3RhcnQ9MDtmb3IodmFyIGk9MDtpPGluZGV4O2krKyl7c3RhcnQrPWNvbHVtbnNbaV0uY29sU3Bhbjt9dmFyIGFmdGVyPXN0YXJ0K2NvbHVtbnNbaW5kZXhdLmNvbFNwYW4tMTtpZih0aGlzLmZpeGVkPT09dHJ1ZXx8dGhpcy5maXhlZD09PSdsZWZ0Jyl7cmV0dXJuIGFmdGVyPj10aGlzLmxlZnRGaXhlZExlYWZDb3VudDt9ZWxzZSBpZih0aGlzLmZpeGVkPT09J3JpZ2h0Jyl7cmV0dXJuIHN0YXJ0PHRoaXMuY29sdW1uc0NvdW50LXRoaXMucmlnaHRGaXhlZExlYWZDb3VudDt9ZWxzZXtyZXR1cm4gYWZ0ZXI8dGhpcy5sZWZ0Rml4ZWRMZWFmQ291bnR8fHN0YXJ0Pj10aGlzLmNvbHVtbnNDb3VudC10aGlzLnJpZ2h0Rml4ZWRMZWFmQ291bnQ7fX0sZ2V0SGVhZGVyUm93U3R5bGU6ZnVuY3Rpb24gZ2V0SGVhZGVyUm93U3R5bGUocm93SW5kZXgpe3ZhciBoZWFkZXJSb3dTdHlsZT10aGlzLnRhYmxlLmhlYWRlclJvd1N0eWxlO2lmKHR5cGVvZiBoZWFkZXJSb3dTdHlsZT09PSdmdW5jdGlvbicpe3JldHVybiBoZWFkZXJSb3dTdHlsZS5jYWxsKG51bGwse3Jvd0luZGV4OnJvd0luZGV4fSk7fXJldHVybiBoZWFkZXJSb3dTdHlsZTt9LGdldEhlYWRlclJvd0NsYXNzOmZ1bmN0aW9uIGdldEhlYWRlclJvd0NsYXNzKHJvd0luZGV4KXt2YXIgY2xhc3Nlcz1bXTt2YXIgaGVhZGVyUm93Q2xhc3NOYW1lPXRoaXMudGFibGUuaGVhZGVyUm93Q2xhc3NOYW1lO2lmKHR5cGVvZiBoZWFkZXJSb3dDbGFzc05hbWU9PT0nc3RyaW5nJyl7Y2xhc3Nlcy5wdXNoKGhlYWRlclJvd0NsYXNzTmFtZSk7fWVsc2UgaWYodHlwZW9mIGhlYWRlclJvd0NsYXNzTmFtZT09PSdmdW5jdGlvbicpe2NsYXNzZXMucHVzaChoZWFkZXJSb3dDbGFzc05hbWUuY2FsbChudWxsLHtyb3dJbmRleDpyb3dJbmRleH0pKTt9cmV0dXJuIGNsYXNzZXMuam9pbignICcpO30sZ2V0SGVhZGVyQ2VsbFN0eWxlOmZ1bmN0aW9uIGdldEhlYWRlckNlbGxTdHlsZShyb3dJbmRleCxjb2x1bW5JbmRleCxyb3csY29sdW1uKXt2YXIgaGVhZGVyQ2VsbFN0eWxlPXRoaXMudGFibGUuaGVhZGVyQ2VsbFN0eWxlO2lmKHR5cGVvZiBoZWFkZXJDZWxsU3R5bGU9PT0nZnVuY3Rpb24nKXtyZXR1cm4gaGVhZGVyQ2VsbFN0eWxlLmNhbGwobnVsbCx7cm93SW5kZXg6cm93SW5kZXgsY29sdW1uSW5kZXg6Y29sdW1uSW5kZXgscm93OnJvdyxjb2x1bW46Y29sdW1ufSk7fXJldHVybiBoZWFkZXJDZWxsU3R5bGU7fSxnZXRIZWFkZXJDZWxsQ2xhc3M6ZnVuY3Rpb24gZ2V0SGVhZGVyQ2VsbENsYXNzKHJvd0luZGV4LGNvbHVtbkluZGV4LHJvdyxjb2x1bW4pe3ZhciBjbGFzc2VzPVtjb2x1bW4uaWQsY29sdW1uLm9yZGVyLGNvbHVtbi5oZWFkZXJBbGlnbixjb2x1bW4uY2xhc3NOYW1lLGNvbHVtbi5sYWJlbENsYXNzTmFtZV07aWYocm93SW5kZXg9PT0wJiZ0aGlzLmlzQ2VsbEhpZGRlbihjb2x1bW5JbmRleCxyb3cpKXtjbGFzc2VzLnB1c2goJ2lzLWhpZGRlbicpO31pZighY29sdW1uLmNoaWxkcmVuKXtjbGFzc2VzLnB1c2goJ2lzLWxlYWYnKTt9aWYoY29sdW1uLnNvcnRhYmxlKXtjbGFzc2VzLnB1c2goJ2lzLXNvcnRhYmxlJyk7fXZhciBoZWFkZXJDZWxsQ2xhc3NOYW1lPXRoaXMudGFibGUuaGVhZGVyQ2VsbENsYXNzTmFtZTtpZih0eXBlb2YgaGVhZGVyQ2VsbENsYXNzTmFtZT09PSdzdHJpbmcnKXtjbGFzc2VzLnB1c2goaGVhZGVyQ2VsbENsYXNzTmFtZSk7fWVsc2UgaWYodHlwZW9mIGhlYWRlckNlbGxDbGFzc05hbWU9PT0nZnVuY3Rpb24nKXtjbGFzc2VzLnB1c2goaGVhZGVyQ2VsbENsYXNzTmFtZS5jYWxsKG51bGwse3Jvd0luZGV4OnJvd0luZGV4LGNvbHVtbkluZGV4OmNvbHVtbkluZGV4LHJvdzpyb3csY29sdW1uOmNvbHVtbn0pKTt9cmV0dXJuIGNsYXNzZXMuam9pbignICcpO30sdG9nZ2xlQWxsU2VsZWN0aW9uOmZ1bmN0aW9uIHRvZ2dsZUFsbFNlbGVjdGlvbihldmVudCl7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5zdG9yZS5jb21taXQoJ3RvZ2dsZUFsbFNlbGVjdGlvbicpO30saGFuZGxlRmlsdGVyQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlRmlsdGVyQ2xpY2soZXZlbnQsY29sdW1uKXtldmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgdGFyZ2V0PWV2ZW50LnRhcmdldDt2YXIgY2VsbD10YXJnZXQudGFnTmFtZT09PSdUSCc/dGFyZ2V0OnRhcmdldC5wYXJlbnROb2RlO2lmKE9iamVjdChkb21fWyJoYXNDbGFzcyJdKShjZWxsLCdub2NsaWNrJykpcmV0dXJuO2NlbGw9Y2VsbC5xdWVyeVNlbGVjdG9yKCcuZWwtdGFibGVfX2NvbHVtbi1maWx0ZXItdHJpZ2dlcicpfHxjZWxsO3ZhciB0YWJsZT10aGlzLiRwYXJlbnQ7dmFyIGZpbHRlclBhbmVsPXRoaXMuZmlsdGVyUGFuZWxzW2NvbHVtbi5pZF07aWYoZmlsdGVyUGFuZWwmJmNvbHVtbi5maWx0ZXJPcGVuZWQpe2ZpbHRlclBhbmVsLnNob3dQb3BwZXI9ZmFsc2U7cmV0dXJuO31pZighZmlsdGVyUGFuZWwpe2ZpbHRlclBhbmVsPW5ldyBleHRlcm5hbF92dWVfZGVmYXVsdC5hKGZpbHRlcl9wYW5lbCk7dGhpcy5maWx0ZXJQYW5lbHNbY29sdW1uLmlkXT1maWx0ZXJQYW5lbDtpZihjb2x1bW4uZmlsdGVyUGxhY2VtZW50KXtmaWx0ZXJQYW5lbC5wbGFjZW1lbnQ9Y29sdW1uLmZpbHRlclBsYWNlbWVudDt9ZmlsdGVyUGFuZWwudGFibGU9dGFibGU7ZmlsdGVyUGFuZWwuY2VsbD1jZWxsO2ZpbHRlclBhbmVsLmNvbHVtbj1jb2x1bW47IXRoaXMuJGlzU2VydmVyJiZmaWx0ZXJQYW5lbC4kbW91bnQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO31zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZmlsdGVyUGFuZWwuc2hvd1BvcHBlcj10cnVlO30sMTYpO30saGFuZGxlSGVhZGVyQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlSGVhZGVyQ2xpY2soZXZlbnQsY29sdW1uKXtpZighY29sdW1uLmZpbHRlcnMmJmNvbHVtbi5zb3J0YWJsZSl7dGhpcy5oYW5kbGVTb3J0Q2xpY2soZXZlbnQsY29sdW1uKTt9ZWxzZSBpZihjb2x1bW4uZmlsdGVyYWJsZSYmIWNvbHVtbi5zb3J0YWJsZSl7dGhpcy5oYW5kbGVGaWx0ZXJDbGljayhldmVudCxjb2x1bW4pO310aGlzLiRwYXJlbnQuJGVtaXQoJ2hlYWRlci1jbGljaycsY29sdW1uLGV2ZW50KTt9LGhhbmRsZUhlYWRlckNvbnRleHRNZW51OmZ1bmN0aW9uIGhhbmRsZUhlYWRlckNvbnRleHRNZW51KGV2ZW50LGNvbHVtbil7dGhpcy4kcGFyZW50LiRlbWl0KCdoZWFkZXItY29udGV4dG1lbnUnLGNvbHVtbixldmVudCk7fSxoYW5kbGVNb3VzZURvd246ZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2ZW50LGNvbHVtbil7dmFyIF90aGlzMz10aGlzO2lmKHRoaXMuJGlzU2VydmVyKXJldHVybjtpZihjb2x1bW4uY2hpbGRyZW4mJmNvbHVtbi5jaGlsZHJlbi5sZW5ndGg+MClyZXR1cm47LyogaXN0YW5idWwgaWdub3JlIGlmICovaWYodGhpcy5kcmFnZ2luZ0NvbHVtbiYmdGhpcy5ib3JkZXIpe3RoaXMuZHJhZ2dpbmc9dHJ1ZTt0aGlzLiRwYXJlbnQucmVzaXplUHJveHlWaXNpYmxlPXRydWU7dmFyIHRhYmxlPXRoaXMuJHBhcmVudDt2YXIgdGFibGVFbD10YWJsZS4kZWw7dmFyIHRhYmxlTGVmdD10YWJsZUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7dmFyIGNvbHVtbkVsPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RoLicrY29sdW1uLmlkKTt2YXIgY29sdW1uUmVjdD1jb2x1bW5FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgbWluTGVmdD1jb2x1bW5SZWN0LmxlZnQtdGFibGVMZWZ0KzMwO09iamVjdChkb21fWyJhZGRDbGFzcyJdKShjb2x1bW5FbCwnbm9jbGljaycpO3RoaXMuZHJhZ1N0YXRlPXtzdGFydE1vdXNlTGVmdDpldmVudC5jbGllbnRYLHN0YXJ0TGVmdDpjb2x1bW5SZWN0LnJpZ2h0LXRhYmxlTGVmdCxzdGFydENvbHVtbkxlZnQ6Y29sdW1uUmVjdC5sZWZ0LXRhYmxlTGVmdCx0YWJsZUxlZnQ6dGFibGVMZWZ0fTt2YXIgcmVzaXplUHJveHk9dGFibGUuJHJlZnMucmVzaXplUHJveHk7cmVzaXplUHJveHkuc3R5bGUubGVmdD10aGlzLmRyYWdTdGF0ZS5zdGFydExlZnQrJ3B4Jztkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlO307ZG9jdW1lbnQub25kcmFnc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTt2YXIgaGFuZGxlTW91c2VNb3ZlPWZ1bmN0aW9uIGhhbmRsZU1vdXNlTW92ZShldmVudCl7dmFyIGRlbHRhTGVmdD1ldmVudC5jbGllbnRYLV90aGlzMy5kcmFnU3RhdGUuc3RhcnRNb3VzZUxlZnQ7dmFyIHByb3h5TGVmdD1fdGhpczMuZHJhZ1N0YXRlLnN0YXJ0TGVmdCtkZWx0YUxlZnQ7cmVzaXplUHJveHkuc3R5bGUubGVmdD1NYXRoLm1heChtaW5MZWZ0LHByb3h5TGVmdCkrJ3B4Jzt9O3ZhciBoYW5kbGVNb3VzZVVwPWZ1bmN0aW9uIGhhbmRsZU1vdXNlVXAoKXtpZihfdGhpczMuZHJhZ2dpbmcpe3ZhciBfZHJhZ1N0YXRlPV90aGlzMy5kcmFnU3RhdGUsc3RhcnRDb2x1bW5MZWZ0PV9kcmFnU3RhdGUuc3RhcnRDb2x1bW5MZWZ0LHN0YXJ0TGVmdD1fZHJhZ1N0YXRlLnN0YXJ0TGVmdDt2YXIgZmluYWxMZWZ0PXBhcnNlSW50KHJlc2l6ZVByb3h5LnN0eWxlLmxlZnQsMTApO3ZhciBjb2x1bW5XaWR0aD1maW5hbExlZnQtc3RhcnRDb2x1bW5MZWZ0O2NvbHVtbi53aWR0aD1jb2x1bW4ucmVhbFdpZHRoPWNvbHVtbldpZHRoO3RhYmxlLiRlbWl0KCdoZWFkZXItZHJhZ2VuZCcsY29sdW1uLndpZHRoLHN0YXJ0TGVmdC1zdGFydENvbHVtbkxlZnQsY29sdW1uLGV2ZW50KTtfdGhpczMuc3RvcmUuc2NoZWR1bGVMYXlvdXQoKTtkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0nJztfdGhpczMuZHJhZ2dpbmc9ZmFsc2U7X3RoaXMzLmRyYWdnaW5nQ29sdW1uPW51bGw7X3RoaXMzLmRyYWdTdGF0ZT17fTt0YWJsZS5yZXNpemVQcm94eVZpc2libGU9ZmFsc2U7fWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsaGFuZGxlTW91c2VNb3ZlKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJyxoYW5kbGVNb3VzZVVwKTtkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PW51bGw7ZG9jdW1lbnQub25kcmFnc3RhcnQ9bnVsbDtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7T2JqZWN0KGRvbV9bInJlbW92ZUNsYXNzIl0pKGNvbHVtbkVsLCdub2NsaWNrJyk7fSwwKTt9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsaGFuZGxlTW91c2VNb3ZlKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJyxoYW5kbGVNb3VzZVVwKTt9fSxoYW5kbGVNb3VzZU1vdmU6ZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKGV2ZW50LGNvbHVtbil7aWYoY29sdW1uLmNoaWxkcmVuJiZjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoPjApcmV0dXJuO3ZhciB0YXJnZXQ9ZXZlbnQudGFyZ2V0O3doaWxlKHRhcmdldCYmdGFyZ2V0LnRhZ05hbWUhPT0nVEgnKXt0YXJnZXQ9dGFyZ2V0LnBhcmVudE5vZGU7fWlmKCFjb2x1bW58fCFjb2x1bW4ucmVzaXphYmxlKXJldHVybjtpZighdGhpcy5kcmFnZ2luZyYmdGhpcy5ib3JkZXIpe3ZhciByZWN0PXRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgYm9keVN0eWxlPWRvY3VtZW50LmJvZHkuc3R5bGU7aWYocmVjdC53aWR0aD4xMiYmcmVjdC5yaWdodC1ldmVudC5wYWdlWDw4KXtib2R5U3R5bGUuY3Vyc29yPSdjb2wtcmVzaXplJztpZihPYmplY3QoZG9tX1siaGFzQ2xhc3MiXSkodGFyZ2V0LCdpcy1zb3J0YWJsZScpKXt0YXJnZXQuc3R5bGUuY3Vyc29yPSdjb2wtcmVzaXplJzt9dGhpcy5kcmFnZ2luZ0NvbHVtbj1jb2x1bW47fWVsc2UgaWYoIXRoaXMuZHJhZ2dpbmcpe2JvZHlTdHlsZS5jdXJzb3I9Jyc7aWYoT2JqZWN0KGRvbV9bImhhc0NsYXNzIl0pKHRhcmdldCwnaXMtc29ydGFibGUnKSl7dGFyZ2V0LnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7fXRoaXMuZHJhZ2dpbmdDb2x1bW49bnVsbDt9fX0saGFuZGxlTW91c2VPdXQ6ZnVuY3Rpb24gaGFuZGxlTW91c2VPdXQoKXtpZih0aGlzLiRpc1NlcnZlcilyZXR1cm47ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Jyc7fSx0b2dnbGVPcmRlcjpmdW5jdGlvbiB0b2dnbGVPcmRlcihfcmVmKXt2YXIgb3JkZXI9X3JlZi5vcmRlcixzb3J0T3JkZXJzPV9yZWYuc29ydE9yZGVycztpZihvcmRlcj09PScnKXJldHVybiBzb3J0T3JkZXJzWzBdO3ZhciBpbmRleD1zb3J0T3JkZXJzLmluZGV4T2Yob3JkZXJ8fG51bGwpO3JldHVybiBzb3J0T3JkZXJzW2luZGV4PnNvcnRPcmRlcnMubGVuZ3RoLTI/MDppbmRleCsxXTt9LGhhbmRsZVNvcnRDbGljazpmdW5jdGlvbiBoYW5kbGVTb3J0Q2xpY2soZXZlbnQsY29sdW1uLGdpdmVuT3JkZXIpe2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBvcmRlcj1jb2x1bW4ub3JkZXI9PT1naXZlbk9yZGVyP251bGw6Z2l2ZW5PcmRlcnx8dGhpcy50b2dnbGVPcmRlcihjb2x1bW4pO3ZhciB0YXJnZXQ9ZXZlbnQudGFyZ2V0O3doaWxlKHRhcmdldCYmdGFyZ2V0LnRhZ05hbWUhPT0nVEgnKXt0YXJnZXQ9dGFyZ2V0LnBhcmVudE5vZGU7fWlmKHRhcmdldCYmdGFyZ2V0LnRhZ05hbWU9PT0nVEgnKXtpZihPYmplY3QoZG9tX1siaGFzQ2xhc3MiXSkodGFyZ2V0LCdub2NsaWNrJykpe09iamVjdChkb21fWyJyZW1vdmVDbGFzcyJdKSh0YXJnZXQsJ25vY2xpY2snKTtyZXR1cm47fX1pZighY29sdW1uLnNvcnRhYmxlKXJldHVybjt2YXIgc3RhdGVzPXRoaXMuc3RvcmUuc3RhdGVzO3ZhciBzb3J0UHJvcD1zdGF0ZXMuc29ydFByb3A7dmFyIHNvcnRPcmRlcj12b2lkIDA7dmFyIHNvcnRpbmdDb2x1bW49c3RhdGVzLnNvcnRpbmdDb2x1bW47aWYoc29ydGluZ0NvbHVtbiE9PWNvbHVtbnx8c29ydGluZ0NvbHVtbj09PWNvbHVtbiYmc29ydGluZ0NvbHVtbi5vcmRlcj09PW51bGwpe2lmKHNvcnRpbmdDb2x1bW4pe3NvcnRpbmdDb2x1bW4ub3JkZXI9bnVsbDt9c3RhdGVzLnNvcnRpbmdDb2x1bW49Y29sdW1uO3NvcnRQcm9wPWNvbHVtbi5wcm9wZXJ0eTt9aWYoIW9yZGVyKXtzb3J0T3JkZXI9Y29sdW1uLm9yZGVyPW51bGw7fWVsc2V7c29ydE9yZGVyPWNvbHVtbi5vcmRlcj1vcmRlcjt9c3RhdGVzLnNvcnRQcm9wPXNvcnRQcm9wO3N0YXRlcy5zb3J0T3JkZXI9c29ydE9yZGVyO3RoaXMuc3RvcmUuY29tbWl0KCdjaGFuZ2VTb3J0Q29uZGl0aW9uJyk7fX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2RyYWdnaW5nQ29sdW1uOm51bGwsZHJhZ2dpbmc6ZmFsc2UsZHJhZ1N0YXRlOnt9fTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS1mb290ZXIuanMKdmFyIHRhYmxlX2Zvb3Rlcl9leHRlbmRzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1hcmd1bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gc291cmNlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLGtleSkpe3RhcmdldFtrZXldPXNvdXJjZVtrZXldO319fXJldHVybiB0YXJnZXQ7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHRhYmxlX2Zvb3Rlcj17bmFtZTonRWxUYWJsZUZvb3RlcicsbWl4aW5zOltsYXlvdXRfb2JzZXJ2ZXJdLHJlbmRlcjpmdW5jdGlvbiByZW5kZXIoaCl7dmFyIF90aGlzPXRoaXM7dmFyIHN1bXM9W107aWYodGhpcy5zdW1tYXJ5TWV0aG9kKXtzdW1zPXRoaXMuc3VtbWFyeU1ldGhvZCh7Y29sdW1uczp0aGlzLmNvbHVtbnMsZGF0YTp0aGlzLnN0b3JlLnN0YXRlcy5kYXRhfSk7fWVsc2V7dGhpcy5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24oY29sdW1uLGluZGV4KXtpZihpbmRleD09PTApe3N1bXNbaW5kZXhdPV90aGlzLnN1bVRleHQ7cmV0dXJuO312YXIgdmFsdWVzPV90aGlzLnN0b3JlLnN0YXRlcy5kYXRhLm1hcChmdW5jdGlvbihpdGVtKXtyZXR1cm4gTnVtYmVyKGl0ZW1bY29sdW1uLnByb3BlcnR5XSk7fSk7dmFyIHByZWNpc2lvbnM9W107dmFyIG5vdE51bWJlcj10cnVlO3ZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKXtpZighaXNOYU4odmFsdWUpKXtub3ROdW1iZXI9ZmFsc2U7dmFyIGRlY2ltYWw9KCcnK3ZhbHVlKS5zcGxpdCgnLicpWzFdO3ByZWNpc2lvbnMucHVzaChkZWNpbWFsP2RlY2ltYWwubGVuZ3RoOjApO319KTt2YXIgcHJlY2lzaW9uPU1hdGgubWF4LmFwcGx5KG51bGwscHJlY2lzaW9ucyk7aWYoIW5vdE51bWJlcil7c3Vtc1tpbmRleF09dmFsdWVzLnJlZHVjZShmdW5jdGlvbihwcmV2LGN1cnIpe3ZhciB2YWx1ZT1OdW1iZXIoY3Vycik7aWYoIWlzTmFOKHZhbHVlKSl7cmV0dXJuIHBhcnNlRmxvYXQoKHByZXYrY3VycikudG9GaXhlZChNYXRoLm1pbihwcmVjaXNpb24sMjApKSk7fWVsc2V7cmV0dXJuIHByZXY7fX0sMCk7fWVsc2V7c3Vtc1tpbmRleF09Jyc7fX0pO31yZXR1cm4gaCgndGFibGUnLHsnY2xhc3MnOidlbC10YWJsZV9fZm9vdGVyJyxhdHRyczp7Y2VsbHNwYWNpbmc6JzAnLGNlbGxwYWRkaW5nOicwJyxib3JkZXI6JzAnfX0sW2goJ2NvbGdyb3VwJyxbdGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4pe3JldHVybiBoKCdjb2wnLHthdHRyczp7bmFtZTpjb2x1bW4uaWR9LGtleTpjb2x1bW4uaWR9KTt9KSx0aGlzLmhhc0d1dHRlcj9oKCdjb2wnLHthdHRyczp7bmFtZTonZ3V0dGVyJ319KTonJ10pLGgoJ3Rib2R5Jyx7J2NsYXNzJzpbeydoYXMtZ3V0dGVyJzp0aGlzLmhhc0d1dHRlcn1dfSxbaCgndHInLFt0aGlzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbixjZWxsSW5kZXgpe3JldHVybiBoKCd0ZCcse2tleTpjZWxsSW5kZXgsYXR0cnM6e2NvbHNwYW46Y29sdW1uLmNvbFNwYW4scm93c3Bhbjpjb2x1bW4ucm93U3Bhbn0sJ2NsYXNzJzpfdGhpcy5nZXRSb3dDbGFzc2VzKGNvbHVtbixjZWxsSW5kZXgpfSxbaCgnZGl2Jyx7J2NsYXNzJzpbJ2NlbGwnLGNvbHVtbi5sYWJlbENsYXNzTmFtZV19LFtzdW1zW2NlbGxJbmRleF1dKV0pO30pLHRoaXMuaGFzR3V0dGVyP2goJ3RoJyx7J2NsYXNzJzonZ3V0dGVyJ30pOicnXSldKV0pO30scHJvcHM6e2ZpeGVkOlN0cmluZyxzdG9yZTp7cmVxdWlyZWQ6dHJ1ZX0sc3VtbWFyeU1ldGhvZDpGdW5jdGlvbixzdW1UZXh0OlN0cmluZyxib3JkZXI6Qm9vbGVhbixkZWZhdWx0U29ydDp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybntwcm9wOicnLG9yZGVyOicnfTt9fX0sY29tcHV0ZWQ6dGFibGVfZm9vdGVyX2V4dGVuZHMoe3RhYmxlOmZ1bmN0aW9uIHRhYmxlKCl7cmV0dXJuIHRoaXMuJHBhcmVudDt9LGhhc0d1dHRlcjpmdW5jdGlvbiBoYXNHdXR0ZXIoKXtyZXR1cm4hdGhpcy5maXhlZCYmdGhpcy50YWJsZUxheW91dC5ndXR0ZXJXaWR0aDt9fSxtYXBTdGF0ZXMoe2NvbHVtbnM6J2NvbHVtbnMnLGlzQWxsU2VsZWN0ZWQ6J2lzQWxsU2VsZWN0ZWQnLGxlZnRGaXhlZExlYWZDb3VudDonZml4ZWRMZWFmQ29sdW1uc0xlbmd0aCcscmlnaHRGaXhlZExlYWZDb3VudDoncmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoJyxjb2x1bW5zQ291bnQ6ZnVuY3Rpb24gY29sdW1uc0NvdW50KHN0YXRlcyl7cmV0dXJuIHN0YXRlcy5jb2x1bW5zLmxlbmd0aDt9LGxlZnRGaXhlZENvdW50OmZ1bmN0aW9uIGxlZnRGaXhlZENvdW50KHN0YXRlcyl7cmV0dXJuIHN0YXRlcy5maXhlZENvbHVtbnMubGVuZ3RoO30scmlnaHRGaXhlZENvdW50OmZ1bmN0aW9uIHJpZ2h0Rml4ZWRDb3VudChzdGF0ZXMpe3JldHVybiBzdGF0ZXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoO319KSksbWV0aG9kczp7aXNDZWxsSGlkZGVuOmZ1bmN0aW9uIGlzQ2VsbEhpZGRlbihpbmRleCxjb2x1bW5zLGNvbHVtbil7aWYodGhpcy5maXhlZD09PXRydWV8fHRoaXMuZml4ZWQ9PT0nbGVmdCcpe3JldHVybiBpbmRleD49dGhpcy5sZWZ0Rml4ZWRMZWFmQ291bnQ7fWVsc2UgaWYodGhpcy5maXhlZD09PSdyaWdodCcpe3ZhciBiZWZvcmU9MDtmb3IodmFyIGk9MDtpPGluZGV4O2krKyl7YmVmb3JlKz1jb2x1bW5zW2ldLmNvbFNwYW47fXJldHVybiBiZWZvcmU8dGhpcy5jb2x1bW5zQ291bnQtdGhpcy5yaWdodEZpeGVkTGVhZkNvdW50O31lbHNlIGlmKCF0aGlzLmZpeGVkJiZjb2x1bW4uZml4ZWQpey8vIGhpZGUgY2VsbCB3aGVuIGZvb3RlciBpbnN0YW5jZSBpcyBub3QgZml4ZWQgYW5kIGNvbHVtbiBpcyBmaXhlZApyZXR1cm4gdHJ1ZTt9ZWxzZXtyZXR1cm4gaW5kZXg8dGhpcy5sZWZ0Rml4ZWRDb3VudHx8aW5kZXg+PXRoaXMuY29sdW1uc0NvdW50LXRoaXMucmlnaHRGaXhlZENvdW50O319LGdldFJvd0NsYXNzZXM6ZnVuY3Rpb24gZ2V0Um93Q2xhc3Nlcyhjb2x1bW4sY2VsbEluZGV4KXt2YXIgY2xhc3Nlcz1bY29sdW1uLmlkLGNvbHVtbi5hbGlnbixjb2x1bW4ubGFiZWxDbGFzc05hbWVdO2lmKGNvbHVtbi5jbGFzc05hbWUpe2NsYXNzZXMucHVzaChjb2x1bW4uY2xhc3NOYW1lKTt9aWYodGhpcy5pc0NlbGxIaWRkZW4oY2VsbEluZGV4LHRoaXMuY29sdW1ucyxjb2x1bW4pKXtjbGFzc2VzLnB1c2goJ2lzLWhpZGRlbicpO31pZighY29sdW1uLmNoaWxkcmVuKXtjbGFzc2VzLnB1c2goJ2lzLWxlYWYnKTt9cmV0dXJuIGNsYXNzZXM7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCnZhciB0YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2V4dGVuZHM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odGFyZ2V0KXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgc291cmNlPWFyZ3VtZW50c1tpXTtmb3IodmFyIGtleSBpbiBzb3VyY2Upe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2Usa2V5KSl7dGFyZ2V0W2tleV09c291cmNlW2tleV07fX19cmV0dXJuIHRhcmdldDt9Oy8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciB0YWJsZUlkU2VlZD0xOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsVGFibGUnLG1peGluczpbbG9jYWxlX2RlZmF1bHQuYSxtaWdyYXRpbmdfZGVmYXVsdC5hXSxkaXJlY3RpdmVzOntNb3VzZXdoZWVsOmRpcmVjdGl2ZXNfbW91c2V3aGVlbH0scHJvcHM6e2RhdGE6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybltdO319LHNpemU6U3RyaW5nLHdpZHRoOltTdHJpbmcsTnVtYmVyXSxoZWlnaHQ6W1N0cmluZyxOdW1iZXJdLG1heEhlaWdodDpbU3RyaW5nLE51bWJlcl0sZml0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxzdHJpcGU6Qm9vbGVhbixib3JkZXI6Qm9vbGVhbixyb3dLZXk6W1N0cmluZyxGdW5jdGlvbl0sY29udGV4dDp7fSxzaG93SGVhZGVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxzaG93U3VtbWFyeTpCb29sZWFuLHN1bVRleHQ6U3RyaW5nLHN1bW1hcnlNZXRob2Q6RnVuY3Rpb24scm93Q2xhc3NOYW1lOltTdHJpbmcsRnVuY3Rpb25dLHJvd1N0eWxlOltPYmplY3QsRnVuY3Rpb25dLGNlbGxDbGFzc05hbWU6W1N0cmluZyxGdW5jdGlvbl0sY2VsbFN0eWxlOltPYmplY3QsRnVuY3Rpb25dLGhlYWRlclJvd0NsYXNzTmFtZTpbU3RyaW5nLEZ1bmN0aW9uXSxoZWFkZXJSb3dTdHlsZTpbT2JqZWN0LEZ1bmN0aW9uXSxoZWFkZXJDZWxsQ2xhc3NOYW1lOltTdHJpbmcsRnVuY3Rpb25dLGhlYWRlckNlbGxTdHlsZTpbT2JqZWN0LEZ1bmN0aW9uXSxoaWdobGlnaHRDdXJyZW50Um93OkJvb2xlYW4sY3VycmVudFJvd0tleTpbU3RyaW5nLE51bWJlcl0sZW1wdHlUZXh0OlN0cmluZyxleHBhbmRSb3dLZXlzOkFycmF5LGRlZmF1bHRFeHBhbmRBbGw6Qm9vbGVhbixkZWZhdWx0U29ydDpPYmplY3QsdG9vbHRpcEVmZmVjdDpTdHJpbmcsc3Bhbk1ldGhvZDpGdW5jdGlvbixzZWxlY3RPbkluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGluZGVudDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxNn0sdHJlZVByb3BzOnt0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJue2hhc0NoaWxkcmVuOidoYXNDaGlsZHJlbicsY2hpbGRyZW46J2NoaWxkcmVuJ307fX0sbGF6eTpCb29sZWFuLGxvYWQ6RnVuY3Rpb259LGNvbXBvbmVudHM6e1RhYmxlSGVhZGVyOnRhYmxlX2hlYWRlcixUYWJsZUZvb3Rlcjp0YWJsZV9mb290ZXIsVGFibGVCb2R5OnRhYmxlX2JvZHksRWxDaGVja2JveDpjaGVja2JveF9kZWZhdWx0LmF9LG1ldGhvZHM6e2dldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKXtyZXR1cm57ZXZlbnRzOntleHBhbmQ6J2V4cGFuZCBpcyByZW5hbWVkIHRvIGV4cGFuZC1jaGFuZ2UnfX07fSxzZXRDdXJyZW50Um93OmZ1bmN0aW9uIHNldEN1cnJlbnRSb3cocm93KXt0aGlzLnN0b3JlLmNvbW1pdCgnc2V0Q3VycmVudFJvdycscm93KTt9LHRvZ2dsZVJvd1NlbGVjdGlvbjpmdW5jdGlvbiB0b2dnbGVSb3dTZWxlY3Rpb24ocm93LHNlbGVjdGVkKXt0aGlzLnN0b3JlLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3csc2VsZWN0ZWQsZmFsc2UpO3RoaXMuc3RvcmUudXBkYXRlQWxsU2VsZWN0ZWQoKTt9LHRvZ2dsZVJvd0V4cGFuc2lvbjpmdW5jdGlvbiB0b2dnbGVSb3dFeHBhbnNpb24ocm93LGV4cGFuZGVkKXt0aGlzLnN0b3JlLnRvZ2dsZVJvd0V4cGFuc2lvbkFkYXB0ZXIocm93LGV4cGFuZGVkKTt9LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCl7dGhpcy5zdG9yZS5jbGVhclNlbGVjdGlvbigpO30sY2xlYXJGaWx0ZXI6ZnVuY3Rpb24gY2xlYXJGaWx0ZXIoY29sdW1uS2V5cyl7dGhpcy5zdG9yZS5jbGVhckZpbHRlcihjb2x1bW5LZXlzKTt9LGNsZWFyU29ydDpmdW5jdGlvbiBjbGVhclNvcnQoKXt0aGlzLnN0b3JlLmNsZWFyU29ydCgpO30saGFuZGxlTW91c2VMZWF2ZTpmdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKCl7dGhpcy5zdG9yZS5jb21taXQoJ3NldEhvdmVyUm93JyxudWxsKTtpZih0aGlzLmhvdmVyU3RhdGUpdGhpcy5ob3ZlclN0YXRlPW51bGw7fSx1cGRhdGVTY3JvbGxZOmZ1bmN0aW9uIHVwZGF0ZVNjcm9sbFkoKXt2YXIgY2hhbmdlZD10aGlzLmxheW91dC51cGRhdGVTY3JvbGxZKCk7aWYoY2hhbmdlZCl7dGhpcy5sYXlvdXQubm90aWZ5T2JzZXJ2ZXJzKCdzY3JvbGxhYmxlJyk7dGhpcy5sYXlvdXQudXBkYXRlQ29sdW1uc1dpZHRoKCk7fX0saGFuZGxlRml4ZWRNb3VzZXdoZWVsOmZ1bmN0aW9uIGhhbmRsZUZpeGVkTW91c2V3aGVlbChldmVudCxkYXRhKXt2YXIgYm9keVdyYXBwZXI9dGhpcy5ib2R5V3JhcHBlcjtpZihNYXRoLmFicyhkYXRhLnNwaW5ZKT4wKXt2YXIgY3VycmVudFNjcm9sbFRvcD1ib2R5V3JhcHBlci5zY3JvbGxUb3A7aWYoZGF0YS5waXhlbFk8MCYmY3VycmVudFNjcm9sbFRvcCE9PTApe2V2ZW50LnByZXZlbnREZWZhdWx0KCk7fWlmKGRhdGEucGl4ZWxZPjAmJmJvZHlXcmFwcGVyLnNjcm9sbEhlaWdodC1ib2R5V3JhcHBlci5jbGllbnRIZWlnaHQ+Y3VycmVudFNjcm9sbFRvcCl7ZXZlbnQucHJldmVudERlZmF1bHQoKTt9Ym9keVdyYXBwZXIuc2Nyb2xsVG9wKz1NYXRoLmNlaWwoZGF0YS5waXhlbFkvNSk7fWVsc2V7Ym9keVdyYXBwZXIuc2Nyb2xsTGVmdCs9TWF0aC5jZWlsKGRhdGEucGl4ZWxYLzUpO319LGhhbmRsZUhlYWRlckZvb3Rlck1vdXNld2hlZWw6ZnVuY3Rpb24gaGFuZGxlSGVhZGVyRm9vdGVyTW91c2V3aGVlbChldmVudCxkYXRhKXt2YXIgcGl4ZWxYPWRhdGEucGl4ZWxYLHBpeGVsWT1kYXRhLnBpeGVsWTtpZihNYXRoLmFicyhwaXhlbFgpPj1NYXRoLmFicyhwaXhlbFkpKXt0aGlzLmJvZHlXcmFwcGVyLnNjcm9sbExlZnQrPWRhdGEucGl4ZWxYLzU7fX0sLy8gVE9ETyDkvb/nlKggQ1NTIHRyYW5zZm9ybQpzeW5jUG9zdGlvbjpPYmplY3QoZXh0ZXJuYWxfdGhyb3R0bGVfZGVib3VuY2VfWyJ0aHJvdHRsZSJdKSgyMCxmdW5jdGlvbigpe3ZhciBfYm9keVdyYXBwZXI9dGhpcy5ib2R5V3JhcHBlcixzY3JvbGxMZWZ0PV9ib2R5V3JhcHBlci5zY3JvbGxMZWZ0LHNjcm9sbFRvcD1fYm9keVdyYXBwZXIuc2Nyb2xsVG9wLG9mZnNldFdpZHRoPV9ib2R5V3JhcHBlci5vZmZzZXRXaWR0aCxzY3JvbGxXaWR0aD1fYm9keVdyYXBwZXIuc2Nyb2xsV2lkdGg7dmFyIF8kcmVmcz10aGlzLiRyZWZzLGhlYWRlcldyYXBwZXI9XyRyZWZzLmhlYWRlcldyYXBwZXIsZm9vdGVyV3JhcHBlcj1fJHJlZnMuZm9vdGVyV3JhcHBlcixmaXhlZEJvZHlXcmFwcGVyPV8kcmVmcy5maXhlZEJvZHlXcmFwcGVyLHJpZ2h0Rml4ZWRCb2R5V3JhcHBlcj1fJHJlZnMucmlnaHRGaXhlZEJvZHlXcmFwcGVyO2lmKGhlYWRlcldyYXBwZXIpaGVhZGVyV3JhcHBlci5zY3JvbGxMZWZ0PXNjcm9sbExlZnQ7aWYoZm9vdGVyV3JhcHBlcilmb290ZXJXcmFwcGVyLnNjcm9sbExlZnQ9c2Nyb2xsTGVmdDtpZihmaXhlZEJvZHlXcmFwcGVyKWZpeGVkQm9keVdyYXBwZXIuc2Nyb2xsVG9wPXNjcm9sbFRvcDtpZihyaWdodEZpeGVkQm9keVdyYXBwZXIpcmlnaHRGaXhlZEJvZHlXcmFwcGVyLnNjcm9sbFRvcD1zY3JvbGxUb3A7dmFyIG1heFNjcm9sbExlZnRQb3NpdGlvbj1zY3JvbGxXaWR0aC1vZmZzZXRXaWR0aC0xO2lmKHNjcm9sbExlZnQ+PW1heFNjcm9sbExlZnRQb3NpdGlvbil7dGhpcy5zY3JvbGxQb3NpdGlvbj0ncmlnaHQnO31lbHNlIGlmKHNjcm9sbExlZnQ9PT0wKXt0aGlzLnNjcm9sbFBvc2l0aW9uPSdsZWZ0Jzt9ZWxzZXt0aGlzLnNjcm9sbFBvc2l0aW9uPSdtaWRkbGUnO319KSxiaW5kRXZlbnRzOmZ1bmN0aW9uIGJpbmRFdmVudHMoKXt0aGlzLmJvZHlXcmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsdGhpcy5zeW5jUG9zdGlvbix7cGFzc2l2ZTp0cnVlfSk7aWYodGhpcy5maXQpe09iamVjdChyZXNpemVfZXZlbnRfWyJhZGRSZXNpemVMaXN0ZW5lciJdKSh0aGlzLiRlbCx0aGlzLnJlc2l6ZUxpc3RlbmVyKTt9fSx1bmJpbmRFdmVudHM6ZnVuY3Rpb24gdW5iaW5kRXZlbnRzKCl7dGhpcy5ib2R5V3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLHRoaXMuc3luY1Bvc3Rpb24se3Bhc3NpdmU6dHJ1ZX0pO2lmKHRoaXMuZml0KXtPYmplY3QocmVzaXplX2V2ZW50X1sicmVtb3ZlUmVzaXplTGlzdGVuZXIiXSkodGhpcy4kZWwsdGhpcy5yZXNpemVMaXN0ZW5lcik7fX0scmVzaXplTGlzdGVuZXI6ZnVuY3Rpb24gcmVzaXplTGlzdGVuZXIoKXtpZighdGhpcy4kcmVhZHkpcmV0dXJuO3ZhciBzaG91bGRVcGRhdGVMYXlvdXQ9ZmFsc2U7dmFyIGVsPXRoaXMuJGVsO3ZhciBfcmVzaXplU3RhdGU9dGhpcy5yZXNpemVTdGF0ZSxvbGRXaWR0aD1fcmVzaXplU3RhdGUud2lkdGgsb2xkSGVpZ2h0PV9yZXNpemVTdGF0ZS5oZWlnaHQ7dmFyIHdpZHRoPWVsLm9mZnNldFdpZHRoO2lmKG9sZFdpZHRoIT09d2lkdGgpe3Nob3VsZFVwZGF0ZUxheW91dD10cnVlO312YXIgaGVpZ2h0PWVsLm9mZnNldEhlaWdodDtpZigodGhpcy5oZWlnaHR8fHRoaXMuc2hvdWxkVXBkYXRlSGVpZ2h0KSYmb2xkSGVpZ2h0IT09aGVpZ2h0KXtzaG91bGRVcGRhdGVMYXlvdXQ9dHJ1ZTt9aWYoc2hvdWxkVXBkYXRlTGF5b3V0KXt0aGlzLnJlc2l6ZVN0YXRlLndpZHRoPXdpZHRoO3RoaXMucmVzaXplU3RhdGUuaGVpZ2h0PWhlaWdodDt0aGlzLmRvTGF5b3V0KCk7fX0sZG9MYXlvdXQ6ZnVuY3Rpb24gZG9MYXlvdXQoKXtpZih0aGlzLnNob3VsZFVwZGF0ZUhlaWdodCl7dGhpcy5sYXlvdXQudXBkYXRlRWxzSGVpZ2h0KCk7fXRoaXMubGF5b3V0LnVwZGF0ZUNvbHVtbnNXaWR0aCgpO30sc29ydDpmdW5jdGlvbiBzb3J0KHByb3Asb3JkZXIpe3RoaXMuc3RvcmUuY29tbWl0KCdzb3J0Jyx7cHJvcDpwcm9wLG9yZGVyOm9yZGVyfSk7fSx0b2dnbGVBbGxTZWxlY3Rpb246ZnVuY3Rpb24gdG9nZ2xlQWxsU2VsZWN0aW9uKCl7dGhpcy5zdG9yZS5jb21taXQoJ3RvZ2dsZUFsbFNlbGVjdGlvbicpO319LGNvbXB1dGVkOnRhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZXh0ZW5kcyh7dGFibGVTaXplOmZ1bmN0aW9uIHRhYmxlU2l6ZSgpe3JldHVybiB0aGlzLnNpemV8fCh0aGlzLiRFTEVNRU5UfHx7fSkuc2l6ZTt9LGJvZHlXcmFwcGVyOmZ1bmN0aW9uIGJvZHlXcmFwcGVyKCl7cmV0dXJuIHRoaXMuJHJlZnMuYm9keVdyYXBwZXI7fSxzaG91bGRVcGRhdGVIZWlnaHQ6ZnVuY3Rpb24gc2hvdWxkVXBkYXRlSGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVpZ2h0fHx0aGlzLm1heEhlaWdodHx8dGhpcy5maXhlZENvbHVtbnMubGVuZ3RoPjB8fHRoaXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoPjA7fSxib2R5V2lkdGg6ZnVuY3Rpb24gYm9keVdpZHRoKCl7dmFyIF9sYXlvdXQ9dGhpcy5sYXlvdXQsYm9keVdpZHRoPV9sYXlvdXQuYm9keVdpZHRoLHNjcm9sbFk9X2xheW91dC5zY3JvbGxZLGd1dHRlcldpZHRoPV9sYXlvdXQuZ3V0dGVyV2lkdGg7cmV0dXJuIGJvZHlXaWR0aD9ib2R5V2lkdGgtKHNjcm9sbFk/Z3V0dGVyV2lkdGg6MCkrJ3B4JzonJzt9LGJvZHlIZWlnaHQ6ZnVuY3Rpb24gYm9keUhlaWdodCgpe3ZhciBfbGF5b3V0Mj10aGlzLmxheW91dCxfbGF5b3V0MiRoZWFkZXJIZWlnaHQ9X2xheW91dDIuaGVhZGVySGVpZ2h0LGhlYWRlckhlaWdodD1fbGF5b3V0MiRoZWFkZXJIZWlnaHQ9PT11bmRlZmluZWQ/MDpfbGF5b3V0MiRoZWFkZXJIZWlnaHQsYm9keUhlaWdodD1fbGF5b3V0Mi5ib2R5SGVpZ2h0LF9sYXlvdXQyJGZvb3RlckhlaWdodD1fbGF5b3V0Mi5mb290ZXJIZWlnaHQsZm9vdGVySGVpZ2h0PV9sYXlvdXQyJGZvb3RlckhlaWdodD09PXVuZGVmaW5lZD8wOl9sYXlvdXQyJGZvb3RlckhlaWdodDtpZih0aGlzLmhlaWdodCl7cmV0dXJue2hlaWdodDpib2R5SGVpZ2h0P2JvZHlIZWlnaHQrJ3B4JzonJ307fWVsc2UgaWYodGhpcy5tYXhIZWlnaHQpe3ZhciBtYXhIZWlnaHQ9cGFyc2VIZWlnaHQodGhpcy5tYXhIZWlnaHQpO2lmKHR5cGVvZiBtYXhIZWlnaHQ9PT0nbnVtYmVyJyl7cmV0dXJueydtYXgtaGVpZ2h0JzptYXhIZWlnaHQtZm9vdGVySGVpZ2h0LSh0aGlzLnNob3dIZWFkZXI/aGVhZGVySGVpZ2h0OjApKydweCd9O319cmV0dXJue307fSxmaXhlZEJvZHlIZWlnaHQ6ZnVuY3Rpb24gZml4ZWRCb2R5SGVpZ2h0KCl7aWYodGhpcy5oZWlnaHQpe3JldHVybntoZWlnaHQ6dGhpcy5sYXlvdXQuZml4ZWRCb2R5SGVpZ2h0P3RoaXMubGF5b3V0LmZpeGVkQm9keUhlaWdodCsncHgnOicnfTt9ZWxzZSBpZih0aGlzLm1heEhlaWdodCl7dmFyIG1heEhlaWdodD1wYXJzZUhlaWdodCh0aGlzLm1heEhlaWdodCk7aWYodHlwZW9mIG1heEhlaWdodD09PSdudW1iZXInKXttYXhIZWlnaHQ9dGhpcy5sYXlvdXQuc2Nyb2xsWD9tYXhIZWlnaHQtdGhpcy5sYXlvdXQuZ3V0dGVyV2lkdGg6bWF4SGVpZ2h0O2lmKHRoaXMuc2hvd0hlYWRlcil7bWF4SGVpZ2h0LT10aGlzLmxheW91dC5oZWFkZXJIZWlnaHQ7fW1heEhlaWdodC09dGhpcy5sYXlvdXQuZm9vdGVySGVpZ2h0O3JldHVybnsnbWF4LWhlaWdodCc6bWF4SGVpZ2h0KydweCd9O319cmV0dXJue307fSxmaXhlZEhlaWdodDpmdW5jdGlvbiBmaXhlZEhlaWdodCgpe2lmKHRoaXMubWF4SGVpZ2h0KXtpZih0aGlzLnNob3dTdW1tYXJ5KXtyZXR1cm57Ym90dG9tOjB9O31yZXR1cm57Ym90dG9tOnRoaXMubGF5b3V0LnNjcm9sbFgmJnRoaXMuZGF0YS5sZW5ndGg/dGhpcy5sYXlvdXQuZ3V0dGVyV2lkdGgrJ3B4JzonJ307fWVsc2V7aWYodGhpcy5zaG93U3VtbWFyeSl7cmV0dXJue2hlaWdodDp0aGlzLmxheW91dC50YWJsZUhlaWdodD90aGlzLmxheW91dC50YWJsZUhlaWdodCsncHgnOicnfTt9cmV0dXJue2hlaWdodDp0aGlzLmxheW91dC52aWV3cG9ydEhlaWdodD90aGlzLmxheW91dC52aWV3cG9ydEhlaWdodCsncHgnOicnfTt9fSxlbXB0eUJsb2NrU3R5bGU6ZnVuY3Rpb24gZW1wdHlCbG9ja1N0eWxlKCl7aWYodGhpcy5kYXRhJiZ0aGlzLmRhdGEubGVuZ3RoKXJldHVybiBudWxsO3ZhciBoZWlnaHQ9JzEwMCUnO2lmKHRoaXMubGF5b3V0LmFwcGVuZEhlaWdodCl7aGVpZ2h0PSdjYWxjKDEwMCUgLSAnK3RoaXMubGF5b3V0LmFwcGVuZEhlaWdodCsncHgpJzt9cmV0dXJue3dpZHRoOnRoaXMuYm9keVdpZHRoLGhlaWdodDpoZWlnaHR9O319LG1hcFN0YXRlcyh7c2VsZWN0aW9uOidzZWxlY3Rpb24nLGNvbHVtbnM6J2NvbHVtbnMnLHRhYmxlRGF0YTonZGF0YScsZml4ZWRDb2x1bW5zOidmaXhlZENvbHVtbnMnLHJpZ2h0Rml4ZWRDb2x1bW5zOidyaWdodEZpeGVkQ29sdW1ucyd9KSksd2F0Y2g6e2hlaWdodDp7aW1tZWRpYXRlOnRydWUsaGFuZGxlcjpmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKXt0aGlzLmxheW91dC5zZXRIZWlnaHQodmFsdWUpO319LG1heEhlaWdodDp7aW1tZWRpYXRlOnRydWUsaGFuZGxlcjpmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKXt0aGlzLmxheW91dC5zZXRNYXhIZWlnaHQodmFsdWUpO319LGN1cnJlbnRSb3dLZXk6e2ltbWVkaWF0ZTp0cnVlLGhhbmRsZXI6ZnVuY3Rpb24gaGFuZGxlcih2YWx1ZSl7aWYoIXRoaXMucm93S2V5KXJldHVybjt0aGlzLnN0b3JlLnNldEN1cnJlbnRSb3dLZXkodmFsdWUpO319LGRhdGE6e2ltbWVkaWF0ZTp0cnVlLGhhbmRsZXI6ZnVuY3Rpb24gaGFuZGxlcih2YWx1ZSl7dGhpcy5zdG9yZS5jb21taXQoJ3NldERhdGEnLHZhbHVlKTt9fSxleHBhbmRSb3dLZXlzOntpbW1lZGlhdGU6dHJ1ZSxoYW5kbGVyOmZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsKXtpZihuZXdWYWwpe3RoaXMuc3RvcmUuc2V0RXhwYW5kUm93S2V5c0FkYXB0ZXIobmV3VmFsKTt9fX19LGNyZWF0ZWQ6ZnVuY3Rpb24gY3JlYXRlZCgpe3ZhciBfdGhpcz10aGlzO3RoaXMudGFibGVJZD0nZWwtdGFibGVfJyt0YWJsZUlkU2VlZCsrO3RoaXMuZGVib3VuY2VkVXBkYXRlTGF5b3V0PU9iamVjdChleHRlcm5hbF90aHJvdHRsZV9kZWJvdW5jZV9bImRlYm91bmNlIl0pKDUwLGZ1bmN0aW9uKCl7cmV0dXJuIF90aGlzLmRvTGF5b3V0KCk7fSk7fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt2YXIgX3RoaXMyPXRoaXM7dGhpcy5iaW5kRXZlbnRzKCk7dGhpcy5zdG9yZS51cGRhdGVDb2x1bW5zKCk7dGhpcy5kb0xheW91dCgpO3RoaXMucmVzaXplU3RhdGU9e3dpZHRoOnRoaXMuJGVsLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLiRlbC5vZmZzZXRIZWlnaHR9Oy8vIGluaXQgZmlsdGVycwp0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24oY29sdW1uKXtpZihjb2x1bW4uZmlsdGVyZWRWYWx1ZSYmY29sdW1uLmZpbHRlcmVkVmFsdWUubGVuZ3RoKXtfdGhpczIuc3RvcmUuY29tbWl0KCdmaWx0ZXJDaGFuZ2UnLHtjb2x1bW46Y29sdW1uLHZhbHVlczpjb2x1bW4uZmlsdGVyZWRWYWx1ZSxzaWxlbnQ6dHJ1ZX0pO319KTt0aGlzLiRyZWFkeT10cnVlO30sZGVzdHJveWVkOmZ1bmN0aW9uIGRlc3Ryb3llZCgpe3RoaXMudW5iaW5kRXZlbnRzKCk7fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXt2YXIgX3RyZWVQcm9wcz10aGlzLnRyZWVQcm9wcyxfdHJlZVByb3BzJGhhc0NoaWxkcmU9X3RyZWVQcm9wcy5oYXNDaGlsZHJlbixoYXNDaGlsZHJlbj1fdHJlZVByb3BzJGhhc0NoaWxkcmU9PT11bmRlZmluZWQ/J2hhc0NoaWxkcmVuJzpfdHJlZVByb3BzJGhhc0NoaWxkcmUsX3RyZWVQcm9wcyRjaGlsZHJlbj1fdHJlZVByb3BzLmNoaWxkcmVuLGNoaWxkcmVuPV90cmVlUHJvcHMkY2hpbGRyZW49PT11bmRlZmluZWQ/J2NoaWxkcmVuJzpfdHJlZVByb3BzJGNoaWxkcmVuO3RoaXMuc3RvcmU9Y3JlYXRlU3RvcmUodGhpcyx7cm93S2V5OnRoaXMucm93S2V5LGRlZmF1bHRFeHBhbmRBbGw6dGhpcy5kZWZhdWx0RXhwYW5kQWxsLHNlbGVjdE9uSW5kZXRlcm1pbmF0ZTp0aGlzLnNlbGVjdE9uSW5kZXRlcm1pbmF0ZSwvLyBUcmVlVGFibGUg55qE55u45YWz6YWN572uCmluZGVudDp0aGlzLmluZGVudCxsYXp5OnRoaXMubGF6eSxsYXp5Q29sdW1uSWRlbnRpZmllcjpoYXNDaGlsZHJlbixjaGlsZHJlbkNvbHVtbk5hbWU6Y2hpbGRyZW59KTt2YXIgbGF5b3V0PW5ldyB0YWJsZV9sYXlvdXQoe3N0b3JlOnRoaXMuc3RvcmUsdGFibGU6dGhpcyxmaXQ6dGhpcy5maXQsc2hvd0hlYWRlcjp0aGlzLnNob3dIZWFkZXJ9KTtyZXR1cm57bGF5b3V0OmxheW91dCxpc0hpZGRlbjpmYWxzZSxyZW5kZXJFeHBhbmRlZDpudWxsLHJlc2l6ZVByb3h5VmlzaWJsZTpmYWxzZSxyZXNpemVTdGF0ZTp7d2lkdGg6bnVsbCxoZWlnaHQ6bnVsbH0sLy8g5piv5ZCm5oul5pyJ5aSa57qn6KGo5aS0CmlzR3JvdXA6ZmFsc2Usc2Nyb2xsUG9zaXRpb246J2xlZnQnfTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXRhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL3RhYmxlLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHRhYmxlX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHRhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDkzZmUzNGVfcmVuZGVyLHRhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDkzZmUzNGVfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciB0YWJsZV9hcGk7fXRhYmxlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvdGFibGUvc3JjL3RhYmxlLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfdGFibGU9dGFibGVfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3NyY190YWJsZS5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzcmNfdGFibGUubmFtZSxzcmNfdGFibGUpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc190YWJsZT1zcmNfdGFibGU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvY29uZmlnLmpzCnZhciBjZWxsU3RhcnRzPXtkZWZhdWx0OntvcmRlcjonJ30sc2VsZWN0aW9uOnt3aWR0aDo0OCxtaW5XaWR0aDo0OCxyZWFsV2lkdGg6NDgsb3JkZXI6JycsY2xhc3NOYW1lOidlbC10YWJsZS1jb2x1bW4tLXNlbGVjdGlvbid9LGV4cGFuZDp7d2lkdGg6NDgsbWluV2lkdGg6NDgscmVhbFdpZHRoOjQ4LG9yZGVyOicnfSxpbmRleDp7d2lkdGg6NDgsbWluV2lkdGg6NDgscmVhbFdpZHRoOjQ4LG9yZGVyOicnfX07Ly8g6L+Z5Lqb6YCJ6aG55LiN5bqU6K+l6KKr6KaG55uWCnZhciBjZWxsRm9yY2VkPXtzZWxlY3Rpb246e3JlbmRlckhlYWRlcjpmdW5jdGlvbiByZW5kZXJIZWFkZXIoaCxfcmVmKXt2YXIgc3RvcmU9X3JlZi5zdG9yZTtyZXR1cm4gaCgnZWwtY2hlY2tib3gnLHthdHRyczp7ZGlzYWJsZWQ6c3RvcmUuc3RhdGVzLmRhdGEmJnN0b3JlLnN0YXRlcy5kYXRhLmxlbmd0aD09PTAsaW5kZXRlcm1pbmF0ZTpzdG9yZS5zdGF0ZXMuc2VsZWN0aW9uLmxlbmd0aD4wJiYhdGhpcy5pc0FsbFNlbGVjdGVkLHZhbHVlOnRoaXMuaXNBbGxTZWxlY3RlZH0sbmF0aXZlT246eydjbGljayc6dGhpcy50b2dnbGVBbGxTZWxlY3Rpb259fSk7fSxyZW5kZXJDZWxsOmZ1bmN0aW9uIHJlbmRlckNlbGwoaCxfcmVmMil7dmFyIHJvdz1fcmVmMi5yb3csY29sdW1uPV9yZWYyLmNvbHVtbixzdG9yZT1fcmVmMi5zdG9yZSwkaW5kZXg9X3JlZjIuJGluZGV4O3JldHVybiBoKCdlbC1jaGVja2JveCcse25hdGl2ZU9uOnsnY2xpY2snOmZ1bmN0aW9uIGNsaWNrKGV2ZW50KXtyZXR1cm4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fX0sYXR0cnM6e3ZhbHVlOnN0b3JlLmlzU2VsZWN0ZWQocm93KSxkaXNhYmxlZDpjb2x1bW4uc2VsZWN0YWJsZT8hY29sdW1uLnNlbGVjdGFibGUuY2FsbChudWxsLHJvdywkaW5kZXgpOmZhbHNlfSxvbjp7J2lucHV0JzpmdW5jdGlvbiBpbnB1dCgpe3N0b3JlLmNvbW1pdCgncm93U2VsZWN0ZWRDaGFuZ2VkJyxyb3cpO319fSk7fSxzb3J0YWJsZTpmYWxzZSxyZXNpemFibGU6ZmFsc2V9LGluZGV4OntyZW5kZXJIZWFkZXI6ZnVuY3Rpb24gcmVuZGVySGVhZGVyKGgsX3JlZjMpe3ZhciBjb2x1bW49X3JlZjMuY29sdW1uO3JldHVybiBjb2x1bW4ubGFiZWx8fCcjJzt9LHJlbmRlckNlbGw6ZnVuY3Rpb24gcmVuZGVyQ2VsbChoLF9yZWY0KXt2YXIgJGluZGV4PV9yZWY0LiRpbmRleCxjb2x1bW49X3JlZjQuY29sdW1uO3ZhciBpPSRpbmRleCsxO3ZhciBpbmRleD1jb2x1bW4uaW5kZXg7aWYodHlwZW9mIGluZGV4PT09J251bWJlcicpe2k9JGluZGV4K2luZGV4O31lbHNlIGlmKHR5cGVvZiBpbmRleD09PSdmdW5jdGlvbicpe2k9aW5kZXgoJGluZGV4KTt9cmV0dXJuIGgoJ2RpdicsW2ldKTt9LHNvcnRhYmxlOmZhbHNlfSxleHBhbmQ6e3JlbmRlckhlYWRlcjpmdW5jdGlvbiByZW5kZXJIZWFkZXIoaCxfcmVmNSl7dmFyIGNvbHVtbj1fcmVmNS5jb2x1bW47cmV0dXJuIGNvbHVtbi5sYWJlbHx8Jyc7fSxyZW5kZXJDZWxsOmZ1bmN0aW9uIHJlbmRlckNlbGwoaCxfcmVmNil7dmFyIHJvdz1fcmVmNi5yb3csc3RvcmU9X3JlZjYuc3RvcmU7dmFyIGNsYXNzZXM9WydlbC10YWJsZV9fZXhwYW5kLWljb24nXTtpZihzdG9yZS5zdGF0ZXMuZXhwYW5kUm93cy5pbmRleE9mKHJvdyk+LTEpe2NsYXNzZXMucHVzaCgnZWwtdGFibGVfX2V4cGFuZC1pY29uLS1leHBhbmRlZCcpO312YXIgY2FsbGJhY2s9ZnVuY3Rpb24gY2FsbGJhY2soZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTtzdG9yZS50b2dnbGVSb3dFeHBhbnNpb24ocm93KTt9O3JldHVybiBoKCdkaXYnLHsnY2xhc3MnOmNsYXNzZXMsb246eydjbGljayc6Y2FsbGJhY2t9fSxbaCgnaScseydjbGFzcyc6J2VsLWljb24gZWwtaWNvbi1hcnJvdy1yaWdodCd9KV0pO30sc29ydGFibGU6ZmFsc2UscmVzaXphYmxlOmZhbHNlLGNsYXNzTmFtZTonZWwtdGFibGVfX2V4cGFuZC1jb2x1bW4nfX07ZnVuY3Rpb24gZGVmYXVsdFJlbmRlckNlbGwoaCxfcmVmNyl7dmFyIHJvdz1fcmVmNy5yb3csY29sdW1uPV9yZWY3LmNvbHVtbiwkaW5kZXg9X3JlZjcuJGluZGV4O3ZhciBwcm9wZXJ0eT1jb2x1bW4ucHJvcGVydHk7dmFyIHZhbHVlPXByb3BlcnR5JiZPYmplY3QodXRpbF9bImdldFByb3BCeVBhdGgiXSkocm93LHByb3BlcnR5KS52O2lmKGNvbHVtbiYmY29sdW1uLmZvcm1hdHRlcil7cmV0dXJuIGNvbHVtbi5mb3JtYXR0ZXIocm93LGNvbHVtbix2YWx1ZSwkaW5kZXgpO31yZXR1cm4gdmFsdWU7fWZ1bmN0aW9uIHRyZWVDZWxsUHJlZml4KGgsX3JlZjgpe3ZhciByb3c9X3JlZjgucm93LHRyZWVOb2RlPV9yZWY4LnRyZWVOb2RlLHN0b3JlPV9yZWY4LnN0b3JlO2lmKCF0cmVlTm9kZSlyZXR1cm4gbnVsbDt2YXIgZWxlPVtdO3ZhciBjYWxsYmFjaz1mdW5jdGlvbiBjYWxsYmFjayhlKXtlLnN0b3BQcm9wYWdhdGlvbigpO3N0b3JlLmxvYWRPclRvZ2dsZShyb3cpO307aWYodHJlZU5vZGUuaW5kZW50KXtlbGUucHVzaChoKCdzcGFuJyx7J2NsYXNzJzonZWwtdGFibGVfX2luZGVudCcsc3R5bGU6eydwYWRkaW5nLWxlZnQnOnRyZWVOb2RlLmluZGVudCsncHgnfX0pKTt9aWYodHlwZW9mIHRyZWVOb2RlLmV4cGFuZGVkPT09J2Jvb2xlYW4nJiYhdHJlZU5vZGUubm9MYXp5Q2hpbGRyZW4pe3ZhciBleHBhbmRDbGFzc2VzPVsnZWwtdGFibGVfX2V4cGFuZC1pY29uJyx0cmVlTm9kZS5leHBhbmRlZD8nZWwtdGFibGVfX2V4cGFuZC1pY29uLS1leHBhbmRlZCc6JyddO3ZhciBpY29uQ2xhc3Nlcz1bJ2VsLWljb24tYXJyb3ctcmlnaHQnXTtpZih0cmVlTm9kZS5sb2FkaW5nKXtpY29uQ2xhc3Nlcz1bJ2VsLWljb24tbG9hZGluZyddO31lbGUucHVzaChoKCdkaXYnLHsnY2xhc3MnOmV4cGFuZENsYXNzZXMsb246eydjbGljayc6Y2FsbGJhY2t9fSxbaCgnaScseydjbGFzcyc6aWNvbkNsYXNzZXN9KV0pKTt9ZWxzZXtlbGUucHVzaChoKCdzcGFuJyx7J2NsYXNzJzonZWwtdGFibGVfX3BsYWNlaG9sZGVyJ30pKTt9cmV0dXJuIGVsZTt9Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvdGFibGUtY29sdW1uLmpzCnZhciB0YWJsZV9jb2x1bW5fZXh0ZW5kcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9YXJndW1lbnRzW2ldO2Zvcih2YXIga2V5IGluIHNvdXJjZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSxrZXkpKXt0YXJnZXRba2V5XT1zb3VyY2Vba2V5XTt9fX1yZXR1cm4gdGFyZ2V0O307dmFyIGNvbHVtbklkU2VlZD0xOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGFibGVfY29sdW1uPXtuYW1lOidFbFRhYmxlQ29sdW1uJyxwcm9wczp7dHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDonZGVmYXVsdCd9LGxhYmVsOlN0cmluZyxjbGFzc05hbWU6U3RyaW5nLGxhYmVsQ2xhc3NOYW1lOlN0cmluZyxwcm9wZXJ0eTpTdHJpbmcscHJvcDpTdHJpbmcsd2lkdGg6e30sbWluV2lkdGg6e30scmVuZGVySGVhZGVyOkZ1bmN0aW9uLHNvcnRhYmxlOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDpmYWxzZX0sc29ydE1ldGhvZDpGdW5jdGlvbixzb3J0Qnk6W1N0cmluZyxGdW5jdGlvbixBcnJheV0scmVzaXphYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxjb2x1bW5LZXk6U3RyaW5nLGFsaWduOlN0cmluZyxoZWFkZXJBbGlnbjpTdHJpbmcsc2hvd1Rvb2x0aXBXaGVuT3ZlcmZsb3c6Qm9vbGVhbixzaG93T3ZlcmZsb3dUb29sdGlwOkJvb2xlYW4sZml4ZWQ6W0Jvb2xlYW4sU3RyaW5nXSxmb3JtYXR0ZXI6RnVuY3Rpb24sc2VsZWN0YWJsZTpGdW5jdGlvbixyZXNlcnZlU2VsZWN0aW9uOkJvb2xlYW4sZmlsdGVyTWV0aG9kOkZ1bmN0aW9uLGZpbHRlcmVkVmFsdWU6QXJyYXksZmlsdGVyczpBcnJheSxmaWx0ZXJQbGFjZW1lbnQ6U3RyaW5nLGZpbHRlck11bHRpcGxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxpbmRleDpbTnVtYmVyLEZ1bmN0aW9uXSxzb3J0T3JkZXJzOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm5bJ2FzY2VuZGluZycsJ2Rlc2NlbmRpbmcnLG51bGxdO30sdmFsaWRhdG9yOmZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpe3JldHVybiB2YWwuZXZlcnkoZnVuY3Rpb24ob3JkZXIpe3JldHVyblsnYXNjZW5kaW5nJywnZGVzY2VuZGluZycsbnVsbF0uaW5kZXhPZihvcmRlcik+LTE7fSk7fX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntpc1N1YkNvbHVtbjpmYWxzZSxjb2x1bW5zOltdfTt9LGNvbXB1dGVkOntvd25lcjpmdW5jdGlvbiBvd25lcigpe3ZhciBwYXJlbnQ9dGhpcy4kcGFyZW50O3doaWxlKHBhcmVudCYmIXBhcmVudC50YWJsZUlkKXtwYXJlbnQ9cGFyZW50LiRwYXJlbnQ7fXJldHVybiBwYXJlbnQ7fSxjb2x1bW5PclRhYmxlUGFyZW50OmZ1bmN0aW9uIGNvbHVtbk9yVGFibGVQYXJlbnQoKXt2YXIgcGFyZW50PXRoaXMuJHBhcmVudDt3aGlsZShwYXJlbnQmJiFwYXJlbnQudGFibGVJZCYmIXBhcmVudC5jb2x1bW5JZCl7cGFyZW50PXBhcmVudC4kcGFyZW50O31yZXR1cm4gcGFyZW50O30scmVhbFdpZHRoOmZ1bmN0aW9uIHJlYWxXaWR0aCgpe3JldHVybiBwYXJzZVdpZHRoKHRoaXMud2lkdGgpO30scmVhbE1pbldpZHRoOmZ1bmN0aW9uIHJlYWxNaW5XaWR0aCgpe3JldHVybiBwYXJzZU1pbldpZHRoKHRoaXMubWluV2lkdGgpO30scmVhbEFsaWduOmZ1bmN0aW9uIHJlYWxBbGlnbigpe3JldHVybiB0aGlzLmFsaWduPydpcy0nK3RoaXMuYWxpZ246bnVsbDt9LHJlYWxIZWFkZXJBbGlnbjpmdW5jdGlvbiByZWFsSGVhZGVyQWxpZ24oKXtyZXR1cm4gdGhpcy5oZWFkZXJBbGlnbj8naXMtJyt0aGlzLmhlYWRlckFsaWduOnRoaXMucmVhbEFsaWduO319LG1ldGhvZHM6e2dldFByb3BzRGF0YTpmdW5jdGlvbiBnZXRQcm9wc0RhdGEoKXt2YXIgX3RoaXM9dGhpcztmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxwcm9wcz1BcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKyl7cHJvcHNbX2tleV09YXJndW1lbnRzW19rZXldO31yZXR1cm4gcHJvcHMucmVkdWNlKGZ1bmN0aW9uKHByZXYsY3VyKXtpZihBcnJheS5pc0FycmF5KGN1cikpe2N1ci5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7cHJldltrZXldPV90aGlzW2tleV07fSk7fXJldHVybiBwcmV2O30se30pO30sZ2V0Q29sdW1uRWxJbmRleDpmdW5jdGlvbiBnZXRDb2x1bW5FbEluZGV4KGNoaWxkcmVuLGNoaWxkKXtyZXR1cm5bXS5pbmRleE9mLmNhbGwoY2hpbGRyZW4sY2hpbGQpO30sc2V0Q29sdW1uV2lkdGg6ZnVuY3Rpb24gc2V0Q29sdW1uV2lkdGgoY29sdW1uKXtpZih0aGlzLnJlYWxXaWR0aCl7Y29sdW1uLndpZHRoPXRoaXMucmVhbFdpZHRoO31pZih0aGlzLnJlYWxNaW5XaWR0aCl7Y29sdW1uLm1pbldpZHRoPXRoaXMucmVhbE1pbldpZHRoO31pZighY29sdW1uLm1pbldpZHRoKXtjb2x1bW4ubWluV2lkdGg9ODA7fWNvbHVtbi5yZWFsV2lkdGg9Y29sdW1uLndpZHRoPT09dW5kZWZpbmVkP2NvbHVtbi5taW5XaWR0aDpjb2x1bW4ud2lkdGg7cmV0dXJuIGNvbHVtbjt9LHNldENvbHVtbkZvcmNlZFByb3BzOmZ1bmN0aW9uIHNldENvbHVtbkZvcmNlZFByb3BzKGNvbHVtbil7Ly8g5a+55LqO54m55a6a57G75Z6L55qEIGNvbHVtbu+8jOafkOS6m+WxnuaAp+S4jeWFgeiuuOiuvue9rgp2YXIgdHlwZT1jb2x1bW4udHlwZTt2YXIgc291cmNlPWNlbGxGb3JjZWRbdHlwZV18fHt9O09iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbihwcm9wKXt2YXIgdmFsdWU9c291cmNlW3Byb3BdO2lmKHZhbHVlIT09dW5kZWZpbmVkKXtjb2x1bW5bcHJvcF09cHJvcD09PSdjbGFzc05hbWUnP2NvbHVtbltwcm9wXSsnICcrdmFsdWU6dmFsdWU7fX0pO3JldHVybiBjb2x1bW47fSxzZXRDb2x1bW5SZW5kZXJzOmZ1bmN0aW9uIHNldENvbHVtblJlbmRlcnMoY29sdW1uKXt2YXIgX3RoaXMyPXRoaXM7dmFyIGg9dGhpcy4kY3JlYXRlRWxlbWVudDsvLyByZW5kZXJIZWFkZXIg5bGe5oCn5LiN5o6o6I2Q5L2/55So44CCCmlmKHRoaXMucmVuZGVySGVhZGVyKXtjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW1RhYmxlQ29sdW1uXUNvbXBhcmluZyB0byByZW5kZXItaGVhZGVyLCBzY29wZWQtc2xvdCBoZWFkZXIgaXMgZWFzaWVyIHRvIHVzZS4gV2UgcmVjb21tZW5kIHVzZXJzIHRvIHVzZSBzY29wZWQtc2xvdCBoZWFkZXIuJyk7fWVsc2UgaWYoY29sdW1uLnR5cGUhPT0nc2VsZWN0aW9uJyl7Y29sdW1uLnJlbmRlckhlYWRlcj1mdW5jdGlvbihoLHNjb3BlKXt2YXIgcmVuZGVySGVhZGVyPV90aGlzMi4kc2NvcGVkU2xvdHMuaGVhZGVyO3JldHVybiByZW5kZXJIZWFkZXI/cmVuZGVySGVhZGVyKHNjb3BlKTpjb2x1bW4ubGFiZWw7fTt9dmFyIG9yaWdpblJlbmRlckNlbGw9Y29sdW1uLnJlbmRlckNlbGw7Ly8gVE9ETzog6L+Z6YeM55qE5a6e546w6LCD5pW0CmlmKGNvbHVtbi50eXBlPT09J2V4cGFuZCcpey8vIOWvueS6juWxleW8gOihjO+8jHJlbmRlckNlbGwg5LiN5YWB6K646YWN572u55qE44CC5Zyo5LiK5LiA5q2l5Lit5bey57uP6K6+572u6L+H77yM6L+Z6YeM6ZyA6KaB566A5Y2V5bCB6KOF5LiA5LiL44CCCmNvbHVtbi5yZW5kZXJDZWxsPWZ1bmN0aW9uKGgsZGF0YSl7cmV0dXJuIGgoJ2RpdicseydjbGFzcyc6J2NlbGwnfSxbb3JpZ2luUmVuZGVyQ2VsbChoLGRhdGEpXSk7fTt0aGlzLm93bmVyLnJlbmRlckV4cGFuZGVkPWZ1bmN0aW9uKGgsZGF0YSl7cmV0dXJuIF90aGlzMi4kc2NvcGVkU2xvdHMuZGVmYXVsdD9fdGhpczIuJHNjb3BlZFNsb3RzLmRlZmF1bHQoZGF0YSk6X3RoaXMyLiRzbG90cy5kZWZhdWx0O307fWVsc2V7b3JpZ2luUmVuZGVyQ2VsbD1vcmlnaW5SZW5kZXJDZWxsfHxkZWZhdWx0UmVuZGVyQ2VsbDsvLyDlr7kgcmVuZGVyQ2VsbCDov5vooYzljIXoo4UKY29sdW1uLnJlbmRlckNlbGw9ZnVuY3Rpb24oaCxkYXRhKXt2YXIgY2hpbGRyZW49bnVsbDtpZihfdGhpczIuJHNjb3BlZFNsb3RzLmRlZmF1bHQpe2NoaWxkcmVuPV90aGlzMi4kc2NvcGVkU2xvdHMuZGVmYXVsdChkYXRhKTt9ZWxzZXtjaGlsZHJlbj1vcmlnaW5SZW5kZXJDZWxsKGgsZGF0YSk7fXZhciBwcmVmaXg9dHJlZUNlbGxQcmVmaXgoaCxkYXRhKTt2YXIgcHJvcHM9e2NsYXNzOidjZWxsJyxzdHlsZTp7fX07aWYoY29sdW1uLnNob3dPdmVyZmxvd1Rvb2x0aXApe3Byb3BzLmNsYXNzKz0nIGVsLXRvb2x0aXAnO3Byb3BzLnN0eWxlPXt3aWR0aDooZGF0YS5jb2x1bW4ucmVhbFdpZHRofHxkYXRhLmNvbHVtbi53aWR0aCktMSsncHgnfTt9cmV0dXJuIGgoJ2RpdicscHJvcHMsW3ByZWZpeCxjaGlsZHJlbl0pO307fXJldHVybiBjb2x1bW47fSxyZWdpc3Rlck5vcm1hbFdhdGNoZXJzOmZ1bmN0aW9uIHJlZ2lzdGVyTm9ybWFsV2F0Y2hlcnMoKXt2YXIgX3RoaXMzPXRoaXM7dmFyIHByb3BzPVsnbGFiZWwnLCdwcm9wZXJ0eScsJ2ZpbHRlcnMnLCdmaWx0ZXJNdWx0aXBsZScsJ3NvcnRhYmxlJywnaW5kZXgnLCdmb3JtYXR0ZXInLCdjbGFzc05hbWUnLCdsYWJlbENsYXNzTmFtZScsJ3Nob3dPdmVyZmxvd1Rvb2x0aXAnXTsvLyDkuIDkupvlsZ7mgKflhbfmnInliKvlkI0KdmFyIGFsaWFzZXM9e3Byb3A6J3Byb3BlcnR5JyxyZWFsQWxpZ246J2FsaWduJyxyZWFsSGVhZGVyQWxpZ246J2hlYWRlckFsaWduJyxyZWFsV2lkdGg6J3dpZHRoJ307dmFyIGFsbEFsaWFzZXM9cHJvcHMucmVkdWNlKGZ1bmN0aW9uKHByZXYsY3VyKXtwcmV2W2N1cl09Y3VyO3JldHVybiBwcmV2O30sYWxpYXNlcyk7T2JqZWN0LmtleXMoYWxsQWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbihrZXkpe3ZhciBjb2x1bW5LZXk9YWxpYXNlc1trZXldO190aGlzMy4kd2F0Y2goa2V5LGZ1bmN0aW9uKG5ld1ZhbCl7X3RoaXMzLmNvbHVtbkNvbmZpZ1tjb2x1bW5LZXldPW5ld1ZhbDt9KTt9KTt9LHJlZ2lzdGVyQ29tcGxleFdhdGNoZXJzOmZ1bmN0aW9uIHJlZ2lzdGVyQ29tcGxleFdhdGNoZXJzKCl7dmFyIF90aGlzND10aGlzO3ZhciBwcm9wcz1bJ2ZpeGVkJ107dmFyIGFsaWFzZXM9e3JlYWxXaWR0aDond2lkdGgnLHJlYWxNaW5XaWR0aDonbWluV2lkdGgnfTt2YXIgYWxsQWxpYXNlcz1wcm9wcy5yZWR1Y2UoZnVuY3Rpb24ocHJldixjdXIpe3ByZXZbY3VyXT1jdXI7cmV0dXJuIHByZXY7fSxhbGlhc2VzKTtPYmplY3Qua2V5cyhhbGxBbGlhc2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7dmFyIGNvbHVtbktleT1hbGlhc2VzW2tleV07X3RoaXM0LiR3YXRjaChrZXksZnVuY3Rpb24obmV3VmFsKXtfdGhpczQuY29sdW1uQ29uZmlnW2NvbHVtbktleV09bmV3VmFsO3ZhciB1cGRhdGVDb2x1bW5zPWNvbHVtbktleT09PSdmaXhlZCc7X3RoaXM0Lm93bmVyLnN0b3JlLnNjaGVkdWxlTGF5b3V0KHVwZGF0ZUNvbHVtbnMpO30pO30pO319LGNvbXBvbmVudHM6e0VsQ2hlY2tib3g6Y2hlY2tib3hfZGVmYXVsdC5hfSxiZWZvcmVDcmVhdGU6ZnVuY3Rpb24gYmVmb3JlQ3JlYXRlKCl7dGhpcy5yb3c9e307dGhpcy5jb2x1bW49e307dGhpcy4kaW5kZXg9MDt0aGlzLmNvbHVtbklkPScnO30sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dmFyIHBhcmVudD10aGlzLmNvbHVtbk9yVGFibGVQYXJlbnQ7dGhpcy5pc1N1YkNvbHVtbj10aGlzLm93bmVyIT09cGFyZW50O3RoaXMuY29sdW1uSWQ9KHBhcmVudC50YWJsZUlkfHxwYXJlbnQuY29sdW1uSWQpKydfY29sdW1uXycrY29sdW1uSWRTZWVkKys7dmFyIHR5cGU9dGhpcy50eXBlfHwnZGVmYXVsdCc7dmFyIHNvcnRhYmxlPXRoaXMuc29ydGFibGU9PT0nJz90cnVlOnRoaXMuc29ydGFibGU7dmFyIGRlZmF1bHRzPXRhYmxlX2NvbHVtbl9leHRlbmRzKHt9LGNlbGxTdGFydHNbdHlwZV0se2lkOnRoaXMuY29sdW1uSWQsdHlwZTp0eXBlLHByb3BlcnR5OnRoaXMucHJvcHx8dGhpcy5wcm9wZXJ0eSxhbGlnbjp0aGlzLnJlYWxBbGlnbixoZWFkZXJBbGlnbjp0aGlzLnJlYWxIZWFkZXJBbGlnbixzaG93T3ZlcmZsb3dUb29sdGlwOnRoaXMuc2hvd092ZXJmbG93VG9vbHRpcHx8dGhpcy5zaG93VG9vbHRpcFdoZW5PdmVyZmxvdywvLyBmaWx0ZXIg55u45YWz5bGe5oCnCmZpbHRlcmFibGU6dGhpcy5maWx0ZXJzfHx0aGlzLmZpbHRlck1ldGhvZCxmaWx0ZXJlZFZhbHVlOltdLGZpbHRlclBsYWNlbWVudDonJyxpc0NvbHVtbkdyb3VwOmZhbHNlLGZpbHRlck9wZW5lZDpmYWxzZSwvLyBzb3J0IOebuOWFs+WxnuaApwpzb3J0YWJsZTpzb3J0YWJsZSwvLyBpbmRleCDliJcKaW5kZXg6dGhpcy5pbmRleH0pO3ZhciBiYXNpY1Byb3BzPVsnY29sdW1uS2V5JywnbGFiZWwnLCdjbGFzc05hbWUnLCdsYWJlbENsYXNzTmFtZScsJ3R5cGUnLCdyZW5kZXJIZWFkZXInLCdmb3JtYXR0ZXInLCdmaXhlZCcsJ3Jlc2l6YWJsZSddO3ZhciBzb3J0UHJvcHM9Wydzb3J0TWV0aG9kJywnc29ydEJ5Jywnc29ydE9yZGVycyddO3ZhciBzZWxlY3RQcm9wcz1bJ3NlbGVjdGFibGUnLCdyZXNlcnZlU2VsZWN0aW9uJ107dmFyIGZpbHRlclByb3BzPVsnZmlsdGVyTWV0aG9kJywnZmlsdGVycycsJ2ZpbHRlck11bHRpcGxlJywnZmlsdGVyT3BlbmVkJywnZmlsdGVyZWRWYWx1ZScsJ2ZpbHRlclBsYWNlbWVudCddO3ZhciBjb2x1bW49dGhpcy5nZXRQcm9wc0RhdGEoYmFzaWNQcm9wcyxzb3J0UHJvcHMsc2VsZWN0UHJvcHMsZmlsdGVyUHJvcHMpO2NvbHVtbj1tZXJnZU9wdGlvbnMoZGVmYXVsdHMsY29sdW1uKTsvLyDms6jmhI8gY29tcG9zZSDkuK3lh73mlbDmiafooYznmoTpobrluo/mmK/ku47lj7PliLDlt6YKdmFyIGNoYWlucz1jb21wb3NlKHRoaXMuc2V0Q29sdW1uUmVuZGVycyx0aGlzLnNldENvbHVtbldpZHRoLHRoaXMuc2V0Q29sdW1uRm9yY2VkUHJvcHMpO2NvbHVtbj1jaGFpbnMoY29sdW1uKTt0aGlzLmNvbHVtbkNvbmZpZz1jb2x1bW47Ly8g5rOo5YaMIHdhdGNoZXIKdGhpcy5yZWdpc3Rlck5vcm1hbFdhdGNoZXJzKCk7dGhpcy5yZWdpc3RlckNvbXBsZXhXYXRjaGVycygpO30sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dmFyIG93bmVyPXRoaXMub3duZXI7dmFyIHBhcmVudD10aGlzLmNvbHVtbk9yVGFibGVQYXJlbnQ7dmFyIGNoaWxkcmVuPXRoaXMuaXNTdWJDb2x1bW4/cGFyZW50LiRlbC5jaGlsZHJlbjpwYXJlbnQuJHJlZnMuaGlkZGVuQ29sdW1ucy5jaGlsZHJlbjt2YXIgY29sdW1uSW5kZXg9dGhpcy5nZXRDb2x1bW5FbEluZGV4KGNoaWxkcmVuLHRoaXMuJGVsKTtvd25lci5zdG9yZS5jb21taXQoJ2luc2VydENvbHVtbicsdGhpcy5jb2x1bW5Db25maWcsY29sdW1uSW5kZXgsdGhpcy5pc1N1YkNvbHVtbj9wYXJlbnQuY29sdW1uQ29uZmlnOm51bGwpO30sZGVzdHJveWVkOmZ1bmN0aW9uIGRlc3Ryb3llZCgpe2lmKCF0aGlzLiRwYXJlbnQpcmV0dXJuO3ZhciBwYXJlbnQ9dGhpcy4kcGFyZW50O3RoaXMub3duZXIuc3RvcmUuY29tbWl0KCdyZW1vdmVDb2x1bW4nLHRoaXMuY29sdW1uQ29uZmlnLHRoaXMuaXNTdWJDb2x1bW4/cGFyZW50LmNvbHVtbkNvbmZpZzpudWxsKTt9LHJlbmRlcjpmdW5jdGlvbiByZW5kZXIoaCl7Ly8gc2xvdHMg5Lmf6KaB5riy5p+T77yM6ZyA6KaB6K6h566X5ZCI5bm26KGo5aS0CnJldHVybiBoKCdkaXYnLHRoaXMuJHNsb3RzLmRlZmF1bHQpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUtY29sdW1uL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovdGFibGVfY29sdW1uLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHRhYmxlX2NvbHVtbi5uYW1lLHRhYmxlX2NvbHVtbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3RhYmxlX2NvbHVtbj10YWJsZV9jb2x1bW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OWFlMDY5ZiYKdmFyIHBpY2tlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzc5YWUwNjlmX3JlbmRlcj1mdW5jdGlvbiBwaWNrZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83OWFlMDY5Zl9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4hX3ZtLnJhbmdlZD9fYygiZWwtaW5wdXQiLF92bS5fYih7ZGlyZWN0aXZlczpbe25hbWU6ImNsaWNrb3V0c2lkZSIscmF3TmFtZToidi1jbGlja291dHNpZGUiLHZhbHVlOl92bS5oYW5kbGVDbG9zZSxleHByZXNzaW9uOiJoYW5kbGVDbG9zZSJ9XSxyZWY6InJlZmVyZW5jZSIsc3RhdGljQ2xhc3M6ImVsLWRhdGUtZWRpdG9yIixjbGFzczoiZWwtZGF0ZS1lZGl0b3ItLSIrX3ZtLnR5cGUsYXR0cnM6e3JlYWRvbmx5OiFfdm0uZWRpdGFibGV8fF92bS5yZWFkb25seXx8X3ZtLnR5cGU9PT0iZGF0ZXMifHxfdm0udHlwZT09PSJ3ZWVrIixkaXNhYmxlZDpfdm0ucGlja2VyRGlzYWJsZWQsc2l6ZTpfdm0ucGlja2VyU2l6ZSxuYW1lOl92bS5uYW1lLHBsYWNlaG9sZGVyOl92bS5wbGFjZWhvbGRlcix2YWx1ZTpfdm0uZGlzcGxheVZhbHVlLHZhbGlkYXRlRXZlbnQ6ZmFsc2V9LG9uOntmb2N1czpfdm0uaGFuZGxlRm9jdXMsaW5wdXQ6ZnVuY3Rpb24gaW5wdXQodmFsdWUpe3JldHVybiBfdm0udXNlcklucHV0PXZhbHVlO30sY2hhbmdlOl92bS5oYW5kbGVDaGFuZ2V9LG5hdGl2ZU9uOntrZXlkb3duOmZ1bmN0aW9uIGtleWRvd24oJGV2ZW50KXtyZXR1cm4gX3ZtLmhhbmRsZUtleWRvd24oJGV2ZW50KTt9LG1vdXNlZW50ZXI6ZnVuY3Rpb24gbW91c2VlbnRlcigkZXZlbnQpe3JldHVybiBfdm0uaGFuZGxlTW91c2VFbnRlcigkZXZlbnQpO30sbW91c2VsZWF2ZTpmdW5jdGlvbiBtb3VzZWxlYXZlKCRldmVudCl7X3ZtLnNob3dDbG9zZT1mYWxzZTt9fX0sImVsLWlucHV0Iixfdm0uZmlyc3RJbnB1dElkLGZhbHNlKSxbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24iLGNsYXNzOl92bS50cmlnZ2VyQ2xhc3MsYXR0cnM6e3Nsb3Q6InByZWZpeCJ9LG9uOntjbGljazpfdm0uaGFuZGxlRm9jdXN9LHNsb3Q6InByZWZpeCJ9KSxfdm0uaGF2ZVRyaWdnZXI/X2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24iLGNsYXNzOltfdm0uc2hvd0Nsb3NlPyIiK192bS5jbGVhckljb246IiJdLGF0dHJzOntzbG90OiJzdWZmaXgifSxvbjp7Y2xpY2s6X3ZtLmhhbmRsZUNsaWNrSWNvbn0sc2xvdDoic3VmZml4In0pOl92bS5fZSgpXSk6X2MoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJjbGlja291dHNpZGUiLHJhd05hbWU6InYtY2xpY2tvdXRzaWRlIix2YWx1ZTpfdm0uaGFuZGxlQ2xvc2UsZXhwcmVzc2lvbjoiaGFuZGxlQ2xvc2UifV0scmVmOiJyZWZlcmVuY2UiLHN0YXRpY0NsYXNzOiJlbC1kYXRlLWVkaXRvciBlbC1yYW5nZS1lZGl0b3IgZWwtaW5wdXRfX2lubmVyIixjbGFzczpbImVsLWRhdGUtZWRpdG9yLS0iK192bS50eXBlLF92bS5waWNrZXJTaXplPyJlbC1yYW5nZS1lZGl0b3ItLSIrX3ZtLnBpY2tlclNpemU6IiIsX3ZtLnBpY2tlckRpc2FibGVkPyJpcy1kaXNhYmxlZCI6IiIsX3ZtLnBpY2tlclZpc2libGU/ImlzLWFjdGl2ZSI6IiJdLG9uOntjbGljazpfdm0uaGFuZGxlUmFuZ2VDbGljayxtb3VzZWVudGVyOl92bS5oYW5kbGVNb3VzZUVudGVyLG1vdXNlbGVhdmU6ZnVuY3Rpb24gbW91c2VsZWF2ZSgkZXZlbnQpe192bS5zaG93Q2xvc2U9ZmFsc2U7fSxrZXlkb3duOl92bS5oYW5kbGVLZXlkb3dufX0sW19jKCJpIix7Y2xhc3M6WyJlbC1pbnB1dF9faWNvbiIsImVsLXJhbmdlX19pY29uIixfdm0udHJpZ2dlckNsYXNzXX0pLF9jKCJpbnB1dCIsX3ZtLl9iKHtzdGF0aWNDbGFzczoiZWwtcmFuZ2UtaW5wdXQiLGF0dHJzOnthdXRvY29tcGxldGU6Im9mZiIscGxhY2Vob2xkZXI6X3ZtLnN0YXJ0UGxhY2Vob2xkZXIsZGlzYWJsZWQ6X3ZtLnBpY2tlckRpc2FibGVkLHJlYWRvbmx5OiFfdm0uZWRpdGFibGV8fF92bS5yZWFkb25seSxuYW1lOl92bS5uYW1lJiZfdm0ubmFtZVswXX0sZG9tUHJvcHM6e3ZhbHVlOl92bS5kaXNwbGF5VmFsdWUmJl92bS5kaXNwbGF5VmFsdWVbMF19LG9uOntpbnB1dDpfdm0uaGFuZGxlU3RhcnRJbnB1dCxjaGFuZ2U6X3ZtLmhhbmRsZVN0YXJ0Q2hhbmdlLGZvY3VzOl92bS5oYW5kbGVGb2N1c319LCJpbnB1dCIsX3ZtLmZpcnN0SW5wdXRJZCxmYWxzZSkpLF92bS5fdCgicmFuZ2Utc2VwYXJhdG9yIixbX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtcmFuZ2Utc2VwYXJhdG9yIn0sW192bS5fdihfdm0uX3MoX3ZtLnJhbmdlU2VwYXJhdG9yKSldKV0pLF9jKCJpbnB1dCIsX3ZtLl9iKHtzdGF0aWNDbGFzczoiZWwtcmFuZ2UtaW5wdXQiLGF0dHJzOnthdXRvY29tcGxldGU6Im9mZiIscGxhY2Vob2xkZXI6X3ZtLmVuZFBsYWNlaG9sZGVyLGRpc2FibGVkOl92bS5waWNrZXJEaXNhYmxlZCxyZWFkb25seTohX3ZtLmVkaXRhYmxlfHxfdm0ucmVhZG9ubHksbmFtZTpfdm0ubmFtZSYmX3ZtLm5hbWVbMV19LGRvbVByb3BzOnt2YWx1ZTpfdm0uZGlzcGxheVZhbHVlJiZfdm0uZGlzcGxheVZhbHVlWzFdfSxvbjp7aW5wdXQ6X3ZtLmhhbmRsZUVuZElucHV0LGNoYW5nZTpfdm0uaGFuZGxlRW5kQ2hhbmdlLGZvY3VzOl92bS5oYW5kbGVGb2N1c319LCJpbnB1dCIsX3ZtLnNlY29uZElucHV0SWQsZmFsc2UpKSxfdm0uaGF2ZVRyaWdnZXI/X2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24gZWwtcmFuZ2VfX2Nsb3NlLWljb24iLGNsYXNzOltfdm0uc2hvd0Nsb3NlPyIiK192bS5jbGVhckljb246IiJdLG9uOntjbGljazpfdm0uaGFuZGxlQ2xpY2tJY29ufX0pOl92bS5fZSgpXSwyKTt9O3ZhciBwaWNrZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83OWFlMDY5Zl9zdGF0aWNSZW5kZXJGbnM9W107cGlja2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNzlhZTA2OWZfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9waWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc5YWUwNjlmJgovLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi91dGlscy9kYXRlLXV0aWwiCnZhciBkYXRlX3V0aWxfPV9fd2VicGFja19yZXF1aXJlX18oMCk7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBOZXdQb3BwZXI9e3Byb3BzOnthcHBlbmRUb0JvZHk6dnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMuYXBwZW5kVG9Cb2R5LG9mZnNldDp2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5vZmZzZXQsYm91bmRhcmllc1BhZGRpbmc6dnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMuYm91bmRhcmllc1BhZGRpbmcsYXJyb3dPZmZzZXQ6dnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMuYXJyb3dPZmZzZXR9LG1ldGhvZHM6dnVlX3BvcHBlcl9kZWZhdWx0LmEubWV0aG9kcyxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm4gbWVyZ2VfZGVmYXVsdCgpKHt2aXNpYmxlQXJyb3c6dHJ1ZX0sdnVlX3BvcHBlcl9kZWZhdWx0LmEuZGF0YSk7fSxiZWZvcmVEZXN0cm95OnZ1ZV9wb3BwZXJfZGVmYXVsdC5hLmJlZm9yZURlc3Ryb3l9O3ZhciBERUZBVUxUX0ZPUk1BVFM9e2RhdGU6J3l5eXktTU0tZGQnLG1vbnRoOid5eXl5LU1NJyxkYXRldGltZToneXl5eS1NTS1kZCBISDptbTpzcycsdGltZTonSEg6bW06c3MnLHdlZWs6J3l5eXl3V1cnLHRpbWVyYW5nZTonSEg6bW06c3MnLGRhdGVyYW5nZToneXl5eS1NTS1kZCcsbW9udGhyYW5nZToneXl5eS1NTScsZGF0ZXRpbWVyYW5nZToneXl5eS1NTS1kZCBISDptbTpzcycseWVhcjoneXl5eSd9O3ZhciBIQVZFX1RSSUdHRVJfVFlQRVM9WydkYXRlJywnZGF0ZXRpbWUnLCd0aW1lJywndGltZS1zZWxlY3QnLCd3ZWVrJywnbW9udGgnLCd5ZWFyJywnZGF0ZXJhbmdlJywnbW9udGhyYW5nZScsJ3RpbWVyYW5nZScsJ2RhdGV0aW1lcmFuZ2UnLCdkYXRlcyddO3ZhciBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUj1mdW5jdGlvbiBEQVRFX0ZPUk1BVFRFUih2YWx1ZSxmb3JtYXQpe2lmKGZvcm1hdD09PSd0aW1lc3RhbXAnKXJldHVybiB2YWx1ZS5nZXRUaW1lKCk7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJmb3JtYXREYXRlIl0pKHZhbHVlLGZvcm1hdCk7fTt2YXIgcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9QQVJTRVI9ZnVuY3Rpb24gREFURV9QQVJTRVIodGV4dCxmb3JtYXQpe2lmKGZvcm1hdD09PSd0aW1lc3RhbXAnKXJldHVybiBuZXcgRGF0ZShOdW1iZXIodGV4dCkpO3JldHVybiBPYmplY3QoZGF0ZV91dGlsX1sicGFyc2VEYXRlIl0pKHRleHQsZm9ybWF0KTt9O3ZhciBSQU5HRV9GT1JNQVRURVI9ZnVuY3Rpb24gUkFOR0VfRk9STUFUVEVSKHZhbHVlLGZvcm1hdCl7aWYoQXJyYXkuaXNBcnJheSh2YWx1ZSkmJnZhbHVlLmxlbmd0aD09PTIpe3ZhciBzdGFydD12YWx1ZVswXTt2YXIgZW5kPXZhbHVlWzFdO2lmKHN0YXJ0JiZlbmQpe3JldHVybltwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUihzdGFydCxmb3JtYXQpLHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfRk9STUFUVEVSKGVuZCxmb3JtYXQpXTt9fXJldHVybicnO307dmFyIFJBTkdFX1BBUlNFUj1mdW5jdGlvbiBSQU5HRV9QQVJTRVIoYXJyYXksZm9ybWF0LHNlcGFyYXRvcil7aWYoIUFycmF5LmlzQXJyYXkoYXJyYXkpKXthcnJheT1hcnJheS5zcGxpdChzZXBhcmF0b3IpO31pZihhcnJheS5sZW5ndGg9PT0yKXt2YXIgcmFuZ2UxPWFycmF5WzBdO3ZhciByYW5nZTI9YXJyYXlbMV07cmV0dXJuW3BpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfUEFSU0VSKHJhbmdlMSxmb3JtYXQpLHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfUEFSU0VSKHJhbmdlMixmb3JtYXQpXTt9cmV0dXJuW107fTt2YXIgVFlQRV9WQUxVRV9SRVNPTFZFUl9NQVA9e2RlZmF1bHQ6e2Zvcm1hdHRlcjpmdW5jdGlvbiBmb3JtYXR0ZXIodmFsdWUpe2lmKCF2YWx1ZSlyZXR1cm4nJztyZXR1cm4nJyt2YWx1ZTt9LHBhcnNlcjpmdW5jdGlvbiBwYXJzZXIodGV4dCl7aWYodGV4dD09PXVuZGVmaW5lZHx8dGV4dD09PScnKXJldHVybiBudWxsO3JldHVybiB0ZXh0O319LHdlZWs6e2Zvcm1hdHRlcjpmdW5jdGlvbiBmb3JtYXR0ZXIodmFsdWUsZm9ybWF0KXt2YXIgd2Vlaz1PYmplY3QoZGF0ZV91dGlsX1siZ2V0V2Vla051bWJlciJdKSh2YWx1ZSk7dmFyIG1vbnRoPXZhbHVlLmdldE1vbnRoKCk7dmFyIHRydWVEYXRlPW5ldyBEYXRlKHZhbHVlKTtpZih3ZWVrPT09MSYmbW9udGg9PT0xMSl7dHJ1ZURhdGUuc2V0SG91cnMoMCwwLDAsMCk7dHJ1ZURhdGUuc2V0RGF0ZSh0cnVlRGF0ZS5nZXREYXRlKCkrMy0odHJ1ZURhdGUuZ2V0RGF5KCkrNiklNyk7fXZhciBkYXRlPU9iamVjdChkYXRlX3V0aWxfWyJmb3JtYXREYXRlIl0pKHRydWVEYXRlLGZvcm1hdCk7ZGF0ZT0vV1cvLnRlc3QoZGF0ZSk/ZGF0ZS5yZXBsYWNlKC9XVy8sd2VlazwxMD8nMCcrd2Vlazp3ZWVrKTpkYXRlLnJlcGxhY2UoL1cvLHdlZWspO3JldHVybiBkYXRlO30scGFyc2VyOmZ1bmN0aW9uIHBhcnNlcih0ZXh0LGZvcm1hdCl7Ly8gcGFyc2UgYXMgaWYgYSBub3JtYWwgZGF0ZQpyZXR1cm4gVFlQRV9WQUxVRV9SRVNPTFZFUl9NQVAuZGF0ZS5wYXJzZXIodGV4dCxmb3JtYXQpO319LGRhdGU6e2Zvcm1hdHRlcjpwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUixwYXJzZXI6cGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9QQVJTRVJ9LGRhdGV0aW1lOntmb3JtYXR0ZXI6cGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9GT1JNQVRURVIscGFyc2VyOnBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfUEFSU0VSfSxkYXRlcmFuZ2U6e2Zvcm1hdHRlcjpSQU5HRV9GT1JNQVRURVIscGFyc2VyOlJBTkdFX1BBUlNFUn0sbW9udGhyYW5nZTp7Zm9ybWF0dGVyOlJBTkdFX0ZPUk1BVFRFUixwYXJzZXI6UkFOR0VfUEFSU0VSfSxkYXRldGltZXJhbmdlOntmb3JtYXR0ZXI6UkFOR0VfRk9STUFUVEVSLHBhcnNlcjpSQU5HRV9QQVJTRVJ9LHRpbWVyYW5nZTp7Zm9ybWF0dGVyOlJBTkdFX0ZPUk1BVFRFUixwYXJzZXI6UkFOR0VfUEFSU0VSfSx0aW1lOntmb3JtYXR0ZXI6cGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9GT1JNQVRURVIscGFyc2VyOnBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfUEFSU0VSfSxtb250aDp7Zm9ybWF0dGVyOnBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfRk9STUFUVEVSLHBhcnNlcjpwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUn0seWVhcjp7Zm9ybWF0dGVyOnBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfRk9STUFUVEVSLHBhcnNlcjpwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUn0sbnVtYmVyOntmb3JtYXR0ZXI6ZnVuY3Rpb24gZm9ybWF0dGVyKHZhbHVlKXtpZighdmFsdWUpcmV0dXJuJyc7cmV0dXJuJycrdmFsdWU7fSxwYXJzZXI6ZnVuY3Rpb24gcGFyc2VyKHRleHQpe3ZhciByZXN1bHQ9TnVtYmVyKHRleHQpO2lmKCFpc05hTih0ZXh0KSl7cmV0dXJuIHJlc3VsdDt9ZWxzZXtyZXR1cm4gbnVsbDt9fX0sZGF0ZXM6e2Zvcm1hdHRlcjpmdW5jdGlvbiBmb3JtYXR0ZXIodmFsdWUsZm9ybWF0KXtyZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uKGRhdGUpe3JldHVybiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUihkYXRlLGZvcm1hdCk7fSk7fSxwYXJzZXI6ZnVuY3Rpb24gcGFyc2VyKHZhbHVlLGZvcm1hdCl7cmV0dXJuKHR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnP3ZhbHVlLnNwbGl0KCcsICcpOnZhbHVlKS5tYXAoZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlP2RhdGU6cGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9QQVJTRVIoZGF0ZSxmb3JtYXQpO30pO319fTt2YXIgUExBQ0VNRU5UX01BUD17bGVmdDonYm90dG9tLXN0YXJ0JyxjZW50ZXI6J2JvdHRvbScscmlnaHQ6J2JvdHRvbS1lbmQnfTt2YXIgcGFyc2VBc0Zvcm1hdEFuZFR5cGU9ZnVuY3Rpb24gcGFyc2VBc0Zvcm1hdEFuZFR5cGUodmFsdWUsY3VzdG9tRm9ybWF0LHR5cGUpe3ZhciByYW5nZVNlcGFyYXRvcj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbM106Jy0nO2lmKCF2YWx1ZSlyZXR1cm4gbnVsbDt2YXIgcGFyc2VyPShUWVBFX1ZBTFVFX1JFU09MVkVSX01BUFt0eXBlXXx8VFlQRV9WQUxVRV9SRVNPTFZFUl9NQVBbJ2RlZmF1bHQnXSkucGFyc2VyO3ZhciBmb3JtYXQ9Y3VzdG9tRm9ybWF0fHxERUZBVUxUX0ZPUk1BVFNbdHlwZV07cmV0dXJuIHBhcnNlcih2YWx1ZSxmb3JtYXQscmFuZ2VTZXBhcmF0b3IpO307dmFyIGZvcm1hdEFzRm9ybWF0QW5kVHlwZT1mdW5jdGlvbiBmb3JtYXRBc0Zvcm1hdEFuZFR5cGUodmFsdWUsY3VzdG9tRm9ybWF0LHR5cGUpe2lmKCF2YWx1ZSlyZXR1cm4gbnVsbDt2YXIgZm9ybWF0dGVyPShUWVBFX1ZBTFVFX1JFU09MVkVSX01BUFt0eXBlXXx8VFlQRV9WQUxVRV9SRVNPTFZFUl9NQVBbJ2RlZmF1bHQnXSkuZm9ybWF0dGVyO3ZhciBmb3JtYXQ9Y3VzdG9tRm9ybWF0fHxERUZBVUxUX0ZPUk1BVFNbdHlwZV07cmV0dXJuIGZvcm1hdHRlcih2YWx1ZSxmb3JtYXQpO307LyoKICogQ29uc2lkZXJzOgogKiAgIDEuIERhdGUgb2JqZWN0CiAqICAgMi4gZGF0ZSBzdHJpbmcKICogICAzLiBhcnJheSBvZiAxIG9yIDIKICovdmFyIHZhbHVlRXF1YWxzPWZ1bmN0aW9uIHZhbHVlRXF1YWxzKGEsYil7Ly8gY29uc2lkZXJzIERhdGUgb2JqZWN0IGFuZCBzdHJpbmcKdmFyIGRhdGVFcXVhbHM9ZnVuY3Rpb24gZGF0ZUVxdWFscyhhLGIpe3ZhciBhSXNEYXRlPWEgaW5zdGFuY2VvZiBEYXRlO3ZhciBiSXNEYXRlPWIgaW5zdGFuY2VvZiBEYXRlO2lmKGFJc0RhdGUmJmJJc0RhdGUpe3JldHVybiBhLmdldFRpbWUoKT09PWIuZ2V0VGltZSgpO31pZighYUlzRGF0ZSYmIWJJc0RhdGUpe3JldHVybiBhPT09Yjt9cmV0dXJuIGZhbHNlO307dmFyIGFJc0FycmF5PWEgaW5zdGFuY2VvZiBBcnJheTt2YXIgYklzQXJyYXk9YiBpbnN0YW5jZW9mIEFycmF5O2lmKGFJc0FycmF5JiZiSXNBcnJheSl7aWYoYS5sZW5ndGghPT1iLmxlbmd0aCl7cmV0dXJuIGZhbHNlO31yZXR1cm4gYS5ldmVyeShmdW5jdGlvbihpdGVtLGluZGV4KXtyZXR1cm4gZGF0ZUVxdWFscyhpdGVtLGJbaW5kZXhdKTt9KTt9aWYoIWFJc0FycmF5JiYhYklzQXJyYXkpe3JldHVybiBkYXRlRXF1YWxzKGEsYik7fXJldHVybiBmYWxzZTt9O3ZhciBpc1N0cmluZz1mdW5jdGlvbiBpc1N0cmluZyh2YWwpe3JldHVybiB0eXBlb2YgdmFsPT09J3N0cmluZyd8fHZhbCBpbnN0YW5jZW9mIFN0cmluZzt9O3ZhciBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc192YWxpZGF0b3I9ZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCl7Ly8gZWl0aGVyOiBTdHJpbmcsIEFycmF5IG9mIFN0cmluZywgbnVsbCAvIHVuZGVmaW5lZApyZXR1cm4gdmFsPT09bnVsbHx8dmFsPT09dW5kZWZpbmVkfHxpc1N0cmluZyh2YWwpfHxBcnJheS5pc0FycmF5KHZhbCkmJnZhbC5sZW5ndGg9PT0yJiZ2YWwuZXZlcnkoaXNTdHJpbmcpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e21peGluczpbZW1pdHRlcl9kZWZhdWx0LmEsTmV3UG9wcGVyXSxpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDonJ30sZWxGb3JtSXRlbTp7ZGVmYXVsdDonJ319LHByb3BzOntzaXplOlN0cmluZyxmb3JtYXQ6U3RyaW5nLHZhbHVlRm9ybWF0OlN0cmluZyxyZWFkb25seTpCb29sZWFuLHBsYWNlaG9sZGVyOlN0cmluZyxzdGFydFBsYWNlaG9sZGVyOlN0cmluZyxlbmRQbGFjZWhvbGRlcjpTdHJpbmcscHJlZml4SWNvbjpTdHJpbmcsY2xlYXJJY29uOnt0eXBlOlN0cmluZyxkZWZhdWx0OidlbC1pY29uLWNpcmNsZS1jbG9zZSd9LG5hbWU6e2RlZmF1bHQ6JycsdmFsaWRhdG9yOnBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3ZhbGlkYXRvcn0sZGlzYWJsZWQ6Qm9vbGVhbixjbGVhcmFibGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGlkOntkZWZhdWx0OicnLHZhbGlkYXRvcjpwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc192YWxpZGF0b3J9LHBvcHBlckNsYXNzOlN0cmluZyxlZGl0YWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sYWxpZ246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J2xlZnQnfSx2YWx1ZTp7fSxkZWZhdWx0VmFsdWU6e30sZGVmYXVsdFRpbWU6e30scmFuZ2VTZXBhcmF0b3I6e2RlZmF1bHQ6Jy0nfSxwaWNrZXJPcHRpb25zOnt9LHVubGlua1BhbmVsczpCb29sZWFuLHZhbGlkYXRlRXZlbnQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9fSxjb21wb25lbnRzOntFbElucHV0OmlucHV0X2RlZmF1bHQuYX0sZGlyZWN0aXZlczp7Q2xpY2tvdXRzaWRlOmNsaWNrb3V0c2lkZV9kZWZhdWx0LmF9LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntwaWNrZXJWaXNpYmxlOmZhbHNlLHNob3dDbG9zZTpmYWxzZSx1c2VySW5wdXQ6bnVsbCx2YWx1ZU9uT3BlbjpudWxsLC8vIHZhbHVlIHdoZW4gcGlja2VyIG9wZW5zLCB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGVtaXQgY2hhbmdlCnVud2F0Y2hQaWNrZXJPcHRpb25zOm51bGx9O30sd2F0Y2g6e3BpY2tlclZpc2libGU6ZnVuY3Rpb24gcGlja2VyVmlzaWJsZSh2YWwpe2lmKHRoaXMucmVhZG9ubHl8fHRoaXMucGlja2VyRGlzYWJsZWQpcmV0dXJuO2lmKHZhbCl7dGhpcy5zaG93UGlja2VyKCk7dGhpcy52YWx1ZU9uT3Blbj1BcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP1tdLmNvbmNhdCh0aGlzLnZhbHVlKTp0aGlzLnZhbHVlO31lbHNle3RoaXMuaGlkZVBpY2tlcigpO3RoaXMuZW1pdENoYW5nZSh0aGlzLnZhbHVlKTt0aGlzLnVzZXJJbnB1dD1udWxsO2lmKHRoaXMudmFsaWRhdGVFdmVudCl7dGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsJ2VsLmZvcm0uYmx1cicpO310aGlzLiRlbWl0KCdibHVyJyx0aGlzKTt0aGlzLmJsdXIoKTt9fSxwYXJzZWRWYWx1ZTp7aW1tZWRpYXRlOnRydWUsaGFuZGxlcjpmdW5jdGlvbiBoYW5kbGVyKHZhbCl7aWYodGhpcy5waWNrZXIpe3RoaXMucGlja2VyLnZhbHVlPXZhbDt9fX0sZGVmYXVsdFZhbHVlOmZ1bmN0aW9uIGRlZmF1bHRWYWx1ZSh2YWwpey8vIE5PVEU6IHNob3VsZCBldmVudHVhbGx5IG1vdmUgdG8ganN4IHN0eWxlIHBpY2tlciArIHBhbmVsID8KaWYodGhpcy5waWNrZXIpe3RoaXMucGlja2VyLmRlZmF1bHRWYWx1ZT12YWw7fX0sdmFsdWU6ZnVuY3Rpb24gdmFsdWUodmFsLG9sZFZhbCl7aWYoIXZhbHVlRXF1YWxzKHZhbCxvbGRWYWwpJiYhdGhpcy5waWNrZXJWaXNpYmxlJiZ0aGlzLnZhbGlkYXRlRXZlbnQpe3RoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCdlbC5mb3JtLmNoYW5nZScsdmFsKTt9fX0sY29tcHV0ZWQ6e3JhbmdlZDpmdW5jdGlvbiByYW5nZWQoKXtyZXR1cm4gdGhpcy50eXBlLmluZGV4T2YoJ3JhbmdlJyk+LTE7fSxyZWZlcmVuY2U6ZnVuY3Rpb24gcmVmZXJlbmNlKCl7dmFyIHJlZmVyZW5jZT10aGlzLiRyZWZzLnJlZmVyZW5jZTtyZXR1cm4gcmVmZXJlbmNlLiRlbHx8cmVmZXJlbmNlO30scmVmSW5wdXQ6ZnVuY3Rpb24gcmVmSW5wdXQoKXtpZih0aGlzLnJlZmVyZW5jZSl7cmV0dXJuW10uc2xpY2UuY2FsbCh0aGlzLnJlZmVyZW5jZS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpKTt9cmV0dXJuW107fSx2YWx1ZUlzRW1wdHk6ZnVuY3Rpb24gdmFsdWVJc0VtcHR5KCl7dmFyIHZhbD10aGlzLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkodmFsKSl7Zm9yKHZhciBpPTAsbGVuPXZhbC5sZW5ndGg7aTxsZW47aSsrKXtpZih2YWxbaV0pe3JldHVybiBmYWxzZTt9fX1lbHNle2lmKHZhbCl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7fSx0cmlnZ2VyQ2xhc3M6ZnVuY3Rpb24gdHJpZ2dlckNsYXNzKCl7cmV0dXJuIHRoaXMucHJlZml4SWNvbnx8KHRoaXMudHlwZS5pbmRleE9mKCd0aW1lJykhPT0tMT8nZWwtaWNvbi10aW1lJzonZWwtaWNvbi1kYXRlJyk7fSxzZWxlY3Rpb25Nb2RlOmZ1bmN0aW9uIHNlbGVjdGlvbk1vZGUoKXtpZih0aGlzLnR5cGU9PT0nd2Vlaycpe3JldHVybid3ZWVrJzt9ZWxzZSBpZih0aGlzLnR5cGU9PT0nbW9udGgnKXtyZXR1cm4nbW9udGgnO31lbHNlIGlmKHRoaXMudHlwZT09PSd5ZWFyJyl7cmV0dXJuJ3llYXInO31lbHNlIGlmKHRoaXMudHlwZT09PSdkYXRlcycpe3JldHVybidkYXRlcyc7fXJldHVybidkYXknO30saGF2ZVRyaWdnZXI6ZnVuY3Rpb24gaGF2ZVRyaWdnZXIoKXtpZih0eXBlb2YgdGhpcy5zaG93VHJpZ2dlciE9PSd1bmRlZmluZWQnKXtyZXR1cm4gdGhpcy5zaG93VHJpZ2dlcjt9cmV0dXJuIEhBVkVfVFJJR0dFUl9UWVBFUy5pbmRleE9mKHRoaXMudHlwZSkhPT0tMTt9LGRpc3BsYXlWYWx1ZTpmdW5jdGlvbiBkaXNwbGF5VmFsdWUoKXt2YXIgZm9ybWF0dGVkVmFsdWU9Zm9ybWF0QXNGb3JtYXRBbmRUeXBlKHRoaXMucGFyc2VkVmFsdWUsdGhpcy5mb3JtYXQsdGhpcy50eXBlLHRoaXMucmFuZ2VTZXBhcmF0b3IpO2lmKEFycmF5LmlzQXJyYXkodGhpcy51c2VySW5wdXQpKXtyZXR1cm5bdGhpcy51c2VySW5wdXRbMF18fGZvcm1hdHRlZFZhbHVlJiZmb3JtYXR0ZWRWYWx1ZVswXXx8JycsdGhpcy51c2VySW5wdXRbMV18fGZvcm1hdHRlZFZhbHVlJiZmb3JtYXR0ZWRWYWx1ZVsxXXx8JyddO31lbHNlIGlmKHRoaXMudXNlcklucHV0IT09bnVsbCl7cmV0dXJuIHRoaXMudXNlcklucHV0O31lbHNlIGlmKGZvcm1hdHRlZFZhbHVlKXtyZXR1cm4gdGhpcy50eXBlPT09J2RhdGVzJz9mb3JtYXR0ZWRWYWx1ZS5qb2luKCcsICcpOmZvcm1hdHRlZFZhbHVlO31lbHNle3JldHVybicnO319LHBhcnNlZFZhbHVlOmZ1bmN0aW9uIHBhcnNlZFZhbHVlKCl7aWYoIXRoaXMudmFsdWUpcmV0dXJuIHRoaXMudmFsdWU7Ly8gY29tcG9uZW50IHZhbHVlIGlzIG5vdCBzZXQKaWYodGhpcy50eXBlPT09J3RpbWUtc2VsZWN0JylyZXR1cm4gdGhpcy52YWx1ZTsvLyB0aW1lLXNlbGVjdCBkb2VzIG5vdCByZXF1aXJlIHBhcnNpbmcsIHRoaXMgbWlnaHQgY2hhbmdlIGluIG5leHQgbWFqb3IgdmVyc2lvbgp2YXIgdmFsdWVJc0RhdGVPYmplY3Q9T2JqZWN0KGRhdGVfdXRpbF9bImlzRGF0ZU9iamVjdCJdKSh0aGlzLnZhbHVlKXx8QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5ldmVyeShkYXRlX3V0aWxfWyJpc0RhdGVPYmplY3QiXSk7aWYodmFsdWVJc0RhdGVPYmplY3Qpe3JldHVybiB0aGlzLnZhbHVlO31pZih0aGlzLnZhbHVlRm9ybWF0KXtyZXR1cm4gcGFyc2VBc0Zvcm1hdEFuZFR5cGUodGhpcy52YWx1ZSx0aGlzLnZhbHVlRm9ybWF0LHRoaXMudHlwZSx0aGlzLnJhbmdlU2VwYXJhdG9yKXx8dGhpcy52YWx1ZTt9Ly8gTk9URTogZGVhbCB3aXRoIGNvbW1vbiBidXQgaW5jb3JyZWN0IHVzYWdlLCBzaG91bGQgcmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbgovLyB1c2VyIG1pZ2h0IHByb3ZpZGUgc3RyaW5nIC8gdGltZXN0YW1wIHdpdGhvdXQgdmFsdWUtZm9ybWF0LCBjb2VyY2UgdGhlbSBpbnRvIGRhdGUgKG9yIGFycmF5IG9mIGRhdGUpCnJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUubWFwKGZ1bmN0aW9uKHZhbCl7cmV0dXJuIG5ldyBEYXRlKHZhbCk7fSk6bmV3IERhdGUodGhpcy52YWx1ZSk7fSxfZWxGb3JtSXRlbVNpemU6ZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCl7cmV0dXJuKHRoaXMuZWxGb3JtSXRlbXx8e30pLmVsRm9ybUl0ZW1TaXplO30scGlja2VyU2l6ZTpmdW5jdGlvbiBwaWNrZXJTaXplKCl7cmV0dXJuIHRoaXMuc2l6ZXx8dGhpcy5fZWxGb3JtSXRlbVNpemV8fCh0aGlzLiRFTEVNRU5UfHx7fSkuc2l6ZTt9LHBpY2tlckRpc2FibGVkOmZ1bmN0aW9uIHBpY2tlckRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkO30sZmlyc3RJbnB1dElkOmZ1bmN0aW9uIGZpcnN0SW5wdXRJZCgpe3ZhciBvYmo9e307dmFyIGlkPXZvaWQgMDtpZih0aGlzLnJhbmdlZCl7aWQ9dGhpcy5pZCYmdGhpcy5pZFswXTt9ZWxzZXtpZD10aGlzLmlkO31pZihpZClvYmouaWQ9aWQ7cmV0dXJuIG9iajt9LHNlY29uZElucHV0SWQ6ZnVuY3Rpb24gc2Vjb25kSW5wdXRJZCgpe3ZhciBvYmo9e307dmFyIGlkPXZvaWQgMDtpZih0aGlzLnJhbmdlZCl7aWQ9dGhpcy5pZCYmdGhpcy5pZFsxXTt9aWYoaWQpb2JqLmlkPWlkO3JldHVybiBvYmo7fX0sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7Ly8gdnVlLXBvcHBlcgp0aGlzLnBvcHBlck9wdGlvbnM9e2JvdW5kYXJpZXNQYWRkaW5nOjAsZ3B1QWNjZWxlcmF0aW9uOmZhbHNlfTt0aGlzLnBsYWNlbWVudD1QTEFDRU1FTlRfTUFQW3RoaXMuYWxpZ25dfHxQTEFDRU1FTlRfTUFQLmxlZnQ7dGhpcy4kb24oJ2ZpZWxkUmVzZXQnLHRoaXMuaGFuZGxlRmllbGRSZXNldCk7fSxtZXRob2RzOntmb2N1czpmdW5jdGlvbiBmb2N1cygpe2lmKCF0aGlzLnJhbmdlZCl7dGhpcy4kcmVmcy5yZWZlcmVuY2UuZm9jdXMoKTt9ZWxzZXt0aGlzLmhhbmRsZUZvY3VzKCk7fX0sYmx1cjpmdW5jdGlvbiBibHVyKCl7dGhpcy5yZWZJbnB1dC5mb3JFYWNoKGZ1bmN0aW9uKGlucHV0KXtyZXR1cm4gaW5wdXQuYmx1cigpO30pO30sLy8ge3BhcnNlLCBmb3JtYXRUb30gVmFsdWUgZGVhbHMgbWFwcyBjb21wb25lbnQgdmFsdWUgd2l0aCBpbnRlcm5hbCBEYXRlCnBhcnNlVmFsdWU6ZnVuY3Rpb24gcGFyc2VWYWx1ZSh2YWx1ZSl7dmFyIGlzUGFyc2VkPU9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGVPYmplY3QiXSkodmFsdWUpfHxBcnJheS5pc0FycmF5KHZhbHVlKSYmdmFsdWUuZXZlcnkoZGF0ZV91dGlsX1siaXNEYXRlT2JqZWN0Il0pO2lmKHRoaXMudmFsdWVGb3JtYXQmJiFpc1BhcnNlZCl7cmV0dXJuIHBhcnNlQXNGb3JtYXRBbmRUeXBlKHZhbHVlLHRoaXMudmFsdWVGb3JtYXQsdGhpcy50eXBlLHRoaXMucmFuZ2VTZXBhcmF0b3IpfHx2YWx1ZTt9ZWxzZXtyZXR1cm4gdmFsdWU7fX0sZm9ybWF0VG9WYWx1ZTpmdW5jdGlvbiBmb3JtYXRUb1ZhbHVlKGRhdGUpe3ZhciBpc0Zvcm1hdHRhYmxlPU9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGVPYmplY3QiXSkoZGF0ZSl8fEFycmF5LmlzQXJyYXkoZGF0ZSkmJmRhdGUuZXZlcnkoZGF0ZV91dGlsX1siaXNEYXRlT2JqZWN0Il0pO2lmKHRoaXMudmFsdWVGb3JtYXQmJmlzRm9ybWF0dGFibGUpe3JldHVybiBmb3JtYXRBc0Zvcm1hdEFuZFR5cGUoZGF0ZSx0aGlzLnZhbHVlRm9ybWF0LHRoaXMudHlwZSx0aGlzLnJhbmdlU2VwYXJhdG9yKTt9ZWxzZXtyZXR1cm4gZGF0ZTt9fSwvLyB7cGFyc2UsIGZvcm1hdFRvfSBTdHJpbmcgZGVhbHMgd2l0aCB1c2VyIGlucHV0CnBhcnNlU3RyaW5nOmZ1bmN0aW9uIHBhcnNlU3RyaW5nKHZhbHVlKXt2YXIgdHlwZT1BcnJheS5pc0FycmF5KHZhbHVlKT90aGlzLnR5cGU6dGhpcy50eXBlLnJlcGxhY2UoJ3JhbmdlJywnJyk7cmV0dXJuIHBhcnNlQXNGb3JtYXRBbmRUeXBlKHZhbHVlLHRoaXMuZm9ybWF0LHR5cGUpO30sZm9ybWF0VG9TdHJpbmc6ZnVuY3Rpb24gZm9ybWF0VG9TdHJpbmcodmFsdWUpe3ZhciB0eXBlPUFycmF5LmlzQXJyYXkodmFsdWUpP3RoaXMudHlwZTp0aGlzLnR5cGUucmVwbGFjZSgncmFuZ2UnLCcnKTtyZXR1cm4gZm9ybWF0QXNGb3JtYXRBbmRUeXBlKHZhbHVlLHRoaXMuZm9ybWF0LHR5cGUpO30saGFuZGxlTW91c2VFbnRlcjpmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCl7aWYodGhpcy5yZWFkb25seXx8dGhpcy5waWNrZXJEaXNhYmxlZClyZXR1cm47aWYoIXRoaXMudmFsdWVJc0VtcHR5JiZ0aGlzLmNsZWFyYWJsZSl7dGhpcy5zaG93Q2xvc2U9dHJ1ZTt9fSxoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKCl7aWYodGhpcy51c2VySW5wdXQpe3ZhciB2YWx1ZT10aGlzLnBhcnNlU3RyaW5nKHRoaXMuZGlzcGxheVZhbHVlKTtpZih2YWx1ZSl7dGhpcy5waWNrZXIudmFsdWU9dmFsdWU7aWYodGhpcy5pc1ZhbGlkVmFsdWUodmFsdWUpKXt0aGlzLmVtaXRJbnB1dCh2YWx1ZSk7dGhpcy51c2VySW5wdXQ9bnVsbDt9fX1pZih0aGlzLnVzZXJJbnB1dD09PScnKXt0aGlzLmVtaXRJbnB1dChudWxsKTt0aGlzLmVtaXRDaGFuZ2UobnVsbCk7dGhpcy51c2VySW5wdXQ9bnVsbDt9fSxoYW5kbGVTdGFydElucHV0OmZ1bmN0aW9uIGhhbmRsZVN0YXJ0SW5wdXQoZXZlbnQpe2lmKHRoaXMudXNlcklucHV0KXt0aGlzLnVzZXJJbnB1dD1bZXZlbnQudGFyZ2V0LnZhbHVlLHRoaXMudXNlcklucHV0WzFdXTt9ZWxzZXt0aGlzLnVzZXJJbnB1dD1bZXZlbnQudGFyZ2V0LnZhbHVlLG51bGxdO319LGhhbmRsZUVuZElucHV0OmZ1bmN0aW9uIGhhbmRsZUVuZElucHV0KGV2ZW50KXtpZih0aGlzLnVzZXJJbnB1dCl7dGhpcy51c2VySW5wdXQ9W3RoaXMudXNlcklucHV0WzBdLGV2ZW50LnRhcmdldC52YWx1ZV07fWVsc2V7dGhpcy51c2VySW5wdXQ9W251bGwsZXZlbnQudGFyZ2V0LnZhbHVlXTt9fSxoYW5kbGVTdGFydENoYW5nZTpmdW5jdGlvbiBoYW5kbGVTdGFydENoYW5nZShldmVudCl7dmFyIHZhbHVlPXRoaXMucGFyc2VTdHJpbmcodGhpcy51c2VySW5wdXQmJnRoaXMudXNlcklucHV0WzBdKTtpZih2YWx1ZSl7dGhpcy51c2VySW5wdXQ9W3RoaXMuZm9ybWF0VG9TdHJpbmcodmFsdWUpLHRoaXMuZGlzcGxheVZhbHVlWzFdXTt2YXIgbmV3VmFsdWU9W3ZhbHVlLHRoaXMucGlja2VyLnZhbHVlJiZ0aGlzLnBpY2tlci52YWx1ZVsxXV07dGhpcy5waWNrZXIudmFsdWU9bmV3VmFsdWU7aWYodGhpcy5pc1ZhbGlkVmFsdWUobmV3VmFsdWUpKXt0aGlzLmVtaXRJbnB1dChuZXdWYWx1ZSk7dGhpcy51c2VySW5wdXQ9bnVsbDt9fX0saGFuZGxlRW5kQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZUVuZENoYW5nZShldmVudCl7dmFyIHZhbHVlPXRoaXMucGFyc2VTdHJpbmcodGhpcy51c2VySW5wdXQmJnRoaXMudXNlcklucHV0WzFdKTtpZih2YWx1ZSl7dGhpcy51c2VySW5wdXQ9W3RoaXMuZGlzcGxheVZhbHVlWzBdLHRoaXMuZm9ybWF0VG9TdHJpbmcodmFsdWUpXTt2YXIgbmV3VmFsdWU9W3RoaXMucGlja2VyLnZhbHVlJiZ0aGlzLnBpY2tlci52YWx1ZVswXSx2YWx1ZV07dGhpcy5waWNrZXIudmFsdWU9bmV3VmFsdWU7aWYodGhpcy5pc1ZhbGlkVmFsdWUobmV3VmFsdWUpKXt0aGlzLmVtaXRJbnB1dChuZXdWYWx1ZSk7dGhpcy51c2VySW5wdXQ9bnVsbDt9fX0saGFuZGxlQ2xpY2tJY29uOmZ1bmN0aW9uIGhhbmRsZUNsaWNrSWNvbihldmVudCl7aWYodGhpcy5yZWFkb25seXx8dGhpcy5waWNrZXJEaXNhYmxlZClyZXR1cm47aWYodGhpcy5zaG93Q2xvc2Upe3RoaXMudmFsdWVPbk9wZW49dGhpcy52YWx1ZTtldmVudC5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLmVtaXRJbnB1dChudWxsKTt0aGlzLmVtaXRDaGFuZ2UobnVsbCk7dGhpcy5zaG93Q2xvc2U9ZmFsc2U7aWYodGhpcy5waWNrZXImJnR5cGVvZiB0aGlzLnBpY2tlci5oYW5kbGVDbGVhcj09PSdmdW5jdGlvbicpe3RoaXMucGlja2VyLmhhbmRsZUNsZWFyKCk7fX1lbHNle3RoaXMucGlja2VyVmlzaWJsZT0hdGhpcy5waWNrZXJWaXNpYmxlO319LGhhbmRsZUNsb3NlOmZ1bmN0aW9uIGhhbmRsZUNsb3NlKCl7aWYoIXRoaXMucGlja2VyVmlzaWJsZSlyZXR1cm47dGhpcy5waWNrZXJWaXNpYmxlPWZhbHNlO2lmKHRoaXMudHlwZT09PSdkYXRlcycpey8vIHJlc3RvcmUgdG8gZm9ybWVyIHZhbHVlCnZhciBvbGRWYWx1ZT1wYXJzZUFzRm9ybWF0QW5kVHlwZSh0aGlzLnZhbHVlT25PcGVuLHRoaXMudmFsdWVGb3JtYXQsdGhpcy50eXBlLHRoaXMucmFuZ2VTZXBhcmF0b3IpfHx0aGlzLnZhbHVlT25PcGVuO3RoaXMuZW1pdElucHV0KG9sZFZhbHVlKTt9fSxoYW5kbGVGaWVsZFJlc2V0OmZ1bmN0aW9uIGhhbmRsZUZpZWxkUmVzZXQoaW5pdGlhbFZhbHVlKXt0aGlzLnVzZXJJbnB1dD1pbml0aWFsVmFsdWU9PT0nJz9udWxsOmluaXRpYWxWYWx1ZTt9LGhhbmRsZUZvY3VzOmZ1bmN0aW9uIGhhbmRsZUZvY3VzKCl7dmFyIHR5cGU9dGhpcy50eXBlO2lmKEhBVkVfVFJJR0dFUl9UWVBFUy5pbmRleE9mKHR5cGUpIT09LTEmJiF0aGlzLnBpY2tlclZpc2libGUpe3RoaXMucGlja2VyVmlzaWJsZT10cnVlO310aGlzLiRlbWl0KCdmb2N1cycsdGhpcyk7fSxoYW5kbGVLZXlkb3duOmZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXZlbnQpe3ZhciBfdGhpcz10aGlzO3ZhciBrZXlDb2RlPWV2ZW50LmtleUNvZGU7Ly8gRVNDCmlmKGtleUNvZGU9PT0yNyl7dGhpcy5waWNrZXJWaXNpYmxlPWZhbHNlO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3JldHVybjt9Ly8gVGFiCmlmKGtleUNvZGU9PT05KXtpZighdGhpcy5yYW5nZWQpe3RoaXMuaGFuZGxlQ2hhbmdlKCk7dGhpcy5waWNrZXJWaXNpYmxlPXRoaXMucGlja2VyLnZpc2libGU9ZmFsc2U7dGhpcy5ibHVyKCk7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fWVsc2V7Ly8gdXNlciBtYXkgY2hhbmdlIGZvY3VzIGJldHdlZW4gdHdvIGlucHV0CnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihfdGhpcy5yZWZJbnB1dC5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpPT09LTEpe190aGlzLnBpY2tlclZpc2libGU9ZmFsc2U7X3RoaXMuYmx1cigpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO319LDApO31yZXR1cm47fS8vIEVudGVyCmlmKGtleUNvZGU9PT0xMyl7aWYodGhpcy51c2VySW5wdXQ9PT0nJ3x8dGhpcy5pc1ZhbGlkVmFsdWUodGhpcy5wYXJzZVN0cmluZyh0aGlzLmRpc3BsYXlWYWx1ZSkpKXt0aGlzLmhhbmRsZUNoYW5nZSgpO3RoaXMucGlja2VyVmlzaWJsZT10aGlzLnBpY2tlci52aXNpYmxlPWZhbHNlO3RoaXMuYmx1cigpO31ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm47fS8vIGlmIHVzZXIgaXMgdHlwaW5nLCBkbyBub3QgbGV0IHBpY2tlciBoYW5kbGUga2V5IGlucHV0CmlmKHRoaXMudXNlcklucHV0KXtldmVudC5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm47fS8vIGRlbGVnYXRlIG90aGVyIGtleXMgdG8gcGFuZWwKaWYodGhpcy5waWNrZXImJnRoaXMucGlja2VyLmhhbmRsZUtleWRvd24pe3RoaXMucGlja2VyLmhhbmRsZUtleWRvd24oZXZlbnQpO319LGhhbmRsZVJhbmdlQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlUmFuZ2VDbGljaygpe3ZhciB0eXBlPXRoaXMudHlwZTtpZihIQVZFX1RSSUdHRVJfVFlQRVMuaW5kZXhPZih0eXBlKSE9PS0xJiYhdGhpcy5waWNrZXJWaXNpYmxlKXt0aGlzLnBpY2tlclZpc2libGU9dHJ1ZTt9dGhpcy4kZW1pdCgnZm9jdXMnLHRoaXMpO30saGlkZVBpY2tlcjpmdW5jdGlvbiBoaWRlUGlja2VyKCl7aWYodGhpcy5waWNrZXIpe3RoaXMucGlja2VyLnJlc2V0VmlldyYmdGhpcy5waWNrZXIucmVzZXRWaWV3KCk7dGhpcy5waWNrZXJWaXNpYmxlPXRoaXMucGlja2VyLnZpc2libGU9ZmFsc2U7dGhpcy5kZXN0cm95UG9wcGVyKCk7fX0sc2hvd1BpY2tlcjpmdW5jdGlvbiBzaG93UGlja2VyKCl7dmFyIF90aGlzMj10aGlzO2lmKHRoaXMuJGlzU2VydmVyKXJldHVybjtpZighdGhpcy5waWNrZXIpe3RoaXMubW91bnRQaWNrZXIoKTt9dGhpcy5waWNrZXJWaXNpYmxlPXRoaXMucGlja2VyLnZpc2libGU9dHJ1ZTt0aGlzLnVwZGF0ZVBvcHBlcigpO3RoaXMucGlja2VyLnZhbHVlPXRoaXMucGFyc2VkVmFsdWU7dGhpcy5waWNrZXIucmVzZXRWaWV3JiZ0aGlzLnBpY2tlci5yZXNldFZpZXcoKTt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe190aGlzMi5waWNrZXIuYWRqdXN0U3Bpbm5lcnMmJl90aGlzMi5waWNrZXIuYWRqdXN0U3Bpbm5lcnMoKTt9KTt9LG1vdW50UGlja2VyOmZ1bmN0aW9uIG1vdW50UGlja2VyKCl7dmFyIF90aGlzMz10aGlzO3RoaXMucGlja2VyPW5ldyBleHRlcm5hbF92dWVfZGVmYXVsdC5hKHRoaXMucGFuZWwpLiRtb3VudCgpO3RoaXMucGlja2VyLmRlZmF1bHRWYWx1ZT10aGlzLmRlZmF1bHRWYWx1ZTt0aGlzLnBpY2tlci5kZWZhdWx0VGltZT10aGlzLmRlZmF1bHRUaW1lO3RoaXMucGlja2VyLnBvcHBlckNsYXNzPXRoaXMucG9wcGVyQ2xhc3M7dGhpcy5wb3BwZXJFbG09dGhpcy5waWNrZXIuJGVsO3RoaXMucGlja2VyLndpZHRoPXRoaXMucmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO3RoaXMucGlja2VyLnNob3dUaW1lPXRoaXMudHlwZT09PSdkYXRldGltZSd8fHRoaXMudHlwZT09PSdkYXRldGltZXJhbmdlJzt0aGlzLnBpY2tlci5zZWxlY3Rpb25Nb2RlPXRoaXMuc2VsZWN0aW9uTW9kZTt0aGlzLnBpY2tlci51bmxpbmtQYW5lbHM9dGhpcy51bmxpbmtQYW5lbHM7dGhpcy5waWNrZXIuYXJyb3dDb250cm9sPXRoaXMuYXJyb3dDb250cm9sfHx0aGlzLnRpbWVBcnJvd0NvbnRyb2x8fGZhbHNlO3RoaXMuJHdhdGNoKCdmb3JtYXQnLGZ1bmN0aW9uKGZvcm1hdCl7X3RoaXMzLnBpY2tlci5mb3JtYXQ9Zm9ybWF0O30pO3ZhciB1cGRhdGVPcHRpb25zPWZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMoKXt2YXIgb3B0aW9ucz1fdGhpczMucGlja2VyT3B0aW9ucztpZihvcHRpb25zJiZvcHRpb25zLnNlbGVjdGFibGVSYW5nZSl7dmFyIHJhbmdlcz1vcHRpb25zLnNlbGVjdGFibGVSYW5nZTt2YXIgcGFyc2VyPVRZUEVfVkFMVUVfUkVTT0xWRVJfTUFQLmRhdGV0aW1lcmFuZ2UucGFyc2VyO3ZhciBmb3JtYXQ9REVGQVVMVF9GT1JNQVRTLnRpbWVyYW5nZTtyYW5nZXM9QXJyYXkuaXNBcnJheShyYW5nZXMpP3JhbmdlczpbcmFuZ2VzXTtfdGhpczMucGlja2VyLnNlbGVjdGFibGVSYW5nZT1yYW5nZXMubWFwKGZ1bmN0aW9uKHJhbmdlKXtyZXR1cm4gcGFyc2VyKHJhbmdlLGZvcm1hdCxfdGhpczMucmFuZ2VTZXBhcmF0b3IpO30pO31mb3IodmFyIG9wdGlvbiBpbiBvcHRpb25zKXtpZihvcHRpb25zLmhhc093blByb3BlcnR5KG9wdGlvbikmJi8vIOW/veeVpSB0aW1lLXBpY2tlciDnmoTor6XphY3nva7pobkKb3B0aW9uIT09J3NlbGVjdGFibGVSYW5nZScpe190aGlzMy5waWNrZXJbb3B0aW9uXT1vcHRpb25zW29wdGlvbl07fX0vLyBtYWluIGZvcm1hdCBtdXN0IHByZXZhaWwgb3ZlciB1bmRvY3VtZW50ZWQgcGlja2VyT3B0aW9ucy5mb3JtYXQKaWYoX3RoaXMzLmZvcm1hdCl7X3RoaXMzLnBpY2tlci5mb3JtYXQ9X3RoaXMzLmZvcm1hdDt9fTt1cGRhdGVPcHRpb25zKCk7dGhpcy51bndhdGNoUGlja2VyT3B0aW9ucz10aGlzLiR3YXRjaCgncGlja2VyT3B0aW9ucycsZnVuY3Rpb24oKXtyZXR1cm4gdXBkYXRlT3B0aW9ucygpO30se2RlZXA6dHJ1ZX0pO3RoaXMuJGVsLmFwcGVuZENoaWxkKHRoaXMucGlja2VyLiRlbCk7dGhpcy5waWNrZXIucmVzZXRWaWV3JiZ0aGlzLnBpY2tlci5yZXNldFZpZXcoKTt0aGlzLnBpY2tlci4kb24oJ2RvZGVzdHJveScsdGhpcy5kb0Rlc3Ryb3kpO3RoaXMucGlja2VyLiRvbigncGljaycsZnVuY3Rpb24oKXt2YXIgZGF0ZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMF06Jyc7dmFyIHZpc2libGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzFdOmZhbHNlO190aGlzMy51c2VySW5wdXQ9bnVsbDtfdGhpczMucGlja2VyVmlzaWJsZT1fdGhpczMucGlja2VyLnZpc2libGU9dmlzaWJsZTtfdGhpczMuZW1pdElucHV0KGRhdGUpO190aGlzMy5waWNrZXIucmVzZXRWaWV3JiZfdGhpczMucGlja2VyLnJlc2V0VmlldygpO30pO3RoaXMucGlja2VyLiRvbignc2VsZWN0LXJhbmdlJyxmdW5jdGlvbihzdGFydCxlbmQscG9zKXtpZihfdGhpczMucmVmSW5wdXQubGVuZ3RoPT09MClyZXR1cm47aWYoIXBvc3x8cG9zPT09J21pbicpe190aGlzMy5yZWZJbnB1dFswXS5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCxlbmQpO190aGlzMy5yZWZJbnB1dFswXS5mb2N1cygpO31lbHNlIGlmKHBvcz09PSdtYXgnKXtfdGhpczMucmVmSW5wdXRbMV0uc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsZW5kKTtfdGhpczMucmVmSW5wdXRbMV0uZm9jdXMoKTt9fSk7fSx1bm1vdW50UGlja2VyOmZ1bmN0aW9uIHVubW91bnRQaWNrZXIoKXtpZih0aGlzLnBpY2tlcil7dGhpcy5waWNrZXIuJGRlc3Ryb3koKTt0aGlzLnBpY2tlci4kb2ZmKCk7aWYodHlwZW9mIHRoaXMudW53YXRjaFBpY2tlck9wdGlvbnM9PT0nZnVuY3Rpb24nKXt0aGlzLnVud2F0Y2hQaWNrZXJPcHRpb25zKCk7fXRoaXMucGlja2VyLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGlja2VyLiRlbCk7fX0sZW1pdENoYW5nZTpmdW5jdGlvbiBlbWl0Q2hhbmdlKHZhbCl7Ly8gZGV0ZXJtaW5lIHVzZXIgcmVhbCBjaGFuZ2Ugb25seQppZighdmFsdWVFcXVhbHModmFsLHRoaXMudmFsdWVPbk9wZW4pKXt0aGlzLiRlbWl0KCdjaGFuZ2UnLHZhbCk7dGhpcy52YWx1ZU9uT3Blbj12YWw7aWYodGhpcy52YWxpZGF0ZUV2ZW50KXt0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywnZWwuZm9ybS5jaGFuZ2UnLHZhbCk7fX19LGVtaXRJbnB1dDpmdW5jdGlvbiBlbWl0SW5wdXQodmFsKXt2YXIgZm9ybWF0dGVkPXRoaXMuZm9ybWF0VG9WYWx1ZSh2YWwpO2lmKCF2YWx1ZUVxdWFscyh0aGlzLnZhbHVlLGZvcm1hdHRlZCkpe3RoaXMuJGVtaXQoJ2lucHV0Jyxmb3JtYXR0ZWQpO319LGlzVmFsaWRWYWx1ZTpmdW5jdGlvbiBpc1ZhbGlkVmFsdWUodmFsdWUpe2lmKCF0aGlzLnBpY2tlcil7dGhpcy5tb3VudFBpY2tlcigpO31pZih0aGlzLnBpY2tlci5pc1ZhbGlkVmFsdWUpe3JldHVybiB2YWx1ZSYmdGhpcy5waWNrZXIuaXNWYWxpZFZhbHVlKHZhbHVlKTt9ZWxzZXtyZXR1cm4gdHJ1ZTt9fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3BpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1waWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGlja2VyLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHBpY2tlcl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19waWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18scGlja2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNzlhZTA2OWZfcmVuZGVyLHBpY2tlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzc5YWUwNjlmX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgcGlja2VyX2FwaTt9cGlja2VyX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BpY2tlci52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGlja2VyPXBpY2tlcl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNDQwZDRlYSYKdmFyIGRhdGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNDQwZDRlYV9yZW5kZXI9ZnVuY3Rpb24gZGF0ZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI0NDBkNGVhX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYWZ0ZXItZW50ZXIiOl92bS5oYW5kbGVFbnRlciwiYWZ0ZXItbGVhdmUiOl92bS5oYW5kbGVMZWF2ZX19LFtfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsIGVsLWRhdGUtcGlja2VyIGVsLXBvcHBlciIsY2xhc3M6W3siaGFzLXNpZGViYXIiOl92bS4kc2xvdHMuc2lkZWJhcnx8X3ZtLnNob3J0Y3V0cywiaGFzLXRpbWUiOl92bS5zaG93VGltZX0sX3ZtLnBvcHBlckNsYXNzXX0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXIifSxbX3ZtLl90KCJzaWRlYmFyIiksX3ZtLnNob3J0Y3V0cz9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fc2lkZWJhciJ9LF92bS5fbChfdm0uc2hvcnRjdXRzLGZ1bmN0aW9uKHNob3J0Y3V0LGtleSl7cmV0dXJuIF9jKCJidXR0b24iLHtrZXk6a2V5LHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX3Nob3J0Y3V0IixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLmhhbmRsZVNob3J0Y3V0Q2xpY2soc2hvcnRjdXQpO319fSxbX3ZtLl92KF92bS5fcyhzaG9ydGN1dC50ZXh0KSldKTt9KSwwKTpfdm0uX2UoKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fYm9keSJ9LFtfdm0uc2hvd1RpbWU/X2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXBpY2tlcl9fdGltZS1oZWFkZXIifSxbX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1waWNrZXJfX2VkaXRvci13cmFwIn0sW19jKCJlbC1pbnB1dCIse2F0dHJzOntwbGFjZWhvbGRlcjpfdm0udCgiZWwuZGF0ZXBpY2tlci5zZWxlY3REYXRlIiksdmFsdWU6X3ZtLnZpc2libGVEYXRlLHNpemU6InNtYWxsIn0sb246e2lucHV0OmZ1bmN0aW9uIGlucHV0KHZhbCl7cmV0dXJuIF92bS51c2VySW5wdXREYXRlPXZhbDt9LGNoYW5nZTpfdm0uaGFuZGxlVmlzaWJsZURhdGVDaGFuZ2V9fSldLDEpLF9jKCJzcGFuIix7ZGlyZWN0aXZlczpbe25hbWU6ImNsaWNrb3V0c2lkZSIscmF3TmFtZToidi1jbGlja291dHNpZGUiLHZhbHVlOl92bS5oYW5kbGVUaW1lUGlja0Nsb3NlLGV4cHJlc3Npb246ImhhbmRsZVRpbWVQaWNrQ2xvc2UifV0sc3RhdGljQ2xhc3M6ImVsLWRhdGUtcGlja2VyX19lZGl0b3Itd3JhcCJ9LFtfYygiZWwtaW5wdXQiLHtyZWY6ImlucHV0IixhdHRyczp7cGxhY2Vob2xkZXI6X3ZtLnQoImVsLmRhdGVwaWNrZXIuc2VsZWN0VGltZSIpLHZhbHVlOl92bS52aXNpYmxlVGltZSxzaXplOiJzbWFsbCJ9LG9uOntmb2N1czpmdW5jdGlvbiBmb2N1cygkZXZlbnQpe192bS50aW1lUGlja2VyVmlzaWJsZT10cnVlO30saW5wdXQ6ZnVuY3Rpb24gaW5wdXQodmFsKXtyZXR1cm4gX3ZtLnVzZXJJbnB1dFRpbWU9dmFsO30sY2hhbmdlOl92bS5oYW5kbGVWaXNpYmxlVGltZUNoYW5nZX19KSxfYygidGltZS1waWNrZXIiLHtyZWY6InRpbWVwaWNrZXIiLGF0dHJzOnsidGltZS1hcnJvdy1jb250cm9sIjpfdm0uYXJyb3dDb250cm9sLHZpc2libGU6X3ZtLnRpbWVQaWNrZXJWaXNpYmxlfSxvbjp7cGljazpfdm0uaGFuZGxlVGltZVBpY2ssbW91bnRlZDpfdm0ucHJveHlUaW1lUGlja2VyRGF0YVByb3BlcnRpZXN9fSldLDEpXSk6X3ZtLl9lKCksX2MoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS5jdXJyZW50VmlldyE9PSJ0aW1lIixleHByZXNzaW9uOiJjdXJyZW50VmlldyAhPT0gJ3RpbWUnIn1dLHN0YXRpY0NsYXNzOiJlbC1kYXRlLXBpY2tlcl9faGVhZGVyIixjbGFzczp7ImVsLWRhdGUtcGlja2VyX19oZWFkZXItLWJvcmRlcmVkIjpfdm0uY3VycmVudFZpZXc9PT0ieWVhciJ8fF92bS5jdXJyZW50Vmlldz09PSJtb250aCJ9fSxbX2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWRhdGUtcGlja2VyX19wcmV2LWJ0biBlbC1pY29uLWQtYXJyb3ctbGVmdCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOl92bS50KCJlbC5kYXRlcGlja2VyLnByZXZZZWFyIil9LG9uOntjbGljazpfdm0ucHJldlllYXJ9fSksX2MoImJ1dHRvbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS5jdXJyZW50Vmlldz09PSJkYXRlIixleHByZXNzaW9uOiJjdXJyZW50VmlldyA9PT0gJ2RhdGUnIn1dLHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWRhdGUtcGlja2VyX19wcmV2LWJ0biBlbC1pY29uLWFycm93LWxlZnQiLGF0dHJzOnt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjpfdm0udCgiZWwuZGF0ZXBpY2tlci5wcmV2TW9udGgiKX0sb246e2NsaWNrOl92bS5wcmV2TW9udGh9fSksX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1waWNrZXJfX2hlYWRlci1sYWJlbCIsYXR0cnM6e3JvbGU6ImJ1dHRvbiJ9LG9uOntjbGljazpfdm0uc2hvd1llYXJQaWNrZXJ9fSxbX3ZtLl92KF92bS5fcyhfdm0ueWVhckxhYmVsKSldKSxfYygic3BhbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS5jdXJyZW50Vmlldz09PSJkYXRlIixleHByZXNzaW9uOiJjdXJyZW50VmlldyA9PT0gJ2RhdGUnIn1dLHN0YXRpY0NsYXNzOiJlbC1kYXRlLXBpY2tlcl9faGVhZGVyLWxhYmVsIixjbGFzczp7YWN0aXZlOl92bS5jdXJyZW50Vmlldz09PSJtb250aCJ9LGF0dHJzOntyb2xlOiJidXR0b24ifSxvbjp7Y2xpY2s6X3ZtLnNob3dNb250aFBpY2tlcn19LFtfdm0uX3YoX3ZtLl9zKF92bS50KCJlbC5kYXRlcGlja2VyLm1vbnRoIisoX3ZtLm1vbnRoKzEpKSkpXSksX2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWRhdGUtcGlja2VyX19uZXh0LWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHQiLGF0dHJzOnt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjpfdm0udCgiZWwuZGF0ZXBpY2tlci5uZXh0WWVhciIpfSxvbjp7Y2xpY2s6X3ZtLm5leHRZZWFyfX0pLF9jKCJidXR0b24iLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uY3VycmVudFZpZXc9PT0iZGF0ZSIsZXhwcmVzc2lvbjoiY3VycmVudFZpZXcgPT09ICdkYXRlJyJ9XSxzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1kYXRlLXBpY2tlcl9fbmV4dC1idG4gZWwtaWNvbi1hcnJvdy1yaWdodCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOl92bS50KCJlbC5kYXRlcGlja2VyLm5leHRNb250aCIpfSxvbjp7Y2xpY2s6X3ZtLm5leHRNb250aH19KV0pLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19jb250ZW50In0sW19jKCJkYXRlLXRhYmxlIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLmN1cnJlbnRWaWV3PT09ImRhdGUiLGV4cHJlc3Npb246ImN1cnJlbnRWaWV3ID09PSAnZGF0ZScifV0sYXR0cnM6eyJzZWxlY3Rpb24tbW9kZSI6X3ZtLnNlbGVjdGlvbk1vZGUsImZpcnN0LWRheS1vZi13ZWVrIjpfdm0uZmlyc3REYXlPZldlZWssdmFsdWU6X3ZtLnZhbHVlLCJkZWZhdWx0LXZhbHVlIjpfdm0uZGVmYXVsdFZhbHVlP25ldyBEYXRlKF92bS5kZWZhdWx0VmFsdWUpOm51bGwsZGF0ZTpfdm0uZGF0ZSwiY2VsbC1jbGFzcy1uYW1lIjpfdm0uY2VsbENsYXNzTmFtZSwiZGlzYWJsZWQtZGF0ZSI6X3ZtLmRpc2FibGVkRGF0ZX0sb246e3BpY2s6X3ZtLmhhbmRsZURhdGVQaWNrfX0pLF9jKCJ5ZWFyLXRhYmxlIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLmN1cnJlbnRWaWV3PT09InllYXIiLGV4cHJlc3Npb246ImN1cnJlbnRWaWV3ID09PSAneWVhcicifV0sYXR0cnM6e3ZhbHVlOl92bS52YWx1ZSwiZGVmYXVsdC12YWx1ZSI6X3ZtLmRlZmF1bHRWYWx1ZT9uZXcgRGF0ZShfdm0uZGVmYXVsdFZhbHVlKTpudWxsLGRhdGU6X3ZtLmRhdGUsImRpc2FibGVkLWRhdGUiOl92bS5kaXNhYmxlZERhdGV9LG9uOntwaWNrOl92bS5oYW5kbGVZZWFyUGlja319KSxfYygibW9udGgtdGFibGUiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uY3VycmVudFZpZXc9PT0ibW9udGgiLGV4cHJlc3Npb246ImN1cnJlbnRWaWV3ID09PSAnbW9udGgnIn1dLGF0dHJzOnt2YWx1ZTpfdm0udmFsdWUsImRlZmF1bHQtdmFsdWUiOl92bS5kZWZhdWx0VmFsdWU/bmV3IERhdGUoX3ZtLmRlZmF1bHRWYWx1ZSk6bnVsbCxkYXRlOl92bS5kYXRlLCJkaXNhYmxlZC1kYXRlIjpfdm0uZGlzYWJsZWREYXRlfSxvbjp7cGljazpfdm0uaGFuZGxlTW9udGhQaWNrfX0pXSwxKV0pXSwyKSxfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLmZvb3RlclZpc2libGUmJl92bS5jdXJyZW50Vmlldz09PSJkYXRlIixleHByZXNzaW9uOiJmb290ZXJWaXNpYmxlICYmIGN1cnJlbnRWaWV3ID09PSAnZGF0ZScifV0sc3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fZm9vdGVyIn0sW19jKCJlbC1idXR0b24iLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uc2VsZWN0aW9uTW9kZSE9PSJkYXRlcyIsZXhwcmVzc2lvbjoic2VsZWN0aW9uTW9kZSAhPT0gJ2RhdGVzJyJ9XSxzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19saW5rLWJ0biIsYXR0cnM6e3NpemU6Im1pbmkiLHR5cGU6InRleHQifSxvbjp7Y2xpY2s6X3ZtLmNoYW5nZVRvTm93fX0sW192bS5fdigiXG4gICAgICAgICIrX3ZtLl9zKF92bS50KCJlbC5kYXRlcGlja2VyLm5vdyIpKSsiXG4gICAgICAiKV0pLF9jKCJlbC1idXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19saW5rLWJ0biIsYXR0cnM6e3BsYWluOiIiLHNpemU6Im1pbmkifSxvbjp7Y2xpY2s6X3ZtLmNvbmZpcm19fSxbX3ZtLl92KCJcbiAgICAgICAgIitfdm0uX3MoX3ZtLnQoImVsLmRhdGVwaWNrZXIuY29uZmlybSIpKSsiXG4gICAgICAiKV0pXSwxKV0pXSk7fTt2YXIgZGF0ZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI0NDBkNGVhX3N0YXRpY1JlbmRlckZucz1bXTtkYXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ0MGQ0ZWFfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNDQwZDRlYSYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2Q5MzkwODkmCnZhciB0aW1ldnVlX3R5cGVfdGVtcGxhdGVfaWRfM2Q5MzkwODlfcmVuZGVyPWZ1bmN0aW9uIHRpbWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDkzOTA4OV9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifSxvbjp7ImFmdGVyLWxlYXZlIjpmdW5jdGlvbiBhZnRlckxlYXZlKCRldmVudCl7X3ZtLiRlbWl0KCJkb2Rlc3Ryb3kiKTt9fX0sW19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0udmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsIGVsLXBvcHBlciIsY2xhc3M6X3ZtLnBvcHBlckNsYXNzfSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsX19jb250ZW50IixjbGFzczp7Imhhcy1zZWNvbmRzIjpfdm0uc2hvd1NlY29uZHN9fSxbX2MoInRpbWUtc3Bpbm5lciIse3JlZjoic3Bpbm5lciIsYXR0cnM6eyJhcnJvdy1jb250cm9sIjpfdm0udXNlQXJyb3csInNob3ctc2Vjb25kcyI6X3ZtLnNob3dTZWNvbmRzLCJhbS1wbS1tb2RlIjpfdm0uYW1QbU1vZGUsZGF0ZTpfdm0uZGF0ZX0sb246e2NoYW5nZTpfdm0uaGFuZGxlQ2hhbmdlLCJzZWxlY3QtcmFuZ2UiOl92bS5zZXRTZWxlY3Rpb25SYW5nZX19KV0sMSksX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsX19mb290ZXIifSxbX2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsX19idG4gY2FuY2VsIixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e2NsaWNrOl92bS5oYW5kbGVDYW5jZWx9fSxbX3ZtLl92KF92bS5fcyhfdm0udCgiZWwuZGF0ZXBpY2tlci5jYW5jZWwiKSkpXSksX2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsX19idG4iLGNsYXNzOntjb25maXJtOiFfdm0uZGlzYWJsZWR9LGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtfdm0uaGFuZGxlQ29uZmlybSgpO319fSxbX3ZtLl92KF92bS5fcyhfdm0udCgiZWwuZGF0ZXBpY2tlci5jb25maXJtIikpKV0pXSldKV0pO307dmFyIHRpbWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDkzOTA4OV9zdGF0aWNSZW5kZXJGbnM9W107dGltZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkOTM5MDg5X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2Q5MzkwODkmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3RpbWUtc3Bpbm5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWZhY2FkZWImCnZhciB0aW1lX3NwaW5uZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xZmFjYWRlYl9yZW5kZXI9ZnVuY3Rpb24gdGltZV9zcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWZhY2FkZWJfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyIixjbGFzczp7Imhhcy1zZWNvbmRzIjpfdm0uc2hvd1NlY29uZHN9fSxbIV92bS5hcnJvd0NvbnRyb2w/W19jKCJlbC1zY3JvbGxiYXIiLHtyZWY6ImhvdXJzIixzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX193cmFwcGVyIixhdHRyczp7IndyYXAtc3R5bGUiOiJtYXgtaGVpZ2h0OiBpbmhlcml0OyIsInZpZXctY2xhc3MiOiJlbC10aW1lLXNwaW5uZXJfX2xpc3QiLG5vcmVzaXplOiIiLHRhZzoidWwifSxuYXRpdmVPbjp7bW91c2VlbnRlcjpmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCl7X3ZtLmVtaXRTZWxlY3RSYW5nZSgiaG91cnMiKTt9LG1vdXNlbW92ZTpmdW5jdGlvbiBtb3VzZW1vdmUoJGV2ZW50KXtfdm0uYWRqdXN0Q3VycmVudFNwaW5uZXIoImhvdXJzIik7fX19LF92bS5fbChfdm0uaG91cnNMaXN0LGZ1bmN0aW9uKGRpc2FibGVkLGhvdXIpe3JldHVybiBfYygibGkiLHtrZXk6aG91cixzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19pdGVtIixjbGFzczp7YWN0aXZlOmhvdXI9PT1fdm0uaG91cnMsZGlzYWJsZWQ6ZGlzYWJsZWR9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5oYW5kbGVDbGljaygiaG91cnMiLHt2YWx1ZTpob3VyLGRpc2FibGVkOmRpc2FibGVkfSk7fX19LFtfdm0uX3YoX3ZtLl9zKCgiMCIrKF92bS5hbVBtTW9kZT9ob3VyJTEyfHwxMjpob3VyKSkuc2xpY2UoLTIpKStfdm0uX3MoX3ZtLmFtUG0oaG91cikpKV0pO30pLDApLF9jKCJlbC1zY3JvbGxiYXIiLHtyZWY6Im1pbnV0ZXMiLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIiLGF0dHJzOnsid3JhcC1zdHlsZSI6Im1heC1oZWlnaHQ6IGluaGVyaXQ7Iiwidmlldy1jbGFzcyI6ImVsLXRpbWUtc3Bpbm5lcl9fbGlzdCIsbm9yZXNpemU6IiIsdGFnOiJ1bCJ9LG5hdGl2ZU9uOnttb3VzZWVudGVyOmZ1bmN0aW9uIG1vdXNlZW50ZXIoJGV2ZW50KXtfdm0uZW1pdFNlbGVjdFJhbmdlKCJtaW51dGVzIik7fSxtb3VzZW1vdmU6ZnVuY3Rpb24gbW91c2Vtb3ZlKCRldmVudCl7X3ZtLmFkanVzdEN1cnJlbnRTcGlubmVyKCJtaW51dGVzIik7fX19LF92bS5fbChfdm0ubWludXRlc0xpc3QsZnVuY3Rpb24oZW5hYmxlZCxrZXkpe3JldHVybiBfYygibGkiLHtrZXk6a2V5LHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2l0ZW0iLGNsYXNzOnthY3RpdmU6a2V5PT09X3ZtLm1pbnV0ZXMsZGlzYWJsZWQ6IWVuYWJsZWR9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5oYW5kbGVDbGljaygibWludXRlcyIse3ZhbHVlOmtleSxkaXNhYmxlZDpmYWxzZX0pO319fSxbX3ZtLl92KF92bS5fcygoIjAiK2tleSkuc2xpY2UoLTIpKSldKTt9KSwwKSxfYygiZWwtc2Nyb2xsYmFyIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLnNob3dTZWNvbmRzLGV4cHJlc3Npb246InNob3dTZWNvbmRzIn1dLHJlZjoic2Vjb25kcyIsc3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlciIsYXR0cnM6eyJ3cmFwLXN0eWxlIjoibWF4LWhlaWdodDogaW5oZXJpdDsiLCJ2aWV3LWNsYXNzIjoiZWwtdGltZS1zcGlubmVyX19saXN0Iixub3Jlc2l6ZToiIix0YWc6InVsIn0sbmF0aXZlT246e21vdXNlZW50ZXI6ZnVuY3Rpb24gbW91c2VlbnRlcigkZXZlbnQpe192bS5lbWl0U2VsZWN0UmFuZ2UoInNlY29uZHMiKTt9LG1vdXNlbW92ZTpmdW5jdGlvbiBtb3VzZW1vdmUoJGV2ZW50KXtfdm0uYWRqdXN0Q3VycmVudFNwaW5uZXIoInNlY29uZHMiKTt9fX0sX3ZtLl9sKDYwLGZ1bmN0aW9uKHNlY29uZCxrZXkpe3JldHVybiBfYygibGkiLHtrZXk6a2V5LHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2l0ZW0iLGNsYXNzOnthY3RpdmU6a2V5PT09X3ZtLnNlY29uZHN9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5oYW5kbGVDbGljaygic2Vjb25kcyIse3ZhbHVlOmtleSxkaXNhYmxlZDpmYWxzZX0pO319fSxbX3ZtLl92KF92bS5fcygoIjAiK2tleSkuc2xpY2UoLTIpKSldKTt9KSwwKV06X3ZtLl9lKCksX3ZtLmFycm93Q29udHJvbD9bX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIgaXMtYXJyb3ciLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uIG1vdXNlZW50ZXIoJGV2ZW50KXtfdm0uZW1pdFNlbGVjdFJhbmdlKCJob3VycyIpO319fSxbX2MoImkiLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6X3ZtLmRlY3JlYXNlLGV4cHJlc3Npb246ImRlY3JlYXNlIn1dLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2Fycm93IGVsLWljb24tYXJyb3ctdXAifSksX2MoImkiLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6X3ZtLmluY3JlYXNlLGV4cHJlc3Npb246ImluY3JlYXNlIn1dLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2Fycm93IGVsLWljb24tYXJyb3ctZG93biJ9KSxfYygidWwiLHtyZWY6ImhvdXJzIixzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19saXN0In0sX3ZtLl9sKF92bS5hcnJvd0hvdXJMaXN0LGZ1bmN0aW9uKGhvdXIsa2V5KXtyZXR1cm4gX2MoImxpIix7a2V5OmtleSxzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19pdGVtIixjbGFzczp7YWN0aXZlOmhvdXI9PT1fdm0uaG91cnMsZGlzYWJsZWQ6X3ZtLmhvdXJzTGlzdFtob3VyXX19LFtfdm0uX3YoX3ZtLl9zKGhvdXI9PT11bmRlZmluZWQ/IiI6KCIwIisoX3ZtLmFtUG1Nb2RlP2hvdXIlMTJ8fDEyOmhvdXIpKS5zbGljZSgtMikrX3ZtLmFtUG0oaG91cikpKV0pO30pLDApXSksX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIgaXMtYXJyb3ciLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uIG1vdXNlZW50ZXIoJGV2ZW50KXtfdm0uZW1pdFNlbGVjdFJhbmdlKCJtaW51dGVzIik7fX19LFtfYygiaSIse2RpcmVjdGl2ZXM6W3tuYW1lOiJyZXBlYXQtY2xpY2siLHJhd05hbWU6InYtcmVwZWF0LWNsaWNrIix2YWx1ZTpfdm0uZGVjcmVhc2UsZXhwcmVzc2lvbjoiZGVjcmVhc2UifV0sc3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9fYXJyb3cgZWwtaWNvbi1hcnJvdy11cCJ9KSxfYygiaSIse2RpcmVjdGl2ZXM6W3tuYW1lOiJyZXBlYXQtY2xpY2siLHJhd05hbWU6InYtcmVwZWF0LWNsaWNrIix2YWx1ZTpfdm0uaW5jcmVhc2UsZXhwcmVzc2lvbjoiaW5jcmVhc2UifV0sc3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9fYXJyb3cgZWwtaWNvbi1hcnJvdy1kb3duIn0pLF9jKCJ1bCIse3JlZjoibWludXRlcyIsc3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9fbGlzdCJ9LF92bS5fbChfdm0uYXJyb3dNaW51dGVMaXN0LGZ1bmN0aW9uKG1pbnV0ZSxrZXkpe3JldHVybiBfYygibGkiLHtrZXk6a2V5LHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2l0ZW0iLGNsYXNzOnthY3RpdmU6bWludXRlPT09X3ZtLm1pbnV0ZXN9fSxbX3ZtLl92KCJcbiAgICAgICAgICAiK192bS5fcyhtaW51dGU9PT11bmRlZmluZWQ/IiI6KCIwIittaW51dGUpLnNsaWNlKC0yKSkrIlxuICAgICAgICAiKV0pO30pLDApXSksX3ZtLnNob3dTZWNvbmRzP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX193cmFwcGVyIGlzLWFycm93Iixvbjp7bW91c2VlbnRlcjpmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCl7X3ZtLmVtaXRTZWxlY3RSYW5nZSgic2Vjb25kcyIpO319fSxbX2MoImkiLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6X3ZtLmRlY3JlYXNlLGV4cHJlc3Npb246ImRlY3JlYXNlIn1dLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2Fycm93IGVsLWljb24tYXJyb3ctdXAifSksX2MoImkiLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6X3ZtLmluY3JlYXNlLGV4cHJlc3Npb246ImluY3JlYXNlIn1dLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2Fycm93IGVsLWljb24tYXJyb3ctZG93biJ9KSxfYygidWwiLHtyZWY6InNlY29uZHMiLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2xpc3QifSxfdm0uX2woX3ZtLmFycm93U2Vjb25kTGlzdCxmdW5jdGlvbihzZWNvbmQsa2V5KXtyZXR1cm4gX2MoImxpIix7a2V5OmtleSxzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19pdGVtIixjbGFzczp7YWN0aXZlOnNlY29uZD09PV92bS5zZWNvbmRzfX0sW192bS5fdigiXG4gICAgICAgICAgIitfdm0uX3Moc2Vjb25kPT09dW5kZWZpbmVkPyIiOigiMCIrc2Vjb25kKS5zbGljZSgtMikpKyJcbiAgICAgICAgIildKTt9KSwwKV0pOl92bS5fZSgpXTpfdm0uX2UoKV0sMik7fTt2YXIgdGltZV9zcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWZhY2FkZWJfc3RhdGljUmVuZGVyRm5zPVtdO3RpbWVfc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFmYWNhZGViX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvdGltZS1zcGlubmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZmFjYWRlYiYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3RpbWUtc3Bpbm5lci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGltZV9zcGlubmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtjb21wb25lbnRzOntFbFNjcm9sbGJhcjpzY3JvbGxiYXJfZGVmYXVsdC5hfSxkaXJlY3RpdmVzOntyZXBlYXRDbGljazpyZXBlYXRfY2xpY2t9LHByb3BzOntkYXRlOnt9LGRlZmF1bHRWYWx1ZTp7fSwvLyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQpzaG93U2Vjb25kczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sYXJyb3dDb250cm9sOkJvb2xlYW4sYW1QbU1vZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6JycvLyAnYSc6IGFtL3BtOyAnQSc6IEFNL1BNCn19LGNvbXB1dGVkOntob3VyczpmdW5jdGlvbiBob3Vycygpe3JldHVybiB0aGlzLmRhdGUuZ2V0SG91cnMoKTt9LG1pbnV0ZXM6ZnVuY3Rpb24gbWludXRlcygpe3JldHVybiB0aGlzLmRhdGUuZ2V0TWludXRlcygpO30sc2Vjb25kczpmdW5jdGlvbiBzZWNvbmRzKCl7cmV0dXJuIHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCk7fSxob3Vyc0xpc3Q6ZnVuY3Rpb24gaG91cnNMaXN0KCl7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJnZXRSYW5nZUhvdXJzIl0pKHRoaXMuc2VsZWN0YWJsZVJhbmdlKTt9LG1pbnV0ZXNMaXN0OmZ1bmN0aW9uIG1pbnV0ZXNMaXN0KCl7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJnZXRSYW5nZU1pbnV0ZXMiXSkodGhpcy5zZWxlY3RhYmxlUmFuZ2UsdGhpcy5ob3Vycyk7fSxhcnJvd0hvdXJMaXN0OmZ1bmN0aW9uIGFycm93SG91ckxpc3QoKXt2YXIgaG91cnM9dGhpcy5ob3VycztyZXR1cm5baG91cnM+MD9ob3Vycy0xOnVuZGVmaW5lZCxob3Vycyxob3VyczwyMz9ob3VycysxOnVuZGVmaW5lZF07fSxhcnJvd01pbnV0ZUxpc3Q6ZnVuY3Rpb24gYXJyb3dNaW51dGVMaXN0KCl7dmFyIG1pbnV0ZXM9dGhpcy5taW51dGVzO3JldHVyblttaW51dGVzPjA/bWludXRlcy0xOnVuZGVmaW5lZCxtaW51dGVzLG1pbnV0ZXM8NTk/bWludXRlcysxOnVuZGVmaW5lZF07fSxhcnJvd1NlY29uZExpc3Q6ZnVuY3Rpb24gYXJyb3dTZWNvbmRMaXN0KCl7dmFyIHNlY29uZHM9dGhpcy5zZWNvbmRzO3JldHVybltzZWNvbmRzPjA/c2Vjb25kcy0xOnVuZGVmaW5lZCxzZWNvbmRzLHNlY29uZHM8NTk/c2Vjb25kcysxOnVuZGVmaW5lZF07fX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3NlbGVjdGFibGVSYW5nZTpbXSxjdXJyZW50U2Nyb2xsYmFyOm51bGx9O30sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dmFyIF90aGlzPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXshX3RoaXMuYXJyb3dDb250cm9sJiZfdGhpcy5iaW5kU2Nyb2xsRXZlbnQoKTt9KTt9LG1ldGhvZHM6e2luY3JlYXNlOmZ1bmN0aW9uIGluY3JlYXNlKCl7dGhpcy5zY3JvbGxEb3duKDEpO30sZGVjcmVhc2U6ZnVuY3Rpb24gZGVjcmVhc2UoKXt0aGlzLnNjcm9sbERvd24oLTEpO30sbW9kaWZ5RGF0ZUZpZWxkOmZ1bmN0aW9uIG1vZGlmeURhdGVGaWVsZCh0eXBlLHZhbHVlKXtzd2l0Y2godHlwZSl7Y2FzZSdob3Vycyc6dGhpcy4kZW1pdCgnY2hhbmdlJyxPYmplY3QoZGF0ZV91dGlsX1sibW9kaWZ5VGltZSJdKSh0aGlzLmRhdGUsdmFsdWUsdGhpcy5taW51dGVzLHRoaXMuc2Vjb25kcykpO2JyZWFrO2Nhc2UnbWludXRlcyc6dGhpcy4kZW1pdCgnY2hhbmdlJyxPYmplY3QoZGF0ZV91dGlsX1sibW9kaWZ5VGltZSJdKSh0aGlzLmRhdGUsdGhpcy5ob3Vycyx2YWx1ZSx0aGlzLnNlY29uZHMpKTticmVhaztjYXNlJ3NlY29uZHMnOnRoaXMuJGVtaXQoJ2NoYW5nZScsT2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeVRpbWUiXSkodGhpcy5kYXRlLHRoaXMuaG91cnMsdGhpcy5taW51dGVzLHZhbHVlKSk7YnJlYWs7fX0saGFuZGxlQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlQ2xpY2sodHlwZSxfcmVmKXt2YXIgdmFsdWU9X3JlZi52YWx1ZSxkaXNhYmxlZD1fcmVmLmRpc2FibGVkO2lmKCFkaXNhYmxlZCl7dGhpcy5tb2RpZnlEYXRlRmllbGQodHlwZSx2YWx1ZSk7dGhpcy5lbWl0U2VsZWN0UmFuZ2UodHlwZSk7dGhpcy5hZGp1c3RTcGlubmVyKHR5cGUsdmFsdWUpO319LGVtaXRTZWxlY3RSYW5nZTpmdW5jdGlvbiBlbWl0U2VsZWN0UmFuZ2UodHlwZSl7aWYodHlwZT09PSdob3Vycycpe3RoaXMuJGVtaXQoJ3NlbGVjdC1yYW5nZScsMCwyKTt9ZWxzZSBpZih0eXBlPT09J21pbnV0ZXMnKXt0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLDMsNSk7fWVsc2UgaWYodHlwZT09PSdzZWNvbmRzJyl7dGhpcy4kZW1pdCgnc2VsZWN0LXJhbmdlJyw2LDgpO310aGlzLmN1cnJlbnRTY3JvbGxiYXI9dHlwZTt9LGJpbmRTY3JvbGxFdmVudDpmdW5jdGlvbiBiaW5kU2Nyb2xsRXZlbnQoKXt2YXIgX3RoaXMyPXRoaXM7dmFyIGJpbmRGdW50aW9uPWZ1bmN0aW9uIGJpbmRGdW50aW9uKHR5cGUpe190aGlzMi4kcmVmc1t0eXBlXS53cmFwLm9uc2Nyb2xsPWZ1bmN0aW9uKGUpey8vIFRPRE86IHNjcm9sbCBpcyBlbWl0dGVkIHdoZW4gc2V0IHNjcm9sbFRvcCBwcm9ncmFtYXRpY2FsbHkKLy8gc2hvdWxkIGZpbmQgYmV0dGVyIHNvbHV0aW9ucyBpbiB0aGUgZnV0dXJlIQpfdGhpczIuaGFuZGxlU2Nyb2xsKHR5cGUsZSk7fTt9O2JpbmRGdW50aW9uKCdob3VycycpO2JpbmRGdW50aW9uKCdtaW51dGVzJyk7YmluZEZ1bnRpb24oJ3NlY29uZHMnKTt9LGhhbmRsZVNjcm9sbDpmdW5jdGlvbiBoYW5kbGVTY3JvbGwodHlwZSl7dmFyIHZhbHVlPU1hdGgubWluKE1hdGgucm91bmQoKHRoaXMuJHJlZnNbdHlwZV0ud3JhcC5zY3JvbGxUb3AtKHRoaXMuc2Nyb2xsQmFySGVpZ2h0KHR5cGUpKjAuNS0xMCkvdGhpcy50eXBlSXRlbUhlaWdodCh0eXBlKSszKS90aGlzLnR5cGVJdGVtSGVpZ2h0KHR5cGUpKSx0eXBlPT09J2hvdXJzJz8yMzo1OSk7dGhpcy5tb2RpZnlEYXRlRmllbGQodHlwZSx2YWx1ZSk7fSwvLyBOT1RFOiB1c2VkIGJ5IGRhdGV0aW1lIC8gZGF0ZS1yYW5nZSBwYW5lbAovLyAgICAgICByZW5hbWVkIGZyb20gYWRqdXN0U2Nyb2xsVG9wCi8vICAgICAgIHNob3VsZCB0cnkgdG8gcmVmYWN0b3J5IGl0CmFkanVzdFNwaW5uZXJzOmZ1bmN0aW9uIGFkanVzdFNwaW5uZXJzKCl7dGhpcy5hZGp1c3RTcGlubmVyKCdob3VycycsdGhpcy5ob3Vycyk7dGhpcy5hZGp1c3RTcGlubmVyKCdtaW51dGVzJyx0aGlzLm1pbnV0ZXMpO3RoaXMuYWRqdXN0U3Bpbm5lcignc2Vjb25kcycsdGhpcy5zZWNvbmRzKTt9LGFkanVzdEN1cnJlbnRTcGlubmVyOmZ1bmN0aW9uIGFkanVzdEN1cnJlbnRTcGlubmVyKHR5cGUpe3RoaXMuYWRqdXN0U3Bpbm5lcih0eXBlLHRoaXNbdHlwZV0pO30sYWRqdXN0U3Bpbm5lcjpmdW5jdGlvbiBhZGp1c3RTcGlubmVyKHR5cGUsdmFsdWUpe2lmKHRoaXMuYXJyb3dDb250cm9sKXJldHVybjt2YXIgZWw9dGhpcy4kcmVmc1t0eXBlXS53cmFwO2lmKGVsKXtlbC5zY3JvbGxUb3A9TWF0aC5tYXgoMCx2YWx1ZSp0aGlzLnR5cGVJdGVtSGVpZ2h0KHR5cGUpKTt9fSxzY3JvbGxEb3duOmZ1bmN0aW9uIHNjcm9sbERvd24oc3RlcCl7dmFyIF90aGlzMz10aGlzO2lmKCF0aGlzLmN1cnJlbnRTY3JvbGxiYXIpe3RoaXMuZW1pdFNlbGVjdFJhbmdlKCdob3VycycpO312YXIgbGFiZWw9dGhpcy5jdXJyZW50U2Nyb2xsYmFyO3ZhciBob3Vyc0xpc3Q9dGhpcy5ob3Vyc0xpc3Q7dmFyIG5vdz10aGlzW2xhYmVsXTtpZih0aGlzLmN1cnJlbnRTY3JvbGxiYXI9PT0naG91cnMnKXt2YXIgdG90YWw9TWF0aC5hYnMoc3RlcCk7c3RlcD1zdGVwPjA/MTotMTt2YXIgbGVuZ3RoPWhvdXJzTGlzdC5sZW5ndGg7d2hpbGUobGVuZ3RoLS0mJnRvdGFsKXtub3c9KG5vdytzdGVwK2hvdXJzTGlzdC5sZW5ndGgpJWhvdXJzTGlzdC5sZW5ndGg7aWYoaG91cnNMaXN0W25vd10pe2NvbnRpbnVlO310b3RhbC0tO31pZihob3Vyc0xpc3Rbbm93XSlyZXR1cm47fWVsc2V7bm93PShub3crc3RlcCs2MCklNjA7fXRoaXMubW9kaWZ5RGF0ZUZpZWxkKGxhYmVsLG5vdyk7dGhpcy5hZGp1c3RTcGlubmVyKGxhYmVsLG5vdyk7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMzLmVtaXRTZWxlY3RSYW5nZShfdGhpczMuY3VycmVudFNjcm9sbGJhcik7fSk7fSxhbVBtOmZ1bmN0aW9uIGFtUG0oaG91cil7dmFyIHNob3VsZFNob3dBbVBtPXRoaXMuYW1QbU1vZGUudG9Mb3dlckNhc2UoKT09PSdhJztpZighc2hvdWxkU2hvd0FtUG0pcmV0dXJuJyc7dmFyIGlzQ2FwaXRhbD10aGlzLmFtUG1Nb2RlPT09J0EnO3ZhciBjb250ZW50PWhvdXI8MTI/JyBhbSc6JyBwbSc7aWYoaXNDYXBpdGFsKWNvbnRlbnQ9Y29udGVudC50b1VwcGVyQ2FzZSgpO3JldHVybiBjb250ZW50O30sdHlwZUl0ZW1IZWlnaHQ6ZnVuY3Rpb24gdHlwZUl0ZW1IZWlnaHQodHlwZSl7cmV0dXJuIHRoaXMuJHJlZnNbdHlwZV0uJGVsLnF1ZXJ5U2VsZWN0b3IoJ2xpJykub2Zmc2V0SGVpZ2h0O30sc2Nyb2xsQmFySGVpZ2h0OmZ1bmN0aW9uIHNjcm9sbEJhckhlaWdodCh0eXBlKXtyZXR1cm4gdGhpcy4kcmVmc1t0eXBlXS4kZWwub2Zmc2V0SGVpZ2h0O319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy90aW1lLXNwaW5uZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGJhc2ljX3RpbWVfc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz10aW1lX3NwaW5uZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvdGltZS1zcGlubmVyLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHRpbWVfc3Bpbm5lcl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KGJhc2ljX3RpbWVfc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyx0aW1lX3NwaW5uZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xZmFjYWRlYl9yZW5kZXIsdGltZV9zcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWZhY2FkZWJfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciB0aW1lX3NwaW5uZXJfYXBpO310aW1lX3NwaW5uZXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvdGltZS1zcGlubmVyLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0aW1lX3NwaW5uZXI9dGltZV9zcGlubmVyX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0aW1ldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXttaXhpbnM6W2xvY2FsZV9kZWZhdWx0LmFdLGNvbXBvbmVudHM6e1RpbWVTcGlubmVyOnRpbWVfc3Bpbm5lcn0scHJvcHM6e3Zpc2libGU6Qm9vbGVhbix0aW1lQXJyb3dDb250cm9sOkJvb2xlYW59LHdhdGNoOnt2aXNpYmxlOmZ1bmN0aW9uIHZpc2libGUodmFsKXt2YXIgX3RoaXM9dGhpcztpZih2YWwpe3RoaXMub2xkVmFsdWU9dGhpcy52YWx1ZTt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBfdGhpcy4kcmVmcy5zcGlubmVyLmVtaXRTZWxlY3RSYW5nZSgnaG91cnMnKTt9KTt9ZWxzZXt0aGlzLm5lZWRJbml0QWRqdXN0PXRydWU7fX0sdmFsdWU6ZnVuY3Rpb24gdmFsdWUobmV3VmFsKXt2YXIgX3RoaXMyPXRoaXM7dmFyIGRhdGU9dm9pZCAwO2lmKG5ld1ZhbCBpbnN0YW5jZW9mIERhdGUpe2RhdGU9T2JqZWN0KGRhdGVfdXRpbF9bImxpbWl0VGltZVJhbmdlIl0pKG5ld1ZhbCx0aGlzLnNlbGVjdGFibGVSYW5nZSx0aGlzLmZvcm1hdCk7fWVsc2UgaWYoIW5ld1ZhbCl7ZGF0ZT10aGlzLmRlZmF1bHRWYWx1ZT9uZXcgRGF0ZSh0aGlzLmRlZmF1bHRWYWx1ZSk6bmV3IERhdGUoKTt9dGhpcy5kYXRlPWRhdGU7aWYodGhpcy52aXNpYmxlJiZ0aGlzLm5lZWRJbml0QWRqdXN0KXt0aGlzLiRuZXh0VGljayhmdW5jdGlvbihfKXtyZXR1cm4gX3RoaXMyLmFkanVzdFNwaW5uZXJzKCk7fSk7dGhpcy5uZWVkSW5pdEFkanVzdD1mYWxzZTt9fSxzZWxlY3RhYmxlUmFuZ2U6ZnVuY3Rpb24gc2VsZWN0YWJsZVJhbmdlKHZhbCl7dGhpcy4kcmVmcy5zcGlubmVyLnNlbGVjdGFibGVSYW5nZT12YWw7fSxkZWZhdWx0VmFsdWU6ZnVuY3Rpb24gZGVmYXVsdFZhbHVlKHZhbCl7aWYoIU9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkodGhpcy52YWx1ZSkpe3RoaXMuZGF0ZT12YWw/bmV3IERhdGUodmFsKTpuZXcgRGF0ZSgpO319fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57cG9wcGVyQ2xhc3M6JycsZm9ybWF0OidISDptbTpzcycsdmFsdWU6JycsZGVmYXVsdFZhbHVlOm51bGwsZGF0ZTpuZXcgRGF0ZSgpLG9sZFZhbHVlOm5ldyBEYXRlKCksc2VsZWN0YWJsZVJhbmdlOltdLHNlbGVjdGlvblJhbmdlOlswLDJdLGRpc2FibGVkOmZhbHNlLGFycm93Q29udHJvbDpmYWxzZSxuZWVkSW5pdEFkanVzdDp0cnVlfTt9LGNvbXB1dGVkOntzaG93U2Vjb25kczpmdW5jdGlvbiBzaG93U2Vjb25kcygpe3JldHVybih0aGlzLmZvcm1hdHx8JycpLmluZGV4T2YoJ3NzJykhPT0tMTt9LHVzZUFycm93OmZ1bmN0aW9uIHVzZUFycm93KCl7cmV0dXJuIHRoaXMuYXJyb3dDb250cm9sfHx0aGlzLnRpbWVBcnJvd0NvbnRyb2x8fGZhbHNlO30sYW1QbU1vZGU6ZnVuY3Rpb24gYW1QbU1vZGUoKXtpZigodGhpcy5mb3JtYXR8fCcnKS5pbmRleE9mKCdBJykhPT0tMSlyZXR1cm4nQSc7aWYoKHRoaXMuZm9ybWF0fHwnJykuaW5kZXhPZignYScpIT09LTEpcmV0dXJuJ2EnO3JldHVybicnO319LG1ldGhvZHM6e2hhbmRsZUNhbmNlbDpmdW5jdGlvbiBoYW5kbGVDYW5jZWwoKXt0aGlzLiRlbWl0KCdwaWNrJyx0aGlzLm9sZFZhbHVlLGZhbHNlKTt9LGhhbmRsZUNoYW5nZTpmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZGF0ZSl7Ly8gdGhpcy52aXNpYmxlIGF2b2lkcyBlZGdlIGNhc2VzLCB3aGVuIHVzZSBzY3JvbGxzIGR1cmluZyBwYW5lbCBjbG9zaW5nIGFuaW1hdGlvbgppZih0aGlzLnZpc2libGUpe3RoaXMuZGF0ZT1PYmplY3QoZGF0ZV91dGlsX1siY2xlYXJNaWxsaXNlY29uZHMiXSkoZGF0ZSk7Ly8gaWYgZGF0ZSBpcyBvdXQgb2YgcmFuZ2UsIGRvIG5vdCBlbWl0CmlmKHRoaXMuaXNWYWxpZFZhbHVlKHRoaXMuZGF0ZSkpe3RoaXMuJGVtaXQoJ3BpY2snLHRoaXMuZGF0ZSx0cnVlKTt9fX0sc2V0U2VsZWN0aW9uUmFuZ2U6ZnVuY3Rpb24gc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsZW5kKXt0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLHN0YXJ0LGVuZCk7dGhpcy5zZWxlY3Rpb25SYW5nZT1bc3RhcnQsZW5kXTt9LGhhbmRsZUNvbmZpcm06ZnVuY3Rpb24gaGFuZGxlQ29uZmlybSgpe3ZhciB2aXNpYmxlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTpmYWxzZTt2YXIgZmlyc3Q9YXJndW1lbnRzWzFdO2lmKGZpcnN0KXJldHVybjt2YXIgZGF0ZT1PYmplY3QoZGF0ZV91dGlsX1siY2xlYXJNaWxsaXNlY29uZHMiXSkoT2JqZWN0KGRhdGVfdXRpbF9bImxpbWl0VGltZVJhbmdlIl0pKHRoaXMuZGF0ZSx0aGlzLnNlbGVjdGFibGVSYW5nZSx0aGlzLmZvcm1hdCkpO3RoaXMuJGVtaXQoJ3BpY2snLGRhdGUsdmlzaWJsZSxmaXJzdCk7fSxoYW5kbGVLZXlkb3duOmZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXZlbnQpe3ZhciBrZXlDb2RlPWV2ZW50LmtleUNvZGU7dmFyIG1hcHBpbmc9ezM4Oi0xLDQwOjEsMzc6LTEsMzk6MX07Ly8gTGVmdCBvciBSaWdodAppZihrZXlDb2RlPT09Mzd8fGtleUNvZGU9PT0zOSl7dmFyIHN0ZXA9bWFwcGluZ1trZXlDb2RlXTt0aGlzLmNoYW5nZVNlbGVjdGlvblJhbmdlKHN0ZXApO2V2ZW50LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuO30vLyBVcCBvciBEb3duCmlmKGtleUNvZGU9PT0zOHx8a2V5Q29kZT09PTQwKXt2YXIgX3N0ZXA9bWFwcGluZ1trZXlDb2RlXTt0aGlzLiRyZWZzLnNwaW5uZXIuc2Nyb2xsRG93bihfc3RlcCk7ZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm47fX0saXNWYWxpZFZhbHVlOmZ1bmN0aW9uIGlzVmFsaWRWYWx1ZShkYXRlKXtyZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bInRpbWVXaXRoaW5SYW5nZSJdKShkYXRlLHRoaXMuc2VsZWN0YWJsZVJhbmdlLHRoaXMuZm9ybWF0KTt9LGFkanVzdFNwaW5uZXJzOmZ1bmN0aW9uIGFkanVzdFNwaW5uZXJzKCl7cmV0dXJuIHRoaXMuJHJlZnMuc3Bpbm5lci5hZGp1c3RTcGlubmVycygpO30sY2hhbmdlU2VsZWN0aW9uUmFuZ2U6ZnVuY3Rpb24gY2hhbmdlU2VsZWN0aW9uUmFuZ2Uoc3RlcCl7dmFyIGxpc3Q9WzAsM10uY29uY2F0KHRoaXMuc2hvd1NlY29uZHM/WzZdOltdKTt2YXIgbWFwcGluZz1bJ2hvdXJzJywnbWludXRlcyddLmNvbmNhdCh0aGlzLnNob3dTZWNvbmRzP1snc2Vjb25kcyddOltdKTt2YXIgaW5kZXg9bGlzdC5pbmRleE9mKHRoaXMuc2VsZWN0aW9uUmFuZ2VbMF0pO3ZhciBuZXh0PShpbmRleCtzdGVwK2xpc3QubGVuZ3RoKSVsaXN0Lmxlbmd0aDt0aGlzLiRyZWZzLnNwaW5uZXIuZW1pdFNlbGVjdFJhbmdlKG1hcHBpbmdbbmV4dF0pO319LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3ZhciBfdGhpczM9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBfdGhpczMuaGFuZGxlQ29uZmlybSh0cnVlLHRydWUpO30pO3RoaXMuJGVtaXQoJ21vdW50ZWQnKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYW5lbF90aW1ldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXRpbWV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciB0aW1lX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQocGFuZWxfdGltZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyx0aW1ldnVlX3R5cGVfdGVtcGxhdGVfaWRfM2Q5MzkwODlfcmVuZGVyLHRpbWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDkzOTA4OV9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHRpbWVfYXBpO310aW1lX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhbmVsX3RpbWU9dGltZV9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy95ZWFyLXRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jODZhYjVlMCYKdmFyIHllYXJfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jODZhYjVlMF9yZW5kZXI9ZnVuY3Rpb24geWVhcl90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2M4NmFiNWUwX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygidGFibGUiLHtzdGF0aWNDbGFzczoiZWwteWVhci10YWJsZSIsb246e2NsaWNrOl92bS5oYW5kbGVZZWFyVGFibGVDbGlja319LFtfYygidGJvZHkiLFtfYygidHIiLFtfYygidGQiLHtzdGF0aWNDbGFzczoiYXZhaWxhYmxlIixjbGFzczpfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIrMCl9LFtfYygiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhcikpXSldKSxfYygidGQiLHtzdGF0aWNDbGFzczoiYXZhaWxhYmxlIixjbGFzczpfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIrMSl9LFtfYygiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhcisxKSldKV0pLF9jKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOl92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhcisyKX0sW19jKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbX3ZtLl92KF92bS5fcyhfdm0uc3RhcnRZZWFyKzIpKV0pXSksX2MoInRkIix7c3RhdGljQ2xhc3M6ImF2YWlsYWJsZSIsY2xhc3M6X3ZtLmdldENlbGxTdHlsZShfdm0uc3RhcnRZZWFyKzMpfSxbX2MoImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIrMykpXSldKV0pLF9jKCJ0ciIsW19jKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOl92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhcis0KX0sW19jKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbX3ZtLl92KF92bS5fcyhfdm0uc3RhcnRZZWFyKzQpKV0pXSksX2MoInRkIix7c3RhdGljQ2xhc3M6ImF2YWlsYWJsZSIsY2xhc3M6X3ZtLmdldENlbGxTdHlsZShfdm0uc3RhcnRZZWFyKzUpfSxbX2MoImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIrNSkpXSldKSxfYygidGQiLHtzdGF0aWNDbGFzczoiYXZhaWxhYmxlIixjbGFzczpfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIrNil9LFtfYygiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhcis2KSldKV0pLF9jKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOl92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhcis3KX0sW19jKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbX3ZtLl92KF92bS5fcyhfdm0uc3RhcnRZZWFyKzcpKV0pXSldKSxfYygidHIiLFtfYygidGQiLHtzdGF0aWNDbGFzczoiYXZhaWxhYmxlIixjbGFzczpfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIrOCl9LFtfYygiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhcis4KSldKV0pLF9jKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOl92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhcis5KX0sW19jKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbX3ZtLl92KF92bS5fcyhfdm0uc3RhcnRZZWFyKzkpKV0pXSksX2MoInRkIiksX2MoInRkIildKV0pXSk7fTt2YXIgeWVhcl90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2M4NmFiNWUwX3N0YXRpY1JlbmRlckZucz1bXTt5ZWFyX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfYzg2YWI1ZTBfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy95ZWFyLXRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jODZhYjVlMCYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3llYXItdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwp2YXIgeWVhcl90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2RhdGVzSW5ZZWFyPWZ1bmN0aW9uIGRhdGVzSW5ZZWFyKHllYXIpe3ZhciBudW1PZkRheXM9T2JqZWN0KGRhdGVfdXRpbF9bImdldERheUNvdW50T2ZZZWFyIl0pKHllYXIpO3ZhciBmaXJzdERheT1uZXcgRGF0ZSh5ZWFyLDAsMSk7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJyYW5nZSJdKShudW1PZkRheXMpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bIm5leHREYXRlIl0pKGZpcnN0RGF5LG4pO30pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB5ZWFyX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtwcm9wczp7ZGlzYWJsZWREYXRlOnt9LHZhbHVlOnt9LGRlZmF1bHRWYWx1ZTp7dmFsaWRhdG9yOmZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpey8vIG51bGwgb3IgdmFsaWQgRGF0ZSBPYmplY3QKcmV0dXJuIHZhbD09PW51bGx8fHZhbCBpbnN0YW5jZW9mIERhdGUmJk9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkodmFsKTt9fSxkYXRlOnt9fSxjb21wdXRlZDp7c3RhcnRZZWFyOmZ1bmN0aW9uIHN0YXJ0WWVhcigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpLzEwKSoxMDt9fSxtZXRob2RzOntnZXRDZWxsU3R5bGU6ZnVuY3Rpb24gZ2V0Q2VsbFN0eWxlKHllYXIpe3ZhciBzdHlsZT17fTt2YXIgdG9kYXk9bmV3IERhdGUoKTtzdHlsZS5kaXNhYmxlZD10eXBlb2YgdGhpcy5kaXNhYmxlZERhdGU9PT0nZnVuY3Rpb24nP3llYXJfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19kYXRlc0luWWVhcih5ZWFyKS5ldmVyeSh0aGlzLmRpc2FibGVkRGF0ZSk6ZmFsc2U7c3R5bGUuY3VycmVudD1PYmplY3QodXRpbF9bImFycmF5RmluZEluZGV4Il0pKE9iamVjdCh1dGlsX1siY29lcmNlVHJ1dGh5VmFsdWVUb0FycmF5Il0pKHRoaXMudmFsdWUpLGZ1bmN0aW9uKGRhdGUpe3JldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk9PT15ZWFyO30pPj0wO3N0eWxlLnRvZGF5PXRvZGF5LmdldEZ1bGxZZWFyKCk9PT15ZWFyO3N0eWxlLmRlZmF1bHQ9dGhpcy5kZWZhdWx0VmFsdWUmJnRoaXMuZGVmYXVsdFZhbHVlLmdldEZ1bGxZZWFyKCk9PT15ZWFyO3JldHVybiBzdHlsZTt9LGhhbmRsZVllYXJUYWJsZUNsaWNrOmZ1bmN0aW9uIGhhbmRsZVllYXJUYWJsZUNsaWNrKGV2ZW50KXt2YXIgdGFyZ2V0PWV2ZW50LnRhcmdldDtpZih0YXJnZXQudGFnTmFtZT09PSdBJyl7aWYoT2JqZWN0KGRvbV9bImhhc0NsYXNzIl0pKHRhcmdldC5wYXJlbnROb2RlLCdkaXNhYmxlZCcpKXJldHVybjt2YXIgeWVhcj10YXJnZXQudGV4dENvbnRlbnR8fHRhcmdldC5pbm5lclRleHQ7dGhpcy4kZW1pdCgncGljaycsTnVtYmVyKHllYXIpKTt9fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3llYXItdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGJhc2ljX3llYXJfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189eWVhcl90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy95ZWFyLXRhYmxlLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHllYXJfdGFibGVfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChiYXNpY195ZWFyX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHllYXJfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jODZhYjVlMF9yZW5kZXIseWVhcl90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2M4NmFiNWUwX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgeWVhcl90YWJsZV9hcGk7fXllYXJfdGFibGVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMveWVhci10YWJsZS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgeWVhcl90YWJsZT15ZWFyX3RhYmxlX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL21vbnRoLXRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NTRkNGY0MiYKdmFyIG1vbnRoX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNjU0ZDRmNDJfcmVuZGVyPWZ1bmN0aW9uIG1vbnRoX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNjU0ZDRmNDJfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJ0YWJsZSIse3N0YXRpY0NsYXNzOiJlbC1tb250aC10YWJsZSIsb246e2NsaWNrOl92bS5oYW5kbGVNb250aFRhYmxlQ2xpY2ssbW91c2Vtb3ZlOl92bS5oYW5kbGVNb3VzZU1vdmV9fSxbX2MoInRib2R5Iixfdm0uX2woX3ZtLnJvd3MsZnVuY3Rpb24ocm93LGtleSl7cmV0dXJuIF9jKCJ0ciIse2tleTprZXl9LF92bS5fbChyb3csZnVuY3Rpb24oY2VsbCxrZXkpe3JldHVybiBfYygidGQiLHtrZXk6a2V5LGNsYXNzOl92bS5nZXRDZWxsU3R5bGUoY2VsbCl9LFtfYygiZGl2IixbX2MoImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtfdm0uX3YoX3ZtLl9zKF92bS50KCJlbC5kYXRlcGlja2VyLm1vbnRocy4iK192bS5tb250aHNbY2VsbC50ZXh0XSkpKV0pXSldKTt9KSwwKTt9KSwwKV0pO307dmFyIG1vbnRoX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNjU0ZDRmNDJfc3RhdGljUmVuZGVyRm5zPVtdO21vbnRoX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNjU0ZDRmNDJfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjU0ZDRmNDImCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBtb250aF90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2RhdGVzSW5Nb250aD1mdW5jdGlvbiBkYXRlc0luTW9udGgoeWVhcixtb250aCl7dmFyIG51bU9mRGF5cz1PYmplY3QoZGF0ZV91dGlsX1siZ2V0RGF5Q291bnRPZk1vbnRoIl0pKHllYXIsbW9udGgpO3ZhciBmaXJzdERheT1uZXcgRGF0ZSh5ZWFyLG1vbnRoLDEpO3JldHVybiBPYmplY3QoZGF0ZV91dGlsX1sicmFuZ2UiXSkobnVtT2ZEYXlzKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJuZXh0RGF0ZSJdKShmaXJzdERheSxuKTt9KTt9O3ZhciBjbGVhckRhdGU9ZnVuY3Rpb24gY2xlYXJEYXRlKGRhdGUpe3JldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksZGF0ZS5nZXRNb250aCgpKTt9O3ZhciBnZXRNb250aFRpbWVzdGFtcD1mdW5jdGlvbiBnZXRNb250aFRpbWVzdGFtcCh0aW1lKXtpZih0eXBlb2YgdGltZT09PSdudW1iZXInfHx0eXBlb2YgdGltZT09PSdzdHJpbmcnKXtyZXR1cm4gY2xlYXJEYXRlKG5ldyBEYXRlKHRpbWUpKS5nZXRUaW1lKCk7fWVsc2UgaWYodGltZSBpbnN0YW5jZW9mIERhdGUpe3JldHVybiBjbGVhckRhdGUodGltZSkuZ2V0VGltZSgpO31lbHNle3JldHVybiBOYU47fX07LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBtb250aF90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17cHJvcHM6e2Rpc2FibGVkRGF0ZTp7fSx2YWx1ZTp7fSxzZWxlY3Rpb25Nb2RlOntkZWZhdWx0Oidtb250aCd9LG1pbkRhdGU6e30sbWF4RGF0ZTp7fSxkZWZhdWx0VmFsdWU6e3ZhbGlkYXRvcjpmdW5jdGlvbiB2YWxpZGF0b3IodmFsKXsvLyBudWxsIG9yIHZhbGlkIERhdGUgT2JqZWN0CnJldHVybiB2YWw9PT1udWxsfHxPYmplY3QoZGF0ZV91dGlsX1siaXNEYXRlIl0pKHZhbCl8fEFycmF5LmlzQXJyYXkodmFsKSYmdmFsLmV2ZXJ5KGRhdGVfdXRpbF9bImlzRGF0ZSJdKTt9fSxkYXRlOnt9LHJhbmdlU3RhdGU6e2RlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm57ZW5kRGF0ZTpudWxsLHNlbGVjdGluZzpmYWxzZX07fX19LG1peGluczpbbG9jYWxlX2RlZmF1bHQuYV0sd2F0Y2g6eydyYW5nZVN0YXRlLmVuZERhdGUnOmZ1bmN0aW9uIHJhbmdlU3RhdGVFbmREYXRlKG5ld1ZhbCl7dGhpcy5tYXJrUmFuZ2UodGhpcy5taW5EYXRlLG5ld1ZhbCk7fSxtaW5EYXRlOmZ1bmN0aW9uIG1pbkRhdGUobmV3VmFsLG9sZFZhbCl7aWYoZ2V0TW9udGhUaW1lc3RhbXAobmV3VmFsKSE9PWdldE1vbnRoVGltZXN0YW1wKG9sZFZhbCkpe3RoaXMubWFya1JhbmdlKHRoaXMubWluRGF0ZSx0aGlzLm1heERhdGUpO319LG1heERhdGU6ZnVuY3Rpb24gbWF4RGF0ZShuZXdWYWwsb2xkVmFsKXtpZihnZXRNb250aFRpbWVzdGFtcChuZXdWYWwpIT09Z2V0TW9udGhUaW1lc3RhbXAob2xkVmFsKSl7dGhpcy5tYXJrUmFuZ2UodGhpcy5taW5EYXRlLHRoaXMubWF4RGF0ZSk7fX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnttb250aHM6WydqYW4nLCdmZWInLCdtYXInLCdhcHInLCdtYXknLCdqdW4nLCdqdWwnLCdhdWcnLCdzZXAnLCdvY3QnLCdub3YnLCdkZWMnXSx0YWJsZVJvd3M6W1tdLFtdLFtdXSxsYXN0Um93Om51bGwsbGFzdENvbHVtbjpudWxsfTt9LG1ldGhvZHM6e2NlbGxNYXRjaGVzRGF0ZTpmdW5jdGlvbiBjZWxsTWF0Y2hlc0RhdGUoY2VsbCxkYXRlKXt2YXIgdmFsdWU9bmV3IERhdGUoZGF0ZSk7cmV0dXJuIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpPT09dmFsdWUuZ2V0RnVsbFllYXIoKSYmTnVtYmVyKGNlbGwudGV4dCk9PT12YWx1ZS5nZXRNb250aCgpO30sZ2V0Q2VsbFN0eWxlOmZ1bmN0aW9uIGdldENlbGxTdHlsZShjZWxsKXt2YXIgX3RoaXM9dGhpczt2YXIgc3R5bGU9e307dmFyIHllYXI9dGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7dmFyIHRvZGF5PW5ldyBEYXRlKCk7dmFyIG1vbnRoPWNlbGwudGV4dDt2YXIgZGVmYXVsdFZhbHVlPXRoaXMuZGVmYXVsdFZhbHVlP0FycmF5LmlzQXJyYXkodGhpcy5kZWZhdWx0VmFsdWUpP3RoaXMuZGVmYXVsdFZhbHVlOlt0aGlzLmRlZmF1bHRWYWx1ZV06W107c3R5bGUuZGlzYWJsZWQ9dHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlPT09J2Z1bmN0aW9uJz9tb250aF90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2RhdGVzSW5Nb250aCh5ZWFyLG1vbnRoKS5ldmVyeSh0aGlzLmRpc2FibGVkRGF0ZSk6ZmFsc2U7c3R5bGUuY3VycmVudD1PYmplY3QodXRpbF9bImFycmF5RmluZEluZGV4Il0pKE9iamVjdCh1dGlsX1siY29lcmNlVHJ1dGh5VmFsdWVUb0FycmF5Il0pKHRoaXMudmFsdWUpLGZ1bmN0aW9uKGRhdGUpe3JldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk9PT15ZWFyJiZkYXRlLmdldE1vbnRoKCk9PT1tb250aDt9KT49MDtzdHlsZS50b2RheT10b2RheS5nZXRGdWxsWWVhcigpPT09eWVhciYmdG9kYXkuZ2V0TW9udGgoKT09PW1vbnRoO3N0eWxlLmRlZmF1bHQ9ZGVmYXVsdFZhbHVlLnNvbWUoZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIF90aGlzLmNlbGxNYXRjaGVzRGF0ZShjZWxsLGRhdGUpO30pO2lmKGNlbGwuaW5SYW5nZSl7c3R5bGVbJ2luLXJhbmdlJ109dHJ1ZTtpZihjZWxsLnN0YXJ0KXtzdHlsZVsnc3RhcnQtZGF0ZSddPXRydWU7fWlmKGNlbGwuZW5kKXtzdHlsZVsnZW5kLWRhdGUnXT10cnVlO319cmV0dXJuIHN0eWxlO30sZ2V0TW9udGhPZkNlbGw6ZnVuY3Rpb24gZ2V0TW9udGhPZkNlbGwobW9udGgpe3ZhciB5ZWFyPXRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpO3JldHVybiBuZXcgRGF0ZSh5ZWFyLG1vbnRoLDEpO30sbWFya1JhbmdlOmZ1bmN0aW9uIG1hcmtSYW5nZShtaW5EYXRlLG1heERhdGUpe21pbkRhdGU9Z2V0TW9udGhUaW1lc3RhbXAobWluRGF0ZSk7bWF4RGF0ZT1nZXRNb250aFRpbWVzdGFtcChtYXhEYXRlKXx8bWluRGF0ZTt2YXIgX3JlZj1bTWF0aC5taW4obWluRGF0ZSxtYXhEYXRlKSxNYXRoLm1heChtaW5EYXRlLG1heERhdGUpXTttaW5EYXRlPV9yZWZbMF07bWF4RGF0ZT1fcmVmWzFdO3ZhciByb3dzPXRoaXMucm93cztmb3IodmFyIGk9MCxrPXJvd3MubGVuZ3RoO2k8aztpKyspe3ZhciByb3c9cm93c1tpXTtmb3IodmFyIGo9MCxsPXJvdy5sZW5ndGg7ajxsO2orKyl7dmFyIGNlbGw9cm93W2pdO3ZhciBpbmRleD1pKjQrajt2YXIgdGltZT1uZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSxpbmRleCkuZ2V0VGltZSgpO2NlbGwuaW5SYW5nZT1taW5EYXRlJiZ0aW1lPj1taW5EYXRlJiZ0aW1lPD1tYXhEYXRlO2NlbGwuc3RhcnQ9bWluRGF0ZSYmdGltZT09PW1pbkRhdGU7Y2VsbC5lbmQ9bWF4RGF0ZSYmdGltZT09PW1heERhdGU7fX19LGhhbmRsZU1vdXNlTW92ZTpmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZXZlbnQpe2lmKCF0aGlzLnJhbmdlU3RhdGUuc2VsZWN0aW5nKXJldHVybjt2YXIgdGFyZ2V0PWV2ZW50LnRhcmdldDtpZih0YXJnZXQudGFnTmFtZT09PSdBJyl7dGFyZ2V0PXRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGU7fWlmKHRhcmdldC50YWdOYW1lPT09J0RJVicpe3RhcmdldD10YXJnZXQucGFyZW50Tm9kZTt9aWYodGFyZ2V0LnRhZ05hbWUhPT0nVEQnKXJldHVybjt2YXIgcm93PXRhcmdldC5wYXJlbnROb2RlLnJvd0luZGV4O3ZhciBjb2x1bW49dGFyZ2V0LmNlbGxJbmRleDsvLyBjYW4gbm90IHNlbGVjdCBkaXNhYmxlZCBkYXRlCmlmKHRoaXMucm93c1tyb3ddW2NvbHVtbl0uZGlzYWJsZWQpcmV0dXJuOy8vIG9ubHkgdXBkYXRlIHJhbmdlU3RhdGUgd2hlbiBtb3VzZSBtb3ZlcyB0byBhIG5ldyBjZWxsCi8vIHRoaXMgYXZvaWRzIGZyZXF1ZW50IERhdGUgb2JqZWN0IGNyZWF0aW9uIGFuZCBpbXByb3ZlcyBwZXJmb3JtYW5jZQppZihyb3chPT10aGlzLmxhc3RSb3d8fGNvbHVtbiE9PXRoaXMubGFzdENvbHVtbil7dGhpcy5sYXN0Um93PXJvdzt0aGlzLmxhc3RDb2x1bW49Y29sdW1uO3RoaXMuJGVtaXQoJ2NoYW5nZXJhbmdlJyx7bWluRGF0ZTp0aGlzLm1pbkRhdGUsbWF4RGF0ZTp0aGlzLm1heERhdGUscmFuZ2VTdGF0ZTp7c2VsZWN0aW5nOnRydWUsZW5kRGF0ZTp0aGlzLmdldE1vbnRoT2ZDZWxsKHJvdyo0K2NvbHVtbil9fSk7fX0saGFuZGxlTW9udGhUYWJsZUNsaWNrOmZ1bmN0aW9uIGhhbmRsZU1vbnRoVGFibGVDbGljayhldmVudCl7dmFyIHRhcmdldD1ldmVudC50YXJnZXQ7aWYodGFyZ2V0LnRhZ05hbWU9PT0nQScpe3RhcmdldD10YXJnZXQucGFyZW50Tm9kZS5wYXJlbnROb2RlO31pZih0YXJnZXQudGFnTmFtZT09PSdESVYnKXt0YXJnZXQ9dGFyZ2V0LnBhcmVudE5vZGU7fWlmKHRhcmdldC50YWdOYW1lIT09J1REJylyZXR1cm47aWYoT2JqZWN0KGRvbV9bImhhc0NsYXNzIl0pKHRhcmdldCwnZGlzYWJsZWQnKSlyZXR1cm47dmFyIGNvbHVtbj10YXJnZXQuY2VsbEluZGV4O3ZhciByb3c9dGFyZ2V0LnBhcmVudE5vZGUucm93SW5kZXg7dmFyIG1vbnRoPXJvdyo0K2NvbHVtbjt2YXIgbmV3RGF0ZT10aGlzLmdldE1vbnRoT2ZDZWxsKG1vbnRoKTtpZih0aGlzLnNlbGVjdGlvbk1vZGU9PT0ncmFuZ2UnKXtpZighdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZyl7dGhpcy4kZW1pdCgncGljaycse21pbkRhdGU6bmV3RGF0ZSxtYXhEYXRlOm51bGx9KTt0aGlzLnJhbmdlU3RhdGUuc2VsZWN0aW5nPXRydWU7fWVsc2V7aWYobmV3RGF0ZT49dGhpcy5taW5EYXRlKXt0aGlzLiRlbWl0KCdwaWNrJyx7bWluRGF0ZTp0aGlzLm1pbkRhdGUsbWF4RGF0ZTpuZXdEYXRlfSk7fWVsc2V7dGhpcy4kZW1pdCgncGljaycse21pbkRhdGU6bmV3RGF0ZSxtYXhEYXRlOnRoaXMubWluRGF0ZX0pO310aGlzLnJhbmdlU3RhdGUuc2VsZWN0aW5nPWZhbHNlO319ZWxzZXt0aGlzLiRlbWl0KCdwaWNrJyxtb250aCk7fX19LGNvbXB1dGVkOntyb3dzOmZ1bmN0aW9uIHJvd3MoKXt2YXIgX3RoaXMyPXRoaXM7Ly8gVE9ETzogcmVmYWN0b3J5IHJvd3MgLyBnZXRDZWxsQ2xhc3Nlcwp2YXIgcm93cz10aGlzLnRhYmxlUm93czt2YXIgZGlzYWJsZWREYXRlPXRoaXMuZGlzYWJsZWREYXRlO3ZhciBzZWxlY3RlZERhdGU9W107dmFyIG5vdz1nZXRNb250aFRpbWVzdGFtcChuZXcgRGF0ZSgpKTtmb3IodmFyIGk9MDtpPDM7aSsrKXt2YXIgcm93PXJvd3NbaV07dmFyIF9sb29wPWZ1bmN0aW9uIF9sb29wKGope3ZhciBjZWxsPXJvd1tqXTtpZighY2VsbCl7Y2VsbD17cm93OmksY29sdW1uOmosdHlwZTonbm9ybWFsJyxpblJhbmdlOmZhbHNlLHN0YXJ0OmZhbHNlLGVuZDpmYWxzZX07fWNlbGwudHlwZT0nbm9ybWFsJzt2YXIgaW5kZXg9aSo0K2o7dmFyIHRpbWU9bmV3IERhdGUoX3RoaXMyLmRhdGUuZ2V0RnVsbFllYXIoKSxpbmRleCkuZ2V0VGltZSgpO2NlbGwuaW5SYW5nZT10aW1lPj1nZXRNb250aFRpbWVzdGFtcChfdGhpczIubWluRGF0ZSkmJnRpbWU8PWdldE1vbnRoVGltZXN0YW1wKF90aGlzMi5tYXhEYXRlKTtjZWxsLnN0YXJ0PV90aGlzMi5taW5EYXRlJiZ0aW1lPT09Z2V0TW9udGhUaW1lc3RhbXAoX3RoaXMyLm1pbkRhdGUpO2NlbGwuZW5kPV90aGlzMi5tYXhEYXRlJiZ0aW1lPT09Z2V0TW9udGhUaW1lc3RhbXAoX3RoaXMyLm1heERhdGUpO3ZhciBpc1RvZGF5PXRpbWU9PT1ub3c7aWYoaXNUb2RheSl7Y2VsbC50eXBlPSd0b2RheSc7fWNlbGwudGV4dD1pbmRleDt2YXIgY2VsbERhdGU9bmV3IERhdGUodGltZSk7Y2VsbC5kaXNhYmxlZD10eXBlb2YgZGlzYWJsZWREYXRlPT09J2Z1bmN0aW9uJyYmZGlzYWJsZWREYXRlKGNlbGxEYXRlKTtjZWxsLnNlbGVjdGVkPU9iamVjdCh1dGlsX1siYXJyYXlGaW5kIl0pKHNlbGVjdGVkRGF0ZSxmdW5jdGlvbihkYXRlKXtyZXR1cm4gZGF0ZS5nZXRUaW1lKCk9PT1jZWxsRGF0ZS5nZXRUaW1lKCk7fSk7X3RoaXMyLiRzZXQocm93LGosY2VsbCk7fTtmb3IodmFyIGo9MDtqPDQ7aisrKXtfbG9vcChqKTt9fXJldHVybiByb3dzO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgYmFzaWNfbW9udGhfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189bW9udGhfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvbW9udGgtdGFibGUudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgbW9udGhfdGFibGVfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChiYXNpY19tb250aF90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtb250aF90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY1NGQ0ZjQyX3JlbmRlcixtb250aF90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY1NGQ0ZjQyX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgbW9udGhfdGFibGVfYXBpO31tb250aF90YWJsZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbW9udGhfdGFibGU9bW9udGhfdGFibGVfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvZGF0ZS10YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQxZjMzNDEmCnZhciBkYXRlX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQxZjMzNDFfcmVuZGVyPWZ1bmN0aW9uIGRhdGVfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDFmMzM0MV9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInRhYmxlIix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtdGFibGUiLGNsYXNzOnsiaXMtd2Vlay1tb2RlIjpfdm0uc2VsZWN0aW9uTW9kZT09PSJ3ZWVrIn0sYXR0cnM6e2NlbGxzcGFjaW5nOiIwIixjZWxscGFkZGluZzoiMCJ9LG9uOntjbGljazpfdm0uaGFuZGxlQ2xpY2ssbW91c2Vtb3ZlOl92bS5oYW5kbGVNb3VzZU1vdmV9fSxbX2MoInRib2R5IixbX2MoInRyIixbX3ZtLnNob3dXZWVrTnVtYmVyP19jKCJ0aCIsW192bS5fdihfdm0uX3MoX3ZtLnQoImVsLmRhdGVwaWNrZXIud2VlayIpKSldKTpfdm0uX2UoKSxfdm0uX2woX3ZtLldFRUtTLGZ1bmN0aW9uKHdlZWssa2V5KXtyZXR1cm4gX2MoInRoIix7a2V5OmtleX0sW192bS5fdihfdm0uX3MoX3ZtLnQoImVsLmRhdGVwaWNrZXIud2Vla3MuIit3ZWVrKSkpXSk7fSldLDIpLF92bS5fbChfdm0ucm93cyxmdW5jdGlvbihyb3csa2V5KXtyZXR1cm4gX2MoInRyIix7a2V5OmtleSxzdGF0aWNDbGFzczoiZWwtZGF0ZS10YWJsZV9fcm93IixjbGFzczp7Y3VycmVudDpfdm0uaXNXZWVrQWN0aXZlKHJvd1sxXSl9fSxfdm0uX2wocm93LGZ1bmN0aW9uKGNlbGwsa2V5KXtyZXR1cm4gX2MoInRkIix7a2V5OmtleSxjbGFzczpfdm0uZ2V0Q2VsbENsYXNzZXMoY2VsbCl9LFtfYygiZGl2IixbX2MoInNwYW4iLFtfdm0uX3YoIlxuICAgICAgICAgICIrX3ZtLl9zKGNlbGwudGV4dCkrIlxuICAgICAgICAiKV0pXSldKTt9KSwwKTt9KV0sMildKTt9O3ZhciBkYXRlX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQxZjMzNDFfc3RhdGljUmVuZGVyRm5zPVtdO2RhdGVfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDFmMzM0MV9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL2RhdGUtdGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkMWYzMzQxJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvZGF0ZS10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBfV0VFS1M9WydzdW4nLCdtb24nLCd0dWUnLCd3ZWQnLCd0aHUnLCdmcmknLCdzYXQnXTt2YXIgZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXA9ZnVuY3Rpb24gZ2V0RGF0ZVRpbWVzdGFtcCh0aW1lKXtpZih0eXBlb2YgdGltZT09PSdudW1iZXInfHx0eXBlb2YgdGltZT09PSdzdHJpbmcnKXtyZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bImNsZWFyVGltZSJdKShuZXcgRGF0ZSh0aW1lKSkuZ2V0VGltZSgpO31lbHNlIGlmKHRpbWUgaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bImNsZWFyVGltZSJdKSh0aW1lKS5nZXRUaW1lKCk7fWVsc2V7cmV0dXJuIE5hTjt9fTsvLyByZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgYHByZWRgIGZyb20gYXJyCi8vIHJldHVybiBhIG5ldyBhcnJheSBpZiBtb2RpZmljYXRpb24gb2NjdXJzCi8vIHJldHVybiB0aGUgb3JpZ2luYWwgYXJyYXkgb3RoZXJ3aXNlCnZhciBkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfcmVtb3ZlRnJvbUFycmF5PWZ1bmN0aW9uIHJlbW92ZUZyb21BcnJheShhcnIscHJlZCl7dmFyIGlkeD10eXBlb2YgcHJlZD09PSdmdW5jdGlvbic/T2JqZWN0KHV0aWxfWyJhcnJheUZpbmRJbmRleCJdKShhcnIscHJlZCk6YXJyLmluZGV4T2YocHJlZCk7cmV0dXJuIGlkeD49MD9bXS5jb25jYXQoYXJyLnNsaWNlKDAsaWR4KSxhcnIuc2xpY2UoaWR4KzEpKTphcnI7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e21peGluczpbbG9jYWxlX2RlZmF1bHQuYV0scHJvcHM6e2ZpcnN0RGF5T2ZXZWVrOntkZWZhdWx0OjcsdHlwZTpOdW1iZXIsdmFsaWRhdG9yOmZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpe3JldHVybiB2YWw+PTEmJnZhbDw9Nzt9fSx2YWx1ZTp7fSxkZWZhdWx0VmFsdWU6e3ZhbGlkYXRvcjpmdW5jdGlvbiB2YWxpZGF0b3IodmFsKXsvLyBlaXRoZXI6IG51bGwsIHZhbGlkIERhdGUgb2JqZWN0LCBBcnJheSBvZiB2YWxpZCBEYXRlIG9iamVjdHMKcmV0dXJuIHZhbD09PW51bGx8fE9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkodmFsKXx8QXJyYXkuaXNBcnJheSh2YWwpJiZ2YWwuZXZlcnkoZGF0ZV91dGlsX1siaXNEYXRlIl0pO319LGRhdGU6e30sc2VsZWN0aW9uTW9kZTp7ZGVmYXVsdDonZGF5J30sc2hvd1dlZWtOdW1iZXI6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxkaXNhYmxlZERhdGU6e30sY2VsbENsYXNzTmFtZTp7fSxtaW5EYXRlOnt9LG1heERhdGU6e30scmFuZ2VTdGF0ZTp7ZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybntlbmREYXRlOm51bGwsc2VsZWN0aW5nOmZhbHNlfTt9fX0sY29tcHV0ZWQ6e29mZnNldERheTpmdW5jdGlvbiBvZmZzZXREYXkoKXt2YXIgd2Vlaz10aGlzLmZpcnN0RGF5T2ZXZWVrOy8vIOWRqOaXpeS4uueVjOmZkO+8jOW3puWPs+WBj+enu+eahOWkqeaVsO+8jDMyMTc2NTQg5L6L5aaC5ZGo5LiA5bCx5pivIC0x77yM55uu55qE5piv6LCD5pW05YmN5Lik6KGM5pel5pyf55qE5L2N572uCnJldHVybiB3ZWVrPjM/Ny13ZWVrOi13ZWVrO30sV0VFS1M6ZnVuY3Rpb24gV0VFS1MoKXt2YXIgd2Vlaz10aGlzLmZpcnN0RGF5T2ZXZWVrO3JldHVybiBfV0VFS1MuY29uY2F0KF9XRUVLUykuc2xpY2Uod2Vlayx3ZWVrKzcpO30seWVhcjpmdW5jdGlvbiB5ZWFyKCl7cmV0dXJuIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpO30sbW9udGg6ZnVuY3Rpb24gbW9udGgoKXtyZXR1cm4gdGhpcy5kYXRlLmdldE1vbnRoKCk7fSxzdGFydERhdGU6ZnVuY3Rpb24gc3RhcnREYXRlKCl7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJnZXRTdGFydERhdGVPZk1vbnRoIl0pKHRoaXMueWVhcix0aGlzLm1vbnRoKTt9LHJvd3M6ZnVuY3Rpb24gcm93cygpe3ZhciBfdGhpcz10aGlzOy8vIFRPRE86IHJlZmFjdG9yeSByb3dzIC8gZ2V0Q2VsbENsYXNzZXMKdmFyIGRhdGU9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsMSk7dmFyIGRheT1PYmplY3QoZGF0ZV91dGlsX1siZ2V0Rmlyc3REYXlPZk1vbnRoIl0pKGRhdGUpOy8vIGRheSBvZiBmaXJzdCBkYXkKdmFyIGRhdGVDb3VudE9mTW9udGg9T2JqZWN0KGRhdGVfdXRpbF9bImdldERheUNvdW50T2ZNb250aCJdKShkYXRlLmdldEZ1bGxZZWFyKCksZGF0ZS5nZXRNb250aCgpKTt2YXIgZGF0ZUNvdW50T2ZMYXN0TW9udGg9T2JqZWN0KGRhdGVfdXRpbF9bImdldERheUNvdW50T2ZNb250aCJdKShkYXRlLmdldEZ1bGxZZWFyKCksZGF0ZS5nZXRNb250aCgpPT09MD8xMTpkYXRlLmdldE1vbnRoKCktMSk7ZGF5PWRheT09PTA/NzpkYXk7dmFyIG9mZnNldD10aGlzLm9mZnNldERheTt2YXIgcm93cz10aGlzLnRhYmxlUm93czt2YXIgY291bnQ9MTt2YXIgc3RhcnREYXRlPXRoaXMuc3RhcnREYXRlO3ZhciBkaXNhYmxlZERhdGU9dGhpcy5kaXNhYmxlZERhdGU7dmFyIGNlbGxDbGFzc05hbWU9dGhpcy5jZWxsQ2xhc3NOYW1lO3ZhciBzZWxlY3RlZERhdGU9dGhpcy5zZWxlY3Rpb25Nb2RlPT09J2RhdGVzJz9PYmplY3QodXRpbF9bImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheSJdKSh0aGlzLnZhbHVlKTpbXTt2YXIgbm93PWRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKG5ldyBEYXRlKCkpO2Zvcih2YXIgaT0wO2k8NjtpKyspe3ZhciByb3c9cm93c1tpXTtpZih0aGlzLnNob3dXZWVrTnVtYmVyKXtpZighcm93WzBdKXtyb3dbMF09e3R5cGU6J3dlZWsnLHRleHQ6T2JqZWN0KGRhdGVfdXRpbF9bImdldFdlZWtOdW1iZXIiXSkoT2JqZWN0KGRhdGVfdXRpbF9bIm5leHREYXRlIl0pKHN0YXJ0RGF0ZSxpKjcrMSkpfTt9fXZhciBfbG9vcD1mdW5jdGlvbiBfbG9vcChqKXt2YXIgY2VsbD1yb3dbX3RoaXMuc2hvd1dlZWtOdW1iZXI/aisxOmpdO2lmKCFjZWxsKXtjZWxsPXtyb3c6aSxjb2x1bW46aix0eXBlOidub3JtYWwnLGluUmFuZ2U6ZmFsc2Usc3RhcnQ6ZmFsc2UsZW5kOmZhbHNlfTt9Y2VsbC50eXBlPSdub3JtYWwnO3ZhciBpbmRleD1pKjcrajt2YXIgdGltZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dERhdGUiXSkoc3RhcnREYXRlLGluZGV4LW9mZnNldCkuZ2V0VGltZSgpO2NlbGwuaW5SYW5nZT10aW1lPj1kYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcChfdGhpcy5taW5EYXRlKSYmdGltZTw9ZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXAoX3RoaXMubWF4RGF0ZSk7Y2VsbC5zdGFydD1fdGhpcy5taW5EYXRlJiZ0aW1lPT09ZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXAoX3RoaXMubWluRGF0ZSk7Y2VsbC5lbmQ9X3RoaXMubWF4RGF0ZSYmdGltZT09PWRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKF90aGlzLm1heERhdGUpO3ZhciBpc1RvZGF5PXRpbWU9PT1ub3c7aWYoaXNUb2RheSl7Y2VsbC50eXBlPSd0b2RheSc7fWlmKGk+PTAmJmk8PTEpe3ZhciBudW1iZXJPZkRheXNGcm9tUHJldmlvdXNNb250aD1kYXkrb2Zmc2V0PDA/NytkYXkrb2Zmc2V0OmRheStvZmZzZXQ7aWYoaitpKjc+PW51bWJlck9mRGF5c0Zyb21QcmV2aW91c01vbnRoKXtjZWxsLnRleHQ9Y291bnQrKzt9ZWxzZXtjZWxsLnRleHQ9ZGF0ZUNvdW50T2ZMYXN0TW9udGgtKG51bWJlck9mRGF5c0Zyb21QcmV2aW91c01vbnRoLWolNykrMStpKjc7Y2VsbC50eXBlPSdwcmV2LW1vbnRoJzt9fWVsc2V7aWYoY291bnQ8PWRhdGVDb3VudE9mTW9udGgpe2NlbGwudGV4dD1jb3VudCsrO31lbHNle2NlbGwudGV4dD1jb3VudCsrLWRhdGVDb3VudE9mTW9udGg7Y2VsbC50eXBlPSduZXh0LW1vbnRoJzt9fXZhciBjZWxsRGF0ZT1uZXcgRGF0ZSh0aW1lKTtjZWxsLmRpc2FibGVkPXR5cGVvZiBkaXNhYmxlZERhdGU9PT0nZnVuY3Rpb24nJiZkaXNhYmxlZERhdGUoY2VsbERhdGUpO2NlbGwuc2VsZWN0ZWQ9T2JqZWN0KHV0aWxfWyJhcnJheUZpbmQiXSkoc2VsZWN0ZWREYXRlLGZ1bmN0aW9uKGRhdGUpe3JldHVybiBkYXRlLmdldFRpbWUoKT09PWNlbGxEYXRlLmdldFRpbWUoKTt9KTtjZWxsLmN1c3RvbUNsYXNzPXR5cGVvZiBjZWxsQ2xhc3NOYW1lPT09J2Z1bmN0aW9uJyYmY2VsbENsYXNzTmFtZShjZWxsRGF0ZSk7X3RoaXMuJHNldChyb3csX3RoaXMuc2hvd1dlZWtOdW1iZXI/aisxOmosY2VsbCk7fTtmb3IodmFyIGo9MDtqPDc7aisrKXtfbG9vcChqKTt9aWYodGhpcy5zZWxlY3Rpb25Nb2RlPT09J3dlZWsnKXt2YXIgc3RhcnQ9dGhpcy5zaG93V2Vla051bWJlcj8xOjA7dmFyIGVuZD10aGlzLnNob3dXZWVrTnVtYmVyPzc6Njt2YXIgaXNXZWVrQWN0aXZlPXRoaXMuaXNXZWVrQWN0aXZlKHJvd1tzdGFydCsxXSk7cm93W3N0YXJ0XS5pblJhbmdlPWlzV2Vla0FjdGl2ZTtyb3dbc3RhcnRdLnN0YXJ0PWlzV2Vla0FjdGl2ZTtyb3dbZW5kXS5pblJhbmdlPWlzV2Vla0FjdGl2ZTtyb3dbZW5kXS5lbmQ9aXNXZWVrQWN0aXZlO319cmV0dXJuIHJvd3M7fX0sd2F0Y2g6eydyYW5nZVN0YXRlLmVuZERhdGUnOmZ1bmN0aW9uIHJhbmdlU3RhdGVFbmREYXRlKG5ld1ZhbCl7dGhpcy5tYXJrUmFuZ2UodGhpcy5taW5EYXRlLG5ld1ZhbCk7fSxtaW5EYXRlOmZ1bmN0aW9uIG1pbkRhdGUobmV3VmFsLG9sZFZhbCl7aWYoZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXAobmV3VmFsKSE9PWRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKG9sZFZhbCkpe3RoaXMubWFya1JhbmdlKHRoaXMubWluRGF0ZSx0aGlzLm1heERhdGUpO319LG1heERhdGU6ZnVuY3Rpb24gbWF4RGF0ZShuZXdWYWwsb2xkVmFsKXtpZihkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcChuZXdWYWwpIT09ZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXAob2xkVmFsKSl7dGhpcy5tYXJrUmFuZ2UodGhpcy5taW5EYXRlLHRoaXMubWF4RGF0ZSk7fX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnt0YWJsZVJvd3M6W1tdLFtdLFtdLFtdLFtdLFtdXSxsYXN0Um93Om51bGwsbGFzdENvbHVtbjpudWxsfTt9LG1ldGhvZHM6e2NlbGxNYXRjaGVzRGF0ZTpmdW5jdGlvbiBjZWxsTWF0Y2hlc0RhdGUoY2VsbCxkYXRlKXt2YXIgdmFsdWU9bmV3IERhdGUoZGF0ZSk7cmV0dXJuIHRoaXMueWVhcj09PXZhbHVlLmdldEZ1bGxZZWFyKCkmJnRoaXMubW9udGg9PT12YWx1ZS5nZXRNb250aCgpJiZOdW1iZXIoY2VsbC50ZXh0KT09PXZhbHVlLmdldERhdGUoKTt9LGdldENlbGxDbGFzc2VzOmZ1bmN0aW9uIGdldENlbGxDbGFzc2VzKGNlbGwpe3ZhciBfdGhpczI9dGhpczt2YXIgc2VsZWN0aW9uTW9kZT10aGlzLnNlbGVjdGlvbk1vZGU7dmFyIGRlZmF1bHRWYWx1ZT10aGlzLmRlZmF1bHRWYWx1ZT9BcnJheS5pc0FycmF5KHRoaXMuZGVmYXVsdFZhbHVlKT90aGlzLmRlZmF1bHRWYWx1ZTpbdGhpcy5kZWZhdWx0VmFsdWVdOltdO3ZhciBjbGFzc2VzPVtdO2lmKChjZWxsLnR5cGU9PT0nbm9ybWFsJ3x8Y2VsbC50eXBlPT09J3RvZGF5JykmJiFjZWxsLmRpc2FibGVkKXtjbGFzc2VzLnB1c2goJ2F2YWlsYWJsZScpO2lmKGNlbGwudHlwZT09PSd0b2RheScpe2NsYXNzZXMucHVzaCgndG9kYXknKTt9fWVsc2V7Y2xhc3Nlcy5wdXNoKGNlbGwudHlwZSk7fWlmKGNlbGwudHlwZT09PSdub3JtYWwnJiZkZWZhdWx0VmFsdWUuc29tZShmdW5jdGlvbihkYXRlKXtyZXR1cm4gX3RoaXMyLmNlbGxNYXRjaGVzRGF0ZShjZWxsLGRhdGUpO30pKXtjbGFzc2VzLnB1c2goJ2RlZmF1bHQnKTt9aWYoc2VsZWN0aW9uTW9kZT09PSdkYXknJiYoY2VsbC50eXBlPT09J25vcm1hbCd8fGNlbGwudHlwZT09PSd0b2RheScpJiZ0aGlzLmNlbGxNYXRjaGVzRGF0ZShjZWxsLHRoaXMudmFsdWUpKXtjbGFzc2VzLnB1c2goJ2N1cnJlbnQnKTt9aWYoY2VsbC5pblJhbmdlJiYoY2VsbC50eXBlPT09J25vcm1hbCd8fGNlbGwudHlwZT09PSd0b2RheSd8fHRoaXMuc2VsZWN0aW9uTW9kZT09PSd3ZWVrJykpe2NsYXNzZXMucHVzaCgnaW4tcmFuZ2UnKTtpZihjZWxsLnN0YXJ0KXtjbGFzc2VzLnB1c2goJ3N0YXJ0LWRhdGUnKTt9aWYoY2VsbC5lbmQpe2NsYXNzZXMucHVzaCgnZW5kLWRhdGUnKTt9fWlmKGNlbGwuZGlzYWJsZWQpe2NsYXNzZXMucHVzaCgnZGlzYWJsZWQnKTt9aWYoY2VsbC5zZWxlY3RlZCl7Y2xhc3Nlcy5wdXNoKCdzZWxlY3RlZCcpO31pZihjZWxsLmN1c3RvbUNsYXNzKXtjbGFzc2VzLnB1c2goY2VsbC5jdXN0b21DbGFzcyk7fXJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTt9LGdldERhdGVPZkNlbGw6ZnVuY3Rpb24gZ2V0RGF0ZU9mQ2VsbChyb3csY29sdW1uKXt2YXIgb2Zmc2V0RnJvbVN0YXJ0PXJvdyo3Kyhjb2x1bW4tKHRoaXMuc2hvd1dlZWtOdW1iZXI/MTowKSktdGhpcy5vZmZzZXREYXk7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJuZXh0RGF0ZSJdKSh0aGlzLnN0YXJ0RGF0ZSxvZmZzZXRGcm9tU3RhcnQpO30saXNXZWVrQWN0aXZlOmZ1bmN0aW9uIGlzV2Vla0FjdGl2ZShjZWxsKXtpZih0aGlzLnNlbGVjdGlvbk1vZGUhPT0nd2VlaycpcmV0dXJuIGZhbHNlO3ZhciBuZXdEYXRlPW5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vbnRoLDEpO3ZhciB5ZWFyPW5ld0RhdGUuZ2V0RnVsbFllYXIoKTt2YXIgbW9udGg9bmV3RGF0ZS5nZXRNb250aCgpO2lmKGNlbGwudHlwZT09PSdwcmV2LW1vbnRoJyl7bmV3RGF0ZS5zZXRNb250aChtb250aD09PTA/MTE6bW9udGgtMSk7bmV3RGF0ZS5zZXRGdWxsWWVhcihtb250aD09PTA/eWVhci0xOnllYXIpO31pZihjZWxsLnR5cGU9PT0nbmV4dC1tb250aCcpe25ld0RhdGUuc2V0TW9udGgobW9udGg9PT0xMT8wOm1vbnRoKzEpO25ld0RhdGUuc2V0RnVsbFllYXIobW9udGg9PT0xMT95ZWFyKzE6eWVhcik7fW5ld0RhdGUuc2V0RGF0ZShwYXJzZUludChjZWxsLnRleHQsMTApKTtpZihPYmplY3QoZGF0ZV91dGlsX1siaXNEYXRlIl0pKHRoaXMudmFsdWUpKXt2YXIgZGF5T2Zmc2V0PSh0aGlzLnZhbHVlLmdldERheSgpLXRoaXMuZmlyc3REYXlPZldlZWsrNyklNy0xO3ZhciB3ZWVrRGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sicHJldkRhdGUiXSkodGhpcy52YWx1ZSxkYXlPZmZzZXQpO3JldHVybiB3ZWVrRGF0ZS5nZXRUaW1lKCk9PT1uZXdEYXRlLmdldFRpbWUoKTt9cmV0dXJuIGZhbHNlO30sbWFya1JhbmdlOmZ1bmN0aW9uIG1hcmtSYW5nZShtaW5EYXRlLG1heERhdGUpe21pbkRhdGU9ZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXAobWluRGF0ZSk7bWF4RGF0ZT1kYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcChtYXhEYXRlKXx8bWluRGF0ZTt2YXIgX3JlZj1bTWF0aC5taW4obWluRGF0ZSxtYXhEYXRlKSxNYXRoLm1heChtaW5EYXRlLG1heERhdGUpXTttaW5EYXRlPV9yZWZbMF07bWF4RGF0ZT1fcmVmWzFdO3ZhciBzdGFydERhdGU9dGhpcy5zdGFydERhdGU7dmFyIHJvd3M9dGhpcy5yb3dzO2Zvcih2YXIgaT0wLGs9cm93cy5sZW5ndGg7aTxrO2krKyl7dmFyIHJvdz1yb3dzW2ldO2Zvcih2YXIgaj0wLGw9cm93Lmxlbmd0aDtqPGw7aisrKXtpZih0aGlzLnNob3dXZWVrTnVtYmVyJiZqPT09MCljb250aW51ZTt2YXIgX2NlbGw9cm93W2pdO3ZhciBpbmRleD1pKjcraisodGhpcy5zaG93V2Vla051bWJlcj8tMTowKTt2YXIgdGltZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dERhdGUiXSkoc3RhcnREYXRlLGluZGV4LXRoaXMub2Zmc2V0RGF5KS5nZXRUaW1lKCk7X2NlbGwuaW5SYW5nZT1taW5EYXRlJiZ0aW1lPj1taW5EYXRlJiZ0aW1lPD1tYXhEYXRlO19jZWxsLnN0YXJ0PW1pbkRhdGUmJnRpbWU9PT1taW5EYXRlO19jZWxsLmVuZD1tYXhEYXRlJiZ0aW1lPT09bWF4RGF0ZTt9fX0saGFuZGxlTW91c2VNb3ZlOmZ1bmN0aW9uIGhhbmRsZU1vdXNlTW92ZShldmVudCl7aWYoIXRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcpcmV0dXJuO3ZhciB0YXJnZXQ9ZXZlbnQudGFyZ2V0O2lmKHRhcmdldC50YWdOYW1lPT09J1NQQU4nKXt0YXJnZXQ9dGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZTt9aWYodGFyZ2V0LnRhZ05hbWU9PT0nRElWJyl7dGFyZ2V0PXRhcmdldC5wYXJlbnROb2RlO31pZih0YXJnZXQudGFnTmFtZSE9PSdURCcpcmV0dXJuO3ZhciByb3c9dGFyZ2V0LnBhcmVudE5vZGUucm93SW5kZXgtMTt2YXIgY29sdW1uPXRhcmdldC5jZWxsSW5kZXg7Ly8gY2FuIG5vdCBzZWxlY3QgZGlzYWJsZWQgZGF0ZQppZih0aGlzLnJvd3Nbcm93XVtjb2x1bW5dLmRpc2FibGVkKXJldHVybjsvLyBvbmx5IHVwZGF0ZSByYW5nZVN0YXRlIHdoZW4gbW91c2UgbW92ZXMgdG8gYSBuZXcgY2VsbAovLyB0aGlzIGF2b2lkcyBmcmVxdWVudCBEYXRlIG9iamVjdCBjcmVhdGlvbiBhbmQgaW1wcm92ZXMgcGVyZm9ybWFuY2UKaWYocm93IT09dGhpcy5sYXN0Um93fHxjb2x1bW4hPT10aGlzLmxhc3RDb2x1bW4pe3RoaXMubGFzdFJvdz1yb3c7dGhpcy5sYXN0Q29sdW1uPWNvbHVtbjt0aGlzLiRlbWl0KCdjaGFuZ2VyYW5nZScse21pbkRhdGU6dGhpcy5taW5EYXRlLG1heERhdGU6dGhpcy5tYXhEYXRlLHJhbmdlU3RhdGU6e3NlbGVjdGluZzp0cnVlLGVuZERhdGU6dGhpcy5nZXREYXRlT2ZDZWxsKHJvdyxjb2x1bW4pfX0pO319LGhhbmRsZUNsaWNrOmZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KXt2YXIgdGFyZ2V0PWV2ZW50LnRhcmdldDtpZih0YXJnZXQudGFnTmFtZT09PSdTUEFOJyl7dGFyZ2V0PXRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGU7fWlmKHRhcmdldC50YWdOYW1lPT09J0RJVicpe3RhcmdldD10YXJnZXQucGFyZW50Tm9kZTt9aWYodGFyZ2V0LnRhZ05hbWUhPT0nVEQnKXJldHVybjt2YXIgcm93PXRhcmdldC5wYXJlbnROb2RlLnJvd0luZGV4LTE7dmFyIGNvbHVtbj10aGlzLnNlbGVjdGlvbk1vZGU9PT0nd2Vlayc/MTp0YXJnZXQuY2VsbEluZGV4O3ZhciBjZWxsPXRoaXMucm93c1tyb3ddW2NvbHVtbl07aWYoY2VsbC5kaXNhYmxlZHx8Y2VsbC50eXBlPT09J3dlZWsnKXJldHVybjt2YXIgbmV3RGF0ZT10aGlzLmdldERhdGVPZkNlbGwocm93LGNvbHVtbik7aWYodGhpcy5zZWxlY3Rpb25Nb2RlPT09J3JhbmdlJyl7aWYoIXRoaXMucmFuZ2VTdGF0ZS5zZWxlY3Rpbmcpe3RoaXMuJGVtaXQoJ3BpY2snLHttaW5EYXRlOm5ld0RhdGUsbWF4RGF0ZTpudWxsfSk7dGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZz10cnVlO31lbHNle2lmKG5ld0RhdGU+PXRoaXMubWluRGF0ZSl7dGhpcy4kZW1pdCgncGljaycse21pbkRhdGU6dGhpcy5taW5EYXRlLG1heERhdGU6bmV3RGF0ZX0pO31lbHNle3RoaXMuJGVtaXQoJ3BpY2snLHttaW5EYXRlOm5ld0RhdGUsbWF4RGF0ZTp0aGlzLm1pbkRhdGV9KTt9dGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZz1mYWxzZTt9fWVsc2UgaWYodGhpcy5zZWxlY3Rpb25Nb2RlPT09J2RheScpe3RoaXMuJGVtaXQoJ3BpY2snLG5ld0RhdGUpO31lbHNlIGlmKHRoaXMuc2VsZWN0aW9uTW9kZT09PSd3ZWVrJyl7dmFyIHdlZWtOdW1iZXI9T2JqZWN0KGRhdGVfdXRpbF9bImdldFdlZWtOdW1iZXIiXSkobmV3RGF0ZSk7dmFyIHZhbHVlPW5ld0RhdGUuZ2V0RnVsbFllYXIoKSsndycrd2Vla051bWJlcjt0aGlzLiRlbWl0KCdwaWNrJyx7eWVhcjpuZXdEYXRlLmdldEZ1bGxZZWFyKCksd2Vlazp3ZWVrTnVtYmVyLHZhbHVlOnZhbHVlLGRhdGU6bmV3RGF0ZX0pO31lbHNlIGlmKHRoaXMuc2VsZWN0aW9uTW9kZT09PSdkYXRlcycpe3ZhciBfdmFsdWU9dGhpcy52YWx1ZXx8W107dmFyIG5ld1ZhbHVlPWNlbGwuc2VsZWN0ZWQ/ZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3JlbW92ZUZyb21BcnJheShfdmFsdWUsZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGRhdGUuZ2V0VGltZSgpPT09bmV3RGF0ZS5nZXRUaW1lKCk7fSk6W10uY29uY2F0KF92YWx1ZSxbbmV3RGF0ZV0pO3RoaXMuJGVtaXQoJ3BpY2snLG5ld1ZhbHVlKTt9fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL2RhdGUtdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGJhc2ljX2RhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189ZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9kYXRlLXRhYmxlLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGRhdGVfdGFibGVfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChiYXNpY19kYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGRhdGVfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDFmMzM0MV9yZW5kZXIsZGF0ZV90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkMWYzMzQxX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgZGF0ZV90YWJsZV9hcGk7fWRhdGVfdGFibGVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvZGF0ZS10YWJsZS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZGF0ZV90YWJsZT1kYXRlX3RhYmxlX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBkYXRldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXttaXhpbnM6W2xvY2FsZV9kZWZhdWx0LmFdLGRpcmVjdGl2ZXM6e0NsaWNrb3V0c2lkZTpjbGlja291dHNpZGVfZGVmYXVsdC5hfSx3YXRjaDp7c2hvd1RpbWU6ZnVuY3Rpb24gc2hvd1RpbWUodmFsKXt2YXIgX3RoaXM9dGhpczsvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9pZighdmFsKXJldHVybjt0aGlzLiRuZXh0VGljayhmdW5jdGlvbihfKXt2YXIgaW5wdXRFbG09X3RoaXMuJHJlZnMuaW5wdXQuJGVsO2lmKGlucHV0RWxtKXtfdGhpcy5waWNrZXJXaWR0aD1pbnB1dEVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCsxMDt9fSk7fSx2YWx1ZTpmdW5jdGlvbiB2YWx1ZSh2YWwpe2lmKHRoaXMuc2VsZWN0aW9uTW9kZT09PSdkYXRlcycmJnRoaXMudmFsdWUpcmV0dXJuO2lmKE9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkodmFsKSl7dGhpcy5kYXRlPW5ldyBEYXRlKHZhbCk7fWVsc2V7dGhpcy5kYXRlPXRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7fX0sZGVmYXVsdFZhbHVlOmZ1bmN0aW9uIGRlZmF1bHRWYWx1ZSh2YWwpe2lmKCFPYmplY3QoZGF0ZV91dGlsX1siaXNEYXRlIl0pKHRoaXMudmFsdWUpKXt0aGlzLmRhdGU9dmFsP25ldyBEYXRlKHZhbCk6bmV3IERhdGUoKTt9fSx0aW1lUGlja2VyVmlzaWJsZTpmdW5jdGlvbiB0aW1lUGlja2VyVmlzaWJsZSh2YWwpe3ZhciBfdGhpczI9dGhpcztpZih2YWwpdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMyLiRyZWZzLnRpbWVwaWNrZXIuYWRqdXN0U3Bpbm5lcnMoKTt9KTt9LHNlbGVjdGlvbk1vZGU6ZnVuY3Rpb24gc2VsZWN0aW9uTW9kZShuZXdWYWwpe2lmKG5ld1ZhbD09PSdtb250aCcpey8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovaWYodGhpcy5jdXJyZW50VmlldyE9PSd5ZWFyJ3x8dGhpcy5jdXJyZW50VmlldyE9PSdtb250aCcpe3RoaXMuY3VycmVudFZpZXc9J21vbnRoJzt9fWVsc2UgaWYobmV3VmFsPT09J2RhdGVzJyl7dGhpcy5jdXJyZW50Vmlldz0nZGF0ZSc7fX19LG1ldGhvZHM6e3Byb3h5VGltZVBpY2tlckRhdGFQcm9wZXJ0aWVzOmZ1bmN0aW9uIHByb3h5VGltZVBpY2tlckRhdGFQcm9wZXJ0aWVzKCl7dmFyIF90aGlzMz10aGlzO3ZhciBmb3JtYXQ9ZnVuY3Rpb24gZm9ybWF0KHRpbWVGb3JtYXQpe190aGlzMy4kcmVmcy50aW1lcGlja2VyLmZvcm1hdD10aW1lRm9ybWF0O307dmFyIHZhbHVlPWZ1bmN0aW9uIHZhbHVlKF92YWx1ZSl7X3RoaXMzLiRyZWZzLnRpbWVwaWNrZXIudmFsdWU9X3ZhbHVlO307dmFyIGRhdGU9ZnVuY3Rpb24gZGF0ZShfZGF0ZSl7X3RoaXMzLiRyZWZzLnRpbWVwaWNrZXIuZGF0ZT1fZGF0ZTt9O3ZhciBzZWxlY3RhYmxlUmFuZ2U9ZnVuY3Rpb24gc2VsZWN0YWJsZVJhbmdlKF9zZWxlY3RhYmxlUmFuZ2Upe190aGlzMy4kcmVmcy50aW1lcGlja2VyLnNlbGVjdGFibGVSYW5nZT1fc2VsZWN0YWJsZVJhbmdlO307dGhpcy4kd2F0Y2goJ3ZhbHVlJyx2YWx1ZSk7dGhpcy4kd2F0Y2goJ2RhdGUnLGRhdGUpO3RoaXMuJHdhdGNoKCdzZWxlY3RhYmxlUmFuZ2UnLHNlbGVjdGFibGVSYW5nZSk7Zm9ybWF0KHRoaXMudGltZUZvcm1hdCk7dmFsdWUodGhpcy52YWx1ZSk7ZGF0ZSh0aGlzLmRhdGUpO3NlbGVjdGFibGVSYW5nZSh0aGlzLnNlbGVjdGFibGVSYW5nZSk7fSxoYW5kbGVDbGVhcjpmdW5jdGlvbiBoYW5kbGVDbGVhcigpe3RoaXMuZGF0ZT10aGlzLmdldERlZmF1bHRWYWx1ZSgpO3RoaXMuJGVtaXQoJ3BpY2snLG51bGwpO30sZW1pdDpmdW5jdGlvbiBlbWl0KHZhbHVlKXt2YXIgX3RoaXM0PXRoaXM7Zm9yKHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShfbGVuPjE/X2xlbi0xOjApLF9rZXk9MTtfa2V5PF9sZW47X2tleSsrKXthcmdzW19rZXktMV09YXJndW1lbnRzW19rZXldO31pZighdmFsdWUpe3RoaXMuJGVtaXQuYXBwbHkodGhpcyxbJ3BpY2snLHZhbHVlXS5jb25jYXQoYXJncykpO31lbHNlIGlmKEFycmF5LmlzQXJyYXkodmFsdWUpKXt2YXIgZGF0ZXM9dmFsdWUubWFwKGZ1bmN0aW9uKGRhdGUpe3JldHVybiBfdGhpczQuc2hvd1RpbWU/T2JqZWN0KGRhdGVfdXRpbF9bImNsZWFyTWlsbGlzZWNvbmRzIl0pKGRhdGUpOk9iamVjdChkYXRlX3V0aWxfWyJjbGVhclRpbWUiXSkoZGF0ZSk7fSk7dGhpcy4kZW1pdC5hcHBseSh0aGlzLFsncGljaycsZGF0ZXNdLmNvbmNhdChhcmdzKSk7fWVsc2V7dGhpcy4kZW1pdC5hcHBseSh0aGlzLFsncGljaycsdGhpcy5zaG93VGltZT9PYmplY3QoZGF0ZV91dGlsX1siY2xlYXJNaWxsaXNlY29uZHMiXSkodmFsdWUpOk9iamVjdChkYXRlX3V0aWxfWyJjbGVhclRpbWUiXSkodmFsdWUpXS5jb25jYXQoYXJncykpO310aGlzLnVzZXJJbnB1dERhdGU9bnVsbDt0aGlzLnVzZXJJbnB1dFRpbWU9bnVsbDt9LC8vIHJlc2V0RGF0ZSgpIHsKLy8gICB0aGlzLmRhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUpOwovLyB9LApzaG93TW9udGhQaWNrZXI6ZnVuY3Rpb24gc2hvd01vbnRoUGlja2VyKCl7dGhpcy5jdXJyZW50Vmlldz0nbW9udGgnO30sc2hvd1llYXJQaWNrZXI6ZnVuY3Rpb24gc2hvd1llYXJQaWNrZXIoKXt0aGlzLmN1cnJlbnRWaWV3PSd5ZWFyJzt9LC8vIFhYWDog5rKh55So5YiwCi8vIGhhbmRsZUxhYmVsQ2xpY2soKSB7Ci8vICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdkYXRlJykgewovLyAgICAgdGhpcy5zaG93TW9udGhQaWNrZXIoKTsKLy8gICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcpIHsKLy8gICAgIHRoaXMuc2hvd1llYXJQaWNrZXIoKTsKLy8gICB9Ci8vIH0sCnByZXZNb250aDpmdW5jdGlvbiBwcmV2TW9udGgoKXt0aGlzLmRhdGU9T2JqZWN0KGRhdGVfdXRpbF9bInByZXZNb250aCJdKSh0aGlzLmRhdGUpO30sbmV4dE1vbnRoOmZ1bmN0aW9uIG5leHRNb250aCgpe3RoaXMuZGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dE1vbnRoIl0pKHRoaXMuZGF0ZSk7fSxwcmV2WWVhcjpmdW5jdGlvbiBwcmV2WWVhcigpe2lmKHRoaXMuY3VycmVudFZpZXc9PT0neWVhcicpe3RoaXMuZGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sicHJldlllYXIiXSkodGhpcy5kYXRlLDEwKTt9ZWxzZXt0aGlzLmRhdGU9T2JqZWN0KGRhdGVfdXRpbF9bInByZXZZZWFyIl0pKHRoaXMuZGF0ZSk7fX0sbmV4dFllYXI6ZnVuY3Rpb24gbmV4dFllYXIoKXtpZih0aGlzLmN1cnJlbnRWaWV3PT09J3llYXInKXt0aGlzLmRhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm5leHRZZWFyIl0pKHRoaXMuZGF0ZSwxMCk7fWVsc2V7dGhpcy5kYXRlPU9iamVjdChkYXRlX3V0aWxfWyJuZXh0WWVhciJdKSh0aGlzLmRhdGUpO319LGhhbmRsZVNob3J0Y3V0Q2xpY2s6ZnVuY3Rpb24gaGFuZGxlU2hvcnRjdXRDbGljayhzaG9ydGN1dCl7aWYoc2hvcnRjdXQub25DbGljayl7c2hvcnRjdXQub25DbGljayh0aGlzKTt9fSxoYW5kbGVUaW1lUGljazpmdW5jdGlvbiBoYW5kbGVUaW1lUGljayh2YWx1ZSx2aXNpYmxlLGZpcnN0KXtpZihPYmplY3QoZGF0ZV91dGlsX1siaXNEYXRlIl0pKHZhbHVlKSl7dmFyIG5ld0RhdGU9dGhpcy52YWx1ZT9PYmplY3QoZGF0ZV91dGlsX1sibW9kaWZ5VGltZSJdKSh0aGlzLnZhbHVlLHZhbHVlLmdldEhvdXJzKCksdmFsdWUuZ2V0TWludXRlcygpLHZhbHVlLmdldFNlY29uZHMoKSk6T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeVdpdGhUaW1lU3RyaW5nIl0pKHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCksdGhpcy5kZWZhdWx0VGltZSk7dGhpcy5kYXRlPW5ld0RhdGU7dGhpcy5lbWl0KHRoaXMuZGF0ZSx0cnVlKTt9ZWxzZXt0aGlzLmVtaXQodmFsdWUsdHJ1ZSk7fWlmKCFmaXJzdCl7dGhpcy50aW1lUGlja2VyVmlzaWJsZT12aXNpYmxlO319LGhhbmRsZVRpbWVQaWNrQ2xvc2U6ZnVuY3Rpb24gaGFuZGxlVGltZVBpY2tDbG9zZSgpe3RoaXMudGltZVBpY2tlclZpc2libGU9ZmFsc2U7fSxoYW5kbGVNb250aFBpY2s6ZnVuY3Rpb24gaGFuZGxlTW9udGhQaWNrKG1vbnRoKXtpZih0aGlzLnNlbGVjdGlvbk1vZGU9PT0nbW9udGgnKXt0aGlzLmRhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeURhdGUiXSkodGhpcy5kYXRlLHRoaXMueWVhcixtb250aCwxKTt0aGlzLmVtaXQodGhpcy5kYXRlKTt9ZWxzZXt0aGlzLmRhdGU9T2JqZWN0KGRhdGVfdXRpbF9bImNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZSJdKSh0aGlzLmRhdGUsdGhpcy55ZWFyLG1vbnRoKTsvLyBUT0RPOiBzaG91bGQgZW1pdCBpbnRlcm1lZGlhdGUgdmFsdWUgPz8KLy8gdGhpcy5lbWl0KHRoaXMuZGF0ZSk7CnRoaXMuY3VycmVudFZpZXc9J2RhdGUnO319LGhhbmRsZURhdGVQaWNrOmZ1bmN0aW9uIGhhbmRsZURhdGVQaWNrKHZhbHVlKXtpZih0aGlzLnNlbGVjdGlvbk1vZGU9PT0nZGF5Jyl7dmFyIG5ld0RhdGU9dGhpcy52YWx1ZT9PYmplY3QoZGF0ZV91dGlsX1sibW9kaWZ5RGF0ZSJdKSh0aGlzLnZhbHVlLHZhbHVlLmdldEZ1bGxZZWFyKCksdmFsdWUuZ2V0TW9udGgoKSx2YWx1ZS5nZXREYXRlKCkpOk9iamVjdChkYXRlX3V0aWxfWyJtb2RpZnlXaXRoVGltZVN0cmluZyJdKSh2YWx1ZSx0aGlzLmRlZmF1bHRUaW1lKTsvLyBjaGFuZ2UgZGVmYXVsdCB0aW1lIHdoaWxlIG91dCBvZiBzZWxlY3RhYmxlUmFuZ2UKaWYoIXRoaXMuY2hlY2tEYXRlV2l0aGluUmFuZ2UobmV3RGF0ZSkpe25ld0RhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeURhdGUiXSkodGhpcy5zZWxlY3RhYmxlUmFuZ2VbMF1bMF0sdmFsdWUuZ2V0RnVsbFllYXIoKSx2YWx1ZS5nZXRNb250aCgpLHZhbHVlLmdldERhdGUoKSk7fXRoaXMuZGF0ZT1uZXdEYXRlO3RoaXMuZW1pdCh0aGlzLmRhdGUsdGhpcy5zaG93VGltZSk7fWVsc2UgaWYodGhpcy5zZWxlY3Rpb25Nb2RlPT09J3dlZWsnKXt0aGlzLmVtaXQodmFsdWUuZGF0ZSk7fWVsc2UgaWYodGhpcy5zZWxlY3Rpb25Nb2RlPT09J2RhdGVzJyl7dGhpcy5lbWl0KHZhbHVlLHRydWUpOy8vIHNldCBmYWxzZSB0byBrZWVwIHBhbmVsIG9wZW4KfX0saGFuZGxlWWVhclBpY2s6ZnVuY3Rpb24gaGFuZGxlWWVhclBpY2soeWVhcil7aWYodGhpcy5zZWxlY3Rpb25Nb2RlPT09J3llYXInKXt0aGlzLmRhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeURhdGUiXSkodGhpcy5kYXRlLHllYXIsMCwxKTt0aGlzLmVtaXQodGhpcy5kYXRlKTt9ZWxzZXt0aGlzLmRhdGU9T2JqZWN0KGRhdGVfdXRpbF9bImNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZSJdKSh0aGlzLmRhdGUseWVhcix0aGlzLm1vbnRoKTsvLyBUT0RPOiBzaG91bGQgZW1pdCBpbnRlcm1lZGlhdGUgdmFsdWUgPz8KLy8gdGhpcy5lbWl0KHRoaXMuZGF0ZSwgdHJ1ZSk7CnRoaXMuY3VycmVudFZpZXc9J21vbnRoJzt9fSxjaGFuZ2VUb05vdzpmdW5jdGlvbiBjaGFuZ2VUb05vdygpey8vIE5PVEU6IG5vdCBhIHBlcm1hbmVudCBzb2x1dGlvbgovLyAgICAgICBjb25zaWRlciBkaXNhYmxlICJub3ciIGJ1dHRvbiBpbiB0aGUgZnV0dXJlCmlmKCghdGhpcy5kaXNhYmxlZERhdGV8fCF0aGlzLmRpc2FibGVkRGF0ZShuZXcgRGF0ZSgpKSkmJnRoaXMuY2hlY2tEYXRlV2l0aGluUmFuZ2UobmV3IERhdGUoKSkpe3RoaXMuZGF0ZT1uZXcgRGF0ZSgpO3RoaXMuZW1pdCh0aGlzLmRhdGUpO319LGNvbmZpcm06ZnVuY3Rpb24gY29uZmlybSgpe2lmKHRoaXMuc2VsZWN0aW9uTW9kZT09PSdkYXRlcycpe3RoaXMuZW1pdCh0aGlzLnZhbHVlKTt9ZWxzZXsvLyB2YWx1ZSB3ZXJlIGVtaXR0ZWQgaW4gaGFuZGxle0RhdGUsVGltZX1QaWNrLCBub3RoaW5nIHRvIHVwZGF0ZSBoZXJlCi8vIGRlYWwgd2l0aCB0aGUgc2NlbmFyaW8gd2hlcmU6IHVzZXIgb3BlbnMgdGhlIHBpY2tlciwgdGhlbiBjb25maXJtIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcKdmFyIHZhbHVlPXRoaXMudmFsdWU/dGhpcy52YWx1ZTpPYmplY3QoZGF0ZV91dGlsX1sibW9kaWZ5V2l0aFRpbWVTdHJpbmciXSkodGhpcy5nZXREZWZhdWx0VmFsdWUoKSx0aGlzLmRlZmF1bHRUaW1lKTt0aGlzLmRhdGU9bmV3IERhdGUodmFsdWUpOy8vIHJlZnJlc2ggZGF0ZQp0aGlzLmVtaXQodmFsdWUpO319LHJlc2V0VmlldzpmdW5jdGlvbiByZXNldFZpZXcoKXtpZih0aGlzLnNlbGVjdGlvbk1vZGU9PT0nbW9udGgnKXt0aGlzLmN1cnJlbnRWaWV3PSdtb250aCc7fWVsc2UgaWYodGhpcy5zZWxlY3Rpb25Nb2RlPT09J3llYXInKXt0aGlzLmN1cnJlbnRWaWV3PSd5ZWFyJzt9ZWxzZXt0aGlzLmN1cnJlbnRWaWV3PSdkYXRlJzt9fSxoYW5kbGVFbnRlcjpmdW5jdGlvbiBoYW5kbGVFbnRlcigpe2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsdGhpcy5oYW5kbGVLZXlkb3duKTt9LGhhbmRsZUxlYXZlOmZ1bmN0aW9uIGhhbmRsZUxlYXZlKCl7dGhpcy4kZW1pdCgnZG9kZXN0cm95Jyk7ZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLmhhbmRsZUtleWRvd24pO30saGFuZGxlS2V5ZG93bjpmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGV2ZW50KXt2YXIga2V5Q29kZT1ldmVudC5rZXlDb2RlO3ZhciBsaXN0PVszOCw0MCwzNywzOV07aWYodGhpcy52aXNpYmxlJiYhdGhpcy50aW1lUGlja2VyVmlzaWJsZSl7aWYobGlzdC5pbmRleE9mKGtleUNvZGUpIT09LTEpe3RoaXMuaGFuZGxlS2V5Q29udHJvbChrZXlDb2RlKTtldmVudC5zdG9wUHJvcGFnYXRpb24oKTtldmVudC5wcmV2ZW50RGVmYXVsdCgpO31pZihrZXlDb2RlPT09MTMmJnRoaXMudXNlcklucHV0RGF0ZT09PW51bGwmJnRoaXMudXNlcklucHV0VGltZT09PW51bGwpey8vIEVudGVyCnRoaXMuZW1pdCh0aGlzLmRhdGUsZmFsc2UpO319fSxoYW5kbGVLZXlDb250cm9sOmZ1bmN0aW9uIGhhbmRsZUtleUNvbnRyb2woa2V5Q29kZSl7dmFyIG1hcHBpbmc9eyd5ZWFyJzp7Mzg6LTQsNDA6NCwzNzotMSwzOToxLG9mZnNldDpmdW5jdGlvbiBvZmZzZXQoZGF0ZSxzdGVwKXtyZXR1cm4gZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkrc3RlcCk7fX0sJ21vbnRoJzp7Mzg6LTQsNDA6NCwzNzotMSwzOToxLG9mZnNldDpmdW5jdGlvbiBvZmZzZXQoZGF0ZSxzdGVwKXtyZXR1cm4gZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkrc3RlcCk7fX0sJ3dlZWsnOnszODotMSw0MDoxLDM3Oi0xLDM5OjEsb2Zmc2V0OmZ1bmN0aW9uIG9mZnNldChkYXRlLHN0ZXApe3JldHVybiBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkrc3RlcCo3KTt9fSwnZGF5Jzp7Mzg6LTcsNDA6NywzNzotMSwzOToxLG9mZnNldDpmdW5jdGlvbiBvZmZzZXQoZGF0ZSxzdGVwKXtyZXR1cm4gZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpK3N0ZXApO319fTt2YXIgbW9kZT10aGlzLnNlbGVjdGlvbk1vZGU7dmFyIHllYXI9My4xNTM2ZTEwO3ZhciBub3c9dGhpcy5kYXRlLmdldFRpbWUoKTt2YXIgbmV3RGF0ZT1uZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0VGltZSgpKTt3aGlsZShNYXRoLmFicyhub3ctbmV3RGF0ZS5nZXRUaW1lKCkpPD15ZWFyKXt2YXIgbWFwPW1hcHBpbmdbbW9kZV07bWFwLm9mZnNldChuZXdEYXRlLG1hcFtrZXlDb2RlXSk7aWYodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlPT09J2Z1bmN0aW9uJyYmdGhpcy5kaXNhYmxlZERhdGUobmV3RGF0ZSkpe2NvbnRpbnVlO310aGlzLmRhdGU9bmV3RGF0ZTt0aGlzLiRlbWl0KCdwaWNrJyxuZXdEYXRlLHRydWUpO2JyZWFrO319LGhhbmRsZVZpc2libGVUaW1lQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZVZpc2libGVUaW1lQ2hhbmdlKHZhbHVlKXt2YXIgdGltZT1PYmplY3QoZGF0ZV91dGlsX1sicGFyc2VEYXRlIl0pKHZhbHVlLHRoaXMudGltZUZvcm1hdCk7aWYodGltZSYmdGhpcy5jaGVja0RhdGVXaXRoaW5SYW5nZSh0aW1lKSl7dGhpcy5kYXRlPU9iamVjdChkYXRlX3V0aWxfWyJtb2RpZnlEYXRlIl0pKHRpbWUsdGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5tb250aERhdGUpO3RoaXMudXNlcklucHV0VGltZT1udWxsO3RoaXMuJHJlZnMudGltZXBpY2tlci52YWx1ZT10aGlzLmRhdGU7dGhpcy50aW1lUGlja2VyVmlzaWJsZT1mYWxzZTt0aGlzLmVtaXQodGhpcy5kYXRlLHRydWUpO319LGhhbmRsZVZpc2libGVEYXRlQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZVZpc2libGVEYXRlQ2hhbmdlKHZhbHVlKXt2YXIgZGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sicGFyc2VEYXRlIl0pKHZhbHVlLHRoaXMuZGF0ZUZvcm1hdCk7aWYoZGF0ZSl7aWYodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlPT09J2Z1bmN0aW9uJyYmdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkpe3JldHVybjt9dGhpcy5kYXRlPU9iamVjdChkYXRlX3V0aWxfWyJtb2RpZnlUaW1lIl0pKGRhdGUsdGhpcy5kYXRlLmdldEhvdXJzKCksdGhpcy5kYXRlLmdldE1pbnV0ZXMoKSx0aGlzLmRhdGUuZ2V0U2Vjb25kcygpKTt0aGlzLnVzZXJJbnB1dERhdGU9bnVsbDt0aGlzLnJlc2V0VmlldygpO3RoaXMuZW1pdCh0aGlzLmRhdGUsdHJ1ZSk7fX0saXNWYWxpZFZhbHVlOmZ1bmN0aW9uIGlzVmFsaWRWYWx1ZSh2YWx1ZSl7cmV0dXJuIHZhbHVlJiYhaXNOYU4odmFsdWUpJiYodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlPT09J2Z1bmN0aW9uJz8hdGhpcy5kaXNhYmxlZERhdGUodmFsdWUpOnRydWUpJiZ0aGlzLmNoZWNrRGF0ZVdpdGhpblJhbmdlKHZhbHVlKTt9LGdldERlZmF1bHRWYWx1ZTpmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKXsvLyBpZiBkZWZhdWx0LXZhbHVlIGlzIHNldCwgcmV0dXJuIGl0Ci8vIG90aGVyd2lzZSwgcmV0dXJuIG5vdyAodGhlIG1vbWVudCB0aGlzIG1ldGhvZCBnZXRzIGNhbGxlZCkKcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlP25ldyBEYXRlKHRoaXMuZGVmYXVsdFZhbHVlKTpuZXcgRGF0ZSgpO30sY2hlY2tEYXRlV2l0aGluUmFuZ2U6ZnVuY3Rpb24gY2hlY2tEYXRlV2l0aGluUmFuZ2UoZGF0ZSl7cmV0dXJuIHRoaXMuc2VsZWN0YWJsZVJhbmdlLmxlbmd0aD4wP09iamVjdChkYXRlX3V0aWxfWyJ0aW1lV2l0aGluUmFuZ2UiXSkoZGF0ZSx0aGlzLnNlbGVjdGFibGVSYW5nZSx0aGlzLmZvcm1hdHx8J0hIOm1tOnNzJyk6dHJ1ZTt9fSxjb21wb25lbnRzOntUaW1lUGlja2VyOnBhbmVsX3RpbWUsWWVhclRhYmxlOnllYXJfdGFibGUsTW9udGhUYWJsZTptb250aF90YWJsZSxEYXRlVGFibGU6ZGF0ZV90YWJsZSxFbElucHV0OmlucHV0X2RlZmF1bHQuYSxFbEJ1dHRvbjpidXR0b25fZGVmYXVsdC5hfSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57cG9wcGVyQ2xhc3M6JycsZGF0ZTpuZXcgRGF0ZSgpLHZhbHVlOicnLGRlZmF1bHRWYWx1ZTpudWxsLC8vIHVzZSBnZXREZWZhdWx0VmFsdWUoKSBmb3IgdGltZSBjb21wdXRhdGlvbgpkZWZhdWx0VGltZTpudWxsLHNob3dUaW1lOmZhbHNlLHNlbGVjdGlvbk1vZGU6J2RheScsc2hvcnRjdXRzOicnLHZpc2libGU6ZmFsc2UsY3VycmVudFZpZXc6J2RhdGUnLGRpc2FibGVkRGF0ZTonJyxjZWxsQ2xhc3NOYW1lOicnLHNlbGVjdGFibGVSYW5nZTpbXSxmaXJzdERheU9mV2Vlazo3LHNob3dXZWVrTnVtYmVyOmZhbHNlLHRpbWVQaWNrZXJWaXNpYmxlOmZhbHNlLGZvcm1hdDonJyxhcnJvd0NvbnRyb2w6ZmFsc2UsdXNlcklucHV0RGF0ZTpudWxsLHVzZXJJbnB1dFRpbWU6bnVsbH07fSxjb21wdXRlZDp7eWVhcjpmdW5jdGlvbiB5ZWFyKCl7cmV0dXJuIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpO30sbW9udGg6ZnVuY3Rpb24gbW9udGgoKXtyZXR1cm4gdGhpcy5kYXRlLmdldE1vbnRoKCk7fSx3ZWVrOmZ1bmN0aW9uIHdlZWsoKXtyZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bImdldFdlZWtOdW1iZXIiXSkodGhpcy5kYXRlKTt9LG1vbnRoRGF0ZTpmdW5jdGlvbiBtb250aERhdGUoKXtyZXR1cm4gdGhpcy5kYXRlLmdldERhdGUoKTt9LGZvb3RlclZpc2libGU6ZnVuY3Rpb24gZm9vdGVyVmlzaWJsZSgpe3JldHVybiB0aGlzLnNob3dUaW1lfHx0aGlzLnNlbGVjdGlvbk1vZGU9PT0nZGF0ZXMnO30sdmlzaWJsZVRpbWU6ZnVuY3Rpb24gdmlzaWJsZVRpbWUoKXtpZih0aGlzLnVzZXJJbnB1dFRpbWUhPT1udWxsKXtyZXR1cm4gdGhpcy51c2VySW5wdXRUaW1lO31lbHNle3JldHVybiBPYmplY3QoZGF0ZV91dGlsX1siZm9ybWF0RGF0ZSJdKSh0aGlzLnZhbHVlfHx0aGlzLmRlZmF1bHRWYWx1ZSx0aGlzLnRpbWVGb3JtYXQpO319LHZpc2libGVEYXRlOmZ1bmN0aW9uIHZpc2libGVEYXRlKCl7aWYodGhpcy51c2VySW5wdXREYXRlIT09bnVsbCl7cmV0dXJuIHRoaXMudXNlcklucHV0RGF0ZTt9ZWxzZXtyZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bImZvcm1hdERhdGUiXSkodGhpcy52YWx1ZXx8dGhpcy5kZWZhdWx0VmFsdWUsdGhpcy5kYXRlRm9ybWF0KTt9fSx5ZWFyTGFiZWw6ZnVuY3Rpb24geWVhckxhYmVsKCl7dmFyIHllYXJUcmFuc2xhdGlvbj10aGlzLnQoJ2VsLmRhdGVwaWNrZXIueWVhcicpO2lmKHRoaXMuY3VycmVudFZpZXc9PT0neWVhcicpe3ZhciBzdGFydFllYXI9TWF0aC5mbG9vcih0aGlzLnllYXIvMTApKjEwO2lmKHllYXJUcmFuc2xhdGlvbil7cmV0dXJuIHN0YXJ0WWVhcisnICcreWVhclRyYW5zbGF0aW9uKycgLSAnKyhzdGFydFllYXIrOSkrJyAnK3llYXJUcmFuc2xhdGlvbjt9cmV0dXJuIHN0YXJ0WWVhcisnIC0gJysoc3RhcnRZZWFyKzkpO31yZXR1cm4gdGhpcy55ZWFyKycgJyt5ZWFyVHJhbnNsYXRpb247fSx0aW1lRm9ybWF0OmZ1bmN0aW9uIHRpbWVGb3JtYXQoKXtpZih0aGlzLmZvcm1hdCl7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJleHRyYWN0VGltZUZvcm1hdCJdKSh0aGlzLmZvcm1hdCk7fWVsc2V7cmV0dXJuJ0hIOm1tOnNzJzt9fSxkYXRlRm9ybWF0OmZ1bmN0aW9uIGRhdGVGb3JtYXQoKXtpZih0aGlzLmZvcm1hdCl7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJleHRyYWN0RGF0ZUZvcm1hdCJdKSh0aGlzLmZvcm1hdCk7fWVsc2V7cmV0dXJuJ3l5eXktTU0tZGQnO319fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvZGF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFuZWxfZGF0ZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1kYXRldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL2RhdGUudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgZGF0ZV9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhbmVsX2RhdGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sZGF0ZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI0NDBkNGVhX3JlbmRlcixkYXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ0MGQ0ZWFfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBkYXRlX2FwaTt9ZGF0ZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYW5lbF9kYXRlPWRhdGVfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvZGF0ZS1yYW5nZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjY1Mjg0OWEmCnZhciBkYXRlX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjY1Mjg0OWFfcmVuZGVyPWZ1bmN0aW9uIGRhdGVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNjUyODQ5YV9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifSxvbjp7ImFmdGVyLWxlYXZlIjpmdW5jdGlvbiBhZnRlckxlYXZlKCRldmVudCl7X3ZtLiRlbWl0KCJkb2Rlc3Ryb3kiKTt9fX0sW19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0udmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWwgZWwtZGF0ZS1yYW5nZS1waWNrZXIgZWwtcG9wcGVyIixjbGFzczpbeyJoYXMtc2lkZWJhciI6X3ZtLiRzbG90cy5zaWRlYmFyfHxfdm0uc2hvcnRjdXRzLCJoYXMtdGltZSI6X3ZtLnNob3dUaW1lfSxfdm0ucG9wcGVyQ2xhc3NdfSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2JvZHktd3JhcHBlciJ9LFtfdm0uX3QoInNpZGViYXIiKSxfdm0uc2hvcnRjdXRzP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19zaWRlYmFyIn0sX3ZtLl9sKF92bS5zaG9ydGN1dHMsZnVuY3Rpb24oc2hvcnRjdXQsa2V5KXtyZXR1cm4gX2MoImJ1dHRvbiIse2tleTprZXksc3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtfdm0uaGFuZGxlU2hvcnRjdXRDbGljayhzaG9ydGN1dCk7fX19LFtfdm0uX3YoX3ZtLl9zKHNob3J0Y3V0LnRleHQpKV0pO30pLDApOl92bS5fZSgpLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19ib2R5In0sW192bS5zaG93VGltZT9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLWhlYWRlciJ9LFtfYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9ycy13cmFwIn0sW19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwIn0sW19jKCJlbC1pbnB1dCIse3JlZjoibWluSW5wdXQiLHN0YXRpY0NsYXNzOiJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9yIixhdHRyczp7c2l6ZToic21hbGwiLGRpc2FibGVkOl92bS5yYW5nZVN0YXRlLnNlbGVjdGluZyxwbGFjZWhvbGRlcjpfdm0udCgiZWwuZGF0ZXBpY2tlci5zdGFydERhdGUiKSx2YWx1ZTpfdm0ubWluVmlzaWJsZURhdGV9LG9uOntpbnB1dDpmdW5jdGlvbiBpbnB1dCh2YWwpe3JldHVybiBfdm0uaGFuZGxlRGF0ZUlucHV0KHZhbCwibWluIik7fSxjaGFuZ2U6ZnVuY3Rpb24gY2hhbmdlKHZhbCl7cmV0dXJuIF92bS5oYW5kbGVEYXRlQ2hhbmdlKHZhbCwibWluIik7fX19KV0sMSksX2MoInNwYW4iLHtkaXJlY3RpdmVzOlt7bmFtZToiY2xpY2tvdXRzaWRlIixyYXdOYW1lOiJ2LWNsaWNrb3V0c2lkZSIsdmFsdWU6X3ZtLmhhbmRsZU1pblRpbWVDbG9zZSxleHByZXNzaW9uOiJoYW5kbGVNaW5UaW1lQ2xvc2UifV0sc3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwIn0sW19jKCJlbC1pbnB1dCIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9yIixhdHRyczp7c2l6ZToic21hbGwiLGRpc2FibGVkOl92bS5yYW5nZVN0YXRlLnNlbGVjdGluZyxwbGFjZWhvbGRlcjpfdm0udCgiZWwuZGF0ZXBpY2tlci5zdGFydFRpbWUiKSx2YWx1ZTpfdm0ubWluVmlzaWJsZVRpbWV9LG9uOntmb2N1czpmdW5jdGlvbiBmb2N1cygkZXZlbnQpe192bS5taW5UaW1lUGlja2VyVmlzaWJsZT10cnVlO30saW5wdXQ6ZnVuY3Rpb24gaW5wdXQodmFsKXtyZXR1cm4gX3ZtLmhhbmRsZVRpbWVJbnB1dCh2YWwsIm1pbiIpO30sY2hhbmdlOmZ1bmN0aW9uIGNoYW5nZSh2YWwpe3JldHVybiBfdm0uaGFuZGxlVGltZUNoYW5nZSh2YWwsIm1pbiIpO319fSksX2MoInRpbWUtcGlja2VyIix7cmVmOiJtaW5UaW1lUGlja2VyIixhdHRyczp7InRpbWUtYXJyb3ctY29udHJvbCI6X3ZtLmFycm93Q29udHJvbCx2aXNpYmxlOl92bS5taW5UaW1lUGlja2VyVmlzaWJsZX0sb246e3BpY2s6X3ZtLmhhbmRsZU1pblRpbWVQaWNrLG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgkZXZlbnQpe192bS4kcmVmcy5taW5UaW1lUGlja2VyLmZvcm1hdD1fdm0udGltZUZvcm1hdDt9fX0pXSwxKV0pLF9jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWljb24tYXJyb3ctcmlnaHQifSksX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvcnMtd3JhcCBpcy1yaWdodCJ9LFtfYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1waWNrZXItd3JhcCJ9LFtfYygiZWwtaW5wdXQiLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvciIsYXR0cnM6e3NpemU6InNtYWxsIixkaXNhYmxlZDpfdm0ucmFuZ2VTdGF0ZS5zZWxlY3RpbmcscGxhY2Vob2xkZXI6X3ZtLnQoImVsLmRhdGVwaWNrZXIuZW5kRGF0ZSIpLHZhbHVlOl92bS5tYXhWaXNpYmxlRGF0ZSxyZWFkb25seTohX3ZtLm1pbkRhdGV9LG9uOntpbnB1dDpmdW5jdGlvbiBpbnB1dCh2YWwpe3JldHVybiBfdm0uaGFuZGxlRGF0ZUlucHV0KHZhbCwibWF4Iik7fSxjaGFuZ2U6ZnVuY3Rpb24gY2hhbmdlKHZhbCl7cmV0dXJuIF92bS5oYW5kbGVEYXRlQ2hhbmdlKHZhbCwibWF4Iik7fX19KV0sMSksX2MoInNwYW4iLHtkaXJlY3RpdmVzOlt7bmFtZToiY2xpY2tvdXRzaWRlIixyYXdOYW1lOiJ2LWNsaWNrb3V0c2lkZSIsdmFsdWU6X3ZtLmhhbmRsZU1heFRpbWVDbG9zZSxleHByZXNzaW9uOiJoYW5kbGVNYXhUaW1lQ2xvc2UifV0sc3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwIn0sW19jKCJlbC1pbnB1dCIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9yIixhdHRyczp7c2l6ZToic21hbGwiLGRpc2FibGVkOl92bS5yYW5nZVN0YXRlLnNlbGVjdGluZyxwbGFjZWhvbGRlcjpfdm0udCgiZWwuZGF0ZXBpY2tlci5lbmRUaW1lIiksdmFsdWU6X3ZtLm1heFZpc2libGVUaW1lLHJlYWRvbmx5OiFfdm0ubWluRGF0ZX0sb246e2ZvY3VzOmZ1bmN0aW9uIGZvY3VzKCRldmVudCl7X3ZtLm1pbkRhdGUmJihfdm0ubWF4VGltZVBpY2tlclZpc2libGU9dHJ1ZSk7fSxpbnB1dDpmdW5jdGlvbiBpbnB1dCh2YWwpe3JldHVybiBfdm0uaGFuZGxlVGltZUlucHV0KHZhbCwibWF4Iik7fSxjaGFuZ2U6ZnVuY3Rpb24gY2hhbmdlKHZhbCl7cmV0dXJuIF92bS5oYW5kbGVUaW1lQ2hhbmdlKHZhbCwibWF4Iik7fX19KSxfYygidGltZS1waWNrZXIiLHtyZWY6Im1heFRpbWVQaWNrZXIiLGF0dHJzOnsidGltZS1hcnJvdy1jb250cm9sIjpfdm0uYXJyb3dDb250cm9sLHZpc2libGU6X3ZtLm1heFRpbWVQaWNrZXJWaXNpYmxlfSxvbjp7cGljazpfdm0uaGFuZGxlTWF4VGltZVBpY2ssbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCRldmVudCl7X3ZtLiRyZWZzLm1heFRpbWVQaWNrZXIuZm9ybWF0PV92bS50aW1lRm9ybWF0O319fSldLDEpXSldKTpfdm0uX2UoKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fY29udGVudCBlbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCBpcy1sZWZ0In0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlciJ9LFtfYygiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LWxlZnQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6X3ZtLmxlZnRQcmV2WWVhcn19KSxfYygiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1hcnJvdy1sZWZ0IixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e2NsaWNrOl92bS5sZWZ0UHJldk1vbnRofX0pLF92bS51bmxpbmtQYW5lbHM/X2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tZC1hcnJvdy1yaWdodCIsY2xhc3M6eyJpcy1kaXNhYmxlZCI6IV92bS5lbmFibGVZZWFyQXJyb3d9LGF0dHJzOnt0eXBlOiJidXR0b24iLGRpc2FibGVkOiFfdm0uZW5hYmxlWWVhckFycm93fSxvbjp7Y2xpY2s6X3ZtLmxlZnROZXh0WWVhcn19KTpfdm0uX2UoKSxfdm0udW5saW5rUGFuZWxzP19jKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWFycm93LXJpZ2h0IixjbGFzczp7ImlzLWRpc2FibGVkIjohX3ZtLmVuYWJsZU1vbnRoQXJyb3d9LGF0dHJzOnt0eXBlOiJidXR0b24iLGRpc2FibGVkOiFfdm0uZW5hYmxlTW9udGhBcnJvd30sb246e2NsaWNrOl92bS5sZWZ0TmV4dE1vbnRofX0pOl92bS5fZSgpLF9jKCJkaXYiLFtfdm0uX3YoX3ZtLl9zKF92bS5sZWZ0TGFiZWwpKV0pXSksX2MoImRhdGUtdGFibGUiLHthdHRyczp7InNlbGVjdGlvbi1tb2RlIjoicmFuZ2UiLGRhdGU6X3ZtLmxlZnREYXRlLCJkZWZhdWx0LXZhbHVlIjpfdm0uZGVmYXVsdFZhbHVlLCJtaW4tZGF0ZSI6X3ZtLm1pbkRhdGUsIm1heC1kYXRlIjpfdm0ubWF4RGF0ZSwicmFuZ2Utc3RhdGUiOl92bS5yYW5nZVN0YXRlLCJkaXNhYmxlZC1kYXRlIjpfdm0uZGlzYWJsZWREYXRlLCJjZWxsLWNsYXNzLW5hbWUiOl92bS5jZWxsQ2xhc3NOYW1lLCJmaXJzdC1kYXktb2Ytd2VlayI6X3ZtLmZpcnN0RGF5T2ZXZWVrfSxvbjp7Y2hhbmdlcmFuZ2U6X3ZtLmhhbmRsZUNoYW5nZVJhbmdlLHBpY2s6X3ZtLmhhbmRsZVJhbmdlUGlja319KV0sMSksX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2NvbnRlbnQgZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnQgaXMtcmlnaHQifSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIn0sW192bS51bmxpbmtQYW5lbHM/X2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tZC1hcnJvdy1sZWZ0IixjbGFzczp7ImlzLWRpc2FibGVkIjohX3ZtLmVuYWJsZVllYXJBcnJvd30sYXR0cnM6e3R5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6IV92bS5lbmFibGVZZWFyQXJyb3d9LG9uOntjbGljazpfdm0ucmlnaHRQcmV2WWVhcn19KTpfdm0uX2UoKSxfdm0udW5saW5rUGFuZWxzP19jKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWFycm93LWxlZnQiLGNsYXNzOnsiaXMtZGlzYWJsZWQiOiFfdm0uZW5hYmxlTW9udGhBcnJvd30sYXR0cnM6e3R5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6IV92bS5lbmFibGVNb250aEFycm93fSxvbjp7Y2xpY2s6X3ZtLnJpZ2h0UHJldk1vbnRofX0pOl92bS5fZSgpLF9jKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6X3ZtLnJpZ2h0TmV4dFllYXJ9fSksX2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tYXJyb3ctcmlnaHQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6X3ZtLnJpZ2h0TmV4dE1vbnRofX0pLF9jKCJkaXYiLFtfdm0uX3YoX3ZtLl9zKF92bS5yaWdodExhYmVsKSldKV0pLF9jKCJkYXRlLXRhYmxlIix7YXR0cnM6eyJzZWxlY3Rpb24tbW9kZSI6InJhbmdlIixkYXRlOl92bS5yaWdodERhdGUsImRlZmF1bHQtdmFsdWUiOl92bS5kZWZhdWx0VmFsdWUsIm1pbi1kYXRlIjpfdm0ubWluRGF0ZSwibWF4LWRhdGUiOl92bS5tYXhEYXRlLCJyYW5nZS1zdGF0ZSI6X3ZtLnJhbmdlU3RhdGUsImRpc2FibGVkLWRhdGUiOl92bS5kaXNhYmxlZERhdGUsImNlbGwtY2xhc3MtbmFtZSI6X3ZtLmNlbGxDbGFzc05hbWUsImZpcnN0LWRheS1vZi13ZWVrIjpfdm0uZmlyc3REYXlPZldlZWt9LG9uOntjaGFuZ2VyYW5nZTpfdm0uaGFuZGxlQ2hhbmdlUmFuZ2UscGljazpfdm0uaGFuZGxlUmFuZ2VQaWNrfX0pXSwxKV0pXSwyKSxfdm0uc2hvd1RpbWU/X2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2Zvb3RlciJ9LFtfYygiZWwtYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fbGluay1idG4iLGF0dHJzOntzaXplOiJtaW5pIix0eXBlOiJ0ZXh0In0sb246e2NsaWNrOl92bS5oYW5kbGVDbGVhcn19LFtfdm0uX3YoIlxuICAgICAgICAiK192bS5fcyhfdm0udCgiZWwuZGF0ZXBpY2tlci5jbGVhciIpKSsiXG4gICAgICAiKV0pLF9jKCJlbC1idXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19saW5rLWJ0biIsYXR0cnM6e3BsYWluOiIiLHNpemU6Im1pbmkiLGRpc2FibGVkOl92bS5idG5EaXNhYmxlZH0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLmhhbmRsZUNvbmZpcm0oZmFsc2UpO319fSxbX3ZtLl92KCJcbiAgICAgICAgIitfdm0uX3MoX3ZtLnQoImVsLmRhdGVwaWNrZXIuY29uZmlybSIpKSsiXG4gICAgICAiKV0pXSwxKTpfdm0uX2UoKV0pXSk7fTt2YXIgZGF0ZV9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI2NTI4NDlhX3N0YXRpY1JlbmRlckZucz1bXTtkYXRlX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjY1Mjg0OWFfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLXJhbmdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNjUyODQ5YSYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL2RhdGUtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwp2YXIgZGF0ZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NhbGNEZWZhdWx0VmFsdWU9ZnVuY3Rpb24gY2FsY0RlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWUpe2lmKEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSl7cmV0dXJuW25ldyBEYXRlKGRlZmF1bHRWYWx1ZVswXSksbmV3IERhdGUoZGVmYXVsdFZhbHVlWzFdKV07fWVsc2UgaWYoZGVmYXVsdFZhbHVlKXtyZXR1cm5bbmV3IERhdGUoZGVmYXVsdFZhbHVlKSxPYmplY3QoZGF0ZV91dGlsX1sibmV4dERhdGUiXSkobmV3IERhdGUoZGVmYXVsdFZhbHVlKSwxKV07fWVsc2V7cmV0dXJuW25ldyBEYXRlKCksT2JqZWN0KGRhdGVfdXRpbF9bIm5leHREYXRlIl0pKG5ldyBEYXRlKCksMSldO319Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZGF0ZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bWl4aW5zOltsb2NhbGVfZGVmYXVsdC5hXSxkaXJlY3RpdmVzOntDbGlja291dHNpZGU6Y2xpY2tvdXRzaWRlX2RlZmF1bHQuYX0sY29tcHV0ZWQ6e2J0bkRpc2FibGVkOmZ1bmN0aW9uIGJ0bkRpc2FibGVkKCl7cmV0dXJuISh0aGlzLm1pbkRhdGUmJnRoaXMubWF4RGF0ZSYmIXRoaXMuc2VsZWN0aW5nJiZ0aGlzLmlzVmFsaWRWYWx1ZShbdGhpcy5taW5EYXRlLHRoaXMubWF4RGF0ZV0pKTt9LGxlZnRMYWJlbDpmdW5jdGlvbiBsZWZ0TGFiZWwoKXtyZXR1cm4gdGhpcy5sZWZ0RGF0ZS5nZXRGdWxsWWVhcigpKycgJyt0aGlzLnQoJ2VsLmRhdGVwaWNrZXIueWVhcicpKycgJyt0aGlzLnQoJ2VsLmRhdGVwaWNrZXIubW9udGgnKyh0aGlzLmxlZnREYXRlLmdldE1vbnRoKCkrMSkpO30scmlnaHRMYWJlbDpmdW5jdGlvbiByaWdodExhYmVsKCl7cmV0dXJuIHRoaXMucmlnaHREYXRlLmdldEZ1bGxZZWFyKCkrJyAnK3RoaXMudCgnZWwuZGF0ZXBpY2tlci55ZWFyJykrJyAnK3RoaXMudCgnZWwuZGF0ZXBpY2tlci5tb250aCcrKHRoaXMucmlnaHREYXRlLmdldE1vbnRoKCkrMSkpO30sbGVmdFllYXI6ZnVuY3Rpb24gbGVmdFllYXIoKXtyZXR1cm4gdGhpcy5sZWZ0RGF0ZS5nZXRGdWxsWWVhcigpO30sbGVmdE1vbnRoOmZ1bmN0aW9uIGxlZnRNb250aCgpe3JldHVybiB0aGlzLmxlZnREYXRlLmdldE1vbnRoKCk7fSxsZWZ0TW9udGhEYXRlOmZ1bmN0aW9uIGxlZnRNb250aERhdGUoKXtyZXR1cm4gdGhpcy5sZWZ0RGF0ZS5nZXREYXRlKCk7fSxyaWdodFllYXI6ZnVuY3Rpb24gcmlnaHRZZWFyKCl7cmV0dXJuIHRoaXMucmlnaHREYXRlLmdldEZ1bGxZZWFyKCk7fSxyaWdodE1vbnRoOmZ1bmN0aW9uIHJpZ2h0TW9udGgoKXtyZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0TW9udGgoKTt9LHJpZ2h0TW9udGhEYXRlOmZ1bmN0aW9uIHJpZ2h0TW9udGhEYXRlKCl7cmV0dXJuIHRoaXMucmlnaHREYXRlLmdldERhdGUoKTt9LG1pblZpc2libGVEYXRlOmZ1bmN0aW9uIG1pblZpc2libGVEYXRlKCl7aWYodGhpcy5kYXRlVXNlcklucHV0Lm1pbiE9PW51bGwpcmV0dXJuIHRoaXMuZGF0ZVVzZXJJbnB1dC5taW47aWYodGhpcy5taW5EYXRlKXJldHVybiBPYmplY3QoZGF0ZV91dGlsX1siZm9ybWF0RGF0ZSJdKSh0aGlzLm1pbkRhdGUsdGhpcy5kYXRlRm9ybWF0KTtyZXR1cm4nJzt9LG1heFZpc2libGVEYXRlOmZ1bmN0aW9uIG1heFZpc2libGVEYXRlKCl7aWYodGhpcy5kYXRlVXNlcklucHV0Lm1heCE9PW51bGwpcmV0dXJuIHRoaXMuZGF0ZVVzZXJJbnB1dC5tYXg7aWYodGhpcy5tYXhEYXRlfHx0aGlzLm1pbkRhdGUpcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJmb3JtYXREYXRlIl0pKHRoaXMubWF4RGF0ZXx8dGhpcy5taW5EYXRlLHRoaXMuZGF0ZUZvcm1hdCk7cmV0dXJuJyc7fSxtaW5WaXNpYmxlVGltZTpmdW5jdGlvbiBtaW5WaXNpYmxlVGltZSgpe2lmKHRoaXMudGltZVVzZXJJbnB1dC5taW4hPT1udWxsKXJldHVybiB0aGlzLnRpbWVVc2VySW5wdXQubWluO2lmKHRoaXMubWluRGF0ZSlyZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bImZvcm1hdERhdGUiXSkodGhpcy5taW5EYXRlLHRoaXMudGltZUZvcm1hdCk7cmV0dXJuJyc7fSxtYXhWaXNpYmxlVGltZTpmdW5jdGlvbiBtYXhWaXNpYmxlVGltZSgpe2lmKHRoaXMudGltZVVzZXJJbnB1dC5tYXghPT1udWxsKXJldHVybiB0aGlzLnRpbWVVc2VySW5wdXQubWF4O2lmKHRoaXMubWF4RGF0ZXx8dGhpcy5taW5EYXRlKXJldHVybiBPYmplY3QoZGF0ZV91dGlsX1siZm9ybWF0RGF0ZSJdKSh0aGlzLm1heERhdGV8fHRoaXMubWluRGF0ZSx0aGlzLnRpbWVGb3JtYXQpO3JldHVybicnO30sdGltZUZvcm1hdDpmdW5jdGlvbiB0aW1lRm9ybWF0KCl7aWYodGhpcy5mb3JtYXQpe3JldHVybiBPYmplY3QoZGF0ZV91dGlsX1siZXh0cmFjdFRpbWVGb3JtYXQiXSkodGhpcy5mb3JtYXQpO31lbHNle3JldHVybidISDptbTpzcyc7fX0sZGF0ZUZvcm1hdDpmdW5jdGlvbiBkYXRlRm9ybWF0KCl7aWYodGhpcy5mb3JtYXQpe3JldHVybiBPYmplY3QoZGF0ZV91dGlsX1siZXh0cmFjdERhdGVGb3JtYXQiXSkodGhpcy5mb3JtYXQpO31lbHNle3JldHVybid5eXl5LU1NLWRkJzt9fSxlbmFibGVNb250aEFycm93OmZ1bmN0aW9uIGVuYWJsZU1vbnRoQXJyb3coKXt2YXIgbmV4dE1vbnRoPSh0aGlzLmxlZnRNb250aCsxKSUxMjt2YXIgeWVhck9mZnNldD10aGlzLmxlZnRNb250aCsxPj0xMj8xOjA7cmV0dXJuIHRoaXMudW5saW5rUGFuZWxzJiZuZXcgRGF0ZSh0aGlzLmxlZnRZZWFyK3llYXJPZmZzZXQsbmV4dE1vbnRoKTxuZXcgRGF0ZSh0aGlzLnJpZ2h0WWVhcix0aGlzLnJpZ2h0TW9udGgpO30sZW5hYmxlWWVhckFycm93OmZ1bmN0aW9uIGVuYWJsZVllYXJBcnJvdygpe3JldHVybiB0aGlzLnVubGlua1BhbmVscyYmdGhpcy5yaWdodFllYXIqMTIrdGhpcy5yaWdodE1vbnRoLSh0aGlzLmxlZnRZZWFyKjEyK3RoaXMubGVmdE1vbnRoKzEpPj0xMjt9fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57cG9wcGVyQ2xhc3M6JycsdmFsdWU6W10sZGVmYXVsdFZhbHVlOm51bGwsZGVmYXVsdFRpbWU6bnVsbCxtaW5EYXRlOicnLG1heERhdGU6JycsbGVmdERhdGU6bmV3IERhdGUoKSxyaWdodERhdGU6T2JqZWN0KGRhdGVfdXRpbF9bIm5leHRNb250aCJdKShuZXcgRGF0ZSgpKSxyYW5nZVN0YXRlOntlbmREYXRlOm51bGwsc2VsZWN0aW5nOmZhbHNlLHJvdzpudWxsLGNvbHVtbjpudWxsfSxzaG93VGltZTpmYWxzZSxzaG9ydGN1dHM6JycsdmlzaWJsZTonJyxkaXNhYmxlZERhdGU6JycsY2VsbENsYXNzTmFtZTonJyxmaXJzdERheU9mV2Vlazo3LG1pblRpbWVQaWNrZXJWaXNpYmxlOmZhbHNlLG1heFRpbWVQaWNrZXJWaXNpYmxlOmZhbHNlLGZvcm1hdDonJyxhcnJvd0NvbnRyb2w6ZmFsc2UsdW5saW5rUGFuZWxzOmZhbHNlLGRhdGVVc2VySW5wdXQ6e21pbjpudWxsLG1heDpudWxsfSx0aW1lVXNlcklucHV0OnttaW46bnVsbCxtYXg6bnVsbH19O30sd2F0Y2g6e21pbkRhdGU6ZnVuY3Rpb24gbWluRGF0ZSh2YWwpe3ZhciBfdGhpcz10aGlzO3RoaXMuZGF0ZVVzZXJJbnB1dC5taW49bnVsbDt0aGlzLnRpbWVVc2VySW5wdXQubWluPW51bGw7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpZihfdGhpcy4kcmVmcy5tYXhUaW1lUGlja2VyJiZfdGhpcy5tYXhEYXRlJiZfdGhpcy5tYXhEYXRlPF90aGlzLm1pbkRhdGUpe3ZhciBmb3JtYXQ9J0hIOm1tOnNzJztfdGhpcy4kcmVmcy5tYXhUaW1lUGlja2VyLnNlbGVjdGFibGVSYW5nZT1bW09iamVjdChkYXRlX3V0aWxfWyJwYXJzZURhdGUiXSkoT2JqZWN0KGRhdGVfdXRpbF9bImZvcm1hdERhdGUiXSkoX3RoaXMubWluRGF0ZSxmb3JtYXQpLGZvcm1hdCksT2JqZWN0KGRhdGVfdXRpbF9bInBhcnNlRGF0ZSJdKSgnMjM6NTk6NTknLGZvcm1hdCldXTt9fSk7aWYodmFsJiZ0aGlzLiRyZWZzLm1pblRpbWVQaWNrZXIpe3RoaXMuJHJlZnMubWluVGltZVBpY2tlci5kYXRlPXZhbDt0aGlzLiRyZWZzLm1pblRpbWVQaWNrZXIudmFsdWU9dmFsO319LG1heERhdGU6ZnVuY3Rpb24gbWF4RGF0ZSh2YWwpe3RoaXMuZGF0ZVVzZXJJbnB1dC5tYXg9bnVsbDt0aGlzLnRpbWVVc2VySW5wdXQubWF4PW51bGw7aWYodmFsJiZ0aGlzLiRyZWZzLm1heFRpbWVQaWNrZXIpe3RoaXMuJHJlZnMubWF4VGltZVBpY2tlci5kYXRlPXZhbDt0aGlzLiRyZWZzLm1heFRpbWVQaWNrZXIudmFsdWU9dmFsO319LG1pblRpbWVQaWNrZXJWaXNpYmxlOmZ1bmN0aW9uIG1pblRpbWVQaWNrZXJWaXNpYmxlKHZhbCl7dmFyIF90aGlzMj10aGlzO2lmKHZhbCl7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtfdGhpczIuJHJlZnMubWluVGltZVBpY2tlci5kYXRlPV90aGlzMi5taW5EYXRlO190aGlzMi4kcmVmcy5taW5UaW1lUGlja2VyLnZhbHVlPV90aGlzMi5taW5EYXRlO190aGlzMi4kcmVmcy5taW5UaW1lUGlja2VyLmFkanVzdFNwaW5uZXJzKCk7fSk7fX0sbWF4VGltZVBpY2tlclZpc2libGU6ZnVuY3Rpb24gbWF4VGltZVBpY2tlclZpc2libGUodmFsKXt2YXIgX3RoaXMzPXRoaXM7aWYodmFsKXt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe190aGlzMy4kcmVmcy5tYXhUaW1lUGlja2VyLmRhdGU9X3RoaXMzLm1heERhdGU7X3RoaXMzLiRyZWZzLm1heFRpbWVQaWNrZXIudmFsdWU9X3RoaXMzLm1heERhdGU7X3RoaXMzLiRyZWZzLm1heFRpbWVQaWNrZXIuYWRqdXN0U3Bpbm5lcnMoKTt9KTt9fSx2YWx1ZTpmdW5jdGlvbiB2YWx1ZShuZXdWYWwpe2lmKCFuZXdWYWwpe3RoaXMubWluRGF0ZT1udWxsO3RoaXMubWF4RGF0ZT1udWxsO31lbHNlIGlmKEFycmF5LmlzQXJyYXkobmV3VmFsKSl7dGhpcy5taW5EYXRlPU9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkobmV3VmFsWzBdKT9uZXcgRGF0ZShuZXdWYWxbMF0pOm51bGw7dGhpcy5tYXhEYXRlPU9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkobmV3VmFsWzFdKT9uZXcgRGF0ZShuZXdWYWxbMV0pOm51bGw7aWYodGhpcy5taW5EYXRlKXt0aGlzLmxlZnREYXRlPXRoaXMubWluRGF0ZTtpZih0aGlzLnVubGlua1BhbmVscyYmdGhpcy5tYXhEYXRlKXt2YXIgbWluRGF0ZVllYXI9dGhpcy5taW5EYXRlLmdldEZ1bGxZZWFyKCk7dmFyIG1pbkRhdGVNb250aD10aGlzLm1pbkRhdGUuZ2V0TW9udGgoKTt2YXIgbWF4RGF0ZVllYXI9dGhpcy5tYXhEYXRlLmdldEZ1bGxZZWFyKCk7dmFyIG1heERhdGVNb250aD10aGlzLm1heERhdGUuZ2V0TW9udGgoKTt0aGlzLnJpZ2h0RGF0ZT1taW5EYXRlWWVhcj09PW1heERhdGVZZWFyJiZtaW5EYXRlTW9udGg9PT1tYXhEYXRlTW9udGg/T2JqZWN0KGRhdGVfdXRpbF9bIm5leHRNb250aCJdKSh0aGlzLm1heERhdGUpOnRoaXMubWF4RGF0ZTt9ZWxzZXt0aGlzLnJpZ2h0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpO319ZWxzZXt0aGlzLmxlZnREYXRlPWRhdGVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jYWxjRGVmYXVsdFZhbHVlKHRoaXMuZGVmYXVsdFZhbHVlKVswXTt0aGlzLnJpZ2h0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpO319fSxkZWZhdWx0VmFsdWU6ZnVuY3Rpb24gZGVmYXVsdFZhbHVlKHZhbCl7aWYoIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpe3ZhciBfY2FsY0RlZmF1bHRWYWx1ZT1kYXRlX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY2FsY0RlZmF1bHRWYWx1ZSh2YWwpLGxlZnQ9X2NhbGNEZWZhdWx0VmFsdWVbMF0scmlnaHQ9X2NhbGNEZWZhdWx0VmFsdWVbMV07dGhpcy5sZWZ0RGF0ZT1sZWZ0O3RoaXMucmlnaHREYXRlPXZhbCYmdmFsWzFdJiZ0aGlzLnVubGlua1BhbmVscz9yaWdodDpPYmplY3QoZGF0ZV91dGlsX1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpO319fSxtZXRob2RzOntoYW5kbGVDbGVhcjpmdW5jdGlvbiBoYW5kbGVDbGVhcigpe3RoaXMubWluRGF0ZT1udWxsO3RoaXMubWF4RGF0ZT1udWxsO3RoaXMubGVmdERhdGU9ZGF0ZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NhbGNEZWZhdWx0VmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpWzBdO3RoaXMucmlnaHREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJuZXh0TW9udGgiXSkodGhpcy5sZWZ0RGF0ZSk7dGhpcy4kZW1pdCgncGljaycsbnVsbCk7fSxoYW5kbGVDaGFuZ2VSYW5nZTpmdW5jdGlvbiBoYW5kbGVDaGFuZ2VSYW5nZSh2YWwpe3RoaXMubWluRGF0ZT12YWwubWluRGF0ZTt0aGlzLm1heERhdGU9dmFsLm1heERhdGU7dGhpcy5yYW5nZVN0YXRlPXZhbC5yYW5nZVN0YXRlO30saGFuZGxlRGF0ZUlucHV0OmZ1bmN0aW9uIGhhbmRsZURhdGVJbnB1dCh2YWx1ZSx0eXBlKXt0aGlzLmRhdGVVc2VySW5wdXRbdHlwZV09dmFsdWU7aWYodmFsdWUubGVuZ3RoIT09dGhpcy5kYXRlRm9ybWF0Lmxlbmd0aClyZXR1cm47dmFyIHBhcnNlZFZhbHVlPU9iamVjdChkYXRlX3V0aWxfWyJwYXJzZURhdGUiXSkodmFsdWUsdGhpcy5kYXRlRm9ybWF0KTtpZihwYXJzZWRWYWx1ZSl7aWYodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlPT09J2Z1bmN0aW9uJyYmdGhpcy5kaXNhYmxlZERhdGUobmV3IERhdGUocGFyc2VkVmFsdWUpKSl7cmV0dXJuO31pZih0eXBlPT09J21pbicpe3RoaXMubWluRGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibW9kaWZ5RGF0ZSJdKSh0aGlzLm1pbkRhdGV8fG5ldyBEYXRlKCkscGFyc2VkVmFsdWUuZ2V0RnVsbFllYXIoKSxwYXJzZWRWYWx1ZS5nZXRNb250aCgpLHBhcnNlZFZhbHVlLmdldERhdGUoKSk7dGhpcy5sZWZ0RGF0ZT1uZXcgRGF0ZShwYXJzZWRWYWx1ZSk7aWYoIXRoaXMudW5saW5rUGFuZWxzKXt0aGlzLnJpZ2h0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpO319ZWxzZXt0aGlzLm1heERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeURhdGUiXSkodGhpcy5tYXhEYXRlfHxuZXcgRGF0ZSgpLHBhcnNlZFZhbHVlLmdldEZ1bGxZZWFyKCkscGFyc2VkVmFsdWUuZ2V0TW9udGgoKSxwYXJzZWRWYWx1ZS5nZXREYXRlKCkpO3RoaXMucmlnaHREYXRlPW5ldyBEYXRlKHBhcnNlZFZhbHVlKTtpZighdGhpcy51bmxpbmtQYW5lbHMpe3RoaXMubGVmdERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bInByZXZNb250aCJdKShwYXJzZWRWYWx1ZSk7fX19fSxoYW5kbGVEYXRlQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZURhdGVDaGFuZ2UodmFsdWUsdHlwZSl7dmFyIHBhcnNlZFZhbHVlPU9iamVjdChkYXRlX3V0aWxfWyJwYXJzZURhdGUiXSkodmFsdWUsdGhpcy5kYXRlRm9ybWF0KTtpZihwYXJzZWRWYWx1ZSl7aWYodHlwZT09PSdtaW4nKXt0aGlzLm1pbkRhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeURhdGUiXSkodGhpcy5taW5EYXRlLHBhcnNlZFZhbHVlLmdldEZ1bGxZZWFyKCkscGFyc2VkVmFsdWUuZ2V0TW9udGgoKSxwYXJzZWRWYWx1ZS5nZXREYXRlKCkpO2lmKHRoaXMubWluRGF0ZT50aGlzLm1heERhdGUpe3RoaXMubWF4RGF0ZT10aGlzLm1pbkRhdGU7fX1lbHNle3RoaXMubWF4RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibW9kaWZ5RGF0ZSJdKSh0aGlzLm1heERhdGUscGFyc2VkVmFsdWUuZ2V0RnVsbFllYXIoKSxwYXJzZWRWYWx1ZS5nZXRNb250aCgpLHBhcnNlZFZhbHVlLmdldERhdGUoKSk7aWYodGhpcy5tYXhEYXRlPHRoaXMubWluRGF0ZSl7dGhpcy5taW5EYXRlPXRoaXMubWF4RGF0ZTt9fX19LGhhbmRsZVRpbWVJbnB1dDpmdW5jdGlvbiBoYW5kbGVUaW1lSW5wdXQodmFsdWUsdHlwZSl7dmFyIF90aGlzND10aGlzO3RoaXMudGltZVVzZXJJbnB1dFt0eXBlXT12YWx1ZTtpZih2YWx1ZS5sZW5ndGghPT10aGlzLnRpbWVGb3JtYXQubGVuZ3RoKXJldHVybjt2YXIgcGFyc2VkVmFsdWU9T2JqZWN0KGRhdGVfdXRpbF9bInBhcnNlRGF0ZSJdKSh2YWx1ZSx0aGlzLnRpbWVGb3JtYXQpO2lmKHBhcnNlZFZhbHVlKXtpZih0eXBlPT09J21pbicpe3RoaXMubWluRGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibW9kaWZ5VGltZSJdKSh0aGlzLm1pbkRhdGUscGFyc2VkVmFsdWUuZ2V0SG91cnMoKSxwYXJzZWRWYWx1ZS5nZXRNaW51dGVzKCkscGFyc2VkVmFsdWUuZ2V0U2Vjb25kcygpKTt0aGlzLiRuZXh0VGljayhmdW5jdGlvbihfKXtyZXR1cm4gX3RoaXM0LiRyZWZzLm1pblRpbWVQaWNrZXIuYWRqdXN0U3Bpbm5lcnMoKTt9KTt9ZWxzZXt0aGlzLm1heERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeVRpbWUiXSkodGhpcy5tYXhEYXRlLHBhcnNlZFZhbHVlLmdldEhvdXJzKCkscGFyc2VkVmFsdWUuZ2V0TWludXRlcygpLHBhcnNlZFZhbHVlLmdldFNlY29uZHMoKSk7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oXyl7cmV0dXJuIF90aGlzNC4kcmVmcy5tYXhUaW1lUGlja2VyLmFkanVzdFNwaW5uZXJzKCk7fSk7fX19LGhhbmRsZVRpbWVDaGFuZ2U6ZnVuY3Rpb24gaGFuZGxlVGltZUNoYW5nZSh2YWx1ZSx0eXBlKXt2YXIgcGFyc2VkVmFsdWU9T2JqZWN0KGRhdGVfdXRpbF9bInBhcnNlRGF0ZSJdKSh2YWx1ZSx0aGlzLnRpbWVGb3JtYXQpO2lmKHBhcnNlZFZhbHVlKXtpZih0eXBlPT09J21pbicpe3RoaXMubWluRGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibW9kaWZ5VGltZSJdKSh0aGlzLm1pbkRhdGUscGFyc2VkVmFsdWUuZ2V0SG91cnMoKSxwYXJzZWRWYWx1ZS5nZXRNaW51dGVzKCkscGFyc2VkVmFsdWUuZ2V0U2Vjb25kcygpKTtpZih0aGlzLm1pbkRhdGU+dGhpcy5tYXhEYXRlKXt0aGlzLm1heERhdGU9dGhpcy5taW5EYXRlO310aGlzLiRyZWZzLm1pblRpbWVQaWNrZXIudmFsdWU9dGhpcy5taW5EYXRlO3RoaXMubWluVGltZVBpY2tlclZpc2libGU9ZmFsc2U7fWVsc2V7dGhpcy5tYXhEYXRlPU9iamVjdChkYXRlX3V0aWxfWyJtb2RpZnlUaW1lIl0pKHRoaXMubWF4RGF0ZSxwYXJzZWRWYWx1ZS5nZXRIb3VycygpLHBhcnNlZFZhbHVlLmdldE1pbnV0ZXMoKSxwYXJzZWRWYWx1ZS5nZXRTZWNvbmRzKCkpO2lmKHRoaXMubWF4RGF0ZTx0aGlzLm1pbkRhdGUpe3RoaXMubWluRGF0ZT10aGlzLm1heERhdGU7fXRoaXMuJHJlZnMubWF4VGltZVBpY2tlci52YWx1ZT10aGlzLm1pbkRhdGU7dGhpcy5tYXhUaW1lUGlja2VyVmlzaWJsZT1mYWxzZTt9fX0saGFuZGxlUmFuZ2VQaWNrOmZ1bmN0aW9uIGhhbmRsZVJhbmdlUGljayh2YWwpe3ZhciBfdGhpczU9dGhpczt2YXIgY2xvc2U9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzFdOnRydWU7dmFyIGRlZmF1bHRUaW1lPXRoaXMuZGVmYXVsdFRpbWV8fFtdO3ZhciBtaW5EYXRlPU9iamVjdChkYXRlX3V0aWxfWyJtb2RpZnlXaXRoVGltZVN0cmluZyJdKSh2YWwubWluRGF0ZSxkZWZhdWx0VGltZVswXSk7dmFyIG1heERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeVdpdGhUaW1lU3RyaW5nIl0pKHZhbC5tYXhEYXRlLGRlZmF1bHRUaW1lWzFdKTtpZih0aGlzLm1heERhdGU9PT1tYXhEYXRlJiZ0aGlzLm1pbkRhdGU9PT1taW5EYXRlKXtyZXR1cm47fXRoaXMub25QaWNrJiZ0aGlzLm9uUGljayh2YWwpO3RoaXMubWF4RGF0ZT1tYXhEYXRlO3RoaXMubWluRGF0ZT1taW5EYXRlOy8vIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzc1MzksIHNob3VsZCByZW1vdmUgdGhpcyBibG9jayB3aGVuIHdlIGRvbid0IGhhdmUgdG8gY2FyZSBhYm91dCBDaHJvbWl1bSA1NSAtIDU3CnNldFRpbWVvdXQoZnVuY3Rpb24oKXtfdGhpczUubWF4RGF0ZT1tYXhEYXRlO190aGlzNS5taW5EYXRlPW1pbkRhdGU7fSwxMCk7aWYoIWNsb3NlfHx0aGlzLnNob3dUaW1lKXJldHVybjt0aGlzLmhhbmRsZUNvbmZpcm0oKTt9LGhhbmRsZVNob3J0Y3V0Q2xpY2s6ZnVuY3Rpb24gaGFuZGxlU2hvcnRjdXRDbGljayhzaG9ydGN1dCl7aWYoc2hvcnRjdXQub25DbGljayl7c2hvcnRjdXQub25DbGljayh0aGlzKTt9fSxoYW5kbGVNaW5UaW1lUGljazpmdW5jdGlvbiBoYW5kbGVNaW5UaW1lUGljayh2YWx1ZSx2aXNpYmxlLGZpcnN0KXt0aGlzLm1pbkRhdGU9dGhpcy5taW5EYXRlfHxuZXcgRGF0ZSgpO2lmKHZhbHVlKXt0aGlzLm1pbkRhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeVRpbWUiXSkodGhpcy5taW5EYXRlLHZhbHVlLmdldEhvdXJzKCksdmFsdWUuZ2V0TWludXRlcygpLHZhbHVlLmdldFNlY29uZHMoKSk7fWlmKCFmaXJzdCl7dGhpcy5taW5UaW1lUGlja2VyVmlzaWJsZT12aXNpYmxlO31pZighdGhpcy5tYXhEYXRlfHx0aGlzLm1heERhdGUmJnRoaXMubWF4RGF0ZS5nZXRUaW1lKCk8dGhpcy5taW5EYXRlLmdldFRpbWUoKSl7dGhpcy5tYXhEYXRlPW5ldyBEYXRlKHRoaXMubWluRGF0ZSk7fX0saGFuZGxlTWluVGltZUNsb3NlOmZ1bmN0aW9uIGhhbmRsZU1pblRpbWVDbG9zZSgpe3RoaXMubWluVGltZVBpY2tlclZpc2libGU9ZmFsc2U7fSxoYW5kbGVNYXhUaW1lUGljazpmdW5jdGlvbiBoYW5kbGVNYXhUaW1lUGljayh2YWx1ZSx2aXNpYmxlLGZpcnN0KXtpZih0aGlzLm1heERhdGUmJnZhbHVlKXt0aGlzLm1heERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeVRpbWUiXSkodGhpcy5tYXhEYXRlLHZhbHVlLmdldEhvdXJzKCksdmFsdWUuZ2V0TWludXRlcygpLHZhbHVlLmdldFNlY29uZHMoKSk7fWlmKCFmaXJzdCl7dGhpcy5tYXhUaW1lUGlja2VyVmlzaWJsZT12aXNpYmxlO31pZih0aGlzLm1heERhdGUmJnRoaXMubWluRGF0ZSYmdGhpcy5taW5EYXRlLmdldFRpbWUoKT50aGlzLm1heERhdGUuZ2V0VGltZSgpKXt0aGlzLm1pbkRhdGU9bmV3IERhdGUodGhpcy5tYXhEYXRlKTt9fSxoYW5kbGVNYXhUaW1lQ2xvc2U6ZnVuY3Rpb24gaGFuZGxlTWF4VGltZUNsb3NlKCl7dGhpcy5tYXhUaW1lUGlja2VyVmlzaWJsZT1mYWxzZTt9LC8vIGxlZnRQcmV2KiwgcmlnaHROZXh0KiBuZWVkIHRvIHRha2UgY2FyZSBvZiBgdW5saW5rUGFuZWxzYApsZWZ0UHJldlllYXI6ZnVuY3Rpb24gbGVmdFByZXZZZWFyKCl7dGhpcy5sZWZ0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sicHJldlllYXIiXSkodGhpcy5sZWZ0RGF0ZSk7aWYoIXRoaXMudW5saW5rUGFuZWxzKXt0aGlzLnJpZ2h0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpO319LGxlZnRQcmV2TW9udGg6ZnVuY3Rpb24gbGVmdFByZXZNb250aCgpe3RoaXMubGVmdERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bInByZXZNb250aCJdKSh0aGlzLmxlZnREYXRlKTtpZighdGhpcy51bmxpbmtQYW5lbHMpe3RoaXMucmlnaHREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJuZXh0TW9udGgiXSkodGhpcy5sZWZ0RGF0ZSk7fX0scmlnaHROZXh0WWVhcjpmdW5jdGlvbiByaWdodE5leHRZZWFyKCl7aWYoIXRoaXMudW5saW5rUGFuZWxzKXt0aGlzLmxlZnREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJuZXh0WWVhciJdKSh0aGlzLmxlZnREYXRlKTt0aGlzLnJpZ2h0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpO31lbHNle3RoaXMucmlnaHREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJuZXh0WWVhciJdKSh0aGlzLnJpZ2h0RGF0ZSk7fX0scmlnaHROZXh0TW9udGg6ZnVuY3Rpb24gcmlnaHROZXh0TW9udGgoKXtpZighdGhpcy51bmxpbmtQYW5lbHMpe3RoaXMubGVmdERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm5leHRNb250aCJdKSh0aGlzLmxlZnREYXRlKTt0aGlzLnJpZ2h0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpO31lbHNle3RoaXMucmlnaHREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJuZXh0TW9udGgiXSkodGhpcy5yaWdodERhdGUpO319LC8vIGxlZnROZXh0KiwgcmlnaHRQcmV2KiBhcmUgY2FsbGVkIHdoZW4gYHVubGlua1BhbmVsc2AgaXMgdHJ1ZQpsZWZ0TmV4dFllYXI6ZnVuY3Rpb24gbGVmdE5leHRZZWFyKCl7dGhpcy5sZWZ0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dFllYXIiXSkodGhpcy5sZWZ0RGF0ZSk7fSxsZWZ0TmV4dE1vbnRoOmZ1bmN0aW9uIGxlZnROZXh0TW9udGgoKXt0aGlzLmxlZnREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJuZXh0TW9udGgiXSkodGhpcy5sZWZ0RGF0ZSk7fSxyaWdodFByZXZZZWFyOmZ1bmN0aW9uIHJpZ2h0UHJldlllYXIoKXt0aGlzLnJpZ2h0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sicHJldlllYXIiXSkodGhpcy5yaWdodERhdGUpO30scmlnaHRQcmV2TW9udGg6ZnVuY3Rpb24gcmlnaHRQcmV2TW9udGgoKXt0aGlzLnJpZ2h0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sicHJldk1vbnRoIl0pKHRoaXMucmlnaHREYXRlKTt9LGhhbmRsZUNvbmZpcm06ZnVuY3Rpb24gaGFuZGxlQ29uZmlybSgpe3ZhciB2aXNpYmxlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTpmYWxzZTtpZih0aGlzLmlzVmFsaWRWYWx1ZShbdGhpcy5taW5EYXRlLHRoaXMubWF4RGF0ZV0pKXt0aGlzLiRlbWl0KCdwaWNrJyxbdGhpcy5taW5EYXRlLHRoaXMubWF4RGF0ZV0sdmlzaWJsZSk7fX0saXNWYWxpZFZhbHVlOmZ1bmN0aW9uIGlzVmFsaWRWYWx1ZSh2YWx1ZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpJiZ2YWx1ZSYmdmFsdWVbMF0mJnZhbHVlWzFdJiZPYmplY3QoZGF0ZV91dGlsX1siaXNEYXRlIl0pKHZhbHVlWzBdKSYmT2JqZWN0KGRhdGVfdXRpbF9bImlzRGF0ZSJdKSh2YWx1ZVsxXSkmJnZhbHVlWzBdLmdldFRpbWUoKTw9dmFsdWVbMV0uZ2V0VGltZSgpJiYodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlPT09J2Z1bmN0aW9uJz8hdGhpcy5kaXNhYmxlZERhdGUodmFsdWVbMF0pJiYhdGhpcy5kaXNhYmxlZERhdGUodmFsdWVbMV0pOnRydWUpO30scmVzZXRWaWV3OmZ1bmN0aW9uIHJlc2V0Vmlldygpey8vIE5PVEU6IHRoaXMgaXMgYSBoYWNrIHRvIHJlc2V0IHttaW4sIG1heH1EYXRlIG9uIHBpY2tlciBvcGVuLgovLyBUT0RPOiBjb3JyZWN0IHdheSBvZiBkb2luZyBzbyBpcyB0byByZWZhY3RvciB7bWluLCBtYXh9RGF0ZSB0byBiZSBkZXBlbmRlbnQgb24gdmFsdWUgYW5kIGludGVybmFsIHNlbGVjdGlvbiBzdGF0ZQovLyAgICAgICBhbiBhbHRlcm5hdGl2ZSB3b3VsZCBiZSByZXNldFZpZXcgd2hlbmV2ZXIgcGlja2VyIGJlY29tZXMgdmlzaWJsZSwgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgZGF0ZS1wYW5lbCdzIHJlc2V0VmlldwppZih0aGlzLm1pbkRhdGUmJnRoaXMubWF4RGF0ZT09bnVsbCl0aGlzLnJhbmdlU3RhdGUuc2VsZWN0aW5nPWZhbHNlO3RoaXMubWluRGF0ZT10aGlzLnZhbHVlJiZPYmplY3QoZGF0ZV91dGlsX1siaXNEYXRlIl0pKHRoaXMudmFsdWVbMF0pP25ldyBEYXRlKHRoaXMudmFsdWVbMF0pOm51bGw7dGhpcy5tYXhEYXRlPXRoaXMudmFsdWUmJk9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkodGhpcy52YWx1ZVswXSk/bmV3IERhdGUodGhpcy52YWx1ZVsxXSk6bnVsbDt9fSxjb21wb25lbnRzOntUaW1lUGlja2VyOnBhbmVsX3RpbWUsRGF0ZVRhYmxlOmRhdGVfdGFibGUsRWxJbnB1dDppbnB1dF9kZWZhdWx0LmEsRWxCdXR0b246YnV0dG9uX2RlZmF1bHQuYX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL2RhdGUtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhbmVsX2RhdGVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189ZGF0ZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLXJhbmdlLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGRhdGVfcmFuZ2VfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYW5lbF9kYXRlX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGRhdGVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNjUyODQ5YV9yZW5kZXIsZGF0ZV9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI2NTI4NDlhX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgZGF0ZV9yYW5nZV9hcGk7fWRhdGVfcmFuZ2VfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvZGF0ZS1yYW5nZS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZGF0ZV9yYW5nZT1kYXRlX3JhbmdlX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL21vbnRoLXJhbmdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mMjY0NWZiOCYKdmFyIG1vbnRoX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZjI2NDVmYjhfcmVuZGVyPWZ1bmN0aW9uIG1vbnRoX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZjI2NDVmYjhfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn0sb246eyJhZnRlci1sZWF2ZSI6ZnVuY3Rpb24gYWZ0ZXJMZWF2ZSgkZXZlbnQpe192bS4kZW1pdCgiZG9kZXN0cm95Iik7fX19LFtfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsIGVsLWRhdGUtcmFuZ2UtcGlja2VyIGVsLXBvcHBlciIsY2xhc3M6W3siaGFzLXNpZGViYXIiOl92bS4kc2xvdHMuc2lkZWJhcnx8X3ZtLnNob3J0Y3V0c30sX3ZtLnBvcHBlckNsYXNzXX0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXIifSxbX3ZtLl90KCJzaWRlYmFyIiksX3ZtLnNob3J0Y3V0cz9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fc2lkZWJhciJ9LF92bS5fbChfdm0uc2hvcnRjdXRzLGZ1bmN0aW9uKHNob3J0Y3V0LGtleSl7cmV0dXJuIF9jKCJidXR0b24iLHtrZXk6a2V5LHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX3Nob3J0Y3V0IixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLmhhbmRsZVNob3J0Y3V0Q2xpY2soc2hvcnRjdXQpO319fSxbX3ZtLl92KF92bS5fcyhzaG9ydGN1dC50ZXh0KSldKTt9KSwwKTpfdm0uX2UoKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fYm9keSJ9LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fY29udGVudCBlbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCBpcy1sZWZ0In0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlciJ9LFtfYygiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LWxlZnQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6X3ZtLmxlZnRQcmV2WWVhcn19KSxfdm0udW5saW5rUGFuZWxzP19jKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHQiLGNsYXNzOnsiaXMtZGlzYWJsZWQiOiFfdm0uZW5hYmxlWWVhckFycm93fSxhdHRyczp7dHlwZToiYnV0dG9uIixkaXNhYmxlZDohX3ZtLmVuYWJsZVllYXJBcnJvd30sb246e2NsaWNrOl92bS5sZWZ0TmV4dFllYXJ9fSk6X3ZtLl9lKCksX2MoImRpdiIsW192bS5fdihfdm0uX3MoX3ZtLmxlZnRMYWJlbCkpXSldKSxfYygibW9udGgtdGFibGUiLHthdHRyczp7InNlbGVjdGlvbi1tb2RlIjoicmFuZ2UiLGRhdGU6X3ZtLmxlZnREYXRlLCJkZWZhdWx0LXZhbHVlIjpfdm0uZGVmYXVsdFZhbHVlLCJtaW4tZGF0ZSI6X3ZtLm1pbkRhdGUsIm1heC1kYXRlIjpfdm0ubWF4RGF0ZSwicmFuZ2Utc3RhdGUiOl92bS5yYW5nZVN0YXRlLCJkaXNhYmxlZC1kYXRlIjpfdm0uZGlzYWJsZWREYXRlfSxvbjp7Y2hhbmdlcmFuZ2U6X3ZtLmhhbmRsZUNoYW5nZVJhbmdlLHBpY2s6X3ZtLmhhbmRsZVJhbmdlUGlja319KV0sMSksX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2NvbnRlbnQgZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnQgaXMtcmlnaHQifSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIn0sW192bS51bmxpbmtQYW5lbHM/X2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tZC1hcnJvdy1sZWZ0IixjbGFzczp7ImlzLWRpc2FibGVkIjohX3ZtLmVuYWJsZVllYXJBcnJvd30sYXR0cnM6e3R5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6IV92bS5lbmFibGVZZWFyQXJyb3d9LG9uOntjbGljazpfdm0ucmlnaHRQcmV2WWVhcn19KTpfdm0uX2UoKSxfYygiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LXJpZ2h0IixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e2NsaWNrOl92bS5yaWdodE5leHRZZWFyfX0pLF9jKCJkaXYiLFtfdm0uX3YoX3ZtLl9zKF92bS5yaWdodExhYmVsKSldKV0pLF9jKCJtb250aC10YWJsZSIse2F0dHJzOnsic2VsZWN0aW9uLW1vZGUiOiJyYW5nZSIsZGF0ZTpfdm0ucmlnaHREYXRlLCJkZWZhdWx0LXZhbHVlIjpfdm0uZGVmYXVsdFZhbHVlLCJtaW4tZGF0ZSI6X3ZtLm1pbkRhdGUsIm1heC1kYXRlIjpfdm0ubWF4RGF0ZSwicmFuZ2Utc3RhdGUiOl92bS5yYW5nZVN0YXRlLCJkaXNhYmxlZC1kYXRlIjpfdm0uZGlzYWJsZWREYXRlfSxvbjp7Y2hhbmdlcmFuZ2U6X3ZtLmhhbmRsZUNoYW5nZVJhbmdlLHBpY2s6X3ZtLmhhbmRsZVJhbmdlUGlja319KV0sMSldKV0sMildKV0pO307dmFyIG1vbnRoX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZjI2NDVmYjhfc3RhdGljUmVuZGVyRm5zPVtdO21vbnRoX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZjI2NDVmYjhfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9tb250aC1yYW5nZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjI2NDVmYjgmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9tb250aC1yYW5nZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBtb250aF9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NhbGNEZWZhdWx0VmFsdWU9ZnVuY3Rpb24gY2FsY0RlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWUpe2lmKEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSl7cmV0dXJuW25ldyBEYXRlKGRlZmF1bHRWYWx1ZVswXSksbmV3IERhdGUoZGVmYXVsdFZhbHVlWzFdKV07fWVsc2UgaWYoZGVmYXVsdFZhbHVlKXtyZXR1cm5bbmV3IERhdGUoZGVmYXVsdFZhbHVlKSxPYmplY3QoZGF0ZV91dGlsX1sibmV4dE1vbnRoIl0pKG5ldyBEYXRlKGRlZmF1bHRWYWx1ZSkpXTt9ZWxzZXtyZXR1cm5bbmV3IERhdGUoKSxPYmplY3QoZGF0ZV91dGlsX1sibmV4dE1vbnRoIl0pKG5ldyBEYXRlKCkpXTt9fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIG1vbnRoX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXttaXhpbnM6W2xvY2FsZV9kZWZhdWx0LmFdLGRpcmVjdGl2ZXM6e0NsaWNrb3V0c2lkZTpjbGlja291dHNpZGVfZGVmYXVsdC5hfSxjb21wdXRlZDp7YnRuRGlzYWJsZWQ6ZnVuY3Rpb24gYnRuRGlzYWJsZWQoKXtyZXR1cm4hKHRoaXMubWluRGF0ZSYmdGhpcy5tYXhEYXRlJiYhdGhpcy5zZWxlY3RpbmcmJnRoaXMuaXNWYWxpZFZhbHVlKFt0aGlzLm1pbkRhdGUsdGhpcy5tYXhEYXRlXSkpO30sbGVmdExhYmVsOmZ1bmN0aW9uIGxlZnRMYWJlbCgpe3JldHVybiB0aGlzLmxlZnREYXRlLmdldEZ1bGxZZWFyKCkrJyAnK3RoaXMudCgnZWwuZGF0ZXBpY2tlci55ZWFyJyk7fSxyaWdodExhYmVsOmZ1bmN0aW9uIHJpZ2h0TGFiZWwoKXtyZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0RnVsbFllYXIoKSsnICcrdGhpcy50KCdlbC5kYXRlcGlja2VyLnllYXInKTt9LGxlZnRZZWFyOmZ1bmN0aW9uIGxlZnRZZWFyKCl7cmV0dXJuIHRoaXMubGVmdERhdGUuZ2V0RnVsbFllYXIoKTt9LHJpZ2h0WWVhcjpmdW5jdGlvbiByaWdodFllYXIoKXtyZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0RnVsbFllYXIoKT09PXRoaXMubGVmdERhdGUuZ2V0RnVsbFllYXIoKT90aGlzLmxlZnREYXRlLmdldEZ1bGxZZWFyKCkrMTp0aGlzLnJpZ2h0RGF0ZS5nZXRGdWxsWWVhcigpO30sZW5hYmxlWWVhckFycm93OmZ1bmN0aW9uIGVuYWJsZVllYXJBcnJvdygpe3JldHVybiB0aGlzLnVubGlua1BhbmVscyYmdGhpcy5yaWdodFllYXI+dGhpcy5sZWZ0WWVhcisxO319LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntwb3BwZXJDbGFzczonJyx2YWx1ZTpbXSxkZWZhdWx0VmFsdWU6bnVsbCxkZWZhdWx0VGltZTpudWxsLG1pbkRhdGU6JycsbWF4RGF0ZTonJyxsZWZ0RGF0ZTpuZXcgRGF0ZSgpLHJpZ2h0RGF0ZTpPYmplY3QoZGF0ZV91dGlsX1sibmV4dFllYXIiXSkobmV3IERhdGUoKSkscmFuZ2VTdGF0ZTp7ZW5kRGF0ZTpudWxsLHNlbGVjdGluZzpmYWxzZSxyb3c6bnVsbCxjb2x1bW46bnVsbH0sc2hvcnRjdXRzOicnLHZpc2libGU6JycsZGlzYWJsZWREYXRlOicnLGZvcm1hdDonJyxhcnJvd0NvbnRyb2w6ZmFsc2UsdW5saW5rUGFuZWxzOmZhbHNlfTt9LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbiB2YWx1ZShuZXdWYWwpe2lmKCFuZXdWYWwpe3RoaXMubWluRGF0ZT1udWxsO3RoaXMubWF4RGF0ZT1udWxsO31lbHNlIGlmKEFycmF5LmlzQXJyYXkobmV3VmFsKSl7dGhpcy5taW5EYXRlPU9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkobmV3VmFsWzBdKT9uZXcgRGF0ZShuZXdWYWxbMF0pOm51bGw7dGhpcy5tYXhEYXRlPU9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkobmV3VmFsWzFdKT9uZXcgRGF0ZShuZXdWYWxbMV0pOm51bGw7aWYodGhpcy5taW5EYXRlKXt0aGlzLmxlZnREYXRlPXRoaXMubWluRGF0ZTtpZih0aGlzLnVubGlua1BhbmVscyYmdGhpcy5tYXhEYXRlKXt2YXIgbWluRGF0ZVllYXI9dGhpcy5taW5EYXRlLmdldEZ1bGxZZWFyKCk7dmFyIG1heERhdGVZZWFyPXRoaXMubWF4RGF0ZS5nZXRGdWxsWWVhcigpO3RoaXMucmlnaHREYXRlPW1pbkRhdGVZZWFyPT09bWF4RGF0ZVllYXI/T2JqZWN0KGRhdGVfdXRpbF9bIm5leHRZZWFyIl0pKHRoaXMubWF4RGF0ZSk6dGhpcy5tYXhEYXRlO31lbHNle3RoaXMucmlnaHREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJuZXh0WWVhciJdKSh0aGlzLmxlZnREYXRlKTt9fWVsc2V7dGhpcy5sZWZ0RGF0ZT1tb250aF9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NhbGNEZWZhdWx0VmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpWzBdO3RoaXMucmlnaHREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJuZXh0WWVhciJdKSh0aGlzLmxlZnREYXRlKTt9fX0sZGVmYXVsdFZhbHVlOmZ1bmN0aW9uIGRlZmF1bHRWYWx1ZSh2YWwpe2lmKCFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKXt2YXIgX2NhbGNEZWZhdWx0VmFsdWU9bW9udGhfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jYWxjRGVmYXVsdFZhbHVlKHZhbCksbGVmdD1fY2FsY0RlZmF1bHRWYWx1ZVswXSxyaWdodD1fY2FsY0RlZmF1bHRWYWx1ZVsxXTt0aGlzLmxlZnREYXRlPWxlZnQ7dGhpcy5yaWdodERhdGU9dmFsJiZ2YWxbMV0mJmxlZnQuZ2V0RnVsbFllYXIoKSE9PXJpZ2h0LmdldEZ1bGxZZWFyKCkmJnRoaXMudW5saW5rUGFuZWxzP3JpZ2h0Ok9iamVjdChkYXRlX3V0aWxfWyJuZXh0WWVhciJdKSh0aGlzLmxlZnREYXRlKTt9fX0sbWV0aG9kczp7aGFuZGxlQ2xlYXI6ZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKXt0aGlzLm1pbkRhdGU9bnVsbDt0aGlzLm1heERhdGU9bnVsbDt0aGlzLmxlZnREYXRlPW1vbnRoX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY2FsY0RlZmF1bHRWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSlbMF07dGhpcy5yaWdodERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm5leHRZZWFyIl0pKHRoaXMubGVmdERhdGUpO3RoaXMuJGVtaXQoJ3BpY2snLG51bGwpO30saGFuZGxlQ2hhbmdlUmFuZ2U6ZnVuY3Rpb24gaGFuZGxlQ2hhbmdlUmFuZ2UodmFsKXt0aGlzLm1pbkRhdGU9dmFsLm1pbkRhdGU7dGhpcy5tYXhEYXRlPXZhbC5tYXhEYXRlO3RoaXMucmFuZ2VTdGF0ZT12YWwucmFuZ2VTdGF0ZTt9LGhhbmRsZVJhbmdlUGljazpmdW5jdGlvbiBoYW5kbGVSYW5nZVBpY2sodmFsKXt2YXIgX3RoaXM9dGhpczt2YXIgY2xvc2U9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzFdOnRydWU7dmFyIGRlZmF1bHRUaW1lPXRoaXMuZGVmYXVsdFRpbWV8fFtdO3ZhciBtaW5EYXRlPU9iamVjdChkYXRlX3V0aWxfWyJtb2RpZnlXaXRoVGltZVN0cmluZyJdKSh2YWwubWluRGF0ZSxkZWZhdWx0VGltZVswXSk7dmFyIG1heERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm1vZGlmeVdpdGhUaW1lU3RyaW5nIl0pKHZhbC5tYXhEYXRlLGRlZmF1bHRUaW1lWzFdKTtpZih0aGlzLm1heERhdGU9PT1tYXhEYXRlJiZ0aGlzLm1pbkRhdGU9PT1taW5EYXRlKXtyZXR1cm47fXRoaXMub25QaWNrJiZ0aGlzLm9uUGljayh2YWwpO3RoaXMubWF4RGF0ZT1tYXhEYXRlO3RoaXMubWluRGF0ZT1taW5EYXRlOy8vIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzc1MzksIHNob3VsZCByZW1vdmUgdGhpcyBibG9jayB3aGVuIHdlIGRvbid0IGhhdmUgdG8gY2FyZSBhYm91dCBDaHJvbWl1bSA1NSAtIDU3CnNldFRpbWVvdXQoZnVuY3Rpb24oKXtfdGhpcy5tYXhEYXRlPW1heERhdGU7X3RoaXMubWluRGF0ZT1taW5EYXRlO30sMTApO2lmKCFjbG9zZSlyZXR1cm47dGhpcy5oYW5kbGVDb25maXJtKCk7fSxoYW5kbGVTaG9ydGN1dENsaWNrOmZ1bmN0aW9uIGhhbmRsZVNob3J0Y3V0Q2xpY2soc2hvcnRjdXQpe2lmKHNob3J0Y3V0Lm9uQ2xpY2spe3Nob3J0Y3V0Lm9uQ2xpY2sodGhpcyk7fX0sLy8gbGVmdFByZXYqLCByaWdodE5leHQqIG5lZWQgdG8gdGFrZSBjYXJlIG9mIGB1bmxpbmtQYW5lbHNgCmxlZnRQcmV2WWVhcjpmdW5jdGlvbiBsZWZ0UHJldlllYXIoKXt0aGlzLmxlZnREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJwcmV2WWVhciJdKSh0aGlzLmxlZnREYXRlKTtpZighdGhpcy51bmxpbmtQYW5lbHMpe3RoaXMucmlnaHREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJwcmV2WWVhciJdKSh0aGlzLnJpZ2h0RGF0ZSk7fX0scmlnaHROZXh0WWVhcjpmdW5jdGlvbiByaWdodE5leHRZZWFyKCl7aWYoIXRoaXMudW5saW5rUGFuZWxzKXt0aGlzLmxlZnREYXRlPU9iamVjdChkYXRlX3V0aWxfWyJuZXh0WWVhciJdKSh0aGlzLmxlZnREYXRlKTt9dGhpcy5yaWdodERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bIm5leHRZZWFyIl0pKHRoaXMucmlnaHREYXRlKTt9LC8vIGxlZnROZXh0KiwgcmlnaHRQcmV2KiBhcmUgY2FsbGVkIHdoZW4gYHVubGlua1BhbmVsc2AgaXMgdHJ1ZQpsZWZ0TmV4dFllYXI6ZnVuY3Rpb24gbGVmdE5leHRZZWFyKCl7dGhpcy5sZWZ0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibmV4dFllYXIiXSkodGhpcy5sZWZ0RGF0ZSk7fSxyaWdodFByZXZZZWFyOmZ1bmN0aW9uIHJpZ2h0UHJldlllYXIoKXt0aGlzLnJpZ2h0RGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sicHJldlllYXIiXSkodGhpcy5yaWdodERhdGUpO30saGFuZGxlQ29uZmlybTpmdW5jdGlvbiBoYW5kbGVDb25maXJtKCl7dmFyIHZpc2libGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOmZhbHNlO2lmKHRoaXMuaXNWYWxpZFZhbHVlKFt0aGlzLm1pbkRhdGUsdGhpcy5tYXhEYXRlXSkpe3RoaXMuJGVtaXQoJ3BpY2snLFt0aGlzLm1pbkRhdGUsdGhpcy5tYXhEYXRlXSx2aXNpYmxlKTt9fSxpc1ZhbGlkVmFsdWU6ZnVuY3Rpb24gaXNWYWxpZFZhbHVlKHZhbHVlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkmJnZhbHVlJiZ2YWx1ZVswXSYmdmFsdWVbMV0mJk9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkodmFsdWVbMF0pJiZPYmplY3QoZGF0ZV91dGlsX1siaXNEYXRlIl0pKHZhbHVlWzFdKSYmdmFsdWVbMF0uZ2V0VGltZSgpPD12YWx1ZVsxXS5nZXRUaW1lKCkmJih0eXBlb2YgdGhpcy5kaXNhYmxlZERhdGU9PT0nZnVuY3Rpb24nPyF0aGlzLmRpc2FibGVkRGF0ZSh2YWx1ZVswXSkmJiF0aGlzLmRpc2FibGVkRGF0ZSh2YWx1ZVsxXSk6dHJ1ZSk7fSxyZXNldFZpZXc6ZnVuY3Rpb24gcmVzZXRWaWV3KCl7Ly8gTk9URTogdGhpcyBpcyBhIGhhY2sgdG8gcmVzZXQge21pbiwgbWF4fURhdGUgb24gcGlja2VyIG9wZW4uCi8vIFRPRE86IGNvcnJlY3Qgd2F5IG9mIGRvaW5nIHNvIGlzIHRvIHJlZmFjdG9yIHttaW4sIG1heH1EYXRlIHRvIGJlIGRlcGVuZGVudCBvbiB2YWx1ZSBhbmQgaW50ZXJuYWwgc2VsZWN0aW9uIHN0YXRlCi8vICAgICAgIGFuIGFsdGVybmF0aXZlIHdvdWxkIGJlIHJlc2V0VmlldyB3aGVuZXZlciBwaWNrZXIgYmVjb21lcyB2aXNpYmxlLCBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBkYXRlLXBhbmVsJ3MgcmVzZXRWaWV3CnRoaXMubWluRGF0ZT10aGlzLnZhbHVlJiZPYmplY3QoZGF0ZV91dGlsX1siaXNEYXRlIl0pKHRoaXMudmFsdWVbMF0pP25ldyBEYXRlKHRoaXMudmFsdWVbMF0pOm51bGw7dGhpcy5tYXhEYXRlPXRoaXMudmFsdWUmJk9iamVjdChkYXRlX3V0aWxfWyJpc0RhdGUiXSkodGhpcy52YWx1ZVswXSk/bmV3IERhdGUodGhpcy52YWx1ZVsxXSk6bnVsbDt9fSxjb21wb25lbnRzOntNb250aFRhYmxlOm1vbnRoX3RhYmxlLEVsSW5wdXQ6aW5wdXRfZGVmYXVsdC5hLEVsQnV0dG9uOmJ1dHRvbl9kZWZhdWx0LmF9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9tb250aC1yYW5nZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFuZWxfbW9udGhfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189bW9udGhfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvbW9udGgtcmFuZ2UudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgbW9udGhfcmFuZ2VfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYW5lbF9tb250aF9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtb250aF9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2YyNjQ1ZmI4X3JlbmRlcixtb250aF9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2YyNjQ1ZmI4X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgbW9udGhfcmFuZ2VfYXBpO31tb250aF9yYW5nZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9tb250aC1yYW5nZS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbW9udGhfcmFuZ2U9bW9udGhfcmFuZ2VfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGlja2VyL2RhdGUtcGlja2VyLmpzCnZhciBkYXRlX3BpY2tlcl9nZXRQYW5lbD1mdW5jdGlvbiBnZXRQYW5lbCh0eXBlKXtpZih0eXBlPT09J2RhdGVyYW5nZSd8fHR5cGU9PT0nZGF0ZXRpbWVyYW5nZScpe3JldHVybiBkYXRlX3JhbmdlO31lbHNlIGlmKHR5cGU9PT0nbW9udGhyYW5nZScpe3JldHVybiBtb250aF9yYW5nZTt9cmV0dXJuIHBhbmVsX2RhdGU7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGRhdGVfcGlja2VyPXttaXhpbnM6W3BpY2tlcl0sbmFtZTonRWxEYXRlUGlja2VyJyxwcm9wczp7dHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDonZGF0ZSd9LHRpbWVBcnJvd0NvbnRyb2w6Qm9vbGVhbn0sd2F0Y2g6e3R5cGU6ZnVuY3Rpb24gdHlwZShfdHlwZSl7aWYodGhpcy5waWNrZXIpe3RoaXMudW5tb3VudFBpY2tlcigpO3RoaXMucGFuZWw9ZGF0ZV9waWNrZXJfZ2V0UGFuZWwoX3R5cGUpO3RoaXMubW91bnRQaWNrZXIoKTt9ZWxzZXt0aGlzLnBhbmVsPWRhdGVfcGlja2VyX2dldFBhbmVsKF90eXBlKTt9fX0sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dGhpcy5wYW5lbD1kYXRlX3BpY2tlcl9nZXRQYW5lbCh0aGlzLnR5cGUpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9kYXRlX3BpY2tlci5pbnN0YWxsPWZ1bmN0aW9uIGluc3RhbGwoVnVlKXtWdWUuY29tcG9uZW50KGRhdGVfcGlja2VyLm5hbWUsZGF0ZV9waWNrZXIpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19kYXRlX3BpY2tlcj1kYXRlX3BpY2tlcjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTFhYjkzMjAmCnZhciB0aW1lX3NlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUxYWI5MzIwX3JlbmRlcj1mdW5jdGlvbiB0aW1lX3NlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUxYWI5MzIwX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYmVmb3JlLWVudGVyIjpfdm0uaGFuZGxlTWVudUVudGVyLCJhZnRlci1sZWF2ZSI6ZnVuY3Rpb24gYWZ0ZXJMZWF2ZSgkZXZlbnQpe192bS4kZW1pdCgiZG9kZXN0cm95Iik7fX19LFtfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxyZWY6InBvcHBlciIsc3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbCB0aW1lLXNlbGVjdCBlbC1wb3BwZXIiLGNsYXNzOl92bS5wb3BwZXJDbGFzcyxzdHlsZTp7d2lkdGg6X3ZtLndpZHRoKyJweCJ9fSxbX2MoImVsLXNjcm9sbGJhciIse2F0dHJzOntub3Jlc2l6ZToiIiwid3JhcC1jbGFzcyI6ImVsLXBpY2tlci1wYW5lbF9fY29udGVudCJ9fSxfdm0uX2woX3ZtLml0ZW1zLGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBfYygiZGl2Iix7a2V5Oml0ZW0udmFsdWUsc3RhdGljQ2xhc3M6InRpbWUtc2VsZWN0LWl0ZW0iLGNsYXNzOntzZWxlY3RlZDpfdm0udmFsdWU9PT1pdGVtLnZhbHVlLGRpc2FibGVkOml0ZW0uZGlzYWJsZWQsZGVmYXVsdDppdGVtLnZhbHVlPT09X3ZtLmRlZmF1bHRWYWx1ZX0sYXR0cnM6e2Rpc2FibGVkOml0ZW0uZGlzYWJsZWR9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5oYW5kbGVDbGljayhpdGVtKTt9fX0sW192bS5fdihfdm0uX3MoaXRlbS52YWx1ZSkpXSk7fSksMCldLDEpXSk7fTt2YXIgdGltZV9zZWxlY3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF81MWFiOTMyMF9zdGF0aWNSZW5kZXJGbnM9W107dGltZV9zZWxlY3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF81MWFiOTMyMF9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MWFiOTMyMCYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtc2VsZWN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KdmFyIHBhcnNlVGltZT1mdW5jdGlvbiBwYXJzZVRpbWUodGltZSl7dmFyIHZhbHVlcz0odGltZXx8JycpLnNwbGl0KCc6Jyk7aWYodmFsdWVzLmxlbmd0aD49Mil7dmFyIGhvdXJzPXBhcnNlSW50KHZhbHVlc1swXSwxMCk7dmFyIG1pbnV0ZXM9cGFyc2VJbnQodmFsdWVzWzFdLDEwKTtyZXR1cm57aG91cnM6aG91cnMsbWludXRlczptaW51dGVzfTt9LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9yZXR1cm4gbnVsbDt9O3ZhciBjb21wYXJlVGltZT1mdW5jdGlvbiBjb21wYXJlVGltZSh0aW1lMSx0aW1lMil7dmFyIHZhbHVlMT1wYXJzZVRpbWUodGltZTEpO3ZhciB2YWx1ZTI9cGFyc2VUaW1lKHRpbWUyKTt2YXIgbWludXRlczE9dmFsdWUxLm1pbnV0ZXMrdmFsdWUxLmhvdXJzKjYwO3ZhciBtaW51dGVzMj12YWx1ZTIubWludXRlcyt2YWx1ZTIuaG91cnMqNjA7aWYobWludXRlczE9PT1taW51dGVzMil7cmV0dXJuIDA7fXJldHVybiBtaW51dGVzMT5taW51dGVzMj8xOi0xO307dmFyIGZvcm1hdFRpbWU9ZnVuY3Rpb24gZm9ybWF0VGltZSh0aW1lKXtyZXR1cm4odGltZS5ob3VyczwxMD8nMCcrdGltZS5ob3Vyczp0aW1lLmhvdXJzKSsnOicrKHRpbWUubWludXRlczwxMD8nMCcrdGltZS5taW51dGVzOnRpbWUubWludXRlcyk7fTt2YXIgbmV4dFRpbWU9ZnVuY3Rpb24gbmV4dFRpbWUodGltZSxzdGVwKXt2YXIgdGltZVZhbHVlPXBhcnNlVGltZSh0aW1lKTt2YXIgc3RlcFZhbHVlPXBhcnNlVGltZShzdGVwKTt2YXIgbmV4dD17aG91cnM6dGltZVZhbHVlLmhvdXJzLG1pbnV0ZXM6dGltZVZhbHVlLm1pbnV0ZXN9O25leHQubWludXRlcys9c3RlcFZhbHVlLm1pbnV0ZXM7bmV4dC5ob3Vycys9c3RlcFZhbHVlLmhvdXJzO25leHQuaG91cnMrPU1hdGguZmxvb3IobmV4dC5taW51dGVzLzYwKTtuZXh0Lm1pbnV0ZXM9bmV4dC5taW51dGVzJTYwO3JldHVybiBmb3JtYXRUaW1lKG5leHQpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0aW1lX3NlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17Y29tcG9uZW50czp7RWxTY3JvbGxiYXI6c2Nyb2xsYmFyX2RlZmF1bHQuYX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uIHZhbHVlKHZhbCl7dmFyIF90aGlzPXRoaXM7aWYoIXZhbClyZXR1cm47dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMuc2Nyb2xsVG9PcHRpb24oKTt9KTt9fSxtZXRob2RzOntoYW5kbGVDbGljazpmdW5jdGlvbiBoYW5kbGVDbGljayhpdGVtKXtpZighaXRlbS5kaXNhYmxlZCl7dGhpcy4kZW1pdCgncGljaycsaXRlbS52YWx1ZSk7fX0saGFuZGxlQ2xlYXI6ZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKXt0aGlzLiRlbWl0KCdwaWNrJyxudWxsKTt9LHNjcm9sbFRvT3B0aW9uOmZ1bmN0aW9uIHNjcm9sbFRvT3B0aW9uKCl7dmFyIHNlbGVjdG9yPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTonLnNlbGVjdGVkJzt2YXIgbWVudT10aGlzLiRyZWZzLnBvcHBlci5xdWVyeVNlbGVjdG9yKCcuZWwtcGlja2VyLXBhbmVsX19jb250ZW50Jyk7c2Nyb2xsX2ludG9fdmlld19kZWZhdWx0KCkobWVudSxtZW51LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKTt9LGhhbmRsZU1lbnVFbnRlcjpmdW5jdGlvbiBoYW5kbGVNZW51RW50ZXIoKXt2YXIgX3RoaXMyPXRoaXM7dmFyIHNlbGVjdGVkPXRoaXMuaXRlbXMubWFwKGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBpdGVtLnZhbHVlO30pLmluZGV4T2YodGhpcy52YWx1ZSkhPT0tMTt2YXIgaGFzRGVmYXVsdD10aGlzLml0ZW1zLm1hcChmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbS52YWx1ZTt9KS5pbmRleE9mKHRoaXMuZGVmYXVsdFZhbHVlKSE9PS0xO3ZhciBvcHRpb249c2VsZWN0ZWQmJicuc2VsZWN0ZWQnfHxoYXNEZWZhdWx0JiYnLmRlZmF1bHQnfHwnLnRpbWUtc2VsZWN0LWl0ZW06bm90KC5kaXNhYmxlZCknO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIF90aGlzMi5zY3JvbGxUb09wdGlvbihvcHRpb24pO30pO30sc2Nyb2xsRG93bjpmdW5jdGlvbiBzY3JvbGxEb3duKHN0ZXApe3ZhciBpdGVtcz10aGlzLml0ZW1zO3ZhciBsZW5ndGg9aXRlbXMubGVuZ3RoO3ZhciB0b3RhbD1pdGVtcy5sZW5ndGg7dmFyIGluZGV4PWl0ZW1zLm1hcChmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbS52YWx1ZTt9KS5pbmRleE9mKHRoaXMudmFsdWUpO3doaWxlKHRvdGFsLS0pe2luZGV4PShpbmRleCtzdGVwK2xlbmd0aCklbGVuZ3RoO2lmKCFpdGVtc1tpbmRleF0uZGlzYWJsZWQpe3RoaXMuJGVtaXQoJ3BpY2snLGl0ZW1zW2luZGV4XS52YWx1ZSx0cnVlKTtyZXR1cm47fX19LGlzVmFsaWRWYWx1ZTpmdW5jdGlvbiBpc1ZhbGlkVmFsdWUoZGF0ZSl7cmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe3JldHVybiFpdGVtLmRpc2FibGVkO30pLm1hcChmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbS52YWx1ZTt9KS5pbmRleE9mKGRhdGUpIT09LTE7fSxoYW5kbGVLZXlkb3duOmZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXZlbnQpe3ZhciBrZXlDb2RlPWV2ZW50LmtleUNvZGU7aWYoa2V5Q29kZT09PTM4fHxrZXlDb2RlPT09NDApe3ZhciBtYXBwaW5nPXs0MDoxLDM4Oi0xfTt2YXIgb2Zmc2V0PW1hcHBpbmdba2V5Q29kZS50b1N0cmluZygpXTt0aGlzLnNjcm9sbERvd24ob2Zmc2V0KTtldmVudC5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm47fX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntwb3BwZXJDbGFzczonJyxzdGFydDonMDk6MDAnLGVuZDonMTg6MDAnLHN0ZXA6JzAwOjMwJyx2YWx1ZTonJyxkZWZhdWx0VmFsdWU6JycsdmlzaWJsZTpmYWxzZSxtaW5UaW1lOicnLG1heFRpbWU6Jycsd2lkdGg6MH07fSxjb21wdXRlZDp7aXRlbXM6ZnVuY3Rpb24gaXRlbXMoKXt2YXIgc3RhcnQ9dGhpcy5zdGFydDt2YXIgZW5kPXRoaXMuZW5kO3ZhciBzdGVwPXRoaXMuc3RlcDt2YXIgcmVzdWx0PVtdO2lmKHN0YXJ0JiZlbmQmJnN0ZXApe3ZhciBjdXJyZW50PXN0YXJ0O3doaWxlKGNvbXBhcmVUaW1lKGN1cnJlbnQsZW5kKTw9MCl7cmVzdWx0LnB1c2goe3ZhbHVlOmN1cnJlbnQsZGlzYWJsZWQ6Y29tcGFyZVRpbWUoY3VycmVudCx0aGlzLm1pblRpbWV8fCctMTotMScpPD0wfHxjb21wYXJlVGltZShjdXJyZW50LHRoaXMubWF4VGltZXx8JzEwMDoxMDAnKT49MH0pO2N1cnJlbnQ9bmV4dFRpbWUoY3VycmVudCxzdGVwKTt9fXJldHVybiByZXN1bHQ7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtc2VsZWN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYW5lbF90aW1lX3NlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz10aW1lX3NlbGVjdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXNlbGVjdC52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciB0aW1lX3NlbGVjdF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhbmVsX3RpbWVfc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHRpbWVfc2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfNTFhYjkzMjBfcmVuZGVyLHRpbWVfc2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfNTFhYjkzMjBfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciB0aW1lX3NlbGVjdF9hcGk7fXRpbWVfc2VsZWN0X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtc2VsZWN0LnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0aW1lX3NlbGVjdD10aW1lX3NlbGVjdF9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9waWNrZXIvdGltZS1zZWxlY3QuanMKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwaWNrZXJfdGltZV9zZWxlY3Q9e21peGluczpbcGlja2VyXSxuYW1lOidFbFRpbWVTZWxlY3QnLGNvbXBvbmVudE5hbWU6J0VsVGltZVNlbGVjdCcscHJvcHM6e3R5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J3RpbWUtc2VsZWN0J319LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbiBiZWZvcmVDcmVhdGUoKXt0aGlzLnBhbmVsPXRpbWVfc2VsZWN0O319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZS1zZWxlY3QvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9waWNrZXJfdGltZV9zZWxlY3QuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQocGlja2VyX3RpbWVfc2VsZWN0Lm5hbWUscGlja2VyX3RpbWVfc2VsZWN0KTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfdGltZV9zZWxlY3Q9cGlja2VyX3RpbWVfc2VsZWN0Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZiMjg2NjBlJgp2YXIgdGltZV9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ZiMjg2NjBlX3JlbmRlcj1mdW5jdGlvbiB0aW1lX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZmIyODY2MGVfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn0sb246eyJhZnRlci1sZWF2ZSI6ZnVuY3Rpb24gYWZ0ZXJMZWF2ZSgkZXZlbnQpe192bS4kZW1pdCgiZG9kZXN0cm95Iik7fX19LFtfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtdGltZS1yYW5nZS1waWNrZXIgZWwtcGlja2VyLXBhbmVsIGVsLXBvcHBlciIsY2xhc3M6X3ZtLnBvcHBlckNsYXNzfSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXJhbmdlLXBpY2tlcl9fY29udGVudCJ9LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcmFuZ2UtcGlja2VyX19jZWxsIn0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1yYW5nZS1waWNrZXJfX2hlYWRlciJ9LFtfdm0uX3YoX3ZtLl9zKF92bS50KCJlbC5kYXRlcGlja2VyLnN0YXJ0VGltZSIpKSldKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcmFuZ2UtcGlja2VyX19ib2R5IGVsLXRpbWUtcGFuZWxfX2NvbnRlbnQiLGNsYXNzOnsiaGFzLXNlY29uZHMiOl92bS5zaG93U2Vjb25kcywiaXMtYXJyb3ciOl92bS5hcnJvd0NvbnRyb2x9fSxbX2MoInRpbWUtc3Bpbm5lciIse3JlZjoibWluU3Bpbm5lciIsYXR0cnM6eyJzaG93LXNlY29uZHMiOl92bS5zaG93U2Vjb25kcywiYW0tcG0tbW9kZSI6X3ZtLmFtUG1Nb2RlLCJhcnJvdy1jb250cm9sIjpfdm0uYXJyb3dDb250cm9sLGRhdGU6X3ZtLm1pbkRhdGV9LG9uOntjaGFuZ2U6X3ZtLmhhbmRsZU1pbkNoYW5nZSwic2VsZWN0LXJhbmdlIjpfdm0uc2V0TWluU2VsZWN0aW9uUmFuZ2V9fSldLDEpXSksX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXJhbmdlLXBpY2tlcl9fY2VsbCJ9LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcmFuZ2UtcGlja2VyX19oZWFkZXIifSxbX3ZtLl92KF92bS5fcyhfdm0udCgiZWwuZGF0ZXBpY2tlci5lbmRUaW1lIikpKV0pLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1yYW5nZS1waWNrZXJfX2JvZHkgZWwtdGltZS1wYW5lbF9fY29udGVudCIsY2xhc3M6eyJoYXMtc2Vjb25kcyI6X3ZtLnNob3dTZWNvbmRzLCJpcy1hcnJvdyI6X3ZtLmFycm93Q29udHJvbH19LFtfYygidGltZS1zcGlubmVyIix7cmVmOiJtYXhTcGlubmVyIixhdHRyczp7InNob3ctc2Vjb25kcyI6X3ZtLnNob3dTZWNvbmRzLCJhbS1wbS1tb2RlIjpfdm0uYW1QbU1vZGUsImFycm93LWNvbnRyb2wiOl92bS5hcnJvd0NvbnRyb2wsZGF0ZTpfdm0ubWF4RGF0ZX0sb246e2NoYW5nZTpfdm0uaGFuZGxlTWF4Q2hhbmdlLCJzZWxlY3QtcmFuZ2UiOl92bS5zZXRNYXhTZWxlY3Rpb25SYW5nZX19KV0sMSldKV0pLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1wYW5lbF9fZm9vdGVyIn0sW19jKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtdGltZS1wYW5lbF9fYnRuIGNhbmNlbCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5oYW5kbGVDYW5jZWwoKTt9fX0sW192bS5fdihfdm0uX3MoX3ZtLnQoImVsLmRhdGVwaWNrZXIuY2FuY2VsIikpKV0pLF9jKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtdGltZS1wYW5lbF9fYnRuIGNvbmZpcm0iLGF0dHJzOnt0eXBlOiJidXR0b24iLGRpc2FibGVkOl92bS5idG5EaXNhYmxlZH0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLmhhbmRsZUNvbmZpcm0oKTt9fX0sW192bS5fdihfdm0uX3MoX3ZtLnQoImVsLmRhdGVwaWNrZXIuY29uZmlybSIpKSldKV0pXSldKTt9O3ZhciB0aW1lX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZmIyODY2MGVfc3RhdGljUmVuZGVyRm5zPVtdO3RpbWVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mYjI4NjYwZV9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZiMjg2NjBlJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS1yYW5nZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBNSU5fVElNRT1PYmplY3QoZGF0ZV91dGlsX1sicGFyc2VEYXRlIl0pKCcwMDowMDowMCcsJ0hIOm1tOnNzJyk7dmFyIE1BWF9USU1FPU9iamVjdChkYXRlX3V0aWxfWyJwYXJzZURhdGUiXSkoJzIzOjU5OjU5JywnSEg6bW06c3MnKTt2YXIgdGltZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX21pblRpbWVPZkRheT1mdW5jdGlvbiBtaW5UaW1lT2ZEYXkoZGF0ZSl7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJtb2RpZnlEYXRlIl0pKE1JTl9USU1FLGRhdGUuZ2V0RnVsbFllYXIoKSxkYXRlLmdldE1vbnRoKCksZGF0ZS5nZXREYXRlKCkpO307dmFyIHRpbWVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19tYXhUaW1lT2ZEYXk9ZnVuY3Rpb24gbWF4VGltZU9mRGF5KGRhdGUpe3JldHVybiBPYmplY3QoZGF0ZV91dGlsX1sibW9kaWZ5RGF0ZSJdKShNQVhfVElNRSxkYXRlLmdldEZ1bGxZZWFyKCksZGF0ZS5nZXRNb250aCgpLGRhdGUuZ2V0RGF0ZSgpKTt9Oy8vIGluY3JlYXNlIHRpbWUgYnkgYW1vdW50IG9mIG1pbGxpc2Vjb25kcywgYnV0IHdpdGhpbiB0aGUgcmFuZ2Ugb2YgZGF5CnZhciBhZHZhbmNlVGltZT1mdW5jdGlvbiBhZHZhbmNlVGltZShkYXRlLGFtb3VudCl7cmV0dXJuIG5ldyBEYXRlKE1hdGgubWluKGRhdGUuZ2V0VGltZSgpK2Ftb3VudCx0aW1lX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfbWF4VGltZU9mRGF5KGRhdGUpLmdldFRpbWUoKSkpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0aW1lX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXttaXhpbnM6W2xvY2FsZV9kZWZhdWx0LmFdLGNvbXBvbmVudHM6e1RpbWVTcGlubmVyOnRpbWVfc3Bpbm5lcn0sY29tcHV0ZWQ6e3Nob3dTZWNvbmRzOmZ1bmN0aW9uIHNob3dTZWNvbmRzKCl7cmV0dXJuKHRoaXMuZm9ybWF0fHwnJykuaW5kZXhPZignc3MnKSE9PS0xO30sb2Zmc2V0OmZ1bmN0aW9uIG9mZnNldCgpe3JldHVybiB0aGlzLnNob3dTZWNvbmRzPzExOjg7fSxzcGlubmVyOmZ1bmN0aW9uIHNwaW5uZXIoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25SYW5nZVswXTx0aGlzLm9mZnNldD90aGlzLiRyZWZzLm1pblNwaW5uZXI6dGhpcy4kcmVmcy5tYXhTcGlubmVyO30sYnRuRGlzYWJsZWQ6ZnVuY3Rpb24gYnRuRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5taW5EYXRlLmdldFRpbWUoKT50aGlzLm1heERhdGUuZ2V0VGltZSgpO30sYW1QbU1vZGU6ZnVuY3Rpb24gYW1QbU1vZGUoKXtpZigodGhpcy5mb3JtYXR8fCcnKS5pbmRleE9mKCdBJykhPT0tMSlyZXR1cm4nQSc7aWYoKHRoaXMuZm9ybWF0fHwnJykuaW5kZXhPZignYScpIT09LTEpcmV0dXJuJ2EnO3JldHVybicnO319LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntwb3BwZXJDbGFzczonJyxtaW5EYXRlOm5ldyBEYXRlKCksbWF4RGF0ZTpuZXcgRGF0ZSgpLHZhbHVlOltdLG9sZFZhbHVlOltuZXcgRGF0ZSgpLG5ldyBEYXRlKCldLGRlZmF1bHRWYWx1ZTpudWxsLGZvcm1hdDonSEg6bW06c3MnLHZpc2libGU6ZmFsc2Usc2VsZWN0aW9uUmFuZ2U6WzAsMl0sYXJyb3dDb250cm9sOmZhbHNlfTt9LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbiB2YWx1ZShfdmFsdWUpe2lmKEFycmF5LmlzQXJyYXkoX3ZhbHVlKSl7dGhpcy5taW5EYXRlPW5ldyBEYXRlKF92YWx1ZVswXSk7dGhpcy5tYXhEYXRlPW5ldyBEYXRlKF92YWx1ZVsxXSk7fWVsc2V7aWYoQXJyYXkuaXNBcnJheSh0aGlzLmRlZmF1bHRWYWx1ZSkpe3RoaXMubWluRGF0ZT1uZXcgRGF0ZSh0aGlzLmRlZmF1bHRWYWx1ZVswXSk7dGhpcy5tYXhEYXRlPW5ldyBEYXRlKHRoaXMuZGVmYXVsdFZhbHVlWzFdKTt9ZWxzZSBpZih0aGlzLmRlZmF1bHRWYWx1ZSl7dGhpcy5taW5EYXRlPW5ldyBEYXRlKHRoaXMuZGVmYXVsdFZhbHVlKTt0aGlzLm1heERhdGU9YWR2YW5jZVRpbWUobmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWUpLDYwKjYwKjEwMDApO31lbHNle3RoaXMubWluRGF0ZT1uZXcgRGF0ZSgpO3RoaXMubWF4RGF0ZT1hZHZhbmNlVGltZShuZXcgRGF0ZSgpLDYwKjYwKjEwMDApO319fSx2aXNpYmxlOmZ1bmN0aW9uIHZpc2libGUodmFsKXt2YXIgX3RoaXM9dGhpcztpZih2YWwpe3RoaXMub2xkVmFsdWU9dGhpcy52YWx1ZTt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBfdGhpcy4kcmVmcy5taW5TcGlubmVyLmVtaXRTZWxlY3RSYW5nZSgnaG91cnMnKTt9KTt9fX0sbWV0aG9kczp7aGFuZGxlQ2xlYXI6ZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKXt0aGlzLiRlbWl0KCdwaWNrJyxudWxsKTt9LGhhbmRsZUNhbmNlbDpmdW5jdGlvbiBoYW5kbGVDYW5jZWwoKXt0aGlzLiRlbWl0KCdwaWNrJyx0aGlzLm9sZFZhbHVlKTt9LGhhbmRsZU1pbkNoYW5nZTpmdW5jdGlvbiBoYW5kbGVNaW5DaGFuZ2UoZGF0ZSl7dGhpcy5taW5EYXRlPU9iamVjdChkYXRlX3V0aWxfWyJjbGVhck1pbGxpc2Vjb25kcyJdKShkYXRlKTt0aGlzLmhhbmRsZUNoYW5nZSgpO30saGFuZGxlTWF4Q2hhbmdlOmZ1bmN0aW9uIGhhbmRsZU1heENoYW5nZShkYXRlKXt0aGlzLm1heERhdGU9T2JqZWN0KGRhdGVfdXRpbF9bImNsZWFyTWlsbGlzZWNvbmRzIl0pKGRhdGUpO3RoaXMuaGFuZGxlQ2hhbmdlKCk7fSxoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKCl7aWYodGhpcy5pc1ZhbGlkVmFsdWUoW3RoaXMubWluRGF0ZSx0aGlzLm1heERhdGVdKSl7dGhpcy4kcmVmcy5taW5TcGlubmVyLnNlbGVjdGFibGVSYW5nZT1bW3RpbWVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19taW5UaW1lT2ZEYXkodGhpcy5taW5EYXRlKSx0aGlzLm1heERhdGVdXTt0aGlzLiRyZWZzLm1heFNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlPVtbdGhpcy5taW5EYXRlLHRpbWVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19tYXhUaW1lT2ZEYXkodGhpcy5tYXhEYXRlKV1dO3RoaXMuJGVtaXQoJ3BpY2snLFt0aGlzLm1pbkRhdGUsdGhpcy5tYXhEYXRlXSx0cnVlKTt9fSxzZXRNaW5TZWxlY3Rpb25SYW5nZTpmdW5jdGlvbiBzZXRNaW5TZWxlY3Rpb25SYW5nZShzdGFydCxlbmQpe3RoaXMuJGVtaXQoJ3NlbGVjdC1yYW5nZScsc3RhcnQsZW5kLCdtaW4nKTt0aGlzLnNlbGVjdGlvblJhbmdlPVtzdGFydCxlbmRdO30sc2V0TWF4U2VsZWN0aW9uUmFuZ2U6ZnVuY3Rpb24gc2V0TWF4U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsZW5kKXt0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLHN0YXJ0LGVuZCwnbWF4Jyk7dGhpcy5zZWxlY3Rpb25SYW5nZT1bc3RhcnQrdGhpcy5vZmZzZXQsZW5kK3RoaXMub2Zmc2V0XTt9LGhhbmRsZUNvbmZpcm06ZnVuY3Rpb24gaGFuZGxlQ29uZmlybSgpe3ZhciB2aXNpYmxlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTpmYWxzZTt2YXIgbWluU2VsZWN0YWJsZVJhbmdlPXRoaXMuJHJlZnMubWluU3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2U7dmFyIG1heFNlbGVjdGFibGVSYW5nZT10aGlzLiRyZWZzLm1heFNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlO3RoaXMubWluRGF0ZT1PYmplY3QoZGF0ZV91dGlsX1sibGltaXRUaW1lUmFuZ2UiXSkodGhpcy5taW5EYXRlLG1pblNlbGVjdGFibGVSYW5nZSx0aGlzLmZvcm1hdCk7dGhpcy5tYXhEYXRlPU9iamVjdChkYXRlX3V0aWxfWyJsaW1pdFRpbWVSYW5nZSJdKSh0aGlzLm1heERhdGUsbWF4U2VsZWN0YWJsZVJhbmdlLHRoaXMuZm9ybWF0KTt0aGlzLiRlbWl0KCdwaWNrJyxbdGhpcy5taW5EYXRlLHRoaXMubWF4RGF0ZV0sdmlzaWJsZSk7fSxhZGp1c3RTcGlubmVyczpmdW5jdGlvbiBhZGp1c3RTcGlubmVycygpe3RoaXMuJHJlZnMubWluU3Bpbm5lci5hZGp1c3RTcGlubmVycygpO3RoaXMuJHJlZnMubWF4U3Bpbm5lci5hZGp1c3RTcGlubmVycygpO30sY2hhbmdlU2VsZWN0aW9uUmFuZ2U6ZnVuY3Rpb24gY2hhbmdlU2VsZWN0aW9uUmFuZ2Uoc3RlcCl7dmFyIGxpc3Q9dGhpcy5zaG93U2Vjb25kcz9bMCwzLDYsMTEsMTQsMTddOlswLDMsOCwxMV07dmFyIG1hcHBpbmc9Wydob3VycycsJ21pbnV0ZXMnXS5jb25jYXQodGhpcy5zaG93U2Vjb25kcz9bJ3NlY29uZHMnXTpbXSk7dmFyIGluZGV4PWxpc3QuaW5kZXhPZih0aGlzLnNlbGVjdGlvblJhbmdlWzBdKTt2YXIgbmV4dD0oaW5kZXgrc3RlcCtsaXN0Lmxlbmd0aCklbGlzdC5sZW5ndGg7dmFyIGhhbGY9bGlzdC5sZW5ndGgvMjtpZihuZXh0PGhhbGYpe3RoaXMuJHJlZnMubWluU3Bpbm5lci5lbWl0U2VsZWN0UmFuZ2UobWFwcGluZ1tuZXh0XSk7fWVsc2V7dGhpcy4kcmVmcy5tYXhTcGlubmVyLmVtaXRTZWxlY3RSYW5nZShtYXBwaW5nW25leHQtaGFsZl0pO319LGlzVmFsaWRWYWx1ZTpmdW5jdGlvbiBpc1ZhbGlkVmFsdWUoZGF0ZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0ZSkmJk9iamVjdChkYXRlX3V0aWxfWyJ0aW1lV2l0aGluUmFuZ2UiXSkodGhpcy5taW5EYXRlLHRoaXMuJHJlZnMubWluU3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2UpJiZPYmplY3QoZGF0ZV91dGlsX1sidGltZVdpdGhpblJhbmdlIl0pKHRoaXMubWF4RGF0ZSx0aGlzLiRyZWZzLm1heFNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlKTt9LGhhbmRsZUtleWRvd246ZnVuY3Rpb24gaGFuZGxlS2V5ZG93bihldmVudCl7dmFyIGtleUNvZGU9ZXZlbnQua2V5Q29kZTt2YXIgbWFwcGluZz17Mzg6LTEsNDA6MSwzNzotMSwzOToxfTsvLyBMZWZ0IG9yIFJpZ2h0CmlmKGtleUNvZGU9PT0zN3x8a2V5Q29kZT09PTM5KXt2YXIgc3RlcD1tYXBwaW5nW2tleUNvZGVdO3RoaXMuY2hhbmdlU2VsZWN0aW9uUmFuZ2Uoc3RlcCk7ZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm47fS8vIFVwIG9yIERvd24KaWYoa2V5Q29kZT09PTM4fHxrZXlDb2RlPT09NDApe3ZhciBfc3RlcD1tYXBwaW5nW2tleUNvZGVdO3RoaXMuc3Bpbm5lci5zY3JvbGxEb3duKF9zdGVwKTtldmVudC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybjt9fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhbmVsX3RpbWVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189dGltZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXJhbmdlLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHRpbWVfcmFuZ2VfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYW5lbF90aW1lX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHRpbWVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mYjI4NjYwZV9yZW5kZXIsdGltZV9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ZiMjg2NjBlX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgdGltZV9yYW5nZV9hcGk7fXRpbWVfcmFuZ2VfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS1yYW5nZS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGltZV9yYW5nZT10aW1lX3JhbmdlX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BpY2tlci90aW1lLXBpY2tlci5qcwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHRpbWVfcGlja2VyPXttaXhpbnM6W3BpY2tlcl0sbmFtZTonRWxUaW1lUGlja2VyJyxwcm9wczp7aXNSYW5nZTpCb29sZWFuLGFycm93Q29udHJvbDpCb29sZWFufSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57dHlwZTonJ307fSx3YXRjaDp7aXNSYW5nZTpmdW5jdGlvbiBpc1JhbmdlKF9pc1JhbmdlKXtpZih0aGlzLnBpY2tlcil7dGhpcy51bm1vdW50UGlja2VyKCk7dGhpcy50eXBlPV9pc1JhbmdlPyd0aW1lcmFuZ2UnOid0aW1lJzt0aGlzLnBhbmVsPV9pc1JhbmdlP3RpbWVfcmFuZ2U6cGFuZWxfdGltZTt0aGlzLm1vdW50UGlja2VyKCk7fWVsc2V7dGhpcy50eXBlPV9pc1JhbmdlPyd0aW1lcmFuZ2UnOid0aW1lJzt0aGlzLnBhbmVsPV9pc1JhbmdlP3RpbWVfcmFuZ2U6cGFuZWxfdGltZTt9fX0sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dGhpcy50eXBlPXRoaXMuaXNSYW5nZT8ndGltZXJhbmdlJzondGltZSc7dGhpcy5wYW5lbD10aGlzLmlzUmFuZ2U/dGltZV9yYW5nZTpwYW5lbF90aW1lO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZS1waWNrZXIvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi90aW1lX3BpY2tlci5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudCh0aW1lX3BpY2tlci5uYW1lLHRpbWVfcGlja2VyKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfdGltZV9waWNrZXI9dGltZV9waWNrZXI7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MjA2MDI3MiYKdmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81MjA2MDI3Ml9yZW5kZXI9ZnVuY3Rpb24gbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUyMDYwMjcyX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygic3BhbiIsW19jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6X3ZtLnRyYW5zaXRpb259LG9uOnsiYWZ0ZXItZW50ZXIiOl92bS5oYW5kbGVBZnRlckVudGVyLCJhZnRlci1sZWF2ZSI6X3ZtLmhhbmRsZUFmdGVyTGVhdmV9fSxbX2MoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiFfdm0uZGlzYWJsZWQmJl92bS5zaG93UG9wcGVyLGV4cHJlc3Npb246IiFkaXNhYmxlZCAmJiBzaG93UG9wcGVyIn1dLHJlZjoicG9wcGVyIixzdGF0aWNDbGFzczoiZWwtcG9wb3ZlciBlbC1wb3BwZXIiLGNsYXNzOltfdm0ucG9wcGVyQ2xhc3MsX3ZtLmNvbnRlbnQmJiJlbC1wb3BvdmVyLS1wbGFpbiJdLHN0eWxlOnt3aWR0aDpfdm0ud2lkdGgrInB4In0sYXR0cnM6e3JvbGU6InRvb2x0aXAiLGlkOl92bS50b29sdGlwSWQsImFyaWEtaGlkZGVuIjpfdm0uZGlzYWJsZWR8fCFfdm0uc2hvd1BvcHBlcj8idHJ1ZSI6ImZhbHNlIn19LFtfdm0udGl0bGU/X2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wb3BvdmVyX190aXRsZSIsZG9tUHJvcHM6e3RleHRDb250ZW50Ol92bS5fcyhfdm0udGl0bGUpfX0pOl92bS5fZSgpLF92bS5fdCgiZGVmYXVsdCIsW192bS5fdihfdm0uX3MoX3ZtLmNvbnRlbnQpKV0pXSwyKV0pLF92bS5fdCgicmVmZXJlbmNlIildLDIpO307dmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81MjA2MDI3Ml9zdGF0aWNSZW5kZXJGbnM9W107bWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUyMDYwMjcyX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MjA2MDI3MiYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxQb3BvdmVyJyxtaXhpbnM6W3Z1ZV9wb3BwZXJfZGVmYXVsdC5hXSxwcm9wczp7dHJpZ2dlcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDonY2xpY2snLHZhbGlkYXRvcjpmdW5jdGlvbiB2YWxpZGF0b3IodmFsdWUpe3JldHVyblsnY2xpY2snLCdmb2N1cycsJ2hvdmVyJywnbWFudWFsJ10uaW5kZXhPZih2YWx1ZSk+LTE7fX0sb3BlbkRlbGF5Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9LGNsb3NlRGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MjAwfSx0aXRsZTpTdHJpbmcsZGlzYWJsZWQ6Qm9vbGVhbixjb250ZW50OlN0cmluZyxyZWZlcmVuY2U6e30scG9wcGVyQ2xhc3M6U3RyaW5nLHdpZHRoOnt9LHZpc2libGVBcnJvdzp7ZGVmYXVsdDp0cnVlfSxhcnJvd09mZnNldDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSx0cmFuc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OidmYWRlLWluLWxpbmVhcid9LHRhYmluZGV4Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9fSxjb21wdXRlZDp7dG9vbHRpcElkOmZ1bmN0aW9uIHRvb2x0aXBJZCgpe3JldHVybidlbC1wb3BvdmVyLScrT2JqZWN0KHV0aWxfWyJnZW5lcmF0ZUlkIl0pKCk7fX0sd2F0Y2g6e3Nob3dQb3BwZXI6ZnVuY3Rpb24gc2hvd1BvcHBlcih2YWwpe2lmKHRoaXMuZGlzYWJsZWQpe3JldHVybjt9dmFsP3RoaXMuJGVtaXQoJ3Nob3cnKTp0aGlzLiRlbWl0KCdoaWRlJyk7fX0sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dmFyIF90aGlzPXRoaXM7dmFyIHJlZmVyZW5jZT10aGlzLnJlZmVyZW5jZUVsbT10aGlzLnJlZmVyZW5jZXx8dGhpcy4kcmVmcy5yZWZlcmVuY2U7dmFyIHBvcHBlcj10aGlzLnBvcHBlcnx8dGhpcy4kcmVmcy5wb3BwZXI7aWYoIXJlZmVyZW5jZSYmdGhpcy4kc2xvdHMucmVmZXJlbmNlJiZ0aGlzLiRzbG90cy5yZWZlcmVuY2VbMF0pe3JlZmVyZW5jZT10aGlzLnJlZmVyZW5jZUVsbT10aGlzLiRzbG90cy5yZWZlcmVuY2VbMF0uZWxtO30vLyDlj6/orr/pl67mgKcKaWYocmVmZXJlbmNlKXtPYmplY3QoZG9tX1siYWRkQ2xhc3MiXSkocmVmZXJlbmNlLCdlbC1wb3BvdmVyX19yZWZlcmVuY2UnKTtyZWZlcmVuY2Uuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyx0aGlzLnRvb2x0aXBJZCk7cmVmZXJlbmNlLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLHRoaXMudGFiaW5kZXgpOy8vIHRhYuW6j+WIlwpwb3BwZXIuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsMCk7aWYodGhpcy50cmlnZ2VyIT09J2NsaWNrJyl7T2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwnZm9jdXNpbicsZnVuY3Rpb24oKXtfdGhpcy5oYW5kbGVGb2N1cygpO3ZhciBpbnN0YW5jZT1yZWZlcmVuY2UuX192dWVfXztpZihpbnN0YW5jZSYmdHlwZW9mIGluc3RhbmNlLmZvY3VzPT09J2Z1bmN0aW9uJyl7aW5zdGFuY2UuZm9jdXMoKTt9fSk7T2JqZWN0KGRvbV9bIm9uIl0pKHBvcHBlciwnZm9jdXNpbicsdGhpcy5oYW5kbGVGb2N1cyk7T2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwnZm9jdXNvdXQnLHRoaXMuaGFuZGxlQmx1cik7T2JqZWN0KGRvbV9bIm9uIl0pKHBvcHBlciwnZm9jdXNvdXQnLHRoaXMuaGFuZGxlQmx1cik7fU9iamVjdChkb21fWyJvbiJdKShyZWZlcmVuY2UsJ2tleWRvd24nLHRoaXMuaGFuZGxlS2V5ZG93bik7T2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwnY2xpY2snLHRoaXMuaGFuZGxlQ2xpY2spO31pZih0aGlzLnRyaWdnZXI9PT0nY2xpY2snKXtPYmplY3QoZG9tX1sib24iXSkocmVmZXJlbmNlLCdjbGljaycsdGhpcy5kb1RvZ2dsZSk7T2JqZWN0KGRvbV9bIm9uIl0pKGRvY3VtZW50LCdjbGljaycsdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTt9ZWxzZSBpZih0aGlzLnRyaWdnZXI9PT0naG92ZXInKXtPYmplY3QoZG9tX1sib24iXSkocmVmZXJlbmNlLCdtb3VzZWVudGVyJyx0aGlzLmhhbmRsZU1vdXNlRW50ZXIpO09iamVjdChkb21fWyJvbiJdKShwb3BwZXIsJ21vdXNlZW50ZXInLHRoaXMuaGFuZGxlTW91c2VFbnRlcik7T2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwnbW91c2VsZWF2ZScsdGhpcy5oYW5kbGVNb3VzZUxlYXZlKTtPYmplY3QoZG9tX1sib24iXSkocG9wcGVyLCdtb3VzZWxlYXZlJyx0aGlzLmhhbmRsZU1vdXNlTGVhdmUpO31lbHNlIGlmKHRoaXMudHJpZ2dlcj09PSdmb2N1cycpe2lmKHRoaXMudGFiaW5kZXg8MCl7Y29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXVtQb3BvdmVyXWEgbmVnYXRpdmUgdGFpbmRleCBtZWFucyB0aGF0IHRoZSBlbGVtZW50IGNhbm5vdCBiZSBmb2N1c2VkIGJ5IHRhYiBrZXknKTt9aWYocmVmZXJlbmNlLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpKXtPYmplY3QoZG9tX1sib24iXSkocmVmZXJlbmNlLCdmb2N1c2luJyx0aGlzLmRvU2hvdyk7T2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwnZm9jdXNvdXQnLHRoaXMuZG9DbG9zZSk7fWVsc2V7T2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwnbW91c2Vkb3duJyx0aGlzLmRvU2hvdyk7T2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwnbW91c2V1cCcsdGhpcy5kb0Nsb3NlKTt9fX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCl7dGhpcy5jbGVhbnVwKCk7fSxkZWFjdGl2YXRlZDpmdW5jdGlvbiBkZWFjdGl2YXRlZCgpe3RoaXMuY2xlYW51cCgpO30sbWV0aG9kczp7ZG9Ub2dnbGU6ZnVuY3Rpb24gZG9Ub2dnbGUoKXt0aGlzLnNob3dQb3BwZXI9IXRoaXMuc2hvd1BvcHBlcjt9LGRvU2hvdzpmdW5jdGlvbiBkb1Nob3coKXt0aGlzLnNob3dQb3BwZXI9dHJ1ZTt9LGRvQ2xvc2U6ZnVuY3Rpb24gZG9DbG9zZSgpe3RoaXMuc2hvd1BvcHBlcj1mYWxzZTt9LGhhbmRsZUZvY3VzOmZ1bmN0aW9uIGhhbmRsZUZvY3VzKCl7T2JqZWN0KGRvbV9bImFkZENsYXNzIl0pKHRoaXMucmVmZXJlbmNlRWxtLCdmb2N1c2luZycpO2lmKHRoaXMudHJpZ2dlcj09PSdjbGljayd8fHRoaXMudHJpZ2dlcj09PSdmb2N1cycpdGhpcy5zaG93UG9wcGVyPXRydWU7fSxoYW5kbGVDbGljazpmdW5jdGlvbiBoYW5kbGVDbGljaygpe09iamVjdChkb21fWyJyZW1vdmVDbGFzcyJdKSh0aGlzLnJlZmVyZW5jZUVsbSwnZm9jdXNpbmcnKTt9LGhhbmRsZUJsdXI6ZnVuY3Rpb24gaGFuZGxlQmx1cigpe09iamVjdChkb21fWyJyZW1vdmVDbGFzcyJdKSh0aGlzLnJlZmVyZW5jZUVsbSwnZm9jdXNpbmcnKTtpZih0aGlzLnRyaWdnZXI9PT0nY2xpY2snfHx0aGlzLnRyaWdnZXI9PT0nZm9jdXMnKXRoaXMuc2hvd1BvcHBlcj1mYWxzZTt9LGhhbmRsZU1vdXNlRW50ZXI6ZnVuY3Rpb24gaGFuZGxlTW91c2VFbnRlcigpe3ZhciBfdGhpczI9dGhpcztjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO2lmKHRoaXMub3BlbkRlbGF5KXt0aGlzLl90aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7X3RoaXMyLnNob3dQb3BwZXI9dHJ1ZTt9LHRoaXMub3BlbkRlbGF5KTt9ZWxzZXt0aGlzLnNob3dQb3BwZXI9dHJ1ZTt9fSxoYW5kbGVLZXlkb3duOmZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXYpe2lmKGV2LmtleUNvZGU9PT0yNyYmdGhpcy50cmlnZ2VyIT09J21hbnVhbCcpey8vIGVzYwp0aGlzLmRvQ2xvc2UoKTt9fSxoYW5kbGVNb3VzZUxlYXZlOmZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKXt2YXIgX3RoaXMzPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtpZih0aGlzLmNsb3NlRGVsYXkpe3RoaXMuX3RpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtfdGhpczMuc2hvd1BvcHBlcj1mYWxzZTt9LHRoaXMuY2xvc2VEZWxheSk7fWVsc2V7dGhpcy5zaG93UG9wcGVyPWZhbHNlO319LGhhbmRsZURvY3VtZW50Q2xpY2s6ZnVuY3Rpb24gaGFuZGxlRG9jdW1lbnRDbGljayhlKXt2YXIgcmVmZXJlbmNlPXRoaXMucmVmZXJlbmNlfHx0aGlzLiRyZWZzLnJlZmVyZW5jZTt2YXIgcG9wcGVyPXRoaXMucG9wcGVyfHx0aGlzLiRyZWZzLnBvcHBlcjtpZighcmVmZXJlbmNlJiZ0aGlzLiRzbG90cy5yZWZlcmVuY2UmJnRoaXMuJHNsb3RzLnJlZmVyZW5jZVswXSl7cmVmZXJlbmNlPXRoaXMucmVmZXJlbmNlRWxtPXRoaXMuJHNsb3RzLnJlZmVyZW5jZVswXS5lbG07fWlmKCF0aGlzLiRlbHx8IXJlZmVyZW5jZXx8dGhpcy4kZWwuY29udGFpbnMoZS50YXJnZXQpfHxyZWZlcmVuY2UuY29udGFpbnMoZS50YXJnZXQpfHwhcG9wcGVyfHxwb3BwZXIuY29udGFpbnMoZS50YXJnZXQpKXJldHVybjt0aGlzLnNob3dQb3BwZXI9ZmFsc2U7fSxoYW5kbGVBZnRlckVudGVyOmZ1bmN0aW9uIGhhbmRsZUFmdGVyRW50ZXIoKXt0aGlzLiRlbWl0KCdhZnRlci1lbnRlcicpO30saGFuZGxlQWZ0ZXJMZWF2ZTpmdW5jdGlvbiBoYW5kbGVBZnRlckxlYXZlKCl7dGhpcy4kZW1pdCgnYWZ0ZXItbGVhdmUnKTt0aGlzLmRvRGVzdHJveSgpO30sY2xlYW51cDpmdW5jdGlvbiBjbGVhbnVwKCl7aWYodGhpcy5vcGVuRGVsYXl8fHRoaXMuY2xvc2VEZWxheSl7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTt9fX0sZGVzdHJveWVkOmZ1bmN0aW9uIGRlc3Ryb3llZCgpe3ZhciByZWZlcmVuY2U9dGhpcy5yZWZlcmVuY2U7T2JqZWN0KGRvbV9bIm9mZiJdKShyZWZlcmVuY2UsJ2NsaWNrJyx0aGlzLmRvVG9nZ2xlKTtPYmplY3QoZG9tX1sib2ZmIl0pKHJlZmVyZW5jZSwnbW91c2V1cCcsdGhpcy5kb0Nsb3NlKTtPYmplY3QoZG9tX1sib2ZmIl0pKHJlZmVyZW5jZSwnbW91c2Vkb3duJyx0aGlzLmRvU2hvdyk7T2JqZWN0KGRvbV9bIm9mZiJdKShyZWZlcmVuY2UsJ2ZvY3VzaW4nLHRoaXMuZG9TaG93KTtPYmplY3QoZG9tX1sib2ZmIl0pKHJlZmVyZW5jZSwnZm9jdXNvdXQnLHRoaXMuZG9DbG9zZSk7T2JqZWN0KGRvbV9bIm9mZiJdKShyZWZlcmVuY2UsJ21vdXNlZG93bicsdGhpcy5kb1Nob3cpO09iamVjdChkb21fWyJvZmYiXSkocmVmZXJlbmNlLCdtb3VzZXVwJyx0aGlzLmRvQ2xvc2UpO09iamVjdChkb21fWyJvZmYiXSkocmVmZXJlbmNlLCdtb3VzZWxlYXZlJyx0aGlzLmhhbmRsZU1vdXNlTGVhdmUpO09iamVjdChkb21fWyJvZmYiXSkocmVmZXJlbmNlLCdtb3VzZWVudGVyJyx0aGlzLmhhbmRsZU1vdXNlRW50ZXIpO09iamVjdChkb21fWyJvZmYiXSkoZG9jdW1lbnQsJ2NsaWNrJyx0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189bWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcG92ZXIvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgbWFpbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81MjA2MDI3Ml9yZW5kZXIsbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUyMDYwMjcyX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgbWFpbl9hcGk7fW1haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBtYWluPW1haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9kaXJlY3RpdmUuanMKdmFyIGdldFJlZmVyZW5jZT1mdW5jdGlvbiBnZXRSZWZlcmVuY2UoZWwsYmluZGluZyx2bm9kZSl7dmFyIF9yZWY9YmluZGluZy5leHByZXNzaW9uP2JpbmRpbmcudmFsdWU6YmluZGluZy5hcmc7dmFyIHBvcHBlcj12bm9kZS5jb250ZXh0LiRyZWZzW19yZWZdO2lmKHBvcHBlcil7aWYoQXJyYXkuaXNBcnJheShwb3BwZXIpKXtwb3BwZXJbMF0uJHJlZnMucmVmZXJlbmNlPWVsO31lbHNle3BvcHBlci4kcmVmcy5yZWZlcmVuY2U9ZWw7fX19Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZGlyZWN0aXZlPXtiaW5kOmZ1bmN0aW9uIGJpbmQoZWwsYmluZGluZyx2bm9kZSl7Z2V0UmVmZXJlbmNlKGVsLGJpbmRpbmcsdm5vZGUpO30saW5zZXJ0ZWQ6ZnVuY3Rpb24gaW5zZXJ0ZWQoZWwsYmluZGluZyx2bm9kZSl7Z2V0UmVmZXJlbmNlKGVsLGJpbmRpbmcsdm5vZGUpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wb3Zlci9pbmRleC5qcwpleHRlcm5hbF92dWVfZGVmYXVsdC5hLmRpcmVjdGl2ZSgncG9wb3ZlcicsZGlyZWN0aXZlKTsvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL21haW4uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5kaXJlY3RpdmUoJ3BvcG92ZXInLGRpcmVjdGl2ZSk7VnVlLmNvbXBvbmVudChtYWluLm5hbWUsbWFpbik7fTttYWluLmRpcmVjdGl2ZT1kaXJlY3RpdmU7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwb3BvdmVyPW1haW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90b29sdGlwL3NyYy9tYWluLmpzCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX21haW49e25hbWU6J0VsVG9vbHRpcCcsbWl4aW5zOlt2dWVfcG9wcGVyX2RlZmF1bHQuYV0scHJvcHM6e29wZW5EZWxheTp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxkaXNhYmxlZDpCb29sZWFuLG1hbnVhbDpCb29sZWFuLGVmZmVjdDp7dHlwZTpTdHJpbmcsZGVmYXVsdDonZGFyayd9LGFycm93T2Zmc2V0Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9LHBvcHBlckNsYXNzOlN0cmluZyxjb250ZW50OlN0cmluZyx2aXNpYmxlQXJyb3c6e2RlZmF1bHQ6dHJ1ZX0sdHJhbnNpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDonZWwtZmFkZS1pbi1saW5lYXInfSxwb3BwZXJPcHRpb25zOntkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJue2JvdW5kYXJpZXNQYWRkaW5nOjEwLGdwdUFjY2VsZXJhdGlvbjpmYWxzZX07fX0sZW50ZXJhYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxoaWRlQWZ0ZXI6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sdGFiaW5kZXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnt0b29sdGlwSWQ6J2VsLXRvb2x0aXAtJytPYmplY3QodXRpbF9bImdlbmVyYXRlSWQiXSkoKSx0aW1lb3V0UGVuZGluZzpudWxsLGZvY3VzaW5nOmZhbHNlfTt9LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbiBiZWZvcmVDcmVhdGUoKXt2YXIgX3RoaXM9dGhpcztpZih0aGlzLiRpc1NlcnZlcilyZXR1cm47dGhpcy5wb3BwZXJWTT1uZXcgZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYSh7ZGF0YTp7bm9kZTonJ30scmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihoKXtyZXR1cm4gdGhpcy5ub2RlO319KS4kbW91bnQoKTt0aGlzLmRlYm91bmNlQ2xvc2U9ZGVib3VuY2VfZGVmYXVsdCgpKDIwMCxmdW5jdGlvbigpe3JldHVybiBfdGhpcy5oYW5kbGVDbG9zZVBvcHBlcigpO30pO30scmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihoKXt2YXIgX3RoaXMyPXRoaXM7aWYodGhpcy5wb3BwZXJWTSl7dGhpcy5wb3BwZXJWTS5ub2RlPWgoJ3RyYW5zaXRpb24nLHthdHRyczp7bmFtZTp0aGlzLnRyYW5zaXRpb259LG9uOnsnYWZ0ZXJMZWF2ZSc6dGhpcy5kb0Rlc3Ryb3l9fSxbaCgnZGl2Jyx7b246eydtb3VzZWxlYXZlJzpmdW5jdGlvbiBtb3VzZWxlYXZlKCl7X3RoaXMyLnNldEV4cGVjdGVkU3RhdGUoZmFsc2UpO190aGlzMi5kZWJvdW5jZUNsb3NlKCk7fSwnbW91c2VlbnRlcic6ZnVuY3Rpb24gbW91c2VlbnRlcigpe190aGlzMi5zZXRFeHBlY3RlZFN0YXRlKHRydWUpO319LHJlZjoncG9wcGVyJyxhdHRyczp7cm9sZTondG9vbHRpcCcsaWQ6dGhpcy50b29sdGlwSWQsJ2FyaWEtaGlkZGVuJzp0aGlzLmRpc2FibGVkfHwhdGhpcy5zaG93UG9wcGVyPyd0cnVlJzonZmFsc2UnfSxkaXJlY3RpdmVzOlt7bmFtZTonc2hvdycsdmFsdWU6IXRoaXMuZGlzYWJsZWQmJnRoaXMuc2hvd1BvcHBlcn1dLCdjbGFzcyc6WydlbC10b29sdGlwX19wb3BwZXInLCdpcy0nK3RoaXMuZWZmZWN0LHRoaXMucG9wcGVyQ2xhc3NdfSxbdGhpcy4kc2xvdHMuY29udGVudHx8dGhpcy5jb250ZW50XSldKTt9dmFyIGZpcnN0RWxlbWVudD10aGlzLmdldEZpcnN0RWxlbWVudCgpO2lmKCFmaXJzdEVsZW1lbnQpcmV0dXJuIG51bGw7dmFyIGRhdGE9Zmlyc3RFbGVtZW50LmRhdGE9Zmlyc3RFbGVtZW50LmRhdGF8fHt9O2RhdGEuc3RhdGljQ2xhc3M9dGhpcy5hZGRUb29sdGlwQ2xhc3MoZGF0YS5zdGF0aWNDbGFzcyk7cmV0dXJuIGZpcnN0RWxlbWVudDt9LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3ZhciBfdGhpczM9dGhpczt0aGlzLnJlZmVyZW5jZUVsbT10aGlzLiRlbDtpZih0aGlzLiRlbC5ub2RlVHlwZT09PTEpe3RoaXMuJGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsdGhpcy50b29sdGlwSWQpO3RoaXMuJGVsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLHRoaXMudGFiaW5kZXgpO09iamVjdChkb21fWyJvbiJdKSh0aGlzLnJlZmVyZW5jZUVsbSwnbW91c2VlbnRlcicsdGhpcy5zaG93KTtPYmplY3QoZG9tX1sib24iXSkodGhpcy5yZWZlcmVuY2VFbG0sJ21vdXNlbGVhdmUnLHRoaXMuaGlkZSk7T2JqZWN0KGRvbV9bIm9uIl0pKHRoaXMucmVmZXJlbmNlRWxtLCdmb2N1cycsZnVuY3Rpb24oKXtpZighX3RoaXMzLiRzbG90cy5kZWZhdWx0fHwhX3RoaXMzLiRzbG90cy5kZWZhdWx0Lmxlbmd0aCl7X3RoaXMzLmhhbmRsZUZvY3VzKCk7cmV0dXJuO312YXIgaW5zdGFuY2U9X3RoaXMzLiRzbG90cy5kZWZhdWx0WzBdLmNvbXBvbmVudEluc3RhbmNlO2lmKGluc3RhbmNlJiZpbnN0YW5jZS5mb2N1cyl7aW5zdGFuY2UuZm9jdXMoKTt9ZWxzZXtfdGhpczMuaGFuZGxlRm9jdXMoKTt9fSk7T2JqZWN0KGRvbV9bIm9uIl0pKHRoaXMucmVmZXJlbmNlRWxtLCdibHVyJyx0aGlzLmhhbmRsZUJsdXIpO09iamVjdChkb21fWyJvbiJdKSh0aGlzLnJlZmVyZW5jZUVsbSwnY2xpY2snLHRoaXMucmVtb3ZlRm9jdXNpbmcpO30vLyBmaXggaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQ0MjQKaWYodGhpcy52YWx1ZSYmdGhpcy5wb3BwZXJWTSl7dGhpcy5wb3BwZXJWTS4kbmV4dFRpY2soZnVuY3Rpb24oKXtpZihfdGhpczMudmFsdWUpe190aGlzMy51cGRhdGVQb3BwZXIoKTt9fSk7fX0sd2F0Y2g6e2ZvY3VzaW5nOmZ1bmN0aW9uIGZvY3VzaW5nKHZhbCl7aWYodmFsKXtPYmplY3QoZG9tX1siYWRkQ2xhc3MiXSkodGhpcy5yZWZlcmVuY2VFbG0sJ2ZvY3VzaW5nJyk7fWVsc2V7T2JqZWN0KGRvbV9bInJlbW92ZUNsYXNzIl0pKHRoaXMucmVmZXJlbmNlRWxtLCdmb2N1c2luZycpO319fSxtZXRob2RzOntzaG93OmZ1bmN0aW9uIHNob3coKXt0aGlzLnNldEV4cGVjdGVkU3RhdGUodHJ1ZSk7dGhpcy5oYW5kbGVTaG93UG9wcGVyKCk7fSxoaWRlOmZ1bmN0aW9uIGhpZGUoKXt0aGlzLnNldEV4cGVjdGVkU3RhdGUoZmFsc2UpO3RoaXMuZGVib3VuY2VDbG9zZSgpO30saGFuZGxlRm9jdXM6ZnVuY3Rpb24gaGFuZGxlRm9jdXMoKXt0aGlzLmZvY3VzaW5nPXRydWU7dGhpcy5zaG93KCk7fSxoYW5kbGVCbHVyOmZ1bmN0aW9uIGhhbmRsZUJsdXIoKXt0aGlzLmZvY3VzaW5nPWZhbHNlO3RoaXMuaGlkZSgpO30scmVtb3ZlRm9jdXNpbmc6ZnVuY3Rpb24gcmVtb3ZlRm9jdXNpbmcoKXt0aGlzLmZvY3VzaW5nPWZhbHNlO30sYWRkVG9vbHRpcENsYXNzOmZ1bmN0aW9uIGFkZFRvb2x0aXBDbGFzcyhwcmV2KXtpZighcHJldil7cmV0dXJuJ2VsLXRvb2x0aXAnO31lbHNle3JldHVybidlbC10b29sdGlwICcrcHJldi5yZXBsYWNlKCdlbC10b29sdGlwJywnJyk7fX0saGFuZGxlU2hvd1BvcHBlcjpmdW5jdGlvbiBoYW5kbGVTaG93UG9wcGVyKCl7dmFyIF90aGlzND10aGlzO2lmKCF0aGlzLmV4cGVjdGVkU3RhdGV8fHRoaXMubWFudWFsKXJldHVybjtjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTt0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe190aGlzNC5zaG93UG9wcGVyPXRydWU7fSx0aGlzLm9wZW5EZWxheSk7aWYodGhpcy5oaWRlQWZ0ZXI+MCl7dGhpcy50aW1lb3V0UGVuZGluZz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7X3RoaXM0LnNob3dQb3BwZXI9ZmFsc2U7fSx0aGlzLmhpZGVBZnRlcik7fX0saGFuZGxlQ2xvc2VQb3BwZXI6ZnVuY3Rpb24gaGFuZGxlQ2xvc2VQb3BwZXIoKXtpZih0aGlzLmVudGVyYWJsZSYmdGhpcy5leHBlY3RlZFN0YXRlfHx0aGlzLm1hbnVhbClyZXR1cm47Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7aWYodGhpcy50aW1lb3V0UGVuZGluZyl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFBlbmRpbmcpO310aGlzLnNob3dQb3BwZXI9ZmFsc2U7aWYodGhpcy5kaXNhYmxlZCl7dGhpcy5kb0Rlc3Ryb3koKTt9fSxzZXRFeHBlY3RlZFN0YXRlOmZ1bmN0aW9uIHNldEV4cGVjdGVkU3RhdGUoZXhwZWN0ZWRTdGF0ZSl7aWYoZXhwZWN0ZWRTdGF0ZT09PWZhbHNlKXtjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0UGVuZGluZyk7fXRoaXMuZXhwZWN0ZWRTdGF0ZT1leHBlY3RlZFN0YXRlO30sZ2V0Rmlyc3RFbGVtZW50OmZ1bmN0aW9uIGdldEZpcnN0RWxlbWVudCgpe3ZhciBzbG90cz10aGlzLiRzbG90cy5kZWZhdWx0O2lmKCFBcnJheS5pc0FycmF5KHNsb3RzKSlyZXR1cm4gbnVsbDt2YXIgZWxlbWVudD1udWxsO2Zvcih2YXIgaW5kZXg9MDtpbmRleDxzbG90cy5sZW5ndGg7aW5kZXgrKyl7aWYoc2xvdHNbaW5kZXhdJiZzbG90c1tpbmRleF0udGFnKXtlbGVtZW50PXNsb3RzW2luZGV4XTt9O31yZXR1cm4gZWxlbWVudDt9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKXt0aGlzLnBvcHBlclZNJiZ0aGlzLnBvcHBlclZNLiRkZXN0cm95KCk7fSxkZXN0cm95ZWQ6ZnVuY3Rpb24gZGVzdHJveWVkKCl7dmFyIHJlZmVyZW5jZT10aGlzLnJlZmVyZW5jZUVsbTtpZihyZWZlcmVuY2Uubm9kZVR5cGU9PT0xKXtPYmplY3QoZG9tX1sib2ZmIl0pKHJlZmVyZW5jZSwnbW91c2VlbnRlcicsdGhpcy5zaG93KTtPYmplY3QoZG9tX1sib2ZmIl0pKHJlZmVyZW5jZSwnbW91c2VsZWF2ZScsdGhpcy5oaWRlKTtPYmplY3QoZG9tX1sib2ZmIl0pKHJlZmVyZW5jZSwnZm9jdXMnLHRoaXMuaGFuZGxlRm9jdXMpO09iamVjdChkb21fWyJvZmYiXSkocmVmZXJlbmNlLCdibHVyJyx0aGlzLmhhbmRsZUJsdXIpO09iamVjdChkb21fWyJvZmYiXSkocmVmZXJlbmNlLCdjbGljaycsdGhpcy5yZW1vdmVGb2N1c2luZyk7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdG9vbHRpcC9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHNyY19tYWluLm5hbWUsc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc190b29sdGlwPXNyY19tYWluOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVzc2FnZS1ib3gvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMjliMDEyJgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZiMjliMDEyX3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmIyOWIwMTJfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6Im1zZ2JveC1mYWRlIn19LFtfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX3dyYXBwZXIiLGF0dHJzOnt0YWJpbmRleDoiLTEiLHJvbGU6ImRpYWxvZyIsImFyaWEtbW9kYWwiOiJ0cnVlIiwiYXJpYS1sYWJlbCI6X3ZtLnRpdGxlfHwiZGlhbG9nIn0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7aWYoJGV2ZW50LnRhcmdldCE9PSRldmVudC5jdXJyZW50VGFyZ2V0KXtyZXR1cm4gbnVsbDt9cmV0dXJuIF92bS5oYW5kbGVXcmFwcGVyQ2xpY2soJGV2ZW50KTt9fX0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3giLGNsYXNzOltfdm0uY3VzdG9tQ2xhc3MsX3ZtLmNlbnRlciYmImVsLW1lc3NhZ2UtYm94LS1jZW50ZXIiXX0sW192bS50aXRsZSE9PW51bGw/X2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlLWJveF9faGVhZGVyIn0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX3RpdGxlIn0sW192bS5pY29uJiZfdm0uY2VudGVyP19jKCJkaXYiLHtjbGFzczpbImVsLW1lc3NhZ2UtYm94X19zdGF0dXMiLF92bS5pY29uXX0pOl92bS5fZSgpLF9jKCJzcGFuIixbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pXSksX3ZtLnNob3dDbG9zZT9fYygiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2UtYm94X19oZWFkZXJidG4iLGF0dHJzOnt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xvc2UifSxvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtfdm0uaGFuZGxlQWN0aW9uKF92bS5kaXN0aW5ndWlzaENhbmNlbEFuZENsb3NlPyJjbG9zZSI6ImNhbmNlbCIpO30sa2V5ZG93bjpmdW5jdGlvbiBrZXlkb3duKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwiZW50ZXIiLDEzLCRldmVudC5rZXksIkVudGVyIikpe3JldHVybiBudWxsO31fdm0uaGFuZGxlQWN0aW9uKF92bS5kaXN0aW5ndWlzaENhbmNlbEFuZENsb3NlPyJjbG9zZSI6ImNhbmNlbCIpO319fSxbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX2Nsb3NlIGVsLWljb24tY2xvc2UifSldKTpfdm0uX2UoKV0pOl92bS5fZSgpLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX2NvbnRlbnQifSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlLWJveF9fY29udGFpbmVyIn0sW192bS5pY29uJiYhX3ZtLmNlbnRlciYmX3ZtLm1lc3NhZ2UhPT0iIj9fYygiZGl2Iix7Y2xhc3M6WyJlbC1tZXNzYWdlLWJveF9fc3RhdHVzIixfdm0uaWNvbl19KTpfdm0uX2UoKSxfdm0ubWVzc2FnZSE9PSIiP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX21lc3NhZ2UifSxbX3ZtLl90KCJkZWZhdWx0IixbIV92bS5kYW5nZXJvdXNseVVzZUhUTUxTdHJpbmc/X2MoInAiLFtfdm0uX3YoX3ZtLl9zKF92bS5tZXNzYWdlKSldKTpfYygicCIse2RvbVByb3BzOntpbm5lckhUTUw6X3ZtLl9zKF92bS5tZXNzYWdlKX19KV0pXSwyKTpfdm0uX2UoKV0pLF9jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uc2hvd0lucHV0LGV4cHJlc3Npb246InNob3dJbnB1dCJ9XSxzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX2lucHV0In0sW19jKCJlbC1pbnB1dCIse3JlZjoiaW5wdXQiLGF0dHJzOnt0eXBlOl92bS5pbnB1dFR5cGUscGxhY2Vob2xkZXI6X3ZtLmlucHV0UGxhY2Vob2xkZXJ9LG5hdGl2ZU9uOntrZXlkb3duOmZ1bmN0aW9uIGtleWRvd24oJGV2ZW50KXtpZighKCJidXR0b24iaW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLCJlbnRlciIsMTMsJGV2ZW50LmtleSwiRW50ZXIiKSl7cmV0dXJuIG51bGw7fXJldHVybiBfdm0uaGFuZGxlSW5wdXRFbnRlcigkZXZlbnQpO319LG1vZGVsOnt2YWx1ZTpfdm0uaW5wdXRWYWx1ZSxjYWxsYmFjazpmdW5jdGlvbiBjYWxsYmFjaygkJHYpe192bS5pbnB1dFZhbHVlPSQkdjt9LGV4cHJlc3Npb246ImlucHV0VmFsdWUifX0pLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX2Vycm9ybXNnIixzdHlsZTp7dmlzaWJpbGl0eTohIV92bS5lZGl0b3JFcnJvck1lc3NhZ2U/InZpc2libGUiOiJoaWRkZW4ifX0sW192bS5fdihfdm0uX3MoX3ZtLmVkaXRvckVycm9yTWVzc2FnZSkpXSldLDEpXSksX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlLWJveF9fYnRucyJ9LFtfdm0uc2hvd0NhbmNlbEJ1dHRvbj9fYygiZWwtYnV0dG9uIix7Y2xhc3M6W192bS5jYW5jZWxCdXR0b25DbGFzc2VzXSxhdHRyczp7bG9hZGluZzpfdm0uY2FuY2VsQnV0dG9uTG9hZGluZyxyb3VuZDpfdm0ucm91bmRCdXR0b24sc2l6ZToic21hbGwifSxvbjp7a2V5ZG93bjpmdW5jdGlvbiBrZXlkb3duKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwiZW50ZXIiLDEzLCRldmVudC5rZXksIkVudGVyIikpe3JldHVybiBudWxsO31fdm0uaGFuZGxlQWN0aW9uKCJjYW5jZWwiKTt9fSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtfdm0uaGFuZGxlQWN0aW9uKCJjYW5jZWwiKTt9fX0sW192bS5fdigiXG4gICAgICAgICAgIitfdm0uX3MoX3ZtLmNhbmNlbEJ1dHRvblRleHR8fF92bS50KCJlbC5tZXNzYWdlYm94LmNhbmNlbCIpKSsiXG4gICAgICAgICIpXSk6X3ZtLl9lKCksX2MoImVsLWJ1dHRvbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS5zaG93Q29uZmlybUJ1dHRvbixleHByZXNzaW9uOiJzaG93Q29uZmlybUJ1dHRvbiJ9XSxyZWY6ImNvbmZpcm0iLGNsYXNzOltfdm0uY29uZmlybUJ1dHRvbkNsYXNzZXNdLGF0dHJzOntsb2FkaW5nOl92bS5jb25maXJtQnV0dG9uTG9hZGluZyxyb3VuZDpfdm0ucm91bmRCdXR0b24sc2l6ZToic21hbGwifSxvbjp7a2V5ZG93bjpmdW5jdGlvbiBrZXlkb3duKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwiZW50ZXIiLDEzLCRldmVudC5rZXksIkVudGVyIikpe3JldHVybiBudWxsO31fdm0uaGFuZGxlQWN0aW9uKCJjb25maXJtIik7fX0sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLmhhbmRsZUFjdGlvbigiY29uZmlybSIpO319fSxbX3ZtLl92KCJcbiAgICAgICAgICAiK192bS5fcyhfdm0uY29uZmlybUJ1dHRvblRleHR8fF92bS50KCJlbC5tZXNzYWdlYm94LmNvbmZpcm0iKSkrIlxuICAgICAgICAiKV0pXSwxKV0pXSldKTt9O3ZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmIyOWIwMTJfc3RhdGljUmVuZGVyRm5zPVtdO21haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82YjI5YjAxMl9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS1ib3gvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMjliMDEyJgovLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi91dGlscy9hcmlhLWRpYWxvZyIKdmFyIGFyaWFfZGlhbG9nXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTt2YXIgYXJpYV9kaWFsb2dfZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGFyaWFfZGlhbG9nXyk7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVzc2FnZS1ib3gvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwp2YXIgbWVzc2FnZUJveD12b2lkIDA7dmFyIHR5cGVNYXA9e3N1Y2Nlc3M6J3N1Y2Nlc3MnLGluZm86J2luZm8nLHdhcm5pbmc6J3dhcm5pbmcnLGVycm9yOidlcnJvcid9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbWVzc2FnZV9ib3hfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e21peGluczpbcG9wdXBfZGVmYXVsdC5hLGxvY2FsZV9kZWZhdWx0LmFdLHByb3BzOnttb2RhbDp7ZGVmYXVsdDp0cnVlfSxsb2NrU2Nyb2xsOntkZWZhdWx0OnRydWV9LHNob3dDbG9zZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sY2xvc2VPbkNsaWNrTW9kYWw6e2RlZmF1bHQ6dHJ1ZX0sY2xvc2VPblByZXNzRXNjYXBlOntkZWZhdWx0OnRydWV9LGNsb3NlT25IYXNoQ2hhbmdlOntkZWZhdWx0OnRydWV9LGNlbnRlcjp7ZGVmYXVsdDpmYWxzZSx0eXBlOkJvb2xlYW59LHJvdW5kQnV0dG9uOntkZWZhdWx0OmZhbHNlLHR5cGU6Qm9vbGVhbn19LGNvbXBvbmVudHM6e0VsSW5wdXQ6aW5wdXRfZGVmYXVsdC5hLEVsQnV0dG9uOmJ1dHRvbl9kZWZhdWx0LmF9LGNvbXB1dGVkOntpY29uOmZ1bmN0aW9uIGljb24oKXt2YXIgdHlwZT10aGlzLnR5cGUsaWNvbkNsYXNzPXRoaXMuaWNvbkNsYXNzO3JldHVybiBpY29uQ2xhc3N8fCh0eXBlJiZ0eXBlTWFwW3R5cGVdPydlbC1pY29uLScrdHlwZU1hcFt0eXBlXTonJyk7fSxjb25maXJtQnV0dG9uQ2xhc3NlczpmdW5jdGlvbiBjb25maXJtQnV0dG9uQ2xhc3Nlcygpe3JldHVybidlbC1idXR0b24tLXByaW1hcnkgJyt0aGlzLmNvbmZpcm1CdXR0b25DbGFzczt9LGNhbmNlbEJ1dHRvbkNsYXNzZXM6ZnVuY3Rpb24gY2FuY2VsQnV0dG9uQ2xhc3Nlcygpe3JldHVybicnK3RoaXMuY2FuY2VsQnV0dG9uQ2xhc3M7fX0sbWV0aG9kczp7Z2V0U2FmZUNsb3NlOmZ1bmN0aW9uIGdldFNhZmVDbG9zZSgpe3ZhciBfdGhpcz10aGlzO3ZhciBjdXJyZW50SWQ9dGhpcy51aWQ7cmV0dXJuIGZ1bmN0aW9uKCl7X3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aWYoY3VycmVudElkPT09X3RoaXMudWlkKV90aGlzLmRvQ2xvc2UoKTt9KTt9O30sZG9DbG9zZTpmdW5jdGlvbiBkb0Nsb3NlKCl7dmFyIF90aGlzMj10aGlzO2lmKCF0aGlzLnZpc2libGUpcmV0dXJuO3RoaXMudmlzaWJsZT1mYWxzZTt0aGlzLl9jbG9zaW5nPXRydWU7dGhpcy5vbkNsb3NlJiZ0aGlzLm9uQ2xvc2UoKTttZXNzYWdlQm94LmNsb3NlRGlhbG9nKCk7Ly8g6Kej57uRCmlmKHRoaXMubG9ja1Njcm9sbCl7c2V0VGltZW91dCh0aGlzLnJlc3RvcmVCb2R5U3R5bGUsMjAwKTt9dGhpcy5vcGVuZWQ9ZmFsc2U7dGhpcy5kb0FmdGVyQ2xvc2UoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoX3RoaXMyLmFjdGlvbilfdGhpczIuY2FsbGJhY2soX3RoaXMyLmFjdGlvbixfdGhpczIpO30pO30saGFuZGxlV3JhcHBlckNsaWNrOmZ1bmN0aW9uIGhhbmRsZVdyYXBwZXJDbGljaygpe2lmKHRoaXMuY2xvc2VPbkNsaWNrTW9kYWwpe3RoaXMuaGFuZGxlQWN0aW9uKHRoaXMuZGlzdGluZ3Vpc2hDYW5jZWxBbmRDbG9zZT8nY2xvc2UnOidjYW5jZWwnKTt9fSxoYW5kbGVJbnB1dEVudGVyOmZ1bmN0aW9uIGhhbmRsZUlucHV0RW50ZXIoKXtpZih0aGlzLmlucHV0VHlwZSE9PSd0ZXh0YXJlYScpe3JldHVybiB0aGlzLmhhbmRsZUFjdGlvbignY29uZmlybScpO319LGhhbmRsZUFjdGlvbjpmdW5jdGlvbiBoYW5kbGVBY3Rpb24oYWN0aW9uKXtpZih0aGlzLiR0eXBlPT09J3Byb21wdCcmJmFjdGlvbj09PSdjb25maXJtJyYmIXRoaXMudmFsaWRhdGUoKSl7cmV0dXJuO310aGlzLmFjdGlvbj1hY3Rpb247aWYodHlwZW9mIHRoaXMuYmVmb3JlQ2xvc2U9PT0nZnVuY3Rpb24nKXt0aGlzLmNsb3NlPXRoaXMuZ2V0U2FmZUNsb3NlKCk7dGhpcy5iZWZvcmVDbG9zZShhY3Rpb24sdGhpcyx0aGlzLmNsb3NlKTt9ZWxzZXt0aGlzLmRvQ2xvc2UoKTt9fSx2YWxpZGF0ZTpmdW5jdGlvbiB2YWxpZGF0ZSgpe2lmKHRoaXMuJHR5cGU9PT0ncHJvbXB0Jyl7dmFyIGlucHV0UGF0dGVybj10aGlzLmlucHV0UGF0dGVybjtpZihpbnB1dFBhdHRlcm4mJiFpbnB1dFBhdHRlcm4udGVzdCh0aGlzLmlucHV0VmFsdWV8fCcnKSl7dGhpcy5lZGl0b3JFcnJvck1lc3NhZ2U9dGhpcy5pbnB1dEVycm9yTWVzc2FnZXx8T2JqZWN0KGxpYl9sb2NhbGVfWyJ0Il0pKCdlbC5tZXNzYWdlYm94LmVycm9yJyk7T2JqZWN0KGRvbV9bImFkZENsYXNzIl0pKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCksJ2ludmFsaWQnKTtyZXR1cm4gZmFsc2U7fXZhciBpbnB1dFZhbGlkYXRvcj10aGlzLmlucHV0VmFsaWRhdG9yO2lmKHR5cGVvZiBpbnB1dFZhbGlkYXRvcj09PSdmdW5jdGlvbicpe3ZhciB2YWxpZGF0ZVJlc3VsdD1pbnB1dFZhbGlkYXRvcih0aGlzLmlucHV0VmFsdWUpO2lmKHZhbGlkYXRlUmVzdWx0PT09ZmFsc2Upe3RoaXMuZWRpdG9yRXJyb3JNZXNzYWdlPXRoaXMuaW5wdXRFcnJvck1lc3NhZ2V8fE9iamVjdChsaWJfbG9jYWxlX1sidCJdKSgnZWwubWVzc2FnZWJveC5lcnJvcicpO09iamVjdChkb21fWyJhZGRDbGFzcyJdKSh0aGlzLmdldElucHV0RWxlbWVudCgpLCdpbnZhbGlkJyk7cmV0dXJuIGZhbHNlO31pZih0eXBlb2YgdmFsaWRhdGVSZXN1bHQ9PT0nc3RyaW5nJyl7dGhpcy5lZGl0b3JFcnJvck1lc3NhZ2U9dmFsaWRhdGVSZXN1bHQ7T2JqZWN0KGRvbV9bImFkZENsYXNzIl0pKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCksJ2ludmFsaWQnKTtyZXR1cm4gZmFsc2U7fX19dGhpcy5lZGl0b3JFcnJvck1lc3NhZ2U9Jyc7T2JqZWN0KGRvbV9bInJlbW92ZUNsYXNzIl0pKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCksJ2ludmFsaWQnKTtyZXR1cm4gdHJ1ZTt9LGdldEZpcnN0Rm9jdXM6ZnVuY3Rpb24gZ2V0Rmlyc3RGb2N1cygpe3ZhciBidG49dGhpcy4kZWwucXVlcnlTZWxlY3RvcignLmVsLW1lc3NhZ2UtYm94X19idG5zIC5lbC1idXR0b24nKTt2YXIgdGl0bGU9dGhpcy4kZWwucXVlcnlTZWxlY3RvcignLmVsLW1lc3NhZ2UtYm94X19idG5zIC5lbC1tZXNzYWdlLWJveF9fdGl0bGUnKTtyZXR1cm4gYnRufHx0aXRsZTt9LGdldElucHV0RWxlbWVudDpmdW5jdGlvbiBnZXRJbnB1dEVsZW1lbnQoKXt2YXIgaW5wdXRSZWZzPXRoaXMuJHJlZnMuaW5wdXQuJHJlZnM7cmV0dXJuIGlucHV0UmVmcy5pbnB1dHx8aW5wdXRSZWZzLnRleHRhcmVhO30saGFuZGxlQ2xvc2U6ZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKXt0aGlzLmhhbmRsZUFjdGlvbignY2xvc2UnKTt9fSx3YXRjaDp7aW5wdXRWYWx1ZTp7aW1tZWRpYXRlOnRydWUsaGFuZGxlcjpmdW5jdGlvbiBoYW5kbGVyKHZhbCl7dmFyIF90aGlzMz10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKF8pe2lmKF90aGlzMy4kdHlwZT09PSdwcm9tcHQnJiZ2YWwhPT1udWxsKXtfdGhpczMudmFsaWRhdGUoKTt9fSk7fX0sdmlzaWJsZTpmdW5jdGlvbiB2aXNpYmxlKHZhbCl7dmFyIF90aGlzND10aGlzO2lmKHZhbCl7dGhpcy51aWQrKztpZih0aGlzLiR0eXBlPT09J2FsZXJ0J3x8dGhpcy4kdHlwZT09PSdjb25maXJtJyl7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtfdGhpczQuJHJlZnMuY29uZmlybS4kZWwuZm9jdXMoKTt9KTt9dGhpcy5mb2N1c0FmdGVyQ2xvc2VkPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7bWVzc2FnZUJveD1uZXcgYXJpYV9kaWFsb2dfZGVmYXVsdC5hKHRoaXMuJGVsLHRoaXMuZm9jdXNBZnRlckNsb3NlZCx0aGlzLmdldEZpcnN0Rm9jdXMoKSk7fS8vIHByb21wdAppZih0aGlzLiR0eXBlIT09J3Byb21wdCcpcmV0dXJuO2lmKHZhbCl7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKF90aGlzNC4kcmVmcy5pbnB1dCYmX3RoaXM0LiRyZWZzLmlucHV0LiRlbCl7X3RoaXM0LmdldElucHV0RWxlbWVudCgpLmZvY3VzKCk7fX0sNTAwKTt9ZWxzZXt0aGlzLmVkaXRvckVycm9yTWVzc2FnZT0nJztPYmplY3QoZG9tX1sicmVtb3ZlQ2xhc3MiXSkodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSwnaW52YWxpZCcpO319fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt2YXIgX3RoaXM1PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpZihfdGhpczUuY2xvc2VPbkhhc2hDaGFuZ2Upe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJyxfdGhpczUuY2xvc2UpO319KTt9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpe2lmKHRoaXMuY2xvc2VPbkhhc2hDaGFuZ2Upe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJyx0aGlzLmNsb3NlKTt9c2V0VGltZW91dChmdW5jdGlvbigpe21lc3NhZ2VCb3guY2xvc2VEaWFsb2coKTt9KTt9LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnt1aWQ6MSx0aXRsZTp1bmRlZmluZWQsbWVzc2FnZTonJyx0eXBlOicnLGljb25DbGFzczonJyxjdXN0b21DbGFzczonJyxzaG93SW5wdXQ6ZmFsc2UsaW5wdXRWYWx1ZTpudWxsLGlucHV0UGxhY2Vob2xkZXI6JycsaW5wdXRUeXBlOid0ZXh0JyxpbnB1dFBhdHRlcm46bnVsbCxpbnB1dFZhbGlkYXRvcjpudWxsLGlucHV0RXJyb3JNZXNzYWdlOicnLHNob3dDb25maXJtQnV0dG9uOnRydWUsc2hvd0NhbmNlbEJ1dHRvbjpmYWxzZSxhY3Rpb246JycsY29uZmlybUJ1dHRvblRleHQ6JycsY2FuY2VsQnV0dG9uVGV4dDonJyxjb25maXJtQnV0dG9uTG9hZGluZzpmYWxzZSxjYW5jZWxCdXR0b25Mb2FkaW5nOmZhbHNlLGNvbmZpcm1CdXR0b25DbGFzczonJyxjb25maXJtQnV0dG9uRGlzYWJsZWQ6ZmFsc2UsY2FuY2VsQnV0dG9uQ2xhc3M6JycsZWRpdG9yRXJyb3JNZXNzYWdlOm51bGwsY2FsbGJhY2s6bnVsbCxkYW5nZXJvdXNseVVzZUhUTUxTdHJpbmc6ZmFsc2UsZm9jdXNBZnRlckNsb3NlZDpudWxsLGlzT25Db21wb3NpdGlvbjpmYWxzZSxkaXN0aW5ndWlzaENhbmNlbEFuZENsb3NlOmZhbHNlfTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2UtYm94L3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19tZXNzYWdlX2JveF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1tZXNzYWdlX2JveF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2UtYm94L3NyYy9tYWluLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHNyY19tYWluX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQocGFja2FnZXNfbWVzc2FnZV9ib3hfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZiMjliMDEyX3JlbmRlcixtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmIyOWIwMTJfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBzcmNfbWFpbl9hcGk7fXNyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvbWVzc2FnZS1ib3gvc3JjL21haW4udnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIG1lc3NhZ2VfYm94X3NyY19tYWluPXNyY19tYWluX2NvbXBvbmVudC5leHBvcnRzOy8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL3V0aWxzL3Zkb20iCnZhciB2ZG9tXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2UtYm94L3NyYy9tYWluLmpzCnZhciBtYWluX3R5cGVvZj10eXBlb2YgU3ltYm9sPT09ImZ1bmN0aW9uIiYmX3R5cGVvZjIoU3ltYm9sLml0ZXJhdG9yKT09PSJzeW1ib2wiP2Z1bmN0aW9uKG9iail7cmV0dXJuIF90eXBlb2YyKG9iaik7fTpmdW5jdGlvbihvYmope3JldHVybiBvYmomJnR5cGVvZiBTeW1ib2w9PT0iZnVuY3Rpb24iJiZvYmouY29uc3RydWN0b3I9PT1TeW1ib2wmJm9iaiE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6X3R5cGVvZjIob2JqKTt9O3ZhciBtYWluX2RlZmF1bHRzPXt0aXRsZTpudWxsLG1lc3NhZ2U6JycsdHlwZTonJyxpY29uQ2xhc3M6Jycsc2hvd0lucHV0OmZhbHNlLHNob3dDbG9zZTp0cnVlLG1vZGFsRmFkZTp0cnVlLGxvY2tTY3JvbGw6dHJ1ZSxjbG9zZU9uQ2xpY2tNb2RhbDp0cnVlLGNsb3NlT25QcmVzc0VzY2FwZTp0cnVlLGNsb3NlT25IYXNoQ2hhbmdlOnRydWUsaW5wdXRWYWx1ZTpudWxsLGlucHV0UGxhY2Vob2xkZXI6JycsaW5wdXRUeXBlOid0ZXh0JyxpbnB1dFBhdHRlcm46bnVsbCxpbnB1dFZhbGlkYXRvcjpudWxsLGlucHV0RXJyb3JNZXNzYWdlOicnLHNob3dDb25maXJtQnV0dG9uOnRydWUsc2hvd0NhbmNlbEJ1dHRvbjpmYWxzZSxjb25maXJtQnV0dG9uUG9zaXRpb246J3JpZ2h0Jyxjb25maXJtQnV0dG9uSGlnaGxpZ2h0OmZhbHNlLGNhbmNlbEJ1dHRvbkhpZ2hsaWdodDpmYWxzZSxjb25maXJtQnV0dG9uVGV4dDonJyxjYW5jZWxCdXR0b25UZXh0OicnLGNvbmZpcm1CdXR0b25DbGFzczonJyxjYW5jZWxCdXR0b25DbGFzczonJyxjdXN0b21DbGFzczonJyxiZWZvcmVDbG9zZTpudWxsLGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzpmYWxzZSxjZW50ZXI6ZmFsc2Uscm91bmRCdXR0b246ZmFsc2UsZGlzdGluZ3Vpc2hDYW5jZWxBbmRDbG9zZTpmYWxzZX07dmFyIE1lc3NhZ2VCb3hDb25zdHJ1Y3Rvcj1leHRlcm5hbF92dWVfZGVmYXVsdC5hLmV4dGVuZChtZXNzYWdlX2JveF9zcmNfbWFpbik7dmFyIGN1cnJlbnRNc2c9dm9pZCAwLG1haW5faW5zdGFuY2U9dm9pZCAwO3ZhciBtc2dRdWV1ZT1bXTt2YXIgZGVmYXVsdENhbGxiYWNrPWZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjayhhY3Rpb24pe2lmKGN1cnJlbnRNc2cpe3ZhciBjYWxsYmFjaz1jdXJyZW50TXNnLmNhbGxiYWNrO2lmKHR5cGVvZiBjYWxsYmFjaz09PSdmdW5jdGlvbicpe2lmKG1haW5faW5zdGFuY2Uuc2hvd0lucHV0KXtjYWxsYmFjayhtYWluX2luc3RhbmNlLmlucHV0VmFsdWUsYWN0aW9uKTt9ZWxzZXtjYWxsYmFjayhhY3Rpb24pO319aWYoY3VycmVudE1zZy5yZXNvbHZlKXtpZihhY3Rpb249PT0nY29uZmlybScpe2lmKG1haW5faW5zdGFuY2Uuc2hvd0lucHV0KXtjdXJyZW50TXNnLnJlc29sdmUoe3ZhbHVlOm1haW5faW5zdGFuY2UuaW5wdXRWYWx1ZSxhY3Rpb246YWN0aW9ufSk7fWVsc2V7Y3VycmVudE1zZy5yZXNvbHZlKGFjdGlvbik7fX1lbHNlIGlmKGN1cnJlbnRNc2cucmVqZWN0JiYoYWN0aW9uPT09J2NhbmNlbCd8fGFjdGlvbj09PSdjbG9zZScpKXtjdXJyZW50TXNnLnJlamVjdChhY3Rpb24pO319fX07dmFyIGluaXRJbnN0YW5jZT1mdW5jdGlvbiBpbml0SW5zdGFuY2UoKXttYWluX2luc3RhbmNlPW5ldyBNZXNzYWdlQm94Q29uc3RydWN0b3Ioe2VsOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpfSk7bWFpbl9pbnN0YW5jZS5jYWxsYmFjaz1kZWZhdWx0Q2FsbGJhY2s7fTt2YXIgbWFpbl9zaG93TmV4dE1zZz1mdW5jdGlvbiBzaG93TmV4dE1zZygpe2lmKCFtYWluX2luc3RhbmNlKXtpbml0SW5zdGFuY2UoKTt9bWFpbl9pbnN0YW5jZS5hY3Rpb249Jyc7aWYoIW1haW5faW5zdGFuY2UudmlzaWJsZXx8bWFpbl9pbnN0YW5jZS5jbG9zZVRpbWVyKXtpZihtc2dRdWV1ZS5sZW5ndGg+MCl7Y3VycmVudE1zZz1tc2dRdWV1ZS5zaGlmdCgpO3ZhciBvcHRpb25zPWN1cnJlbnRNc2cub3B0aW9ucztmb3IodmFyIHByb3AgaW4gb3B0aW9ucyl7aWYob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShwcm9wKSl7bWFpbl9pbnN0YW5jZVtwcm9wXT1vcHRpb25zW3Byb3BdO319aWYob3B0aW9ucy5jYWxsYmFjaz09PXVuZGVmaW5lZCl7bWFpbl9pbnN0YW5jZS5jYWxsYmFjaz1kZWZhdWx0Q2FsbGJhY2s7fXZhciBvbGRDYj1tYWluX2luc3RhbmNlLmNhbGxiYWNrO21haW5faW5zdGFuY2UuY2FsbGJhY2s9ZnVuY3Rpb24oYWN0aW9uLGluc3RhbmNlKXtvbGRDYihhY3Rpb24saW5zdGFuY2UpO3Nob3dOZXh0TXNnKCk7fTtpZihPYmplY3QodmRvbV9bImlzVk5vZGUiXSkobWFpbl9pbnN0YW5jZS5tZXNzYWdlKSl7bWFpbl9pbnN0YW5jZS4kc2xvdHMuZGVmYXVsdD1bbWFpbl9pbnN0YW5jZS5tZXNzYWdlXTttYWluX2luc3RhbmNlLm1lc3NhZ2U9bnVsbDt9ZWxzZXtkZWxldGUgbWFpbl9pbnN0YW5jZS4kc2xvdHMuZGVmYXVsdDt9Wydtb2RhbCcsJ3Nob3dDbG9zZScsJ2Nsb3NlT25DbGlja01vZGFsJywnY2xvc2VPblByZXNzRXNjYXBlJywnY2xvc2VPbkhhc2hDaGFuZ2UnXS5mb3JFYWNoKGZ1bmN0aW9uKHByb3Ape2lmKG1haW5faW5zdGFuY2VbcHJvcF09PT11bmRlZmluZWQpe21haW5faW5zdGFuY2VbcHJvcF09dHJ1ZTt9fSk7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtYWluX2luc3RhbmNlLiRlbCk7ZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5uZXh0VGljayhmdW5jdGlvbigpe21haW5faW5zdGFuY2UudmlzaWJsZT10cnVlO30pO319fTt2YXIgbWFpbl9NZXNzYWdlQm94PWZ1bmN0aW9uIE1lc3NhZ2VCb3gob3B0aW9ucyxjYWxsYmFjayl7aWYoZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5wcm90b3R5cGUuJGlzU2VydmVyKXJldHVybjtpZih0eXBlb2Ygb3B0aW9ucz09PSdzdHJpbmcnfHxPYmplY3QodmRvbV9bImlzVk5vZGUiXSkob3B0aW9ucykpe29wdGlvbnM9e21lc3NhZ2U6b3B0aW9uc307aWYodHlwZW9mIGFyZ3VtZW50c1sxXT09PSdzdHJpbmcnKXtvcHRpb25zLnRpdGxlPWFyZ3VtZW50c1sxXTt9fWVsc2UgaWYob3B0aW9ucy5jYWxsYmFjayYmIWNhbGxiYWNrKXtjYWxsYmFjaz1vcHRpb25zLmNhbGxiYWNrO31pZih0eXBlb2YgUHJvbWlzZSE9PSd1bmRlZmluZWQnKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3Qpey8vIGVzbGludC1kaXNhYmxlLWxpbmUKbXNnUXVldWUucHVzaCh7b3B0aW9uczptZXJnZV9kZWZhdWx0KCkoe30sbWFpbl9kZWZhdWx0cyxNZXNzYWdlQm94LmRlZmF1bHRzLG9wdGlvbnMpLGNhbGxiYWNrOmNhbGxiYWNrLHJlc29sdmU6cmVzb2x2ZSxyZWplY3Q6cmVqZWN0fSk7bWFpbl9zaG93TmV4dE1zZygpO30pO31lbHNle21zZ1F1ZXVlLnB1c2goe29wdGlvbnM6bWVyZ2VfZGVmYXVsdCgpKHt9LG1haW5fZGVmYXVsdHMsTWVzc2FnZUJveC5kZWZhdWx0cyxvcHRpb25zKSxjYWxsYmFjazpjYWxsYmFja30pO21haW5fc2hvd05leHRNc2coKTt9fTttYWluX01lc3NhZ2VCb3guc2V0RGVmYXVsdHM9ZnVuY3Rpb24oZGVmYXVsdHMpe21haW5fTWVzc2FnZUJveC5kZWZhdWx0cz1kZWZhdWx0czt9O21haW5fTWVzc2FnZUJveC5hbGVydD1mdW5jdGlvbihtZXNzYWdlLHRpdGxlLG9wdGlvbnMpe2lmKCh0eXBlb2YgdGl0bGU9PT0ndW5kZWZpbmVkJz8ndW5kZWZpbmVkJzptYWluX3R5cGVvZih0aXRsZSkpPT09J29iamVjdCcpe29wdGlvbnM9dGl0bGU7dGl0bGU9Jyc7fWVsc2UgaWYodGl0bGU9PT11bmRlZmluZWQpe3RpdGxlPScnO31yZXR1cm4gbWFpbl9NZXNzYWdlQm94KG1lcmdlX2RlZmF1bHQoKSh7dGl0bGU6dGl0bGUsbWVzc2FnZTptZXNzYWdlLCR0eXBlOidhbGVydCcsY2xvc2VPblByZXNzRXNjYXBlOmZhbHNlLGNsb3NlT25DbGlja01vZGFsOmZhbHNlfSxvcHRpb25zKSk7fTttYWluX01lc3NhZ2VCb3guY29uZmlybT1mdW5jdGlvbihtZXNzYWdlLHRpdGxlLG9wdGlvbnMpe2lmKCh0eXBlb2YgdGl0bGU9PT0ndW5kZWZpbmVkJz8ndW5kZWZpbmVkJzptYWluX3R5cGVvZih0aXRsZSkpPT09J29iamVjdCcpe29wdGlvbnM9dGl0bGU7dGl0bGU9Jyc7fWVsc2UgaWYodGl0bGU9PT11bmRlZmluZWQpe3RpdGxlPScnO31yZXR1cm4gbWFpbl9NZXNzYWdlQm94KG1lcmdlX2RlZmF1bHQoKSh7dGl0bGU6dGl0bGUsbWVzc2FnZTptZXNzYWdlLCR0eXBlOidjb25maXJtJyxzaG93Q2FuY2VsQnV0dG9uOnRydWV9LG9wdGlvbnMpKTt9O21haW5fTWVzc2FnZUJveC5wcm9tcHQ9ZnVuY3Rpb24obWVzc2FnZSx0aXRsZSxvcHRpb25zKXtpZigodHlwZW9mIHRpdGxlPT09J3VuZGVmaW5lZCc/J3VuZGVmaW5lZCc6bWFpbl90eXBlb2YodGl0bGUpKT09PSdvYmplY3QnKXtvcHRpb25zPXRpdGxlO3RpdGxlPScnO31lbHNlIGlmKHRpdGxlPT09dW5kZWZpbmVkKXt0aXRsZT0nJzt9cmV0dXJuIG1haW5fTWVzc2FnZUJveChtZXJnZV9kZWZhdWx0KCkoe3RpdGxlOnRpdGxlLG1lc3NhZ2U6bWVzc2FnZSxzaG93Q2FuY2VsQnV0dG9uOnRydWUsc2hvd0lucHV0OnRydWUsJHR5cGU6J3Byb21wdCd9LG9wdGlvbnMpKTt9O21haW5fTWVzc2FnZUJveC5jbG9zZT1mdW5jdGlvbigpe21haW5faW5zdGFuY2UuZG9DbG9zZSgpO21haW5faW5zdGFuY2UudmlzaWJsZT1mYWxzZTttc2dRdWV1ZT1bXTtjdXJyZW50TXNnPW51bGw7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX21lc3NhZ2VfYm94X3NyY19tYWluPW1haW5fTWVzc2FnZUJveDsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2UtYm94L2luZGV4LmpzCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbWVzc2FnZV9ib3g9cGFja2FnZXNfbWVzc2FnZV9ib3hfc3JjX21haW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YjQ2NGMwNiYKdmFyIGJyZWFkY3J1bWJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80YjQ2NGMwNl9yZW5kZXI9ZnVuY3Rpb24gYnJlYWRjcnVtYnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzRiNDY0YzA2X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWJyZWFkY3J1bWIiLGF0dHJzOnsiYXJpYS1sYWJlbCI6IkJyZWFkY3J1bWIiLHJvbGU6Im5hdmlnYXRpb24ifX0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTt9O3ZhciBicmVhZGNydW1idnVlX3R5cGVfdGVtcGxhdGVfaWRfNGI0NjRjMDZfc3RhdGljUmVuZGVyRm5zPVtdO2JyZWFkY3J1bWJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80YjQ2NGMwNl9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGI0NjRjMDYmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2JyZWFkY3J1bWIvc3JjL2JyZWFkY3J1bWIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGJyZWFkY3J1bWJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsQnJlYWRjcnVtYicscHJvcHM6e3NlcGFyYXRvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDonLyd9LHNlcGFyYXRvckNsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OicnfX0scHJvdmlkZTpmdW5jdGlvbiBwcm92aWRlKCl7cmV0dXJue2VsQnJlYWRjcnVtYjp0aGlzfTt9LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3ZhciBpdGVtcz10aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtYnJlYWRjcnVtYl9faXRlbScpO2lmKGl0ZW1zLmxlbmd0aCl7aXRlbXNbaXRlbXMubGVuZ3RoLTFdLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywncGFnZScpO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JyZWFkY3J1bWIvc3JjL2JyZWFkY3J1bWIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19icmVhZGNydW1idnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWJyZWFkY3J1bWJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGJyZWFkY3J1bWJfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfYnJlYWRjcnVtYnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxicmVhZGNydW1idnVlX3R5cGVfdGVtcGxhdGVfaWRfNGI0NjRjMDZfcmVuZGVyLGJyZWFkY3J1bWJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80YjQ2NGMwNl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGJyZWFkY3J1bWJfYXBpO31icmVhZGNydW1iX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgYnJlYWRjcnVtYj1icmVhZGNydW1iX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2JyZWFkY3J1bWIuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoYnJlYWRjcnVtYi5uYW1lLGJyZWFkY3J1bWIpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19icmVhZGNydW1iPWJyZWFkY3J1bWI7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZjZjllYWFjJgp2YXIgYnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfZmNmOWVhYWNfcmVuZGVyPWZ1bmN0aW9uIGJyZWFkY3J1bWJfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ZjZjllYWFjX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1icmVhZGNydW1iX19pdGVtIn0sW19jKCJzcGFuIix7cmVmOiJsaW5rIixjbGFzczpbImVsLWJyZWFkY3J1bWJfX2lubmVyIixfdm0udG8/ImlzLWxpbmsiOiIiXSxhdHRyczp7cm9sZToibGluayJ9fSxbX3ZtLl90KCJkZWZhdWx0IildLDIpLF92bS5zZXBhcmF0b3JDbGFzcz9fYygiaSIse3N0YXRpY0NsYXNzOiJlbC1icmVhZGNydW1iX19zZXBhcmF0b3IiLGNsYXNzOl92bS5zZXBhcmF0b3JDbGFzc30pOl9jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWJyZWFkY3J1bWJfX3NlcGFyYXRvciIsYXR0cnM6e3JvbGU6InByZXNlbnRhdGlvbiJ9fSxbX3ZtLl92KF92bS5fcyhfdm0uc2VwYXJhdG9yKSldKV0pO307dmFyIGJyZWFkY3J1bWJfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ZjZjllYWFjX3N0YXRpY1JlbmRlckZucz1bXTticmVhZGNydW1iX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9mY2Y5ZWFhY19yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mY2Y5ZWFhYyYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBicmVhZGNydW1iX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsQnJlYWRjcnVtYkl0ZW0nLHByb3BzOnt0bzp7fSxyZXBsYWNlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntzZXBhcmF0b3I6Jycsc2VwYXJhdG9yQ2xhc3M6Jyd9O30saW5qZWN0OlsnZWxCcmVhZGNydW1iJ10sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dmFyIF90aGlzPXRoaXM7dGhpcy5zZXBhcmF0b3I9dGhpcy5lbEJyZWFkY3J1bWIuc2VwYXJhdG9yO3RoaXMuc2VwYXJhdG9yQ2xhc3M9dGhpcy5lbEJyZWFkY3J1bWIuc2VwYXJhdG9yQ2xhc3M7dmFyIGxpbms9dGhpcy4kcmVmcy5saW5rO2xpbmsuc2V0QXR0cmlidXRlKCdyb2xlJywnbGluaycpO2xpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKF8pe3ZhciB0bz1fdGhpcy50bywkcm91dGVyPV90aGlzLiRyb3V0ZXI7aWYoIXRvfHwhJHJvdXRlcilyZXR1cm47X3RoaXMucmVwbGFjZT8kcm91dGVyLnJlcGxhY2UodG8pOiRyb3V0ZXIucHVzaCh0byk7fSk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19icmVhZGNydW1iX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189YnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi1pdGVtLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGJyZWFkY3J1bWJfaXRlbV9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19icmVhZGNydW1iX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sYnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfZmNmOWVhYWNfcmVuZGVyLGJyZWFkY3J1bWJfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ZjZjllYWFjX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgYnJlYWRjcnVtYl9pdGVtX2FwaTt9YnJlYWRjcnVtYl9pdGVtX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi1pdGVtLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBicmVhZGNydW1iX2l0ZW09YnJlYWRjcnVtYl9pdGVtX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi1pdGVtL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovYnJlYWRjcnVtYl9pdGVtLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGJyZWFkY3J1bWJfaXRlbS5uYW1lLGJyZWFkY3J1bWJfaXRlbSk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2JyZWFkY3J1bWJfaXRlbT1icmVhZGNydW1iX2l0ZW07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hMWI1ZmYzNCYKdmFyIGZvcm12dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMWI1ZmYzNF9yZW5kZXI9ZnVuY3Rpb24gZm9ybXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ExYjVmZjM0X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZm9ybSIse3N0YXRpY0NsYXNzOiJlbC1mb3JtIixjbGFzczpbX3ZtLmxhYmVsUG9zaXRpb24/ImVsLWZvcm0tLWxhYmVsLSIrX3ZtLmxhYmVsUG9zaXRpb246IiIseyJlbC1mb3JtLS1pbmxpbmUiOl92bS5pbmxpbmV9XX0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTt9O3ZhciBmb3JtdnVlX3R5cGVfdGVtcGxhdGVfaWRfYTFiNWZmMzRfc3RhdGljUmVuZGVyRm5zPVtdO2Zvcm12dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMWI1ZmYzNF9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS9zcmMvZm9ybS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YTFiNWZmMzQmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGZvcm12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsRm9ybScsY29tcG9uZW50TmFtZTonRWxGb3JtJyxwcm92aWRlOmZ1bmN0aW9uIHByb3ZpZGUoKXtyZXR1cm57ZWxGb3JtOnRoaXN9O30scHJvcHM6e21vZGVsOk9iamVjdCxydWxlczpPYmplY3QsbGFiZWxQb3NpdGlvbjpTdHJpbmcsbGFiZWxXaWR0aDpTdHJpbmcsbGFiZWxTdWZmaXg6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Jyd9LGlubGluZTpCb29sZWFuLGlubGluZU1lc3NhZ2U6Qm9vbGVhbixzdGF0dXNJY29uOkJvb2xlYW4sc2hvd01lc3NhZ2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LHNpemU6U3RyaW5nLGRpc2FibGVkOkJvb2xlYW4sdmFsaWRhdGVPblJ1bGVDaGFuZ2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGhpZGVSZXF1aXJlZEFzdGVyaXNrOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX19LHdhdGNoOntydWxlczpmdW5jdGlvbiBydWxlcygpey8vIHJlbW92ZSB0aGVuIGFkZCBldmVudCBsaXN0ZW5lcnMgb24gZm9ybS1pdGVtIGFmdGVyIGZvcm0gcnVsZXMgY2hhbmdlCnRoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpe2ZpZWxkLnJlbW92ZVZhbGlkYXRlRXZlbnRzKCk7ZmllbGQuYWRkVmFsaWRhdGVFdmVudHMoKTt9KTtpZih0aGlzLnZhbGlkYXRlT25SdWxlQ2hhbmdlKXt0aGlzLnZhbGlkYXRlKGZ1bmN0aW9uKCl7fSk7fX19LGNvbXB1dGVkOnthdXRvTGFiZWxXaWR0aDpmdW5jdGlvbiBhdXRvTGFiZWxXaWR0aCgpe2lmKCF0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIubGVuZ3RoKXJldHVybiAwO3ZhciBtYXg9TWF0aC5tYXguYXBwbHkoTWF0aCx0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIpO3JldHVybiBtYXg/bWF4KydweCc6Jyc7fX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2ZpZWxkczpbXSxwb3RlbnRpYWxMYWJlbFdpZHRoQXJyOltdLy8gdXNlIHRoaXMgYXJyYXkgdG8gY2FsY3VsYXRlIGF1dG8gd2lkdGgKfTt9LGNyZWF0ZWQ6ZnVuY3Rpb24gY3JlYXRlZCgpe3ZhciBfdGhpcz10aGlzO3RoaXMuJG9uKCdlbC5mb3JtLmFkZEZpZWxkJyxmdW5jdGlvbihmaWVsZCl7aWYoZmllbGQpe190aGlzLmZpZWxkcy5wdXNoKGZpZWxkKTt9fSk7LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi90aGlzLiRvbignZWwuZm9ybS5yZW1vdmVGaWVsZCcsZnVuY3Rpb24oZmllbGQpe2lmKGZpZWxkLnByb3Ape190aGlzLmZpZWxkcy5zcGxpY2UoX3RoaXMuZmllbGRzLmluZGV4T2YoZmllbGQpLDEpO319KTt9LG1ldGhvZHM6e3Jlc2V0RmllbGRzOmZ1bmN0aW9uIHJlc2V0RmllbGRzKCl7aWYoIXRoaXMubW9kZWwpe2NvbnNvbGUud2FybignW0VsZW1lbnQgV2Fybl1bRm9ybV1tb2RlbCBpcyByZXF1aXJlZCBmb3IgcmVzZXRGaWVsZHMgdG8gd29yay4nKTtyZXR1cm47fXRoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpe2ZpZWxkLnJlc2V0RmllbGQoKTt9KTt9LGNsZWFyVmFsaWRhdGU6ZnVuY3Rpb24gY2xlYXJWYWxpZGF0ZSgpe3ZhciBwcm9wcz1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMF06W107dmFyIGZpZWxkcz1wcm9wcy5sZW5ndGg/dHlwZW9mIHByb3BzPT09J3N0cmluZyc/dGhpcy5maWVsZHMuZmlsdGVyKGZ1bmN0aW9uKGZpZWxkKXtyZXR1cm4gcHJvcHM9PT1maWVsZC5wcm9wO30pOnRoaXMuZmllbGRzLmZpbHRlcihmdW5jdGlvbihmaWVsZCl7cmV0dXJuIHByb3BzLmluZGV4T2YoZmllbGQucHJvcCk+LTE7fSk6dGhpcy5maWVsZHM7ZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpe2ZpZWxkLmNsZWFyVmFsaWRhdGUoKTt9KTt9LHZhbGlkYXRlOmZ1bmN0aW9uIHZhbGlkYXRlKGNhbGxiYWNrKXt2YXIgX3RoaXMyPXRoaXM7aWYoIXRoaXMubW9kZWwpe2NvbnNvbGUud2FybignW0VsZW1lbnQgV2Fybl1bRm9ybV1tb2RlbCBpcyByZXF1aXJlZCBmb3IgdmFsaWRhdGUgdG8gd29yayEnKTtyZXR1cm47fXZhciBwcm9taXNlPXZvaWQgMDsvLyBpZiBubyBjYWxsYmFjaywgcmV0dXJuIHByb21pc2UKaWYodHlwZW9mIGNhbGxiYWNrIT09J2Z1bmN0aW9uJyYmd2luZG93LlByb21pc2Upe3Byb21pc2U9bmV3IHdpbmRvdy5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUscmVqZWN0KXtjYWxsYmFjaz1mdW5jdGlvbiBjYWxsYmFjayh2YWxpZCl7dmFsaWQ/cmVzb2x2ZSh2YWxpZCk6cmVqZWN0KHZhbGlkKTt9O30pO312YXIgdmFsaWQ9dHJ1ZTt2YXIgY291bnQ9MDsvLyDlpoLmnpzpnIDopoHpqozor4HnmoRmaWVsZHPkuLrnqbrvvIzosIPnlKjpqozor4Hml7bnq4vliLvov5Tlm55jYWxsYmFjawppZih0aGlzLmZpZWxkcy5sZW5ndGg9PT0wJiZjYWxsYmFjayl7Y2FsbGJhY2sodHJ1ZSk7fXZhciBpbnZhbGlkRmllbGRzPXt9O3RoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpe2ZpZWxkLnZhbGlkYXRlKCcnLGZ1bmN0aW9uKG1lc3NhZ2UsZmllbGQpe2lmKG1lc3NhZ2Upe3ZhbGlkPWZhbHNlO31pbnZhbGlkRmllbGRzPW1lcmdlX2RlZmF1bHQoKSh7fSxpbnZhbGlkRmllbGRzLGZpZWxkKTtpZih0eXBlb2YgY2FsbGJhY2s9PT0nZnVuY3Rpb24nJiYrK2NvdW50PT09X3RoaXMyLmZpZWxkcy5sZW5ndGgpe2NhbGxiYWNrKHZhbGlkLGludmFsaWRGaWVsZHMpO319KTt9KTtpZihwcm9taXNlKXtyZXR1cm4gcHJvbWlzZTt9fSx2YWxpZGF0ZUZpZWxkOmZ1bmN0aW9uIHZhbGlkYXRlRmllbGQocHJvcHMsY2Ipe3Byb3BzPVtdLmNvbmNhdChwcm9wcyk7dmFyIGZpZWxkcz10aGlzLmZpZWxkcy5maWx0ZXIoZnVuY3Rpb24oZmllbGQpe3JldHVybiBwcm9wcy5pbmRleE9mKGZpZWxkLnByb3ApIT09LTE7fSk7aWYoIWZpZWxkcy5sZW5ndGgpe2NvbnNvbGUud2FybignW0VsZW1lbnQgV2Fybl1wbGVhc2UgcGFzcyBjb3JyZWN0IHByb3BzIScpO3JldHVybjt9ZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpe2ZpZWxkLnZhbGlkYXRlKCcnLGNiKTt9KTt9LGdldExhYmVsV2lkdGhJbmRleDpmdW5jdGlvbiBnZXRMYWJlbFdpZHRoSW5kZXgod2lkdGgpe3ZhciBpbmRleD10aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIuaW5kZXhPZih3aWR0aCk7Ly8gaXQncyBpbXBvc3NpYmxlCmlmKGluZGV4PT09LTEpe3Rocm93IG5ldyBFcnJvcignW0VsZW1lbnRGb3JtXXVucGVjdGVkIHdpZHRoICcsd2lkdGgpO31yZXR1cm4gaW5kZXg7fSxyZWdpc3RlckxhYmVsV2lkdGg6ZnVuY3Rpb24gcmVnaXN0ZXJMYWJlbFdpZHRoKHZhbCxvbGRWYWwpe2lmKHZhbCYmb2xkVmFsKXt2YXIgaW5kZXg9dGhpcy5nZXRMYWJlbFdpZHRoSW5kZXgob2xkVmFsKTt0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIuc3BsaWNlKGluZGV4LDEsdmFsKTt9ZWxzZSBpZih2YWwpe3RoaXMucG90ZW50aWFsTGFiZWxXaWR0aEFyci5wdXNoKHZhbCk7fX0sZGVyZWdpc3RlckxhYmVsV2lkdGg6ZnVuY3Rpb24gZGVyZWdpc3RlckxhYmVsV2lkdGgodmFsKXt2YXIgaW5kZXg9dGhpcy5nZXRMYWJlbFdpZHRoSW5kZXgodmFsKTt0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIuc3BsaWNlKGluZGV4LDEpO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19mb3JtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWZvcm12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGZvcm1fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfZm9ybXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxmb3JtdnVlX3R5cGVfdGVtcGxhdGVfaWRfYTFiNWZmMzRfcmVuZGVyLGZvcm12dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMWI1ZmYzNF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGZvcm1fYXBpO31mb3JtX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZm9ybS9zcmMvZm9ybS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX2Zvcm09Zm9ybV9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvcm0vaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9zcmNfZm9ybS5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzcmNfZm9ybS5uYW1lLHNyY19mb3JtKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfZm9ybT1zcmNfZm9ybTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0taXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YjZmM2RiNmMmCnZhciBmb3JtX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9iNmYzZGI2Y19yZW5kZXI9ZnVuY3Rpb24gZm9ybV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfYjZmM2RiNmNfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZm9ybS1pdGVtIixjbGFzczpbeyJlbC1mb3JtLWl0ZW0tLWZlZWRiYWNrIjpfdm0uZWxGb3JtJiZfdm0uZWxGb3JtLnN0YXR1c0ljb24sImlzLWVycm9yIjpfdm0udmFsaWRhdGVTdGF0ZT09PSJlcnJvciIsImlzLXZhbGlkYXRpbmciOl92bS52YWxpZGF0ZVN0YXRlPT09InZhbGlkYXRpbmciLCJpcy1zdWNjZXNzIjpfdm0udmFsaWRhdGVTdGF0ZT09PSJzdWNjZXNzIiwiaXMtcmVxdWlyZWQiOl92bS5pc1JlcXVpcmVkfHxfdm0ucmVxdWlyZWQsImlzLW5vLWFzdGVyaXNrIjpfdm0uZWxGb3JtJiZfdm0uZWxGb3JtLmhpZGVSZXF1aXJlZEFzdGVyaXNrfSxfdm0uc2l6ZUNsYXNzPyJlbC1mb3JtLWl0ZW0tLSIrX3ZtLnNpemVDbGFzczoiIl19LFtfYygibGFiZWwtd3JhcCIse2F0dHJzOnsiaXMtYXV0by13aWR0aCI6X3ZtLmxhYmVsU3R5bGUmJl92bS5sYWJlbFN0eWxlLndpZHRoPT09ImF1dG8iLCJ1cGRhdGUtYWxsIjpfdm0uZm9ybS5sYWJlbFdpZHRoPT09ImF1dG8ifX0sW192bS5sYWJlbHx8X3ZtLiRzbG90cy5sYWJlbD9fYygibGFiZWwiLHtzdGF0aWNDbGFzczoiZWwtZm9ybS1pdGVtX19sYWJlbCIsc3R5bGU6X3ZtLmxhYmVsU3R5bGUsYXR0cnM6e2Zvcjpfdm0ubGFiZWxGb3J9fSxbX3ZtLl90KCJsYWJlbCIsW192bS5fdihfdm0uX3MoX3ZtLmxhYmVsK192bS5mb3JtLmxhYmVsU3VmZml4KSldKV0sMik6X3ZtLl9lKCldKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWZvcm0taXRlbV9fY29udGVudCIsc3R5bGU6X3ZtLmNvbnRlbnRTdHlsZX0sW192bS5fdCgiZGVmYXVsdCIpLF9jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn19LFtfdm0udmFsaWRhdGVTdGF0ZT09PSJlcnJvciImJl92bS5zaG93TWVzc2FnZSYmX3ZtLmZvcm0uc2hvd01lc3NhZ2U/X3ZtLl90KCJlcnJvciIsW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZm9ybS1pdGVtX19lcnJvciIsY2xhc3M6eyJlbC1mb3JtLWl0ZW1fX2Vycm9yLS1pbmxpbmUiOnR5cGVvZiBfdm0uaW5saW5lTWVzc2FnZT09PSJib29sZWFuIj9fdm0uaW5saW5lTWVzc2FnZTpfdm0uZWxGb3JtJiZfdm0uZWxGb3JtLmlubGluZU1lc3NhZ2V8fGZhbHNlfX0sW192bS5fdigiXG4gICAgICAgICAgIitfdm0uX3MoX3ZtLnZhbGlkYXRlTWVzc2FnZSkrIlxuICAgICAgICAiKV0pXSx7ZXJyb3I6X3ZtLnZhbGlkYXRlTWVzc2FnZX0pOl92bS5fZSgpXSwyKV0sMildLDEpO307dmFyIGZvcm1faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2I2ZjNkYjZjX3N0YXRpY1JlbmRlckZucz1bXTtmb3JtX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9iNmYzZGI2Y19yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS9zcmMvZm9ybS1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iNmYzZGI2YyYKLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiYXN5bmMtdmFsaWRhdG9yIgp2YXIgZXh0ZXJuYWxfYXN5bmNfdmFsaWRhdG9yXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTt2YXIgZXh0ZXJuYWxfYXN5bmNfdmFsaWRhdG9yX2RlZmF1bHQ9LyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9hc3luY192YWxpZGF0b3JfKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9mb3JtL3NyYy9sYWJlbC13cmFwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBsYWJlbF93cmFwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtwcm9wczp7aXNBdXRvV2lkdGg6Qm9vbGVhbix1cGRhdGVBbGw6Qm9vbGVhbn0saW5qZWN0OlsnZWxGb3JtJywnZWxGb3JtSXRlbSddLHJlbmRlcjpmdW5jdGlvbiByZW5kZXIoKXt2YXIgaD1hcmd1bWVudHNbMF07dmFyIHNsb3RzPXRoaXMuJHNsb3RzLmRlZmF1bHQ7aWYoIXNsb3RzKXJldHVybiBudWxsO2lmKHRoaXMuaXNBdXRvV2lkdGgpe3ZhciBhdXRvTGFiZWxXaWR0aD10aGlzLmVsRm9ybS5hdXRvTGFiZWxXaWR0aDt2YXIgc3R5bGU9e307aWYoYXV0b0xhYmVsV2lkdGgmJmF1dG9MYWJlbFdpZHRoIT09J2F1dG8nKXt2YXIgbWFyZ2luTGVmdD1wYXJzZUludChhdXRvTGFiZWxXaWR0aCwxMCktdGhpcy5jb21wdXRlZFdpZHRoO2lmKG1hcmdpbkxlZnQpe3N0eWxlLm1hcmdpbkxlZnQ9bWFyZ2luTGVmdCsncHgnO319cmV0dXJuIGgoJ2RpdicseydjbGFzcyc6J2VsLWZvcm0taXRlbV9fbGFiZWwtd3JhcCcsc3R5bGU6c3R5bGV9LFtzbG90c10pO31lbHNle3JldHVybiBzbG90c1swXTt9fSxtZXRob2RzOntnZXRMYWJlbFdpZHRoOmZ1bmN0aW9uIGdldExhYmVsV2lkdGgoKXtpZih0aGlzLiRlbCYmdGhpcy4kZWwuZmlyc3RFbGVtZW50Q2hpbGQpe3ZhciBjb21wdXRlZFdpZHRoPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuJGVsLmZpcnN0RWxlbWVudENoaWxkKS53aWR0aDtyZXR1cm4gTWF0aC5jZWlsKHBhcnNlRmxvYXQoY29tcHV0ZWRXaWR0aCkpO31lbHNle3JldHVybiAwO319LHVwZGF0ZUxhYmVsV2lkdGg6ZnVuY3Rpb24gdXBkYXRlTGFiZWxXaWR0aCgpe3ZhciBhY3Rpb249YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOid1cGRhdGUnO2lmKHRoaXMuJHNsb3RzLmRlZmF1bHQmJnRoaXMuaXNBdXRvV2lkdGgmJnRoaXMuJGVsLmZpcnN0RWxlbWVudENoaWxkKXtpZihhY3Rpb249PT0ndXBkYXRlJyl7dGhpcy5jb21wdXRlZFdpZHRoPXRoaXMuZ2V0TGFiZWxXaWR0aCgpO31lbHNlIGlmKGFjdGlvbj09PSdyZW1vdmUnKXt0aGlzLmVsRm9ybS5kZXJlZ2lzdGVyTGFiZWxXaWR0aCh0aGlzLmNvbXB1dGVkV2lkdGgpO319fX0sd2F0Y2g6e2NvbXB1dGVkV2lkdGg6ZnVuY3Rpb24gY29tcHV0ZWRXaWR0aCh2YWwsb2xkVmFsKXtpZih0aGlzLnVwZGF0ZUFsbCl7dGhpcy5lbEZvcm0ucmVnaXN0ZXJMYWJlbFdpZHRoKHZhbCxvbGRWYWwpO3RoaXMuZWxGb3JtSXRlbS51cGRhdGVDb21wdXRlZExhYmVsV2lkdGgodmFsKTt9fX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2NvbXB1dGVkV2lkdGg6MH07fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt0aGlzLnVwZGF0ZUxhYmVsV2lkdGgoJ3VwZGF0ZScpO30sdXBkYXRlZDpmdW5jdGlvbiB1cGRhdGVkKCl7dGhpcy51cGRhdGVMYWJlbFdpZHRoKCd1cGRhdGUnKTt9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpe3RoaXMudXBkYXRlTGFiZWxXaWR0aCgncmVtb3ZlJyk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb3JtL3NyYy9sYWJlbC13cmFwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfbGFiZWxfd3JhcHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1sYWJlbF93cmFwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS9zcmMvbGFiZWwtd3JhcC52dWUKdmFyIGxhYmVsX3dyYXBfcmVuZGVyLGxhYmVsX3dyYXBfc3RhdGljUmVuZGVyRm5zOy8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgbGFiZWxfd3JhcF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19sYWJlbF93cmFwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGxhYmVsX3dyYXBfcmVuZGVyLGxhYmVsX3dyYXBfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBsYWJlbF93cmFwX2FwaTt9bGFiZWxfd3JhcF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Zvcm0vc3JjL2xhYmVsLXdyYXAudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGxhYmVsX3dyYXA9bGFiZWxfd3JhcF9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGZvcm1faXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxGb3JtSXRlbScsY29tcG9uZW50TmFtZTonRWxGb3JtSXRlbScsbWl4aW5zOltlbWl0dGVyX2RlZmF1bHQuYV0scHJvdmlkZTpmdW5jdGlvbiBwcm92aWRlKCl7cmV0dXJue2VsRm9ybUl0ZW06dGhpc307fSxpbmplY3Q6WydlbEZvcm0nXSxwcm9wczp7bGFiZWw6U3RyaW5nLGxhYmVsV2lkdGg6U3RyaW5nLHByb3A6U3RyaW5nLHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp1bmRlZmluZWR9LHJ1bGVzOltPYmplY3QsQXJyYXldLGVycm9yOlN0cmluZyx2YWxpZGF0ZVN0YXR1czpTdHJpbmcsZm9yOlN0cmluZyxpbmxpbmVNZXNzYWdlOnt0eXBlOltTdHJpbmcsQm9vbGVhbl0sZGVmYXVsdDonJ30sc2hvd01lc3NhZ2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LHNpemU6U3RyaW5nfSxjb21wb25lbnRzOnsvLyB1c2UgdGhpcyBjb21wb25lbnQgdG8gY2FsY3VsYXRlIGF1dG8gd2lkdGgKTGFiZWxXcmFwOmxhYmVsX3dyYXB9LHdhdGNoOntlcnJvcjp7aW1tZWRpYXRlOnRydWUsaGFuZGxlcjpmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKXt0aGlzLnZhbGlkYXRlTWVzc2FnZT12YWx1ZTt0aGlzLnZhbGlkYXRlU3RhdGU9dmFsdWU/J2Vycm9yJzonJzt9fSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyh2YWx1ZSl7dGhpcy52YWxpZGF0ZVN0YXRlPXZhbHVlO319LGNvbXB1dGVkOntsYWJlbEZvcjpmdW5jdGlvbiBsYWJlbEZvcigpe3JldHVybiB0aGlzLmZvcnx8dGhpcy5wcm9wO30sbGFiZWxTdHlsZTpmdW5jdGlvbiBsYWJlbFN0eWxlKCl7dmFyIHJldD17fTtpZih0aGlzLmZvcm0ubGFiZWxQb3NpdGlvbj09PSd0b3AnKXJldHVybiByZXQ7dmFyIGxhYmVsV2lkdGg9dGhpcy5sYWJlbFdpZHRofHx0aGlzLmZvcm0ubGFiZWxXaWR0aDtpZihsYWJlbFdpZHRoKXtyZXQud2lkdGg9bGFiZWxXaWR0aDt9cmV0dXJuIHJldDt9LGNvbnRlbnRTdHlsZTpmdW5jdGlvbiBjb250ZW50U3R5bGUoKXt2YXIgcmV0PXt9O3ZhciBsYWJlbD10aGlzLmxhYmVsO2lmKHRoaXMuZm9ybS5sYWJlbFBvc2l0aW9uPT09J3RvcCd8fHRoaXMuZm9ybS5pbmxpbmUpcmV0dXJuIHJldDtpZighbGFiZWwmJiF0aGlzLmxhYmVsV2lkdGgmJnRoaXMuaXNOZXN0ZWQpcmV0dXJuIHJldDt2YXIgbGFiZWxXaWR0aD10aGlzLmxhYmVsV2lkdGh8fHRoaXMuZm9ybS5sYWJlbFdpZHRoO2lmKGxhYmVsV2lkdGg9PT0nYXV0bycpe2lmKHRoaXMubGFiZWxXaWR0aD09PSdhdXRvJyl7cmV0Lm1hcmdpbkxlZnQ9dGhpcy5jb21wdXRlZExhYmVsV2lkdGg7fWVsc2UgaWYodGhpcy5mb3JtLmxhYmVsV2lkdGg9PT0nYXV0bycpe3JldC5tYXJnaW5MZWZ0PXRoaXMuZWxGb3JtLmF1dG9MYWJlbFdpZHRoO319ZWxzZXtyZXQubWFyZ2luTGVmdD1sYWJlbFdpZHRoO31yZXR1cm4gcmV0O30sZm9ybTpmdW5jdGlvbiBmb3JtKCl7dmFyIHBhcmVudD10aGlzLiRwYXJlbnQ7dmFyIHBhcmVudE5hbWU9cGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWU7d2hpbGUocGFyZW50TmFtZSE9PSdFbEZvcm0nKXtpZihwYXJlbnROYW1lPT09J0VsRm9ybUl0ZW0nKXt0aGlzLmlzTmVzdGVkPXRydWU7fXBhcmVudD1wYXJlbnQuJHBhcmVudDtwYXJlbnROYW1lPXBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lO31yZXR1cm4gcGFyZW50O30sZmllbGRWYWx1ZTpmdW5jdGlvbiBmaWVsZFZhbHVlKCl7dmFyIG1vZGVsPXRoaXMuZm9ybS5tb2RlbDtpZighbW9kZWx8fCF0aGlzLnByb3Ape3JldHVybjt9dmFyIHBhdGg9dGhpcy5wcm9wO2lmKHBhdGguaW5kZXhPZignOicpIT09LTEpe3BhdGg9cGF0aC5yZXBsYWNlKC86LywnLicpO31yZXR1cm4gT2JqZWN0KHV0aWxfWyJnZXRQcm9wQnlQYXRoIl0pKG1vZGVsLHBhdGgsdHJ1ZSkudjt9LGlzUmVxdWlyZWQ6ZnVuY3Rpb24gaXNSZXF1aXJlZCgpe3ZhciBydWxlcz10aGlzLmdldFJ1bGVzKCk7dmFyIGlzUmVxdWlyZWQ9ZmFsc2U7aWYocnVsZXMmJnJ1bGVzLmxlbmd0aCl7cnVsZXMuZXZlcnkoZnVuY3Rpb24ocnVsZSl7aWYocnVsZS5yZXF1aXJlZCl7aXNSZXF1aXJlZD10cnVlO3JldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fSk7fXJldHVybiBpc1JlcXVpcmVkO30sX2Zvcm1TaXplOmZ1bmN0aW9uIF9mb3JtU2l6ZSgpe3JldHVybiB0aGlzLmVsRm9ybS5zaXplO30sZWxGb3JtSXRlbVNpemU6ZnVuY3Rpb24gZWxGb3JtSXRlbVNpemUoKXtyZXR1cm4gdGhpcy5zaXplfHx0aGlzLl9mb3JtU2l6ZTt9LHNpemVDbGFzczpmdW5jdGlvbiBzaXplQ2xhc3MoKXtyZXR1cm4gdGhpcy5lbEZvcm1JdGVtU2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplO319LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnt2YWxpZGF0ZVN0YXRlOicnLHZhbGlkYXRlTWVzc2FnZTonJyx2YWxpZGF0ZURpc2FibGVkOmZhbHNlLHZhbGlkYXRvcjp7fSxpc05lc3RlZDpmYWxzZSxjb21wdXRlZExhYmVsV2lkdGg6Jyd9O30sbWV0aG9kczp7dmFsaWRhdGU6ZnVuY3Rpb24gdmFsaWRhdGUodHJpZ2dlcil7dmFyIF90aGlzPXRoaXM7dmFyIGNhbGxiYWNrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1sxXTp1dGlsX1sibm9vcCJdO3RoaXMudmFsaWRhdGVEaXNhYmxlZD1mYWxzZTt2YXIgcnVsZXM9dGhpcy5nZXRGaWx0ZXJlZFJ1bGUodHJpZ2dlcik7aWYoKCFydWxlc3x8cnVsZXMubGVuZ3RoPT09MCkmJnRoaXMucmVxdWlyZWQ9PT11bmRlZmluZWQpe2NhbGxiYWNrKCk7cmV0dXJuIHRydWU7fXRoaXMudmFsaWRhdGVTdGF0ZT0ndmFsaWRhdGluZyc7dmFyIGRlc2NyaXB0b3I9e307aWYocnVsZXMmJnJ1bGVzLmxlbmd0aD4wKXtydWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGUpe2RlbGV0ZSBydWxlLnRyaWdnZXI7fSk7fWRlc2NyaXB0b3JbdGhpcy5wcm9wXT1ydWxlczt2YXIgdmFsaWRhdG9yPW5ldyBleHRlcm5hbF9hc3luY192YWxpZGF0b3JfZGVmYXVsdC5hKGRlc2NyaXB0b3IpO3ZhciBtb2RlbD17fTttb2RlbFt0aGlzLnByb3BdPXRoaXMuZmllbGRWYWx1ZTt2YWxpZGF0b3IudmFsaWRhdGUobW9kZWwse2ZpcnN0RmllbGRzOnRydWV9LGZ1bmN0aW9uKGVycm9ycyxpbnZhbGlkRmllbGRzKXtfdGhpcy52YWxpZGF0ZVN0YXRlPSFlcnJvcnM/J3N1Y2Nlc3MnOidlcnJvcic7X3RoaXMudmFsaWRhdGVNZXNzYWdlPWVycm9ycz9lcnJvcnNbMF0ubWVzc2FnZTonJztjYWxsYmFjayhfdGhpcy52YWxpZGF0ZU1lc3NhZ2UsaW52YWxpZEZpZWxkcyk7X3RoaXMuZWxGb3JtJiZfdGhpcy5lbEZvcm0uJGVtaXQoJ3ZhbGlkYXRlJyxfdGhpcy5wcm9wLCFlcnJvcnMsX3RoaXMudmFsaWRhdGVNZXNzYWdlfHxudWxsKTt9KTt9LGNsZWFyVmFsaWRhdGU6ZnVuY3Rpb24gY2xlYXJWYWxpZGF0ZSgpe3RoaXMudmFsaWRhdGVTdGF0ZT0nJzt0aGlzLnZhbGlkYXRlTWVzc2FnZT0nJzt0aGlzLnZhbGlkYXRlRGlzYWJsZWQ9ZmFsc2U7fSxyZXNldEZpZWxkOmZ1bmN0aW9uIHJlc2V0RmllbGQoKXt2YXIgX3RoaXMyPXRoaXM7dGhpcy52YWxpZGF0ZVN0YXRlPScnO3RoaXMudmFsaWRhdGVNZXNzYWdlPScnO3ZhciBtb2RlbD10aGlzLmZvcm0ubW9kZWw7dmFyIHZhbHVlPXRoaXMuZmllbGRWYWx1ZTt2YXIgcGF0aD10aGlzLnByb3A7aWYocGF0aC5pbmRleE9mKCc6JykhPT0tMSl7cGF0aD1wYXRoLnJlcGxhY2UoLzovLCcuJyk7fXZhciBwcm9wPU9iamVjdCh1dGlsX1siZ2V0UHJvcEJ5UGF0aCJdKShtb2RlbCxwYXRoLHRydWUpO3RoaXMudmFsaWRhdGVEaXNhYmxlZD10cnVlO2lmKEFycmF5LmlzQXJyYXkodmFsdWUpKXtwcm9wLm9bcHJvcC5rXT1bXS5jb25jYXQodGhpcy5pbml0aWFsVmFsdWUpO31lbHNle3Byb3Aub1twcm9wLmtdPXRoaXMuaW5pdGlhbFZhbHVlO30vLyByZXNldCB2YWxpZGF0ZURpc2FibGVkIGFmdGVyIG9uRmllbGRDaGFuZ2UgdHJpZ2dlcmVkCnRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7X3RoaXMyLnZhbGlkYXRlRGlzYWJsZWQ9ZmFsc2U7fSk7dGhpcy5icm9hZGNhc3QoJ0VsVGltZVNlbGVjdCcsJ2ZpZWxkUmVzZXQnLHRoaXMuaW5pdGlhbFZhbHVlKTt9LGdldFJ1bGVzOmZ1bmN0aW9uIGdldFJ1bGVzKCl7dmFyIGZvcm1SdWxlcz10aGlzLmZvcm0ucnVsZXM7dmFyIHNlbGZSdWxlcz10aGlzLnJ1bGVzO3ZhciByZXF1aXJlZFJ1bGU9dGhpcy5yZXF1aXJlZCE9PXVuZGVmaW5lZD97cmVxdWlyZWQ6ISF0aGlzLnJlcXVpcmVkfTpbXTt2YXIgcHJvcD1PYmplY3QodXRpbF9bImdldFByb3BCeVBhdGgiXSkoZm9ybVJ1bGVzLHRoaXMucHJvcHx8JycpO2Zvcm1SdWxlcz1mb3JtUnVsZXM/cHJvcC5vW3RoaXMucHJvcHx8JyddfHxwcm9wLnY6W107cmV0dXJuW10uY29uY2F0KHNlbGZSdWxlc3x8Zm9ybVJ1bGVzfHxbXSkuY29uY2F0KHJlcXVpcmVkUnVsZSk7fSxnZXRGaWx0ZXJlZFJ1bGU6ZnVuY3Rpb24gZ2V0RmlsdGVyZWRSdWxlKHRyaWdnZXIpe3ZhciBydWxlcz10aGlzLmdldFJ1bGVzKCk7cmV0dXJuIHJ1bGVzLmZpbHRlcihmdW5jdGlvbihydWxlKXtpZighcnVsZS50cmlnZ2VyfHx0cmlnZ2VyPT09JycpcmV0dXJuIHRydWU7aWYoQXJyYXkuaXNBcnJheShydWxlLnRyaWdnZXIpKXtyZXR1cm4gcnVsZS50cmlnZ2VyLmluZGV4T2YodHJpZ2dlcik+LTE7fWVsc2V7cmV0dXJuIHJ1bGUudHJpZ2dlcj09PXRyaWdnZXI7fX0pLm1hcChmdW5jdGlvbihydWxlKXtyZXR1cm4gbWVyZ2VfZGVmYXVsdCgpKHt9LHJ1bGUpO30pO30sb25GaWVsZEJsdXI6ZnVuY3Rpb24gb25GaWVsZEJsdXIoKXt0aGlzLnZhbGlkYXRlKCdibHVyJyk7fSxvbkZpZWxkQ2hhbmdlOmZ1bmN0aW9uIG9uRmllbGRDaGFuZ2UoKXtpZih0aGlzLnZhbGlkYXRlRGlzYWJsZWQpe3RoaXMudmFsaWRhdGVEaXNhYmxlZD1mYWxzZTtyZXR1cm47fXRoaXMudmFsaWRhdGUoJ2NoYW5nZScpO30sdXBkYXRlQ29tcHV0ZWRMYWJlbFdpZHRoOmZ1bmN0aW9uIHVwZGF0ZUNvbXB1dGVkTGFiZWxXaWR0aCh3aWR0aCl7dGhpcy5jb21wdXRlZExhYmVsV2lkdGg9d2lkdGg/d2lkdGgrJ3B4JzonJzt9LGFkZFZhbGlkYXRlRXZlbnRzOmZ1bmN0aW9uIGFkZFZhbGlkYXRlRXZlbnRzKCl7dmFyIHJ1bGVzPXRoaXMuZ2V0UnVsZXMoKTtpZihydWxlcy5sZW5ndGh8fHRoaXMucmVxdWlyZWQhPT11bmRlZmluZWQpe3RoaXMuJG9uKCdlbC5mb3JtLmJsdXInLHRoaXMub25GaWVsZEJsdXIpO3RoaXMuJG9uKCdlbC5mb3JtLmNoYW5nZScsdGhpcy5vbkZpZWxkQ2hhbmdlKTt9fSxyZW1vdmVWYWxpZGF0ZUV2ZW50czpmdW5jdGlvbiByZW1vdmVWYWxpZGF0ZUV2ZW50cygpe3RoaXMuJG9mZigpO319LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe2lmKHRoaXMucHJvcCl7dGhpcy5kaXNwYXRjaCgnRWxGb3JtJywnZWwuZm9ybS5hZGRGaWVsZCcsW3RoaXNdKTt2YXIgaW5pdGlhbFZhbHVlPXRoaXMuZmllbGRWYWx1ZTtpZihBcnJheS5pc0FycmF5KGluaXRpYWxWYWx1ZSkpe2luaXRpYWxWYWx1ZT1bXS5jb25jYXQoaW5pdGlhbFZhbHVlKTt9T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJ2luaXRpYWxWYWx1ZScse3ZhbHVlOmluaXRpYWxWYWx1ZX0pO3RoaXMuYWRkVmFsaWRhdGVFdmVudHMoKTt9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKXt0aGlzLmRpc3BhdGNoKCdFbEZvcm0nLCdlbC5mb3JtLnJlbW92ZUZpZWxkJyxbdGhpc10pO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS9zcmMvZm9ybS1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfZm9ybV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWZvcm1faXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0taXRlbS52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBmb3JtX2l0ZW1fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfZm9ybV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGZvcm1faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2I2ZjNkYjZjX3JlbmRlcixmb3JtX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9iNmYzZGI2Y19zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGZvcm1faXRlbV9hcGk7fWZvcm1faXRlbV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0taXRlbS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZm9ybV9pdGVtPWZvcm1faXRlbV9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvcm0taXRlbS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2Zvcm1faXRlbS5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChmb3JtX2l0ZW0ubmFtZSxmb3JtX2l0ZW0pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19mb3JtX2l0ZW09Zm9ybV9pdGVtOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFicy9zcmMvdGFiLWJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjAzMWYzM2EmCnZhciB0YWJfYmFydnVlX3R5cGVfdGVtcGxhdGVfaWRfMjAzMWYzM2FfcmVuZGVyPWZ1bmN0aW9uIHRhYl9iYXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMDMxZjMzYV9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10YWJzX19hY3RpdmUtYmFyIixjbGFzczoiaXMtIitfdm0ucm9vdFRhYnMudGFiUG9zaXRpb24sc3R5bGU6X3ZtLmJhclN0eWxlfSk7fTt2YXIgdGFiX2JhcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIwMzFmMzNhX3N0YXRpY1JlbmRlckZucz1bXTt0YWJfYmFydnVlX3R5cGVfdGVtcGxhdGVfaWRfMjAzMWYzM2FfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1iYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIwMzFmMzNhJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90YWJzL3NyYy90YWItYmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0YWJfYmFydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidUYWJCYXInLHByb3BzOnt0YWJzOkFycmF5fSxpbmplY3Q6Wydyb290VGFicyddLGNvbXB1dGVkOntiYXJTdHlsZTp7Z2V0OmZ1bmN0aW9uIGdldCgpe3ZhciBfdGhpcz10aGlzO3ZhciBzdHlsZT17fTt2YXIgb2Zmc2V0PTA7dmFyIHRhYlNpemU9MDt2YXIgc2l6ZU5hbWU9Wyd0b3AnLCdib3R0b20nXS5pbmRleE9mKHRoaXMucm9vdFRhYnMudGFiUG9zaXRpb24pIT09LTE/J3dpZHRoJzonaGVpZ2h0Jzt2YXIgc2l6ZURpcj1zaXplTmFtZT09PSd3aWR0aCc/J3gnOid5Jzt2YXIgZmlyc3RVcHBlckNhc2U9ZnVuY3Rpb24gZmlyc3RVcHBlckNhc2Uoc3RyKXtyZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKCB8XilbYS16XS9nLGZ1bmN0aW9uKEwpe3JldHVybiBMLnRvVXBwZXJDYXNlKCk7fSk7fTt0aGlzLnRhYnMuZXZlcnkoZnVuY3Rpb24odGFiLGluZGV4KXt2YXIgJGVsPU9iamVjdCh1dGlsX1siYXJyYXlGaW5kIl0pKF90aGlzLiRwYXJlbnQuJHJlZnMudGFic3x8W10sZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQucmVwbGFjZSgndGFiLScsJycpPT09dGFiLnBhbmVOYW1lO30pO2lmKCEkZWwpe3JldHVybiBmYWxzZTt9aWYoIXRhYi5hY3RpdmUpe29mZnNldCs9JGVsWydjbGllbnQnK2ZpcnN0VXBwZXJDYXNlKHNpemVOYW1lKV07cmV0dXJuIHRydWU7fWVsc2V7dGFiU2l6ZT0kZWxbJ2NsaWVudCcrZmlyc3RVcHBlckNhc2Uoc2l6ZU5hbWUpXTt2YXIgdGFiU3R5bGVzPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCRlbCk7aWYoc2l6ZU5hbWU9PT0nd2lkdGgnJiZfdGhpcy50YWJzLmxlbmd0aD4xKXt0YWJTaXplLT1wYXJzZUZsb2F0KHRhYlN0eWxlcy5wYWRkaW5nTGVmdCkrcGFyc2VGbG9hdCh0YWJTdHlsZXMucGFkZGluZ1JpZ2h0KTt9aWYoc2l6ZU5hbWU9PT0nd2lkdGgnKXtvZmZzZXQrPXBhcnNlRmxvYXQodGFiU3R5bGVzLnBhZGRpbmdMZWZ0KTt9cmV0dXJuIGZhbHNlO319KTt2YXIgdHJhbnNmb3JtPSd0cmFuc2xhdGUnK2ZpcnN0VXBwZXJDYXNlKHNpemVEaXIpKycoJytvZmZzZXQrJ3B4KSc7c3R5bGVbc2l6ZU5hbWVdPXRhYlNpemUrJ3B4JztzdHlsZS50cmFuc2Zvcm09dHJhbnNmb3JtO3N0eWxlLm1zVHJhbnNmb3JtPXRyYW5zZm9ybTtzdHlsZS53ZWJraXRUcmFuc2Zvcm09dHJhbnNmb3JtO3JldHVybiBzdHlsZTt9fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFicy9zcmMvdGFiLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3RhYl9iYXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189dGFiX2JhcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1iYXIudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgdGFiX2Jhcl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY190YWJfYmFydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHRhYl9iYXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMDMxZjMzYV9yZW5kZXIsdGFiX2JhcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIwMzFmMzNhX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgdGFiX2Jhcl9hcGk7fXRhYl9iYXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90YWJzL3NyYy90YWItYmFyLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0YWJfYmFyPXRhYl9iYXJfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFicy9zcmMvdGFiLW5hdi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCmZ1bmN0aW9uIG5vb3AoKXt9dmFyIHRhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19maXJzdFVwcGVyQ2FzZT1mdW5jdGlvbiBmaXJzdFVwcGVyQ2FzZShzdHIpe3JldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oIHxeKVthLXpdL2csZnVuY3Rpb24oTCl7cmV0dXJuIEwudG9VcHBlckNhc2UoKTt9KTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGFiX25hdnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonVGFiTmF2Jyxjb21wb25lbnRzOntUYWJCYXI6dGFiX2Jhcn0saW5qZWN0Olsncm9vdFRhYnMnXSxwcm9wczp7cGFuZXM6QXJyYXksY3VycmVudE5hbWU6U3RyaW5nLGVkaXRhYmxlOkJvb2xlYW4sb25UYWJDbGljazp7dHlwZTpGdW5jdGlvbixkZWZhdWx0Om5vb3B9LG9uVGFiUmVtb3ZlOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6bm9vcH0sdHlwZTpTdHJpbmcsc3RyZXRjaDpCb29sZWFufSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57c2Nyb2xsYWJsZTpmYWxzZSxuYXZPZmZzZXQ6MCxpc0ZvY3VzOmZhbHNlLGZvY3VzYWJsZTp0cnVlfTt9LGNvbXB1dGVkOntuYXZTdHlsZTpmdW5jdGlvbiBuYXZTdHlsZSgpe3ZhciBkaXI9Wyd0b3AnLCdib3R0b20nXS5pbmRleE9mKHRoaXMucm9vdFRhYnMudGFiUG9zaXRpb24pIT09LTE/J1gnOidZJztyZXR1cm57dHJhbnNmb3JtOid0cmFuc2xhdGUnK2RpcisnKC0nK3RoaXMubmF2T2Zmc2V0KydweCknfTt9LHNpemVOYW1lOmZ1bmN0aW9uIHNpemVOYW1lKCl7cmV0dXJuWyd0b3AnLCdib3R0b20nXS5pbmRleE9mKHRoaXMucm9vdFRhYnMudGFiUG9zaXRpb24pIT09LTE/J3dpZHRoJzonaGVpZ2h0Jzt9fSxtZXRob2RzOntzY3JvbGxQcmV2OmZ1bmN0aW9uIHNjcm9sbFByZXYoKXt2YXIgY29udGFpbmVyU2l6ZT10aGlzLiRyZWZzLm5hdlNjcm9sbFsnb2Zmc2V0Jyt0YWJfbmF2dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZmlyc3RVcHBlckNhc2UodGhpcy5zaXplTmFtZSldO3ZhciBjdXJyZW50T2Zmc2V0PXRoaXMubmF2T2Zmc2V0O2lmKCFjdXJyZW50T2Zmc2V0KXJldHVybjt2YXIgbmV3T2Zmc2V0PWN1cnJlbnRPZmZzZXQ+Y29udGFpbmVyU2l6ZT9jdXJyZW50T2Zmc2V0LWNvbnRhaW5lclNpemU6MDt0aGlzLm5hdk9mZnNldD1uZXdPZmZzZXQ7fSxzY3JvbGxOZXh0OmZ1bmN0aW9uIHNjcm9sbE5leHQoKXt2YXIgbmF2U2l6ZT10aGlzLiRyZWZzLm5hdlsnb2Zmc2V0Jyt0YWJfbmF2dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZmlyc3RVcHBlckNhc2UodGhpcy5zaXplTmFtZSldO3ZhciBjb250YWluZXJTaXplPXRoaXMuJHJlZnMubmF2U2Nyb2xsWydvZmZzZXQnK3RhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19maXJzdFVwcGVyQ2FzZSh0aGlzLnNpemVOYW1lKV07dmFyIGN1cnJlbnRPZmZzZXQ9dGhpcy5uYXZPZmZzZXQ7aWYobmF2U2l6ZS1jdXJyZW50T2Zmc2V0PD1jb250YWluZXJTaXplKXJldHVybjt2YXIgbmV3T2Zmc2V0PW5hdlNpemUtY3VycmVudE9mZnNldD5jb250YWluZXJTaXplKjI/Y3VycmVudE9mZnNldCtjb250YWluZXJTaXplOm5hdlNpemUtY29udGFpbmVyU2l6ZTt0aGlzLm5hdk9mZnNldD1uZXdPZmZzZXQ7fSxzY3JvbGxUb0FjdGl2ZVRhYjpmdW5jdGlvbiBzY3JvbGxUb0FjdGl2ZVRhYigpe2lmKCF0aGlzLnNjcm9sbGFibGUpcmV0dXJuO3ZhciBuYXY9dGhpcy4kcmVmcy5uYXY7dmFyIGFjdGl2ZVRhYj10aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCcuaXMtYWN0aXZlJyk7aWYoIWFjdGl2ZVRhYilyZXR1cm47dmFyIG5hdlNjcm9sbD10aGlzLiRyZWZzLm5hdlNjcm9sbDt2YXIgaXNIb3Jpem9udGFsPVsndG9wJywnYm90dG9tJ10uaW5kZXhPZih0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uKSE9PS0xO3ZhciBhY3RpdmVUYWJCb3VuZGluZz1hY3RpdmVUYWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIG5hdlNjcm9sbEJvdW5kaW5nPW5hdlNjcm9sbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgbWF4T2Zmc2V0PWlzSG9yaXpvbnRhbD9uYXYub2Zmc2V0V2lkdGgtbmF2U2Nyb2xsQm91bmRpbmcud2lkdGg6bmF2Lm9mZnNldEhlaWdodC1uYXZTY3JvbGxCb3VuZGluZy5oZWlnaHQ7dmFyIGN1cnJlbnRPZmZzZXQ9dGhpcy5uYXZPZmZzZXQ7dmFyIG5ld09mZnNldD1jdXJyZW50T2Zmc2V0O2lmKGlzSG9yaXpvbnRhbCl7aWYoYWN0aXZlVGFiQm91bmRpbmcubGVmdDxuYXZTY3JvbGxCb3VuZGluZy5sZWZ0KXtuZXdPZmZzZXQ9Y3VycmVudE9mZnNldC0obmF2U2Nyb2xsQm91bmRpbmcubGVmdC1hY3RpdmVUYWJCb3VuZGluZy5sZWZ0KTt9aWYoYWN0aXZlVGFiQm91bmRpbmcucmlnaHQ+bmF2U2Nyb2xsQm91bmRpbmcucmlnaHQpe25ld09mZnNldD1jdXJyZW50T2Zmc2V0K2FjdGl2ZVRhYkJvdW5kaW5nLnJpZ2h0LW5hdlNjcm9sbEJvdW5kaW5nLnJpZ2h0O319ZWxzZXtpZihhY3RpdmVUYWJCb3VuZGluZy50b3A8bmF2U2Nyb2xsQm91bmRpbmcudG9wKXtuZXdPZmZzZXQ9Y3VycmVudE9mZnNldC0obmF2U2Nyb2xsQm91bmRpbmcudG9wLWFjdGl2ZVRhYkJvdW5kaW5nLnRvcCk7fWlmKGFjdGl2ZVRhYkJvdW5kaW5nLmJvdHRvbT5uYXZTY3JvbGxCb3VuZGluZy5ib3R0b20pe25ld09mZnNldD1jdXJyZW50T2Zmc2V0KyhhY3RpdmVUYWJCb3VuZGluZy5ib3R0b20tbmF2U2Nyb2xsQm91bmRpbmcuYm90dG9tKTt9fW5ld09mZnNldD1NYXRoLm1heChuZXdPZmZzZXQsMCk7dGhpcy5uYXZPZmZzZXQ9TWF0aC5taW4obmV3T2Zmc2V0LG1heE9mZnNldCk7fSx1cGRhdGU6ZnVuY3Rpb24gdXBkYXRlKCl7aWYoIXRoaXMuJHJlZnMubmF2KXJldHVybjt2YXIgc2l6ZU5hbWU9dGhpcy5zaXplTmFtZTt2YXIgbmF2U2l6ZT10aGlzLiRyZWZzLm5hdlsnb2Zmc2V0Jyt0YWJfbmF2dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZmlyc3RVcHBlckNhc2Uoc2l6ZU5hbWUpXTt2YXIgY29udGFpbmVyU2l6ZT10aGlzLiRyZWZzLm5hdlNjcm9sbFsnb2Zmc2V0Jyt0YWJfbmF2dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZmlyc3RVcHBlckNhc2Uoc2l6ZU5hbWUpXTt2YXIgY3VycmVudE9mZnNldD10aGlzLm5hdk9mZnNldDtpZihjb250YWluZXJTaXplPG5hdlNpemUpe3ZhciBfY3VycmVudE9mZnNldD10aGlzLm5hdk9mZnNldDt0aGlzLnNjcm9sbGFibGU9dGhpcy5zY3JvbGxhYmxlfHx7fTt0aGlzLnNjcm9sbGFibGUucHJldj1fY3VycmVudE9mZnNldDt0aGlzLnNjcm9sbGFibGUubmV4dD1fY3VycmVudE9mZnNldCtjb250YWluZXJTaXplPG5hdlNpemU7aWYobmF2U2l6ZS1fY3VycmVudE9mZnNldDxjb250YWluZXJTaXplKXt0aGlzLm5hdk9mZnNldD1uYXZTaXplLWNvbnRhaW5lclNpemU7fX1lbHNle3RoaXMuc2Nyb2xsYWJsZT1mYWxzZTtpZihjdXJyZW50T2Zmc2V0PjApe3RoaXMubmF2T2Zmc2V0PTA7fX19LGNoYW5nZVRhYjpmdW5jdGlvbiBjaGFuZ2VUYWIoZSl7dmFyIGtleUNvZGU9ZS5rZXlDb2RlO3ZhciBuZXh0SW5kZXg9dm9pZCAwO3ZhciBjdXJyZW50SW5kZXg9dm9pZCAwLHRhYkxpc3Q9dm9pZCAwO2lmKFszNywzOCwzOSw0MF0uaW5kZXhPZihrZXlDb2RlKSE9PS0xKXsvLyDlt6blj7PkuIrkuIvplK7mm7TmjaJ0YWIKdGFiTGlzdD1lLmN1cnJlbnRUYXJnZXQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9dGFiXScpO2N1cnJlbnRJbmRleD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRhYkxpc3QsZS50YXJnZXQpO31lbHNle3JldHVybjt9aWYoa2V5Q29kZT09PTM3fHxrZXlDb2RlPT09Mzgpey8vIGxlZnQKaWYoY3VycmVudEluZGV4PT09MCl7Ly8gZmlyc3QKbmV4dEluZGV4PXRhYkxpc3QubGVuZ3RoLTE7fWVsc2V7bmV4dEluZGV4PWN1cnJlbnRJbmRleC0xO319ZWxzZXsvLyByaWdodAppZihjdXJyZW50SW5kZXg8dGFiTGlzdC5sZW5ndGgtMSl7Ly8gbm90IGxhc3QKbmV4dEluZGV4PWN1cnJlbnRJbmRleCsxO31lbHNle25leHRJbmRleD0wO319dGFiTGlzdFtuZXh0SW5kZXhdLmZvY3VzKCk7Ly8g5pS55Y+Y54Sm54K55YWD57SgCnRhYkxpc3RbbmV4dEluZGV4XS5jbGljaygpOy8vIOmAieS4reS4i+S4gOS4qnRhYgp0aGlzLnNldEZvY3VzKCk7fSxzZXRGb2N1czpmdW5jdGlvbiBzZXRGb2N1cygpe2lmKHRoaXMuZm9jdXNhYmxlKXt0aGlzLmlzRm9jdXM9dHJ1ZTt9fSxyZW1vdmVGb2N1czpmdW5jdGlvbiByZW1vdmVGb2N1cygpe3RoaXMuaXNGb2N1cz1mYWxzZTt9LHZpc2liaWxpdHlDaGFuZ2VIYW5kbGVyOmZ1bmN0aW9uIHZpc2liaWxpdHlDaGFuZ2VIYW5kbGVyKCl7dmFyIF90aGlzPXRoaXM7dmFyIHZpc2liaWxpdHk9ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO2lmKHZpc2liaWxpdHk9PT0naGlkZGVuJyl7dGhpcy5mb2N1c2FibGU9ZmFsc2U7fWVsc2UgaWYodmlzaWJpbGl0eT09PSd2aXNpYmxlJyl7c2V0VGltZW91dChmdW5jdGlvbigpe190aGlzLmZvY3VzYWJsZT10cnVlO30sNTApO319LHdpbmRvd0JsdXJIYW5kbGVyOmZ1bmN0aW9uIHdpbmRvd0JsdXJIYW5kbGVyKCl7dGhpcy5mb2N1c2FibGU9ZmFsc2U7fSx3aW5kb3dGb2N1c0hhbmRsZXI6ZnVuY3Rpb24gd2luZG93Rm9jdXNIYW5kbGVyKCl7dmFyIF90aGlzMj10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtfdGhpczIuZm9jdXNhYmxlPXRydWU7fSw1MCk7fX0sdXBkYXRlZDpmdW5jdGlvbiB1cGRhdGVkKCl7dGhpcy51cGRhdGUoKTt9LHJlbmRlcjpmdW5jdGlvbiByZW5kZXIoaCl7dmFyIF90aGlzMz10aGlzO3ZhciB0eXBlPXRoaXMudHlwZSxwYW5lcz10aGlzLnBhbmVzLGVkaXRhYmxlPXRoaXMuZWRpdGFibGUsc3RyZXRjaD10aGlzLnN0cmV0Y2gsb25UYWJDbGljaz10aGlzLm9uVGFiQ2xpY2ssb25UYWJSZW1vdmU9dGhpcy5vblRhYlJlbW92ZSxuYXZTdHlsZT10aGlzLm5hdlN0eWxlLHNjcm9sbGFibGU9dGhpcy5zY3JvbGxhYmxlLHNjcm9sbE5leHQ9dGhpcy5zY3JvbGxOZXh0LHNjcm9sbFByZXY9dGhpcy5zY3JvbGxQcmV2LGNoYW5nZVRhYj10aGlzLmNoYW5nZVRhYixzZXRGb2N1cz10aGlzLnNldEZvY3VzLHJlbW92ZUZvY3VzPXRoaXMucmVtb3ZlRm9jdXM7dmFyIHNjcm9sbEJ0bj1zY3JvbGxhYmxlP1toKCdzcGFuJyx7J2NsYXNzJzpbJ2VsLXRhYnNfX25hdi1wcmV2JyxzY3JvbGxhYmxlLnByZXY/Jyc6J2lzLWRpc2FibGVkJ10sb246eydjbGljayc6c2Nyb2xsUHJldn19LFtoKCdpJyx7J2NsYXNzJzonZWwtaWNvbi1hcnJvdy1sZWZ0J30pXSksaCgnc3BhbicseydjbGFzcyc6WydlbC10YWJzX19uYXYtbmV4dCcsc2Nyb2xsYWJsZS5uZXh0PycnOidpcy1kaXNhYmxlZCddLG9uOnsnY2xpY2snOnNjcm9sbE5leHR9fSxbaCgnaScseydjbGFzcyc6J2VsLWljb24tYXJyb3ctcmlnaHQnfSldKV06bnVsbDt2YXIgdGFicz10aGlzLl9sKHBhbmVzLGZ1bmN0aW9uKHBhbmUsaW5kZXgpe3ZhciBfcmVmO3ZhciB0YWJOYW1lPXBhbmUubmFtZXx8cGFuZS5pbmRleHx8aW5kZXg7dmFyIGNsb3NhYmxlPXBhbmUuaXNDbG9zYWJsZXx8ZWRpdGFibGU7cGFuZS5pbmRleD0nJytpbmRleDt2YXIgYnRuQ2xvc2U9Y2xvc2FibGU/aCgnc3BhbicseydjbGFzcyc6J2VsLWljb24tY2xvc2UnLG9uOnsnY2xpY2snOmZ1bmN0aW9uIGNsaWNrKGV2KXtvblRhYlJlbW92ZShwYW5lLGV2KTt9fX0pOm51bGw7dmFyIHRhYkxhYmVsQ29udGVudD1wYW5lLiRzbG90cy5sYWJlbHx8cGFuZS5sYWJlbDt2YXIgdGFiaW5kZXg9cGFuZS5hY3RpdmU/MDotMTtyZXR1cm4gaCgnZGl2Jyx7J2NsYXNzJzooX3JlZj17J2VsLXRhYnNfX2l0ZW0nOnRydWV9LF9yZWZbJ2lzLScrX3RoaXMzLnJvb3RUYWJzLnRhYlBvc2l0aW9uXT10cnVlLF9yZWZbJ2lzLWFjdGl2ZSddPXBhbmUuYWN0aXZlLF9yZWZbJ2lzLWRpc2FibGVkJ109cGFuZS5kaXNhYmxlZCxfcmVmWydpcy1jbG9zYWJsZSddPWNsb3NhYmxlLF9yZWZbJ2lzLWZvY3VzJ109X3RoaXMzLmlzRm9jdXMsX3JlZiksYXR0cnM6e2lkOid0YWItJyt0YWJOYW1lLCdhcmlhLWNvbnRyb2xzJzoncGFuZS0nK3RhYk5hbWUscm9sZTondGFiJywnYXJpYS1zZWxlY3RlZCc6cGFuZS5hY3RpdmUsdGFiaW5kZXg6dGFiaW5kZXh9LGtleTondGFiLScrdGFiTmFtZSxyZWY6J3RhYnMnLHJlZkluRm9yOnRydWUsb246eydmb2N1cyc6ZnVuY3Rpb24gZm9jdXMoKXtzZXRGb2N1cygpO30sJ2JsdXInOmZ1bmN0aW9uIGJsdXIoKXtyZW1vdmVGb2N1cygpO30sJ2NsaWNrJzpmdW5jdGlvbiBjbGljayhldil7cmVtb3ZlRm9jdXMoKTtvblRhYkNsaWNrKHBhbmUsdGFiTmFtZSxldik7fSwna2V5ZG93bic6ZnVuY3Rpb24ga2V5ZG93bihldil7aWYoY2xvc2FibGUmJihldi5rZXlDb2RlPT09NDZ8fGV2LmtleUNvZGU9PT04KSl7b25UYWJSZW1vdmUocGFuZSxldik7fX19fSxbdGFiTGFiZWxDb250ZW50LGJ0bkNsb3NlXSk7fSk7cmV0dXJuIGgoJ2RpdicseydjbGFzcyc6WydlbC10YWJzX19uYXYtd3JhcCcsc2Nyb2xsYWJsZT8naXMtc2Nyb2xsYWJsZSc6JycsJ2lzLScrdGhpcy5yb290VGFicy50YWJQb3NpdGlvbl19LFtzY3JvbGxCdG4saCgnZGl2Jyx7J2NsYXNzJzpbJ2VsLXRhYnNfX25hdi1zY3JvbGwnXSxyZWY6J25hdlNjcm9sbCd9LFtoKCdkaXYnLHsnY2xhc3MnOlsnZWwtdGFic19fbmF2JywnaXMtJyt0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uLHN0cmV0Y2gmJlsndG9wJywnYm90dG9tJ10uaW5kZXhPZih0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uKSE9PS0xPydpcy1zdHJldGNoJzonJ10scmVmOiduYXYnLHN0eWxlOm5hdlN0eWxlLGF0dHJzOntyb2xlOid0YWJsaXN0J30sb246eydrZXlkb3duJzpjaGFuZ2VUYWJ9fSxbIXR5cGU/aCgndGFiLWJhcicse2F0dHJzOnt0YWJzOnBhbmVzfX0pOm51bGwsdGFic10pXSldKTt9LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3ZhciBfdGhpczQ9dGhpcztPYmplY3QocmVzaXplX2V2ZW50X1siYWRkUmVzaXplTGlzdGVuZXIiXSkodGhpcy4kZWwsdGhpcy51cGRhdGUpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLHRoaXMudmlzaWJpbGl0eUNoYW5nZUhhbmRsZXIpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJyx0aGlzLndpbmRvd0JsdXJIYW5kbGVyKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLHRoaXMud2luZG93Rm9jdXNIYW5kbGVyKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7X3RoaXM0LnNjcm9sbFRvQWN0aXZlVGFiKCk7fSwwKTt9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpe2lmKHRoaXMuJGVsJiZ0aGlzLnVwZGF0ZSlPYmplY3QocmVzaXplX2V2ZW50X1sicmVtb3ZlUmVzaXplTGlzdGVuZXIiXSkodGhpcy4kZWwsdGhpcy51cGRhdGUpO2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLHRoaXMudmlzaWJpbGl0eUNoYW5nZUhhbmRsZXIpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJyx0aGlzLndpbmRvd0JsdXJIYW5kbGVyKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLHRoaXMud2luZG93Rm9jdXNIYW5kbGVyKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1uYXYudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY190YWJfbmF2dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXRhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWItbmF2LnZ1ZQp2YXIgdGFiX25hdl9yZW5kZXIsdGFiX25hdl9zdGF0aWNSZW5kZXJGbnM7Lyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciB0YWJfbmF2X2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX3RhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sdGFiX25hdl9yZW5kZXIsdGFiX25hdl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHRhYl9uYXZfYXBpO310YWJfbmF2X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvdGFicy9zcmMvdGFiLW5hdi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGFiX25hdj10YWJfbmF2X2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHRhYnN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsVGFicycsY29tcG9uZW50czp7VGFiTmF2OnRhYl9uYXZ9LHByb3BzOnt0eXBlOlN0cmluZyxhY3RpdmVOYW1lOlN0cmluZyxjbG9zYWJsZTpCb29sZWFuLGFkZGFibGU6Qm9vbGVhbix2YWx1ZTp7fSxlZGl0YWJsZTpCb29sZWFuLHRhYlBvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0Oid0b3AnfSxiZWZvcmVMZWF2ZTpGdW5jdGlvbixzdHJldGNoOkJvb2xlYW59LHByb3ZpZGU6ZnVuY3Rpb24gcHJvdmlkZSgpe3JldHVybntyb290VGFiczp0aGlzfTt9LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntjdXJyZW50TmFtZTp0aGlzLnZhbHVlfHx0aGlzLmFjdGl2ZU5hbWUscGFuZXM6W119O30sd2F0Y2g6e2FjdGl2ZU5hbWU6ZnVuY3Rpb24gYWN0aXZlTmFtZSh2YWx1ZSl7dGhpcy5zZXRDdXJyZW50TmFtZSh2YWx1ZSk7fSx2YWx1ZTpmdW5jdGlvbiB2YWx1ZShfdmFsdWUpe3RoaXMuc2V0Q3VycmVudE5hbWUoX3ZhbHVlKTt9LGN1cnJlbnROYW1lOmZ1bmN0aW9uIGN1cnJlbnROYW1lKHZhbHVlKXt2YXIgX3RoaXM9dGhpcztpZih0aGlzLiRyZWZzLm5hdil7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtfdGhpcy4kcmVmcy5uYXYuJG5leHRUaWNrKGZ1bmN0aW9uKF8pe190aGlzLiRyZWZzLm5hdi5zY3JvbGxUb0FjdGl2ZVRhYigpO30pO30pO319fSxtZXRob2RzOntjYWxjUGFuZUluc3RhbmNlczpmdW5jdGlvbiBjYWxjUGFuZUluc3RhbmNlcygpe3ZhciBfdGhpczI9dGhpczt2YXIgaXNGb3JjZVVwZGF0ZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMF06ZmFsc2U7aWYodGhpcy4kc2xvdHMuZGVmYXVsdCl7dmFyIHBhbmVTbG90cz10aGlzLiRzbG90cy5kZWZhdWx0LmZpbHRlcihmdW5jdGlvbih2bm9kZSl7cmV0dXJuIHZub2RlLnRhZyYmdm5vZGUuY29tcG9uZW50T3B0aW9ucyYmdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yLm9wdGlvbnMubmFtZT09PSdFbFRhYlBhbmUnO30pOy8vIHVwZGF0ZSBpbmRlZWQKdmFyIHBhbmVzPXBhbmVTbG90cy5tYXAoZnVuY3Rpb24oX3JlZil7dmFyIGNvbXBvbmVudEluc3RhbmNlPV9yZWYuY29tcG9uZW50SW5zdGFuY2U7cmV0dXJuIGNvbXBvbmVudEluc3RhbmNlO30pO3ZhciBwYW5lc0NoYW5nZWQ9IShwYW5lcy5sZW5ndGg9PT10aGlzLnBhbmVzLmxlbmd0aCYmcGFuZXMuZXZlcnkoZnVuY3Rpb24ocGFuZSxpbmRleCl7cmV0dXJuIHBhbmU9PT1fdGhpczIucGFuZXNbaW5kZXhdO30pKTtpZihpc0ZvcmNlVXBkYXRlfHxwYW5lc0NoYW5nZWQpe3RoaXMucGFuZXM9cGFuZXM7fX1lbHNlIGlmKHRoaXMucGFuZXMubGVuZ3RoIT09MCl7dGhpcy5wYW5lcz1bXTt9fSxoYW5kbGVUYWJDbGljazpmdW5jdGlvbiBoYW5kbGVUYWJDbGljayh0YWIsdGFiTmFtZSxldmVudCl7aWYodGFiLmRpc2FibGVkKXJldHVybjt0aGlzLnNldEN1cnJlbnROYW1lKHRhYk5hbWUpO3RoaXMuJGVtaXQoJ3RhYi1jbGljaycsdGFiLGV2ZW50KTt9LGhhbmRsZVRhYlJlbW92ZTpmdW5jdGlvbiBoYW5kbGVUYWJSZW1vdmUocGFuZSxldil7aWYocGFuZS5kaXNhYmxlZClyZXR1cm47ZXYuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy4kZW1pdCgnZWRpdCcscGFuZS5uYW1lLCdyZW1vdmUnKTt0aGlzLiRlbWl0KCd0YWItcmVtb3ZlJyxwYW5lLm5hbWUpO30saGFuZGxlVGFiQWRkOmZ1bmN0aW9uIGhhbmRsZVRhYkFkZCgpe3RoaXMuJGVtaXQoJ2VkaXQnLG51bGwsJ2FkZCcpO3RoaXMuJGVtaXQoJ3RhYi1hZGQnKTt9LHNldEN1cnJlbnROYW1lOmZ1bmN0aW9uIHNldEN1cnJlbnROYW1lKHZhbHVlKXt2YXIgX3RoaXMzPXRoaXM7dmFyIGNoYW5nZUN1cnJlbnROYW1lPWZ1bmN0aW9uIGNoYW5nZUN1cnJlbnROYW1lKCl7X3RoaXMzLmN1cnJlbnROYW1lPXZhbHVlO190aGlzMy4kZW1pdCgnaW5wdXQnLHZhbHVlKTt9O2lmKHRoaXMuY3VycmVudE5hbWUhPT12YWx1ZSYmdGhpcy5iZWZvcmVMZWF2ZSl7dmFyIGJlZm9yZT10aGlzLmJlZm9yZUxlYXZlKHZhbHVlLHRoaXMuY3VycmVudE5hbWUpO2lmKGJlZm9yZSYmYmVmb3JlLnRoZW4pe2JlZm9yZS50aGVuKGZ1bmN0aW9uKCl7Y2hhbmdlQ3VycmVudE5hbWUoKTtfdGhpczMuJHJlZnMubmF2JiZfdGhpczMuJHJlZnMubmF2LnJlbW92ZUZvY3VzKCk7fSxmdW5jdGlvbigpey8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvcHVsbC8xNDgxNgovLyBpZ25vcmUgcHJvbWlzZSByZWplY3Rpb24gaW4gYGJlZm9yZS1sZWF2ZWAgaG9vawp9KTt9ZWxzZSBpZihiZWZvcmUhPT1mYWxzZSl7Y2hhbmdlQ3VycmVudE5hbWUoKTt9fWVsc2V7Y2hhbmdlQ3VycmVudE5hbWUoKTt9fX0scmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihoKXt2YXIgX3JlZjI7dmFyIHR5cGU9dGhpcy50eXBlLGhhbmRsZVRhYkNsaWNrPXRoaXMuaGFuZGxlVGFiQ2xpY2ssaGFuZGxlVGFiUmVtb3ZlPXRoaXMuaGFuZGxlVGFiUmVtb3ZlLGhhbmRsZVRhYkFkZD10aGlzLmhhbmRsZVRhYkFkZCxjdXJyZW50TmFtZT10aGlzLmN1cnJlbnROYW1lLHBhbmVzPXRoaXMucGFuZXMsZWRpdGFibGU9dGhpcy5lZGl0YWJsZSxhZGRhYmxlPXRoaXMuYWRkYWJsZSx0YWJQb3NpdGlvbj10aGlzLnRhYlBvc2l0aW9uLHN0cmV0Y2g9dGhpcy5zdHJldGNoO3ZhciBuZXdCdXR0b249ZWRpdGFibGV8fGFkZGFibGU/aCgnc3BhbicseydjbGFzcyc6J2VsLXRhYnNfX25ldy10YWInLG9uOnsnY2xpY2snOmhhbmRsZVRhYkFkZCwna2V5ZG93bic6ZnVuY3Rpb24ga2V5ZG93bihldil7aWYoZXYua2V5Q29kZT09PTEzKXtoYW5kbGVUYWJBZGQoKTt9fX0sYXR0cnM6e3RhYmluZGV4OicwJ319LFtoKCdpJyx7J2NsYXNzJzonZWwtaWNvbi1wbHVzJ30pXSk6bnVsbDt2YXIgbmF2RGF0YT17cHJvcHM6e2N1cnJlbnROYW1lOmN1cnJlbnROYW1lLG9uVGFiQ2xpY2s6aGFuZGxlVGFiQ2xpY2ssb25UYWJSZW1vdmU6aGFuZGxlVGFiUmVtb3ZlLGVkaXRhYmxlOmVkaXRhYmxlLHR5cGU6dHlwZSxwYW5lczpwYW5lcyxzdHJldGNoOnN0cmV0Y2h9LHJlZjonbmF2J307dmFyIGhlYWRlcj1oKCdkaXYnLHsnY2xhc3MnOlsnZWwtdGFic19faGVhZGVyJywnaXMtJyt0YWJQb3NpdGlvbl19LFtuZXdCdXR0b24saCgndGFiLW5hdicsbmF2RGF0YSldKTt2YXIgcGFuZWxzPWgoJ2RpdicseydjbGFzcyc6J2VsLXRhYnNfX2NvbnRlbnQnfSxbdGhpcy4kc2xvdHMuZGVmYXVsdF0pO3JldHVybiBoKCdkaXYnLHsnY2xhc3MnOihfcmVmMj17J2VsLXRhYnMnOnRydWUsJ2VsLXRhYnMtLWNhcmQnOnR5cGU9PT0nY2FyZCd9LF9yZWYyWydlbC10YWJzLS0nK3RhYlBvc2l0aW9uXT10cnVlLF9yZWYyWydlbC10YWJzLS1ib3JkZXItY2FyZCddPXR5cGU9PT0nYm9yZGVyLWNhcmQnLF9yZWYyKX0sW3RhYlBvc2l0aW9uIT09J2JvdHRvbSc/W2hlYWRlcixwYW5lbHNdOltwYW5lbHMsaGVhZGVyXV0pO30sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7aWYoIXRoaXMuY3VycmVudE5hbWUpe3RoaXMuc2V0Q3VycmVudE5hbWUoJzAnKTt9dGhpcy4kb24oJ3RhYi1uYXYtdXBkYXRlJyx0aGlzLmNhbGNQYW5lSW5zdGFuY2VzLmJpbmQobnVsbCx0cnVlKSk7fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt0aGlzLmNhbGNQYW5lSW5zdGFuY2VzKCk7fSx1cGRhdGVkOmZ1bmN0aW9uIHVwZGF0ZWQoKXt0aGlzLmNhbGNQYW5lSW5zdGFuY2VzKCk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWJzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfdGFic3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz10YWJzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFicy9zcmMvdGFicy52dWUKdmFyIHRhYnNfcmVuZGVyLHRhYnNfc3RhdGljUmVuZGVyRm5zOy8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgdGFic19jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY190YWJzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHRhYnNfcmVuZGVyLHRhYnNfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciB0YWJzX2FwaTt9dGFic19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3RhYnMvc3JjL3RhYnMudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHRhYnM9dGFic19jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi90YWJzLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHRhYnMubmFtZSx0YWJzKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfdGFicz10YWJzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFicy9zcmMvdGFiLXBhbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTkxNDVhMDcwJgp2YXIgdGFiX3BhbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF85MTQ1YTA3MF9yZW5kZXI9ZnVuY3Rpb24gdGFiX3BhbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF85MTQ1YTA3MF9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4hX3ZtLmxhenl8fF92bS5sb2FkZWR8fF92bS5hY3RpdmU/X2MoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS5hY3RpdmUsZXhwcmVzc2lvbjoiYWN0aXZlIn1dLHN0YXRpY0NsYXNzOiJlbC10YWItcGFuZSIsYXR0cnM6e3JvbGU6InRhYnBhbmVsIiwiYXJpYS1oaWRkZW4iOiFfdm0uYWN0aXZlLGlkOiJwYW5lLSIrX3ZtLnBhbmVOYW1lLCJhcmlhLWxhYmVsbGVkYnkiOiJ0YWItIitfdm0ucGFuZU5hbWV9fSxbX3ZtLl90KCJkZWZhdWx0IildLDIpOl92bS5fZSgpO307dmFyIHRhYl9wYW5ldnVlX3R5cGVfdGVtcGxhdGVfaWRfOTE0NWEwNzBfc3RhdGljUmVuZGVyRm5zPVtdO3RhYl9wYW5ldnVlX3R5cGVfdGVtcGxhdGVfaWRfOTE0NWEwNzBfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1wYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05MTQ1YTA3MCYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFicy9zcmMvdGFiLXBhbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHRhYl9wYW5ldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFRhYlBhbmUnLGNvbXBvbmVudE5hbWU6J0VsVGFiUGFuZScscHJvcHM6e2xhYmVsOlN0cmluZyxsYWJlbENvbnRlbnQ6RnVuY3Rpb24sbmFtZTpTdHJpbmcsY2xvc2FibGU6Qm9vbGVhbixkaXNhYmxlZDpCb29sZWFuLGxhenk6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2luZGV4Om51bGwsbG9hZGVkOmZhbHNlfTt9LGNvbXB1dGVkOntpc0Nsb3NhYmxlOmZ1bmN0aW9uIGlzQ2xvc2FibGUoKXtyZXR1cm4gdGhpcy5jbG9zYWJsZXx8dGhpcy4kcGFyZW50LmNsb3NhYmxlO30sYWN0aXZlOmZ1bmN0aW9uIGFjdGl2ZSgpe3ZhciBhY3RpdmU9dGhpcy4kcGFyZW50LmN1cnJlbnROYW1lPT09KHRoaXMubmFtZXx8dGhpcy5pbmRleCk7aWYoYWN0aXZlKXt0aGlzLmxvYWRlZD10cnVlO31yZXR1cm4gYWN0aXZlO30scGFuZU5hbWU6ZnVuY3Rpb24gcGFuZU5hbWUoKXtyZXR1cm4gdGhpcy5uYW1lfHx0aGlzLmluZGV4O319LHVwZGF0ZWQ6ZnVuY3Rpb24gdXBkYXRlZCgpe3RoaXMuJHBhcmVudC4kZW1pdCgndGFiLW5hdi11cGRhdGUnKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1wYW5lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfdGFiX3BhbmV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189dGFiX3BhbmV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWItcGFuZS52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciB0YWJfcGFuZV9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY190YWJfcGFuZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyx0YWJfcGFuZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzkxNDVhMDcwX3JlbmRlcix0YWJfcGFuZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzkxNDVhMDcwX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgdGFiX3BhbmVfYXBpO310YWJfcGFuZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3RhYnMvc3JjL3RhYi1wYW5lLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0YWJfcGFuZT10YWJfcGFuZV9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYi1wYW5lL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovdGFiX3BhbmUuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQodGFiX3BhbmUubmFtZSx0YWJfcGFuZSk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3RhYl9wYW5lPXRhYl9wYW5lOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhZy9zcmMvdGFnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0YWd2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsVGFnJyxwcm9wczp7dGV4dDpTdHJpbmcsY2xvc2FibGU6Qm9vbGVhbix0eXBlOlN0cmluZyxoaXQ6Qm9vbGVhbixkaXNhYmxlVHJhbnNpdGlvbnM6Qm9vbGVhbixjb2xvcjpTdHJpbmcsc2l6ZTpTdHJpbmcsZWZmZWN0Ont0eXBlOlN0cmluZyxkZWZhdWx0OidsaWdodCcsdmFsaWRhdG9yOmZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpe3JldHVyblsnZGFyaycsJ2xpZ2h0JywncGxhaW4nXS5pbmRleE9mKHZhbCkhPT0tMTt9fX0sbWV0aG9kczp7aGFuZGxlQ2xvc2U6ZnVuY3Rpb24gaGFuZGxlQ2xvc2UoZXZlbnQpe2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuJGVtaXQoJ2Nsb3NlJyxldmVudCk7fSxoYW5kbGVDbGljazpmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCl7dGhpcy4kZW1pdCgnY2xpY2snLGV2ZW50KTt9fSxjb21wdXRlZDp7dGFnU2l6ZTpmdW5jdGlvbiB0YWdTaXplKCl7cmV0dXJuIHRoaXMuc2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplO319LHJlbmRlcjpmdW5jdGlvbiByZW5kZXIoaCl7dmFyIHR5cGU9dGhpcy50eXBlLHRhZ1NpemU9dGhpcy50YWdTaXplLGhpdD10aGlzLmhpdCxlZmZlY3Q9dGhpcy5lZmZlY3Q7dmFyIGNsYXNzZXM9WydlbC10YWcnLHR5cGU/J2VsLXRhZy0tJyt0eXBlOicnLHRhZ1NpemU/J2VsLXRhZy0tJyt0YWdTaXplOicnLGVmZmVjdD8nZWwtdGFnLS0nK2VmZmVjdDonJyxoaXQmJidpcy1oaXQnXTt2YXIgdGFnRWw9aCgnc3BhbicseydjbGFzcyc6Y2xhc3NlcyxzdHlsZTp7YmFja2dyb3VuZENvbG9yOnRoaXMuY29sb3J9LG9uOnsnY2xpY2snOnRoaXMuaGFuZGxlQ2xpY2t9fSxbdGhpcy4kc2xvdHMuZGVmYXVsdCx0aGlzLmNsb3NhYmxlJiZoKCdpJyx7J2NsYXNzJzonZWwtdGFnX19jbG9zZSBlbC1pY29uLWNsb3NlJyxvbjp7J2NsaWNrJzp0aGlzLmhhbmRsZUNsb3NlfX0pXSk7cmV0dXJuIHRoaXMuZGlzYWJsZVRyYW5zaXRpb25zP3RhZ0VsOmgoJ3RyYW5zaXRpb24nLHthdHRyczp7bmFtZTonZWwtem9vbS1pbi1jZW50ZXInfX0sW3RhZ0VsXSk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWcvc3JjL3RhZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3RhZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz10YWd2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWcvc3JjL3RhZy52dWUKdmFyIHRhZ19yZW5kZXIsdGFnX3N0YXRpY1JlbmRlckZuczsvKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHRhZ19jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY190YWd2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sdGFnX3JlbmRlcix0YWdfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciB0YWdfYXBpO310YWdfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90YWcvc3JjL3RhZy52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGFnPXRhZ19jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhZy9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3RhZy5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudCh0YWcubmFtZSx0YWcpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc190YWc9dGFnOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTQ3NTc1YTYmCnZhciB0cmVldnVlX3R5cGVfdGVtcGxhdGVfaWRfNTQ3NTc1YTZfcmVuZGVyPWZ1bmN0aW9uIHRyZWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF81NDc1NzVhNl9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10cmVlIixjbGFzczp7ImVsLXRyZWUtLWhpZ2hsaWdodC1jdXJyZW50Ijpfdm0uaGlnaGxpZ2h0Q3VycmVudCwiaXMtZHJhZ2dpbmciOiEhX3ZtLmRyYWdTdGF0ZS5kcmFnZ2luZ05vZGUsImlzLWRyb3Atbm90LWFsbG93IjohX3ZtLmRyYWdTdGF0ZS5hbGxvd0Ryb3AsImlzLWRyb3AtaW5uZXIiOl92bS5kcmFnU3RhdGUuZHJvcFR5cGU9PT0iaW5uZXIifSxhdHRyczp7cm9sZToidHJlZSJ9fSxbX3ZtLl9sKF92bS5yb290LmNoaWxkTm9kZXMsZnVuY3Rpb24oY2hpbGQpe3JldHVybiBfYygiZWwtdHJlZS1ub2RlIix7a2V5Ol92bS5nZXROb2RlS2V5KGNoaWxkKSxhdHRyczp7bm9kZTpjaGlsZCxwcm9wczpfdm0ucHJvcHMsInJlbmRlci1hZnRlci1leHBhbmQiOl92bS5yZW5kZXJBZnRlckV4cGFuZCwic2hvdy1jaGVja2JveCI6X3ZtLnNob3dDaGVja2JveCwicmVuZGVyLWNvbnRlbnQiOl92bS5yZW5kZXJDb250ZW50fSxvbjp7Im5vZGUtZXhwYW5kIjpfdm0uaGFuZGxlTm9kZUV4cGFuZH19KTt9KSxfdm0uaXNFbXB0eT9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRyZWVfX2VtcHR5LWJsb2NrIn0sW19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXRyZWVfX2VtcHR5LXRleHQifSxbX3ZtLl92KF92bS5fcyhfdm0uZW1wdHlUZXh0KSldKV0pOl92bS5fZSgpLF9jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uZHJhZ1N0YXRlLnNob3dEcm9wSW5kaWNhdG9yLGV4cHJlc3Npb246ImRyYWdTdGF0ZS5zaG93RHJvcEluZGljYXRvciJ9XSxyZWY6ImRyb3BJbmRpY2F0b3IiLHN0YXRpY0NsYXNzOiJlbC10cmVlX19kcm9wLWluZGljYXRvciJ9KV0sMik7fTt2YXIgdHJlZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0NzU3NWE2X3N0YXRpY1JlbmRlckZucz1bXTt0cmVldnVlX3R5cGVfdGVtcGxhdGVfaWRfNTQ3NTc1YTZfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyZWUvc3JjL3RyZWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU0NzU3NWE2JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyZWUvc3JjL21vZGVsL3V0aWwuanMKdmFyIE5PREVfS0VZPSckdHJlZU5vZGVJZCc7dmFyIG1hcmtOb2RlRGF0YT1mdW5jdGlvbiBtYXJrTm9kZURhdGEobm9kZSxkYXRhKXtpZighZGF0YXx8ZGF0YVtOT0RFX0tFWV0pcmV0dXJuO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRhLE5PREVfS0VZLHt2YWx1ZTpub2RlLmlkLGVudW1lcmFibGU6ZmFsc2UsY29uZmlndXJhYmxlOmZhbHNlLHdyaXRhYmxlOmZhbHNlfSk7fTt2YXIgdXRpbF9nZXROb2RlS2V5PWZ1bmN0aW9uIGdldE5vZGVLZXkoa2V5LGRhdGEpe2lmKCFrZXkpcmV0dXJuIGRhdGFbTk9ERV9LRVldO3JldHVybiBkYXRhW2tleV07fTt2YXIgZmluZE5lYXJlc3RDb21wb25lbnQ9ZnVuY3Rpb24gZmluZE5lYXJlc3RDb21wb25lbnQoZWxlbWVudCxjb21wb25lbnROYW1lKXt2YXIgdGFyZ2V0PWVsZW1lbnQ7d2hpbGUodGFyZ2V0JiZ0YXJnZXQudGFnTmFtZSE9PSdCT0RZJyl7aWYodGFyZ2V0Ll9fdnVlX18mJnRhcmdldC5fX3Z1ZV9fLiRvcHRpb25zLm5hbWU9PT1jb21wb25lbnROYW1lKXtyZXR1cm4gdGFyZ2V0Ll9fdnVlX187fXRhcmdldD10YXJnZXQucGFyZW50Tm9kZTt9cmV0dXJuIG51bGw7fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyZWUvc3JjL21vZGVsL25vZGUuanMKdmFyIF9jcmVhdGVDbGFzcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fGZhbHNlO2Rlc2NyaXB0b3IuY29uZmlndXJhYmxlPXRydWU7aWYoInZhbHVlImluIGRlc2NyaXB0b3IpZGVzY3JpcHRvci53cml0YWJsZT10cnVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsZGVzY3JpcHRvci5rZXksZGVzY3JpcHRvcik7fX1yZXR1cm4gZnVuY3Rpb24oQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQcm9wcyl7aWYocHJvdG9Qcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSxwcm90b1Byb3BzKTtpZihzdGF0aWNQcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLHN0YXRpY1Byb3BzKTtyZXR1cm4gQ29uc3RydWN0b3I7fTt9KCk7ZnVuY3Rpb24gbm9kZV9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7fX12YXIgZ2V0Q2hpbGRTdGF0ZT1mdW5jdGlvbiBnZXRDaGlsZFN0YXRlKG5vZGUpe3ZhciBhbGw9dHJ1ZTt2YXIgbm9uZT10cnVlO3ZhciBhbGxXaXRob3V0RGlzYWJsZT10cnVlO2Zvcih2YXIgaT0wLGo9bm9kZS5sZW5ndGg7aTxqO2krKyl7dmFyIG49bm9kZVtpXTtpZihuLmNoZWNrZWQhPT10cnVlfHxuLmluZGV0ZXJtaW5hdGUpe2FsbD1mYWxzZTtpZighbi5kaXNhYmxlZCl7YWxsV2l0aG91dERpc2FibGU9ZmFsc2U7fX1pZihuLmNoZWNrZWQhPT1mYWxzZXx8bi5pbmRldGVybWluYXRlKXtub25lPWZhbHNlO319cmV0dXJue2FsbDphbGwsbm9uZTpub25lLGFsbFdpdGhvdXREaXNhYmxlOmFsbFdpdGhvdXREaXNhYmxlLGhhbGY6IWFsbCYmIW5vbmV9O307dmFyIHJlSW5pdENoZWNrZWQ9ZnVuY3Rpb24gcmVJbml0Q2hlY2tlZChub2RlKXtpZihub2RlLmNoaWxkTm9kZXMubGVuZ3RoPT09MClyZXR1cm47dmFyIF9nZXRDaGlsZFN0YXRlPWdldENoaWxkU3RhdGUobm9kZS5jaGlsZE5vZGVzKSxhbGw9X2dldENoaWxkU3RhdGUuYWxsLG5vbmU9X2dldENoaWxkU3RhdGUubm9uZSxoYWxmPV9nZXRDaGlsZFN0YXRlLmhhbGY7aWYoYWxsKXtub2RlLmNoZWNrZWQ9dHJ1ZTtub2RlLmluZGV0ZXJtaW5hdGU9ZmFsc2U7fWVsc2UgaWYoaGFsZil7bm9kZS5jaGVja2VkPWZhbHNlO25vZGUuaW5kZXRlcm1pbmF0ZT10cnVlO31lbHNlIGlmKG5vbmUpe25vZGUuY2hlY2tlZD1mYWxzZTtub2RlLmluZGV0ZXJtaW5hdGU9ZmFsc2U7fXZhciBwYXJlbnQ9bm9kZS5wYXJlbnQ7aWYoIXBhcmVudHx8cGFyZW50LmxldmVsPT09MClyZXR1cm47aWYoIW5vZGUuc3RvcmUuY2hlY2tTdHJpY3RseSl7cmVJbml0Q2hlY2tlZChwYXJlbnQpO319O3ZhciBnZXRQcm9wZXJ0eUZyb21EYXRhPWZ1bmN0aW9uIGdldFByb3BlcnR5RnJvbURhdGEobm9kZSxwcm9wKXt2YXIgcHJvcHM9bm9kZS5zdG9yZS5wcm9wczt2YXIgZGF0YT1ub2RlLmRhdGF8fHt9O3ZhciBjb25maWc9cHJvcHNbcHJvcF07aWYodHlwZW9mIGNvbmZpZz09PSdmdW5jdGlvbicpe3JldHVybiBjb25maWcoZGF0YSxub2RlKTt9ZWxzZSBpZih0eXBlb2YgY29uZmlnPT09J3N0cmluZycpe3JldHVybiBkYXRhW2NvbmZpZ107fWVsc2UgaWYodHlwZW9mIGNvbmZpZz09PSd1bmRlZmluZWQnKXt2YXIgZGF0YVByb3A9ZGF0YVtwcm9wXTtyZXR1cm4gZGF0YVByb3A9PT11bmRlZmluZWQ/Jyc6ZGF0YVByb3A7fX07dmFyIG5vZGVJZFNlZWQ9MDt2YXIgbm9kZV9Ob2RlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTm9kZShvcHRpb25zKXtub2RlX2NsYXNzQ2FsbENoZWNrKHRoaXMsTm9kZSk7dGhpcy5pZD1ub2RlSWRTZWVkKys7dGhpcy50ZXh0PW51bGw7dGhpcy5jaGVja2VkPWZhbHNlO3RoaXMuaW5kZXRlcm1pbmF0ZT1mYWxzZTt0aGlzLmRhdGE9bnVsbDt0aGlzLmV4cGFuZGVkPWZhbHNlO3RoaXMucGFyZW50PW51bGw7dGhpcy52aXNpYmxlPXRydWU7dGhpcy5pc0N1cnJlbnQ9ZmFsc2U7Zm9yKHZhciBuYW1lIGluIG9wdGlvbnMpe2lmKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpe3RoaXNbbmFtZV09b3B0aW9uc1tuYW1lXTt9fS8vIGludGVybmFsCnRoaXMubGV2ZWw9MDt0aGlzLmxvYWRlZD1mYWxzZTt0aGlzLmNoaWxkTm9kZXM9W107dGhpcy5sb2FkaW5nPWZhbHNlO2lmKHRoaXMucGFyZW50KXt0aGlzLmxldmVsPXRoaXMucGFyZW50LmxldmVsKzE7fXZhciBzdG9yZT10aGlzLnN0b3JlO2lmKCFzdG9yZSl7dGhyb3cgbmV3IEVycm9yKCdbTm9kZV1zdG9yZSBpcyByZXF1aXJlZCEnKTt9c3RvcmUucmVnaXN0ZXJOb2RlKHRoaXMpO3ZhciBwcm9wcz1zdG9yZS5wcm9wcztpZihwcm9wcyYmdHlwZW9mIHByb3BzLmlzTGVhZiE9PSd1bmRlZmluZWQnKXt2YXIgaXNMZWFmPWdldFByb3BlcnR5RnJvbURhdGEodGhpcywnaXNMZWFmJyk7aWYodHlwZW9mIGlzTGVhZj09PSdib29sZWFuJyl7dGhpcy5pc0xlYWZCeVVzZXI9aXNMZWFmO319aWYoc3RvcmUubGF6eSE9PXRydWUmJnRoaXMuZGF0YSl7dGhpcy5zZXREYXRhKHRoaXMuZGF0YSk7aWYoc3RvcmUuZGVmYXVsdEV4cGFuZEFsbCl7dGhpcy5leHBhbmRlZD10cnVlO319ZWxzZSBpZih0aGlzLmxldmVsPjAmJnN0b3JlLmxhenkmJnN0b3JlLmRlZmF1bHRFeHBhbmRBbGwpe3RoaXMuZXhwYW5kKCk7fWlmKCFBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpe21hcmtOb2RlRGF0YSh0aGlzLHRoaXMuZGF0YSk7fWlmKCF0aGlzLmRhdGEpcmV0dXJuO3ZhciBkZWZhdWx0RXhwYW5kZWRLZXlzPXN0b3JlLmRlZmF1bHRFeHBhbmRlZEtleXM7dmFyIGtleT1zdG9yZS5rZXk7aWYoa2V5JiZkZWZhdWx0RXhwYW5kZWRLZXlzJiZkZWZhdWx0RXhwYW5kZWRLZXlzLmluZGV4T2YodGhpcy5rZXkpIT09LTEpe3RoaXMuZXhwYW5kKG51bGwsc3RvcmUuYXV0b0V4cGFuZFBhcmVudCk7fWlmKGtleSYmc3RvcmUuY3VycmVudE5vZGVLZXkhPT11bmRlZmluZWQmJnRoaXMua2V5PT09c3RvcmUuY3VycmVudE5vZGVLZXkpe3N0b3JlLmN1cnJlbnROb2RlPXRoaXM7c3RvcmUuY3VycmVudE5vZGUuaXNDdXJyZW50PXRydWU7fWlmKHN0b3JlLmxhenkpe3N0b3JlLl9pbml0RGVmYXVsdENoZWNrZWROb2RlKHRoaXMpO310aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpO31Ob2RlLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uIHNldERhdGEoZGF0YSl7aWYoIUFycmF5LmlzQXJyYXkoZGF0YSkpe21hcmtOb2RlRGF0YSh0aGlzLGRhdGEpO310aGlzLmRhdGE9ZGF0YTt0aGlzLmNoaWxkTm9kZXM9W107dmFyIGNoaWxkcmVuPXZvaWQgMDtpZih0aGlzLmxldmVsPT09MCYmdGhpcy5kYXRhIGluc3RhbmNlb2YgQXJyYXkpe2NoaWxkcmVuPXRoaXMuZGF0YTt9ZWxzZXtjaGlsZHJlbj1nZXRQcm9wZXJ0eUZyb21EYXRhKHRoaXMsJ2NoaWxkcmVuJyl8fFtdO31mb3IodmFyIGk9MCxqPWNoaWxkcmVuLmxlbmd0aDtpPGo7aSsrKXt0aGlzLmluc2VydENoaWxkKHtkYXRhOmNoaWxkcmVuW2ldfSk7fX07Tm9kZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24gY29udGFpbnModGFyZ2V0KXt2YXIgZGVlcD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMV06dHJ1ZTt2YXIgd2Fsaz1mdW5jdGlvbiB3YWxrKHBhcmVudCl7dmFyIGNoaWxkcmVuPXBhcmVudC5jaGlsZE5vZGVzfHxbXTt2YXIgcmVzdWx0PWZhbHNlO2Zvcih2YXIgaT0wLGo9Y2hpbGRyZW4ubGVuZ3RoO2k8ajtpKyspe3ZhciBjaGlsZD1jaGlsZHJlbltpXTtpZihjaGlsZD09PXRhcmdldHx8ZGVlcCYmd2FsayhjaGlsZCkpe3Jlc3VsdD10cnVlO2JyZWFrO319cmV0dXJuIHJlc3VsdDt9O3JldHVybiB3YWxrKHRoaXMpO307Tm9kZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uIHJlbW92ZSgpe3ZhciBwYXJlbnQ9dGhpcy5wYXJlbnQ7aWYocGFyZW50KXtwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7fX07Tm9kZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGQ9ZnVuY3Rpb24gaW5zZXJ0Q2hpbGQoY2hpbGQsaW5kZXgsYmF0Y2gpe2lmKCFjaGlsZCl0aHJvdyBuZXcgRXJyb3IoJ2luc2VydENoaWxkIGVycm9yOiBjaGlsZCBpcyByZXF1aXJlZC4nKTtpZighKGNoaWxkIGluc3RhbmNlb2YgTm9kZSkpe2lmKCFiYXRjaCl7dmFyIGNoaWxkcmVuPXRoaXMuZ2V0Q2hpbGRyZW4odHJ1ZSk7aWYoY2hpbGRyZW4uaW5kZXhPZihjaGlsZC5kYXRhKT09PS0xKXtpZih0eXBlb2YgaW5kZXg9PT0ndW5kZWZpbmVkJ3x8aW5kZXg8MCl7Y2hpbGRyZW4ucHVzaChjaGlsZC5kYXRhKTt9ZWxzZXtjaGlsZHJlbi5zcGxpY2UoaW5kZXgsMCxjaGlsZC5kYXRhKTt9fX1tZXJnZV9kZWZhdWx0KCkoY2hpbGQse3BhcmVudDp0aGlzLHN0b3JlOnRoaXMuc3RvcmV9KTtjaGlsZD1uZXcgTm9kZShjaGlsZCk7fWNoaWxkLmxldmVsPXRoaXMubGV2ZWwrMTtpZih0eXBlb2YgaW5kZXg9PT0ndW5kZWZpbmVkJ3x8aW5kZXg8MCl7dGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGQpO31lbHNle3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UoaW5kZXgsMCxjaGlsZCk7fXRoaXMudXBkYXRlTGVhZlN0YXRlKCk7fTtOb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKGNoaWxkLHJlZil7dmFyIGluZGV4PXZvaWQgMDtpZihyZWYpe2luZGV4PXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHJlZik7fXRoaXMuaW5zZXJ0Q2hpbGQoY2hpbGQsaW5kZXgpO307Tm9kZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIoY2hpbGQscmVmKXt2YXIgaW5kZXg9dm9pZCAwO2lmKHJlZil7aW5kZXg9dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YocmVmKTtpZihpbmRleCE9PS0xKWluZGV4Kz0xO310aGlzLmluc2VydENoaWxkKGNoaWxkLGluZGV4KTt9O05vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uIHJlbW92ZUNoaWxkKGNoaWxkKXt2YXIgY2hpbGRyZW49dGhpcy5nZXRDaGlsZHJlbigpfHxbXTt2YXIgZGF0YUluZGV4PWNoaWxkcmVuLmluZGV4T2YoY2hpbGQuZGF0YSk7aWYoZGF0YUluZGV4Pi0xKXtjaGlsZHJlbi5zcGxpY2UoZGF0YUluZGV4LDEpO312YXIgaW5kZXg9dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoY2hpbGQpO2lmKGluZGV4Pi0xKXt0aGlzLnN0b3JlJiZ0aGlzLnN0b3JlLmRlcmVnaXN0ZXJOb2RlKGNoaWxkKTtjaGlsZC5wYXJlbnQ9bnVsbDt0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKGluZGV4LDEpO310aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpO307Tm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGRCeURhdGE9ZnVuY3Rpb24gcmVtb3ZlQ2hpbGRCeURhdGEoZGF0YSl7dmFyIHRhcmdldE5vZGU9bnVsbDtmb3IodmFyIGk9MDtpPHRoaXMuY2hpbGROb2Rlcy5sZW5ndGg7aSsrKXtpZih0aGlzLmNoaWxkTm9kZXNbaV0uZGF0YT09PWRhdGEpe3RhcmdldE5vZGU9dGhpcy5jaGlsZE5vZGVzW2ldO2JyZWFrO319aWYodGFyZ2V0Tm9kZSl7dGhpcy5yZW1vdmVDaGlsZCh0YXJnZXROb2RlKTt9fTtOb2RlLnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24gZXhwYW5kKGNhbGxiYWNrLGV4cGFuZFBhcmVudCl7dmFyIF90aGlzPXRoaXM7dmFyIGRvbmU9ZnVuY3Rpb24gZG9uZSgpe2lmKGV4cGFuZFBhcmVudCl7dmFyIHBhcmVudD1fdGhpcy5wYXJlbnQ7d2hpbGUocGFyZW50LmxldmVsPjApe3BhcmVudC5leHBhbmRlZD10cnVlO3BhcmVudD1wYXJlbnQucGFyZW50O319X3RoaXMuZXhwYW5kZWQ9dHJ1ZTtpZihjYWxsYmFjayljYWxsYmFjaygpO307aWYodGhpcy5zaG91bGRMb2FkRGF0YSgpKXt0aGlzLmxvYWREYXRhKGZ1bmN0aW9uKGRhdGEpe2lmKGRhdGEgaW5zdGFuY2VvZiBBcnJheSl7aWYoX3RoaXMuY2hlY2tlZCl7X3RoaXMuc2V0Q2hlY2tlZCh0cnVlLHRydWUpO31lbHNlIGlmKCFfdGhpcy5zdG9yZS5jaGVja1N0cmljdGx5KXtyZUluaXRDaGVja2VkKF90aGlzKTt9ZG9uZSgpO319KTt9ZWxzZXtkb25lKCk7fX07Tm9kZS5wcm90b3R5cGUuZG9DcmVhdGVDaGlsZHJlbj1mdW5jdGlvbiBkb0NyZWF0ZUNoaWxkcmVuKGFycmF5KXt2YXIgX3RoaXMyPXRoaXM7dmFyIGRlZmF1bHRQcm9wcz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMV06e307YXJyYXkuZm9yRWFjaChmdW5jdGlvbihpdGVtKXtfdGhpczIuaW5zZXJ0Q2hpbGQobWVyZ2VfZGVmYXVsdCgpKHtkYXRhOml0ZW19LGRlZmF1bHRQcm9wcyksdW5kZWZpbmVkLHRydWUpO30pO307Tm9kZS5wcm90b3R5cGUuY29sbGFwc2U9ZnVuY3Rpb24gY29sbGFwc2UoKXt0aGlzLmV4cGFuZGVkPWZhbHNlO307Tm9kZS5wcm90b3R5cGUuc2hvdWxkTG9hZERhdGE9ZnVuY3Rpb24gc2hvdWxkTG9hZERhdGEoKXtyZXR1cm4gdGhpcy5zdG9yZS5sYXp5PT09dHJ1ZSYmdGhpcy5zdG9yZS5sb2FkJiYhdGhpcy5sb2FkZWQ7fTtOb2RlLnByb3RvdHlwZS51cGRhdGVMZWFmU3RhdGU9ZnVuY3Rpb24gdXBkYXRlTGVhZlN0YXRlKCl7aWYodGhpcy5zdG9yZS5sYXp5PT09dHJ1ZSYmdGhpcy5sb2FkZWQhPT10cnVlJiZ0eXBlb2YgdGhpcy5pc0xlYWZCeVVzZXIhPT0ndW5kZWZpbmVkJyl7dGhpcy5pc0xlYWY9dGhpcy5pc0xlYWZCeVVzZXI7cmV0dXJuO312YXIgY2hpbGROb2Rlcz10aGlzLmNoaWxkTm9kZXM7aWYoIXRoaXMuc3RvcmUubGF6eXx8dGhpcy5zdG9yZS5sYXp5PT09dHJ1ZSYmdGhpcy5sb2FkZWQ9PT10cnVlKXt0aGlzLmlzTGVhZj0hY2hpbGROb2Rlc3x8Y2hpbGROb2Rlcy5sZW5ndGg9PT0wO3JldHVybjt9dGhpcy5pc0xlYWY9ZmFsc2U7fTtOb2RlLnByb3RvdHlwZS5zZXRDaGVja2VkPWZ1bmN0aW9uIHNldENoZWNrZWQodmFsdWUsZGVlcCxyZWN1cnNpb24scGFzc1ZhbHVlKXt2YXIgX3RoaXMzPXRoaXM7dGhpcy5pbmRldGVybWluYXRlPXZhbHVlPT09J2hhbGYnO3RoaXMuY2hlY2tlZD12YWx1ZT09PXRydWU7aWYodGhpcy5zdG9yZS5jaGVja1N0cmljdGx5KXJldHVybjtpZighKHRoaXMuc2hvdWxkTG9hZERhdGEoKSYmIXRoaXMuc3RvcmUuY2hlY2tEZXNjZW5kYW50cykpe3ZhciBfZ2V0Q2hpbGRTdGF0ZTI9Z2V0Q2hpbGRTdGF0ZSh0aGlzLmNoaWxkTm9kZXMpLGFsbD1fZ2V0Q2hpbGRTdGF0ZTIuYWxsLGFsbFdpdGhvdXREaXNhYmxlPV9nZXRDaGlsZFN0YXRlMi5hbGxXaXRob3V0RGlzYWJsZTtpZighdGhpcy5pc0xlYWYmJiFhbGwmJmFsbFdpdGhvdXREaXNhYmxlKXt0aGlzLmNoZWNrZWQ9ZmFsc2U7dmFsdWU9ZmFsc2U7fXZhciBoYW5kbGVEZXNjZW5kYW50cz1mdW5jdGlvbiBoYW5kbGVEZXNjZW5kYW50cygpe2lmKGRlZXApe3ZhciBjaGlsZE5vZGVzPV90aGlzMy5jaGlsZE5vZGVzO2Zvcih2YXIgaT0wLGo9Y2hpbGROb2Rlcy5sZW5ndGg7aTxqO2krKyl7dmFyIGNoaWxkPWNoaWxkTm9kZXNbaV07cGFzc1ZhbHVlPXBhc3NWYWx1ZXx8dmFsdWUhPT1mYWxzZTt2YXIgaXNDaGVjaz1jaGlsZC5kaXNhYmxlZD9jaGlsZC5jaGVja2VkOnBhc3NWYWx1ZTtjaGlsZC5zZXRDaGVja2VkKGlzQ2hlY2ssZGVlcCx0cnVlLHBhc3NWYWx1ZSk7fXZhciBfZ2V0Q2hpbGRTdGF0ZTM9Z2V0Q2hpbGRTdGF0ZShjaGlsZE5vZGVzKSxoYWxmPV9nZXRDaGlsZFN0YXRlMy5oYWxmLF9hbGw9X2dldENoaWxkU3RhdGUzLmFsbDtpZighX2FsbCl7X3RoaXMzLmNoZWNrZWQ9X2FsbDtfdGhpczMuaW5kZXRlcm1pbmF0ZT1oYWxmO319fTtpZih0aGlzLnNob3VsZExvYWREYXRhKCkpey8vIE9ubHkgd29yayBvbiBsYXp5IGxvYWQgZGF0YS4KdGhpcy5sb2FkRGF0YShmdW5jdGlvbigpe2hhbmRsZURlc2NlbmRhbnRzKCk7cmVJbml0Q2hlY2tlZChfdGhpczMpO30se2NoZWNrZWQ6dmFsdWUhPT1mYWxzZX0pO3JldHVybjt9ZWxzZXtoYW5kbGVEZXNjZW5kYW50cygpO319dmFyIHBhcmVudD10aGlzLnBhcmVudDtpZighcGFyZW50fHxwYXJlbnQubGV2ZWw9PT0wKXJldHVybjtpZighcmVjdXJzaW9uKXtyZUluaXRDaGVja2VkKHBhcmVudCk7fX07Tm9kZS5wcm90b3R5cGUuZ2V0Q2hpbGRyZW49ZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oKXt2YXIgZm9yY2VJbml0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTpmYWxzZTsvLyB0aGlzIGlzIGRhdGEKaWYodGhpcy5sZXZlbD09PTApcmV0dXJuIHRoaXMuZGF0YTt2YXIgZGF0YT10aGlzLmRhdGE7aWYoIWRhdGEpcmV0dXJuIG51bGw7dmFyIHByb3BzPXRoaXMuc3RvcmUucHJvcHM7dmFyIGNoaWxkcmVuPSdjaGlsZHJlbic7aWYocHJvcHMpe2NoaWxkcmVuPXByb3BzLmNoaWxkcmVufHwnY2hpbGRyZW4nO31pZihkYXRhW2NoaWxkcmVuXT09PXVuZGVmaW5lZCl7ZGF0YVtjaGlsZHJlbl09bnVsbDt9aWYoZm9yY2VJbml0JiYhZGF0YVtjaGlsZHJlbl0pe2RhdGFbY2hpbGRyZW5dPVtdO31yZXR1cm4gZGF0YVtjaGlsZHJlbl07fTtOb2RlLnByb3RvdHlwZS51cGRhdGVDaGlsZHJlbj1mdW5jdGlvbiB1cGRhdGVDaGlsZHJlbigpe3ZhciBfdGhpczQ9dGhpczt2YXIgbmV3RGF0YT10aGlzLmdldENoaWxkcmVuKCl8fFtdO3ZhciBvbGREYXRhPXRoaXMuY2hpbGROb2Rlcy5tYXAoZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUuZGF0YTt9KTt2YXIgbmV3RGF0YU1hcD17fTt2YXIgbmV3Tm9kZXM9W107bmV3RGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0saW5kZXgpe3ZhciBrZXk9aXRlbVtOT0RFX0tFWV07dmFyIGlzTm9kZUV4aXN0cz0hIWtleSYmT2JqZWN0KHV0aWxfWyJhcnJheUZpbmRJbmRleCJdKShvbGREYXRhLGZ1bmN0aW9uKGRhdGEpe3JldHVybiBkYXRhW05PREVfS0VZXT09PWtleTt9KT49MDtpZihpc05vZGVFeGlzdHMpe25ld0RhdGFNYXBba2V5XT17aW5kZXg6aW5kZXgsZGF0YTppdGVtfTt9ZWxzZXtuZXdOb2Rlcy5wdXNoKHtpbmRleDppbmRleCxkYXRhOml0ZW19KTt9fSk7aWYoIXRoaXMuc3RvcmUubGF6eSl7b2xkRGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2lmKCFuZXdEYXRhTWFwW2l0ZW1bTk9ERV9LRVldXSlfdGhpczQucmVtb3ZlQ2hpbGRCeURhdGEoaXRlbSk7fSk7fW5ld05vZGVzLmZvckVhY2goZnVuY3Rpb24oX3JlZil7dmFyIGluZGV4PV9yZWYuaW5kZXgsZGF0YT1fcmVmLmRhdGE7X3RoaXM0Lmluc2VydENoaWxkKHtkYXRhOmRhdGF9LGluZGV4KTt9KTt0aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpO307Tm9kZS5wcm90b3R5cGUubG9hZERhdGE9ZnVuY3Rpb24gbG9hZERhdGEoY2FsbGJhY2spe3ZhciBfdGhpczU9dGhpczt2YXIgZGVmYXVsdFByb3BzPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1sxXTp7fTtpZih0aGlzLnN0b3JlLmxhenk9PT10cnVlJiZ0aGlzLnN0b3JlLmxvYWQmJiF0aGlzLmxvYWRlZCYmKCF0aGlzLmxvYWRpbmd8fE9iamVjdC5rZXlzKGRlZmF1bHRQcm9wcykubGVuZ3RoKSl7dGhpcy5sb2FkaW5nPXRydWU7dmFyIHJlc29sdmU9ZnVuY3Rpb24gcmVzb2x2ZShjaGlsZHJlbil7X3RoaXM1LmxvYWRlZD10cnVlO190aGlzNS5sb2FkaW5nPWZhbHNlO190aGlzNS5jaGlsZE5vZGVzPVtdO190aGlzNS5kb0NyZWF0ZUNoaWxkcmVuKGNoaWxkcmVuLGRlZmF1bHRQcm9wcyk7X3RoaXM1LnVwZGF0ZUxlYWZTdGF0ZSgpO2lmKGNhbGxiYWNrKXtjYWxsYmFjay5jYWxsKF90aGlzNSxjaGlsZHJlbik7fX07dGhpcy5zdG9yZS5sb2FkKHRoaXMscmVzb2x2ZSk7fWVsc2V7aWYoY2FsbGJhY2spe2NhbGxiYWNrLmNhbGwodGhpcyk7fX19O19jcmVhdGVDbGFzcyhOb2RlLFt7a2V5OidsYWJlbCcsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiBnZXRQcm9wZXJ0eUZyb21EYXRhKHRoaXMsJ2xhYmVsJyk7fX0se2tleTona2V5JyxnZXQ6ZnVuY3Rpb24gZ2V0KCl7dmFyIG5vZGVLZXk9dGhpcy5zdG9yZS5rZXk7aWYodGhpcy5kYXRhKXJldHVybiB0aGlzLmRhdGFbbm9kZUtleV07cmV0dXJuIG51bGw7fX0se2tleTonZGlzYWJsZWQnLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gZ2V0UHJvcGVydHlGcm9tRGF0YSh0aGlzLCdkaXNhYmxlZCcpO319LHtrZXk6J25leHRTaWJsaW5nJyxnZXQ6ZnVuY3Rpb24gZ2V0KCl7dmFyIHBhcmVudD10aGlzLnBhcmVudDtpZihwYXJlbnQpe3ZhciBpbmRleD1wYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKHRoaXMpO2lmKGluZGV4Pi0xKXtyZXR1cm4gcGFyZW50LmNoaWxkTm9kZXNbaW5kZXgrMV07fX1yZXR1cm4gbnVsbDt9fSx7a2V5OidwcmV2aW91c1NpYmxpbmcnLGdldDpmdW5jdGlvbiBnZXQoKXt2YXIgcGFyZW50PXRoaXMucGFyZW50O2lmKHBhcmVudCl7dmFyIGluZGV4PXBhcmVudC5jaGlsZE5vZGVzLmluZGV4T2YodGhpcyk7aWYoaW5kZXg+LTEpe3JldHVybiBpbmRleD4wP3BhcmVudC5jaGlsZE5vZGVzW2luZGV4LTFdOm51bGw7fX1yZXR1cm4gbnVsbDt9fV0pO3JldHVybiBOb2RlO30oKTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIG1vZGVsX25vZGU9bm9kZV9Ob2RlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9zcmMvbW9kZWwvdHJlZS1zdG9yZS5qcwp2YXIgdHJlZV9zdG9yZV90eXBlb2Y9dHlwZW9mIFN5bWJvbD09PSJmdW5jdGlvbiImJl90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcik9PT0ic3ltYm9sIj9mdW5jdGlvbihvYmope3JldHVybiBfdHlwZW9mMihvYmopO306ZnVuY3Rpb24ob2JqKXtyZXR1cm4gb2JqJiZ0eXBlb2YgU3ltYm9sPT09ImZ1bmN0aW9uIiYmb2JqLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZvYmohPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOl90eXBlb2YyKG9iaik7fTtmdW5jdGlvbiB0cmVlX3N0b3JlX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTt9fXZhciB0cmVlX3N0b3JlX1RyZWVTdG9yZT1mdW5jdGlvbigpe2Z1bmN0aW9uIFRyZWVTdG9yZShvcHRpb25zKXt2YXIgX3RoaXM9dGhpczt0cmVlX3N0b3JlX2NsYXNzQ2FsbENoZWNrKHRoaXMsVHJlZVN0b3JlKTt0aGlzLmN1cnJlbnROb2RlPW51bGw7dGhpcy5jdXJyZW50Tm9kZUtleT1udWxsO2Zvcih2YXIgb3B0aW9uIGluIG9wdGlvbnMpe2lmKG9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSl7dGhpc1tvcHRpb25dPW9wdGlvbnNbb3B0aW9uXTt9fXRoaXMubm9kZXNNYXA9e307dGhpcy5yb290PW5ldyBtb2RlbF9ub2RlKHtkYXRhOnRoaXMuZGF0YSxzdG9yZTp0aGlzfSk7aWYodGhpcy5sYXp5JiZ0aGlzLmxvYWQpe3ZhciBsb2FkRm49dGhpcy5sb2FkO2xvYWRGbih0aGlzLnJvb3QsZnVuY3Rpb24oZGF0YSl7X3RoaXMucm9vdC5kb0NyZWF0ZUNoaWxkcmVuKGRhdGEpO190aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpO30pO31lbHNle3RoaXMuX2luaXREZWZhdWx0Q2hlY2tlZE5vZGVzKCk7fX1UcmVlU3RvcmUucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbiBmaWx0ZXIodmFsdWUpe3ZhciBmaWx0ZXJOb2RlTWV0aG9kPXRoaXMuZmlsdGVyTm9kZU1ldGhvZDt2YXIgbGF6eT10aGlzLmxhenk7dmFyIHRyYXZlcnNlPWZ1bmN0aW9uIHRyYXZlcnNlKG5vZGUpe3ZhciBjaGlsZE5vZGVzPW5vZGUucm9vdD9ub2RlLnJvb3QuY2hpbGROb2Rlczpub2RlLmNoaWxkTm9kZXM7Y2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXtjaGlsZC52aXNpYmxlPWZpbHRlck5vZGVNZXRob2QuY2FsbChjaGlsZCx2YWx1ZSxjaGlsZC5kYXRhLGNoaWxkKTt0cmF2ZXJzZShjaGlsZCk7fSk7aWYoIW5vZGUudmlzaWJsZSYmY2hpbGROb2Rlcy5sZW5ndGgpe3ZhciBhbGxIaWRkZW49dHJ1ZTthbGxIaWRkZW49IWNoaWxkTm9kZXMuc29tZShmdW5jdGlvbihjaGlsZCl7cmV0dXJuIGNoaWxkLnZpc2libGU7fSk7aWYobm9kZS5yb290KXtub2RlLnJvb3QudmlzaWJsZT1hbGxIaWRkZW49PT1mYWxzZTt9ZWxzZXtub2RlLnZpc2libGU9YWxsSGlkZGVuPT09ZmFsc2U7fX1pZighdmFsdWUpcmV0dXJuO2lmKG5vZGUudmlzaWJsZSYmIW5vZGUuaXNMZWFmJiYhbGF6eSlub2RlLmV4cGFuZCgpO307dHJhdmVyc2UodGhpcyk7fTtUcmVlU3RvcmUucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24gc2V0RGF0YShuZXdWYWwpe3ZhciBpbnN0YW5jZUNoYW5nZWQ9bmV3VmFsIT09dGhpcy5yb290LmRhdGE7aWYoaW5zdGFuY2VDaGFuZ2VkKXt0aGlzLnJvb3Quc2V0RGF0YShuZXdWYWwpO3RoaXMuX2luaXREZWZhdWx0Q2hlY2tlZE5vZGVzKCk7fWVsc2V7dGhpcy5yb290LnVwZGF0ZUNoaWxkcmVuKCk7fX07VHJlZVN0b3JlLnByb3RvdHlwZS5nZXROb2RlPWZ1bmN0aW9uIGdldE5vZGUoZGF0YSl7aWYoZGF0YSBpbnN0YW5jZW9mIG1vZGVsX25vZGUpcmV0dXJuIGRhdGE7dmFyIGtleT0odHlwZW9mIGRhdGE9PT0ndW5kZWZpbmVkJz8ndW5kZWZpbmVkJzp0cmVlX3N0b3JlX3R5cGVvZihkYXRhKSkhPT0nb2JqZWN0Jz9kYXRhOnV0aWxfZ2V0Tm9kZUtleSh0aGlzLmtleSxkYXRhKTtyZXR1cm4gdGhpcy5ub2Rlc01hcFtrZXldfHxudWxsO307VHJlZVN0b3JlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKGRhdGEscmVmRGF0YSl7dmFyIHJlZk5vZGU9dGhpcy5nZXROb2RlKHJlZkRhdGEpO3JlZk5vZGUucGFyZW50Lmluc2VydEJlZm9yZSh7ZGF0YTpkYXRhfSxyZWZOb2RlKTt9O1RyZWVTdG9yZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIoZGF0YSxyZWZEYXRhKXt2YXIgcmVmTm9kZT10aGlzLmdldE5vZGUocmVmRGF0YSk7cmVmTm9kZS5wYXJlbnQuaW5zZXJ0QWZ0ZXIoe2RhdGE6ZGF0YX0scmVmTm9kZSk7fTtUcmVlU3RvcmUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbiByZW1vdmUoZGF0YSl7dmFyIG5vZGU9dGhpcy5nZXROb2RlKGRhdGEpO2lmKG5vZGUmJm5vZGUucGFyZW50KXtpZihub2RlPT09dGhpcy5jdXJyZW50Tm9kZSl7dGhpcy5jdXJyZW50Tm9kZT1udWxsO31ub2RlLnBhcmVudC5yZW1vdmVDaGlsZChub2RlKTt9fTtUcmVlU3RvcmUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbiBhcHBlbmQoZGF0YSxwYXJlbnREYXRhKXt2YXIgcGFyZW50Tm9kZT1wYXJlbnREYXRhP3RoaXMuZ2V0Tm9kZShwYXJlbnREYXRhKTp0aGlzLnJvb3Q7aWYocGFyZW50Tm9kZSl7cGFyZW50Tm9kZS5pbnNlcnRDaGlsZCh7ZGF0YTpkYXRhfSk7fX07VHJlZVN0b3JlLnByb3RvdHlwZS5faW5pdERlZmF1bHRDaGVja2VkTm9kZXM9ZnVuY3Rpb24gX2luaXREZWZhdWx0Q2hlY2tlZE5vZGVzKCl7dmFyIF90aGlzMj10aGlzO3ZhciBkZWZhdWx0Q2hlY2tlZEtleXM9dGhpcy5kZWZhdWx0Q2hlY2tlZEtleXN8fFtdO3ZhciBub2Rlc01hcD10aGlzLm5vZGVzTWFwO2RlZmF1bHRDaGVja2VkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGNoZWNrZWRLZXkpe3ZhciBub2RlPW5vZGVzTWFwW2NoZWNrZWRLZXldO2lmKG5vZGUpe25vZGUuc2V0Q2hlY2tlZCh0cnVlLCFfdGhpczIuY2hlY2tTdHJpY3RseSk7fX0pO307VHJlZVN0b3JlLnByb3RvdHlwZS5faW5pdERlZmF1bHRDaGVja2VkTm9kZT1mdW5jdGlvbiBfaW5pdERlZmF1bHRDaGVja2VkTm9kZShub2RlKXt2YXIgZGVmYXVsdENoZWNrZWRLZXlzPXRoaXMuZGVmYXVsdENoZWNrZWRLZXlzfHxbXTtpZihkZWZhdWx0Q2hlY2tlZEtleXMuaW5kZXhPZihub2RlLmtleSkhPT0tMSl7bm9kZS5zZXRDaGVja2VkKHRydWUsIXRoaXMuY2hlY2tTdHJpY3RseSk7fX07VHJlZVN0b3JlLnByb3RvdHlwZS5zZXREZWZhdWx0Q2hlY2tlZEtleT1mdW5jdGlvbiBzZXREZWZhdWx0Q2hlY2tlZEtleShuZXdWYWwpe2lmKG5ld1ZhbCE9PXRoaXMuZGVmYXVsdENoZWNrZWRLZXlzKXt0aGlzLmRlZmF1bHRDaGVja2VkS2V5cz1uZXdWYWw7dGhpcy5faW5pdERlZmF1bHRDaGVja2VkTm9kZXMoKTt9fTtUcmVlU3RvcmUucHJvdG90eXBlLnJlZ2lzdGVyTm9kZT1mdW5jdGlvbiByZWdpc3Rlck5vZGUobm9kZSl7dmFyIGtleT10aGlzLmtleTtpZigha2V5fHwhbm9kZXx8IW5vZGUuZGF0YSlyZXR1cm47dmFyIG5vZGVLZXk9bm9kZS5rZXk7aWYobm9kZUtleSE9PXVuZGVmaW5lZCl0aGlzLm5vZGVzTWFwW25vZGUua2V5XT1ub2RlO307VHJlZVN0b3JlLnByb3RvdHlwZS5kZXJlZ2lzdGVyTm9kZT1mdW5jdGlvbiBkZXJlZ2lzdGVyTm9kZShub2RlKXt2YXIgX3RoaXMzPXRoaXM7dmFyIGtleT10aGlzLmtleTtpZigha2V5fHwhbm9kZXx8IW5vZGUuZGF0YSlyZXR1cm47bm9kZS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpe190aGlzMy5kZXJlZ2lzdGVyTm9kZShjaGlsZCk7fSk7ZGVsZXRlIHRoaXMubm9kZXNNYXBbbm9kZS5rZXldO307VHJlZVN0b3JlLnByb3RvdHlwZS5nZXRDaGVja2VkTm9kZXM9ZnVuY3Rpb24gZ2V0Q2hlY2tlZE5vZGVzKCl7dmFyIGxlYWZPbmx5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTpmYWxzZTt2YXIgaW5jbHVkZUhhbGZDaGVja2VkPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1sxXTpmYWxzZTt2YXIgY2hlY2tlZE5vZGVzPVtdO3ZhciB0cmF2ZXJzZT1mdW5jdGlvbiB0cmF2ZXJzZShub2RlKXt2YXIgY2hpbGROb2Rlcz1ub2RlLnJvb3Q/bm9kZS5yb290LmNoaWxkTm9kZXM6bm9kZS5jaGlsZE5vZGVzO2NoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbihjaGlsZCl7aWYoKGNoaWxkLmNoZWNrZWR8fGluY2x1ZGVIYWxmQ2hlY2tlZCYmY2hpbGQuaW5kZXRlcm1pbmF0ZSkmJighbGVhZk9ubHl8fGxlYWZPbmx5JiZjaGlsZC5pc0xlYWYpKXtjaGVja2VkTm9kZXMucHVzaChjaGlsZC5kYXRhKTt9dHJhdmVyc2UoY2hpbGQpO30pO307dHJhdmVyc2UodGhpcyk7cmV0dXJuIGNoZWNrZWROb2Rlczt9O1RyZWVTdG9yZS5wcm90b3R5cGUuZ2V0Q2hlY2tlZEtleXM9ZnVuY3Rpb24gZ2V0Q2hlY2tlZEtleXMoKXt2YXIgX3RoaXM0PXRoaXM7dmFyIGxlYWZPbmx5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTpmYWxzZTtyZXR1cm4gdGhpcy5nZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpLm1hcChmdW5jdGlvbihkYXRhKXtyZXR1cm4oZGF0YXx8e30pW190aGlzNC5rZXldO30pO307VHJlZVN0b3JlLnByb3RvdHlwZS5nZXRIYWxmQ2hlY2tlZE5vZGVzPWZ1bmN0aW9uIGdldEhhbGZDaGVja2VkTm9kZXMoKXt2YXIgbm9kZXM9W107dmFyIHRyYXZlcnNlPWZ1bmN0aW9uIHRyYXZlcnNlKG5vZGUpe3ZhciBjaGlsZE5vZGVzPW5vZGUucm9vdD9ub2RlLnJvb3QuY2hpbGROb2Rlczpub2RlLmNoaWxkTm9kZXM7Y2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXtpZihjaGlsZC5pbmRldGVybWluYXRlKXtub2Rlcy5wdXNoKGNoaWxkLmRhdGEpO310cmF2ZXJzZShjaGlsZCk7fSk7fTt0cmF2ZXJzZSh0aGlzKTtyZXR1cm4gbm9kZXM7fTtUcmVlU3RvcmUucHJvdG90eXBlLmdldEhhbGZDaGVja2VkS2V5cz1mdW5jdGlvbiBnZXRIYWxmQ2hlY2tlZEtleXMoKXt2YXIgX3RoaXM1PXRoaXM7cmV0dXJuIHRoaXMuZ2V0SGFsZkNoZWNrZWROb2RlcygpLm1hcChmdW5jdGlvbihkYXRhKXtyZXR1cm4oZGF0YXx8e30pW190aGlzNS5rZXldO30pO307VHJlZVN0b3JlLnByb3RvdHlwZS5fZ2V0QWxsTm9kZXM9ZnVuY3Rpb24gX2dldEFsbE5vZGVzKCl7dmFyIGFsbE5vZGVzPVtdO3ZhciBub2Rlc01hcD10aGlzLm5vZGVzTWFwO2Zvcih2YXIgbm9kZUtleSBpbiBub2Rlc01hcCl7aWYobm9kZXNNYXAuaGFzT3duUHJvcGVydHkobm9kZUtleSkpe2FsbE5vZGVzLnB1c2gobm9kZXNNYXBbbm9kZUtleV0pO319cmV0dXJuIGFsbE5vZGVzO307VHJlZVN0b3JlLnByb3RvdHlwZS51cGRhdGVDaGlsZHJlbj1mdW5jdGlvbiB1cGRhdGVDaGlsZHJlbihrZXksZGF0YSl7dmFyIG5vZGU9dGhpcy5ub2Rlc01hcFtrZXldO2lmKCFub2RlKXJldHVybjt2YXIgY2hpbGROb2Rlcz1ub2RlLmNoaWxkTm9kZXM7Zm9yKHZhciBpPWNoaWxkTm9kZXMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBjaGlsZD1jaGlsZE5vZGVzW2ldO3RoaXMucmVtb3ZlKGNoaWxkLmRhdGEpO31mb3IodmFyIF9pPTAsaj1kYXRhLmxlbmd0aDtfaTxqO19pKyspe3ZhciBfY2hpbGQ9ZGF0YVtfaV07dGhpcy5hcHBlbmQoX2NoaWxkLG5vZGUuZGF0YSk7fX07VHJlZVN0b3JlLnByb3RvdHlwZS5fc2V0Q2hlY2tlZEtleXM9ZnVuY3Rpb24gX3NldENoZWNrZWRLZXlzKGtleSl7dmFyIGxlYWZPbmx5PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1sxXTpmYWxzZTt2YXIgY2hlY2tlZEtleXM9YXJndW1lbnRzWzJdO3ZhciBhbGxOb2Rlcz10aGlzLl9nZXRBbGxOb2RlcygpLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5sZXZlbC1hLmxldmVsO30pO3ZhciBjYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBrZXlzPU9iamVjdC5rZXlzKGNoZWNrZWRLZXlzKTthbGxOb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlLnNldENoZWNrZWQoZmFsc2UsZmFsc2UpO30pO2Zvcih2YXIgaT0wLGo9YWxsTm9kZXMubGVuZ3RoO2k8ajtpKyspe3ZhciBub2RlPWFsbE5vZGVzW2ldO3ZhciBub2RlS2V5PW5vZGUuZGF0YVtrZXldLnRvU3RyaW5nKCk7dmFyIGNoZWNrZWQ9a2V5cy5pbmRleE9mKG5vZGVLZXkpPi0xO2lmKCFjaGVja2VkKXtpZihub2RlLmNoZWNrZWQmJiFjYWNoZVtub2RlS2V5XSl7bm9kZS5zZXRDaGVja2VkKGZhbHNlLGZhbHNlKTt9Y29udGludWU7fXZhciBwYXJlbnQ9bm9kZS5wYXJlbnQ7d2hpbGUocGFyZW50JiZwYXJlbnQubGV2ZWw+MCl7Y2FjaGVbcGFyZW50LmRhdGFba2V5XV09dHJ1ZTtwYXJlbnQ9cGFyZW50LnBhcmVudDt9aWYobm9kZS5pc0xlYWZ8fHRoaXMuY2hlY2tTdHJpY3RseSl7bm9kZS5zZXRDaGVja2VkKHRydWUsZmFsc2UpO2NvbnRpbnVlO31ub2RlLnNldENoZWNrZWQodHJ1ZSx0cnVlKTtpZihsZWFmT25seSl7KGZ1bmN0aW9uKCl7bm9kZS5zZXRDaGVja2VkKGZhbHNlLGZhbHNlKTt2YXIgdHJhdmVyc2U9ZnVuY3Rpb24gdHJhdmVyc2Uobm9kZSl7dmFyIGNoaWxkTm9kZXM9bm9kZS5jaGlsZE5vZGVzO2NoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbihjaGlsZCl7aWYoIWNoaWxkLmlzTGVhZil7Y2hpbGQuc2V0Q2hlY2tlZChmYWxzZSxmYWxzZSk7fXRyYXZlcnNlKGNoaWxkKTt9KTt9O3RyYXZlcnNlKG5vZGUpO30pKCk7fX19O1RyZWVTdG9yZS5wcm90b3R5cGUuc2V0Q2hlY2tlZE5vZGVzPWZ1bmN0aW9uIHNldENoZWNrZWROb2RlcyhhcnJheSl7dmFyIGxlYWZPbmx5PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1sxXTpmYWxzZTt2YXIga2V5PXRoaXMua2V5O3ZhciBjaGVja2VkS2V5cz17fTthcnJheS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2NoZWNrZWRLZXlzWyhpdGVtfHx7fSlba2V5XV09dHJ1ZTt9KTt0aGlzLl9zZXRDaGVja2VkS2V5cyhrZXksbGVhZk9ubHksY2hlY2tlZEtleXMpO307VHJlZVN0b3JlLnByb3RvdHlwZS5zZXRDaGVja2VkS2V5cz1mdW5jdGlvbiBzZXRDaGVja2VkS2V5cyhrZXlzKXt2YXIgbGVhZk9ubHk9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzFdOmZhbHNlO3RoaXMuZGVmYXVsdENoZWNrZWRLZXlzPWtleXM7dmFyIGtleT10aGlzLmtleTt2YXIgY2hlY2tlZEtleXM9e307a2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7Y2hlY2tlZEtleXNba2V5XT10cnVlO30pO3RoaXMuX3NldENoZWNrZWRLZXlzKGtleSxsZWFmT25seSxjaGVja2VkS2V5cyk7fTtUcmVlU3RvcmUucHJvdG90eXBlLnNldERlZmF1bHRFeHBhbmRlZEtleXM9ZnVuY3Rpb24gc2V0RGVmYXVsdEV4cGFuZGVkS2V5cyhrZXlzKXt2YXIgX3RoaXM2PXRoaXM7a2V5cz1rZXlzfHxbXTt0aGlzLmRlZmF1bHRFeHBhbmRlZEtleXM9a2V5cztrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KXt2YXIgbm9kZT1fdGhpczYuZ2V0Tm9kZShrZXkpO2lmKG5vZGUpbm9kZS5leHBhbmQobnVsbCxfdGhpczYuYXV0b0V4cGFuZFBhcmVudCk7fSk7fTtUcmVlU3RvcmUucHJvdG90eXBlLnNldENoZWNrZWQ9ZnVuY3Rpb24gc2V0Q2hlY2tlZChkYXRhLGNoZWNrZWQsZGVlcCl7dmFyIG5vZGU9dGhpcy5nZXROb2RlKGRhdGEpO2lmKG5vZGUpe25vZGUuc2V0Q2hlY2tlZCghIWNoZWNrZWQsZGVlcCk7fX07VHJlZVN0b3JlLnByb3RvdHlwZS5nZXRDdXJyZW50Tm9kZT1mdW5jdGlvbiBnZXRDdXJyZW50Tm9kZSgpe3JldHVybiB0aGlzLmN1cnJlbnROb2RlO307VHJlZVN0b3JlLnByb3RvdHlwZS5zZXRDdXJyZW50Tm9kZT1mdW5jdGlvbiBzZXRDdXJyZW50Tm9kZShjdXJyZW50Tm9kZSl7dmFyIHByZXZDdXJyZW50Tm9kZT10aGlzLmN1cnJlbnROb2RlO2lmKHByZXZDdXJyZW50Tm9kZSl7cHJldkN1cnJlbnROb2RlLmlzQ3VycmVudD1mYWxzZTt9dGhpcy5jdXJyZW50Tm9kZT1jdXJyZW50Tm9kZTt0aGlzLmN1cnJlbnROb2RlLmlzQ3VycmVudD10cnVlO307VHJlZVN0b3JlLnByb3RvdHlwZS5zZXRVc2VyQ3VycmVudE5vZGU9ZnVuY3Rpb24gc2V0VXNlckN1cnJlbnROb2RlKG5vZGUpe3ZhciBrZXk9bm9kZVt0aGlzLmtleV07dmFyIGN1cnJOb2RlPXRoaXMubm9kZXNNYXBba2V5XTt0aGlzLnNldEN1cnJlbnROb2RlKGN1cnJOb2RlKTt9O1RyZWVTdG9yZS5wcm90b3R5cGUuc2V0Q3VycmVudE5vZGVLZXk9ZnVuY3Rpb24gc2V0Q3VycmVudE5vZGVLZXkoa2V5KXtpZihrZXk9PT1udWxsfHxrZXk9PT11bmRlZmluZWQpe3RoaXMuY3VycmVudE5vZGUmJih0aGlzLmN1cnJlbnROb2RlLmlzQ3VycmVudD1mYWxzZSk7dGhpcy5jdXJyZW50Tm9kZT1udWxsO3JldHVybjt9dmFyIG5vZGU9dGhpcy5nZXROb2RlKGtleSk7aWYobm9kZSl7dGhpcy5zZXRDdXJyZW50Tm9kZShub2RlKTt9fTtyZXR1cm4gVHJlZVN0b3JlO30oKTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHRyZWVfc3RvcmU9dHJlZV9zdG9yZV9UcmVlU3RvcmU7Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS1ub2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYmEzZWYwZSYKdmFyIHRyZWVfbm9kZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNiYTNlZjBlX3JlbmRlcj1mdW5jdGlvbiB0cmVlX25vZGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zYmEzZWYwZV9yZW5kZXIoKXt2YXIgdGhpcyQxPXRoaXM7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0ubm9kZS52aXNpYmxlLGV4cHJlc3Npb246Im5vZGUudmlzaWJsZSJ9XSxyZWY6Im5vZGUiLHN0YXRpY0NsYXNzOiJlbC10cmVlLW5vZGUiLGNsYXNzOnsiaXMtZXhwYW5kZWQiOl92bS5leHBhbmRlZCwiaXMtY3VycmVudCI6X3ZtLm5vZGUuaXNDdXJyZW50LCJpcy1oaWRkZW4iOiFfdm0ubm9kZS52aXNpYmxlLCJpcy1mb2N1c2FibGUiOiFfdm0ubm9kZS5kaXNhYmxlZCwiaXMtY2hlY2tlZCI6IV92bS5ub2RlLmRpc2FibGVkJiZfdm0ubm9kZS5jaGVja2VkfSxhdHRyczp7cm9sZToidHJlZWl0ZW0iLHRhYmluZGV4OiItMSIsImFyaWEtZXhwYW5kZWQiOl92bS5leHBhbmRlZCwiYXJpYS1kaXNhYmxlZCI6X3ZtLm5vZGUuZGlzYWJsZWQsImFyaWEtY2hlY2tlZCI6X3ZtLm5vZGUuY2hlY2tlZCxkcmFnZ2FibGU6X3ZtLnRyZWUuZHJhZ2dhYmxlfSxvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIF92bS5oYW5kbGVDbGljaygkZXZlbnQpO30sY29udGV4dG1lbnU6ZnVuY3Rpb24gY29udGV4dG1lbnUoJGV2ZW50KXtyZXR1cm4gdGhpcyQxLmhhbmRsZUNvbnRleHRNZW51KCRldmVudCk7fSxkcmFnc3RhcnQ6ZnVuY3Rpb24gZHJhZ3N0YXJ0KCRldmVudCl7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBfdm0uaGFuZGxlRHJhZ1N0YXJ0KCRldmVudCk7fSxkcmFnb3ZlcjpmdW5jdGlvbiBkcmFnb3ZlcigkZXZlbnQpeyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm4gX3ZtLmhhbmRsZURyYWdPdmVyKCRldmVudCk7fSxkcmFnZW5kOmZ1bmN0aW9uIGRyYWdlbmQoJGV2ZW50KXskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIF92bS5oYW5kbGVEcmFnRW5kKCRldmVudCk7fSxkcm9wOmZ1bmN0aW9uIGRyb3AoJGV2ZW50KXskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIF92bS5oYW5kbGVEcm9wKCRldmVudCk7fX19LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRyZWUtbm9kZV9fY29udGVudCIsc3R5bGU6eyJwYWRkaW5nLWxlZnQiOihfdm0ubm9kZS5sZXZlbC0xKSpfdm0udHJlZS5pbmRlbnQrInB4In19LFtfYygic3BhbiIse2NsYXNzOlt7ImlzLWxlYWYiOl92bS5ub2RlLmlzTGVhZixleHBhbmRlZDohX3ZtLm5vZGUuaXNMZWFmJiZfdm0uZXhwYW5kZWR9LCJlbC10cmVlLW5vZGVfX2V4cGFuZC1pY29uIixfdm0udHJlZS5pY29uQ2xhc3M/X3ZtLnRyZWUuaWNvbkNsYXNzOiJlbC1pY29uLWNhcmV0LXJpZ2h0Il0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBfdm0uaGFuZGxlRXhwYW5kSWNvbkNsaWNrKCRldmVudCk7fX19KSxfdm0uc2hvd0NoZWNrYm94P19jKCJlbC1jaGVja2JveCIse2F0dHJzOntpbmRldGVybWluYXRlOl92bS5ub2RlLmluZGV0ZXJtaW5hdGUsZGlzYWJsZWQ6ISFfdm0ubm9kZS5kaXNhYmxlZH0sb246e2NoYW5nZTpfdm0uaGFuZGxlQ2hlY2tDaGFuZ2V9LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpeyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9fSxtb2RlbDp7dmFsdWU6X3ZtLm5vZGUuY2hlY2tlZCxjYWxsYmFjazpmdW5jdGlvbiBjYWxsYmFjaygkJHYpe192bS4kc2V0KF92bS5ub2RlLCJjaGVja2VkIiwkJHYpO30sZXhwcmVzc2lvbjoibm9kZS5jaGVja2VkIn19KTpfdm0uX2UoKSxfdm0ubm9kZS5sb2FkaW5nP19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXRyZWUtbm9kZV9fbG9hZGluZy1pY29uIGVsLWljb24tbG9hZGluZyJ9KTpfdm0uX2UoKSxfYygibm9kZS1jb250ZW50Iix7YXR0cnM6e25vZGU6X3ZtLm5vZGV9fSldLDEpLF9jKCJlbC1jb2xsYXBzZS10cmFuc2l0aW9uIixbIV92bS5yZW5kZXJBZnRlckV4cGFuZHx8X3ZtLmNoaWxkTm9kZVJlbmRlcmVkP19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uZXhwYW5kZWQsZXhwcmVzc2lvbjoiZXhwYW5kZWQifV0sc3RhdGljQ2xhc3M6ImVsLXRyZWUtbm9kZV9fY2hpbGRyZW4iLGF0dHJzOntyb2xlOiJncm91cCIsImFyaWEtZXhwYW5kZWQiOl92bS5leHBhbmRlZH19LF92bS5fbChfdm0ubm9kZS5jaGlsZE5vZGVzLGZ1bmN0aW9uKGNoaWxkKXtyZXR1cm4gX2MoImVsLXRyZWUtbm9kZSIse2tleTpfdm0uZ2V0Tm9kZUtleShjaGlsZCksYXR0cnM6eyJyZW5kZXItY29udGVudCI6X3ZtLnJlbmRlckNvbnRlbnQsInJlbmRlci1hZnRlci1leHBhbmQiOl92bS5yZW5kZXJBZnRlckV4cGFuZCwic2hvdy1jaGVja2JveCI6X3ZtLnNob3dDaGVja2JveCxub2RlOmNoaWxkfSxvbjp7Im5vZGUtZXhwYW5kIjpfdm0uaGFuZGxlQ2hpbGROb2RlRXhwYW5kfX0pO30pLDEpOl92bS5fZSgpXSldLDEpO307dmFyIHRyZWVfbm9kZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNiYTNlZjBlX3N0YXRpY1JlbmRlckZucz1bXTt0cmVlX25vZGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zYmEzZWYwZV9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS1ub2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYmEzZWYwZSYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS1ub2RlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0cmVlX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsVHJlZU5vZGUnLGNvbXBvbmVudE5hbWU6J0VsVHJlZU5vZGUnLG1peGluczpbZW1pdHRlcl9kZWZhdWx0LmFdLHByb3BzOntub2RlOntkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJue307fX0scHJvcHM6e30scmVuZGVyQ29udGVudDpGdW5jdGlvbixyZW5kZXJBZnRlckV4cGFuZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sc2hvd0NoZWNrYm94Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX19LGNvbXBvbmVudHM6e0VsQ29sbGFwc2VUcmFuc2l0aW9uOmNvbGxhcHNlX3RyYW5zaXRpb25fZGVmYXVsdC5hLEVsQ2hlY2tib3g6Y2hlY2tib3hfZGVmYXVsdC5hLE5vZGVDb250ZW50Ontwcm9wczp7bm9kZTp7cmVxdWlyZWQ6dHJ1ZX19LHJlbmRlcjpmdW5jdGlvbiByZW5kZXIoaCl7dmFyIHBhcmVudD10aGlzLiRwYXJlbnQ7dmFyIHRyZWU9cGFyZW50LnRyZWU7dmFyIG5vZGU9dGhpcy5ub2RlO3ZhciBkYXRhPW5vZGUuZGF0YSxzdG9yZT1ub2RlLnN0b3JlO3JldHVybiBwYXJlbnQucmVuZGVyQ29udGVudD9wYXJlbnQucmVuZGVyQ29udGVudC5jYWxsKHBhcmVudC5fcmVuZGVyUHJveHksaCx7X3NlbGY6dHJlZS4kdm5vZGUuY29udGV4dCxub2RlOm5vZGUsZGF0YTpkYXRhLHN0b3JlOnN0b3JlfSk6dHJlZS4kc2NvcGVkU2xvdHMuZGVmYXVsdD90cmVlLiRzY29wZWRTbG90cy5kZWZhdWx0KHtub2RlOm5vZGUsZGF0YTpkYXRhfSk6aCgnc3BhbicseydjbGFzcyc6J2VsLXRyZWUtbm9kZV9fbGFiZWwnfSxbbm9kZS5sYWJlbF0pO319fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57dHJlZTpudWxsLGV4cGFuZGVkOmZhbHNlLGNoaWxkTm9kZVJlbmRlcmVkOmZhbHNlLG9sZENoZWNrZWQ6bnVsbCxvbGRJbmRldGVybWluYXRlOm51bGx9O30sd2F0Y2g6eydub2RlLmluZGV0ZXJtaW5hdGUnOmZ1bmN0aW9uIG5vZGVJbmRldGVybWluYXRlKHZhbCl7dGhpcy5oYW5kbGVTZWxlY3RDaGFuZ2UodGhpcy5ub2RlLmNoZWNrZWQsdmFsKTt9LCdub2RlLmNoZWNrZWQnOmZ1bmN0aW9uIG5vZGVDaGVja2VkKHZhbCl7dGhpcy5oYW5kbGVTZWxlY3RDaGFuZ2UodmFsLHRoaXMubm9kZS5pbmRldGVybWluYXRlKTt9LCdub2RlLmV4cGFuZGVkJzpmdW5jdGlvbiBub2RlRXhwYW5kZWQodmFsKXt2YXIgX3RoaXM9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBfdGhpcy5leHBhbmRlZD12YWw7fSk7aWYodmFsKXt0aGlzLmNoaWxkTm9kZVJlbmRlcmVkPXRydWU7fX19LG1ldGhvZHM6e2dldE5vZGVLZXk6ZnVuY3Rpb24gZ2V0Tm9kZUtleShub2RlKXtyZXR1cm4gdXRpbF9nZXROb2RlS2V5KHRoaXMudHJlZS5ub2RlS2V5LG5vZGUuZGF0YSk7fSxoYW5kbGVTZWxlY3RDaGFuZ2U6ZnVuY3Rpb24gaGFuZGxlU2VsZWN0Q2hhbmdlKGNoZWNrZWQsaW5kZXRlcm1pbmF0ZSl7aWYodGhpcy5vbGRDaGVja2VkIT09Y2hlY2tlZCYmdGhpcy5vbGRJbmRldGVybWluYXRlIT09aW5kZXRlcm1pbmF0ZSl7dGhpcy50cmVlLiRlbWl0KCdjaGVjay1jaGFuZ2UnLHRoaXMubm9kZS5kYXRhLGNoZWNrZWQsaW5kZXRlcm1pbmF0ZSk7fXRoaXMub2xkQ2hlY2tlZD1jaGVja2VkO3RoaXMuaW5kZXRlcm1pbmF0ZT1pbmRldGVybWluYXRlO30saGFuZGxlQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlQ2xpY2soKXt2YXIgc3RvcmU9dGhpcy50cmVlLnN0b3JlO3N0b3JlLnNldEN1cnJlbnROb2RlKHRoaXMubm9kZSk7dGhpcy50cmVlLiRlbWl0KCdjdXJyZW50LWNoYW5nZScsc3RvcmUuY3VycmVudE5vZGU/c3RvcmUuY3VycmVudE5vZGUuZGF0YTpudWxsLHN0b3JlLmN1cnJlbnROb2RlKTt0aGlzLnRyZWUuY3VycmVudE5vZGU9dGhpcztpZih0aGlzLnRyZWUuZXhwYW5kT25DbGlja05vZGUpe3RoaXMuaGFuZGxlRXhwYW5kSWNvbkNsaWNrKCk7fWlmKHRoaXMudHJlZS5jaGVja09uQ2xpY2tOb2RlJiYhdGhpcy5ub2RlLmRpc2FibGVkKXt0aGlzLmhhbmRsZUNoZWNrQ2hhbmdlKG51bGwse3RhcmdldDp7Y2hlY2tlZDohdGhpcy5ub2RlLmNoZWNrZWR9fSk7fXRoaXMudHJlZS4kZW1pdCgnbm9kZS1jbGljaycsdGhpcy5ub2RlLmRhdGEsdGhpcy5ub2RlLHRoaXMpO30saGFuZGxlQ29udGV4dE1lbnU6ZnVuY3Rpb24gaGFuZGxlQ29udGV4dE1lbnUoZXZlbnQpe2lmKHRoaXMudHJlZS5fZXZlbnRzWydub2RlLWNvbnRleHRtZW51J10mJnRoaXMudHJlZS5fZXZlbnRzWydub2RlLWNvbnRleHRtZW51J10ubGVuZ3RoPjApe2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2V2ZW50LnByZXZlbnREZWZhdWx0KCk7fXRoaXMudHJlZS4kZW1pdCgnbm9kZS1jb250ZXh0bWVudScsZXZlbnQsdGhpcy5ub2RlLmRhdGEsdGhpcy5ub2RlLHRoaXMpO30saGFuZGxlRXhwYW5kSWNvbkNsaWNrOmZ1bmN0aW9uIGhhbmRsZUV4cGFuZEljb25DbGljaygpe2lmKHRoaXMubm9kZS5pc0xlYWYpcmV0dXJuO2lmKHRoaXMuZXhwYW5kZWQpe3RoaXMudHJlZS4kZW1pdCgnbm9kZS1jb2xsYXBzZScsdGhpcy5ub2RlLmRhdGEsdGhpcy5ub2RlLHRoaXMpO3RoaXMubm9kZS5jb2xsYXBzZSgpO31lbHNle3RoaXMubm9kZS5leHBhbmQoKTt0aGlzLiRlbWl0KCdub2RlLWV4cGFuZCcsdGhpcy5ub2RlLmRhdGEsdGhpcy5ub2RlLHRoaXMpO319LGhhbmRsZUNoZWNrQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZUNoZWNrQ2hhbmdlKHZhbHVlLGV2KXt2YXIgX3RoaXMyPXRoaXM7dGhpcy5ub2RlLnNldENoZWNrZWQoZXYudGFyZ2V0LmNoZWNrZWQsIXRoaXMudHJlZS5jaGVja1N0cmljdGx5KTt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3ZhciBzdG9yZT1fdGhpczIudHJlZS5zdG9yZTtfdGhpczIudHJlZS4kZW1pdCgnY2hlY2snLF90aGlzMi5ub2RlLmRhdGEse2NoZWNrZWROb2RlczpzdG9yZS5nZXRDaGVja2VkTm9kZXMoKSxjaGVja2VkS2V5czpzdG9yZS5nZXRDaGVja2VkS2V5cygpLGhhbGZDaGVja2VkTm9kZXM6c3RvcmUuZ2V0SGFsZkNoZWNrZWROb2RlcygpLGhhbGZDaGVja2VkS2V5czpzdG9yZS5nZXRIYWxmQ2hlY2tlZEtleXMoKX0pO30pO30saGFuZGxlQ2hpbGROb2RlRXhwYW5kOmZ1bmN0aW9uIGhhbmRsZUNoaWxkTm9kZUV4cGFuZChub2RlRGF0YSxub2RlLGluc3RhbmNlKXt0aGlzLmJyb2FkY2FzdCgnRWxUcmVlTm9kZScsJ3RyZWUtbm9kZS1leHBhbmQnLG5vZGUpO3RoaXMudHJlZS4kZW1pdCgnbm9kZS1leHBhbmQnLG5vZGVEYXRhLG5vZGUsaW5zdGFuY2UpO30saGFuZGxlRHJhZ1N0YXJ0OmZ1bmN0aW9uIGhhbmRsZURyYWdTdGFydChldmVudCl7aWYoIXRoaXMudHJlZS5kcmFnZ2FibGUpcmV0dXJuO3RoaXMudHJlZS4kZW1pdCgndHJlZS1ub2RlLWRyYWctc3RhcnQnLGV2ZW50LHRoaXMpO30saGFuZGxlRHJhZ092ZXI6ZnVuY3Rpb24gaGFuZGxlRHJhZ092ZXIoZXZlbnQpe2lmKCF0aGlzLnRyZWUuZHJhZ2dhYmxlKXJldHVybjt0aGlzLnRyZWUuJGVtaXQoJ3RyZWUtbm9kZS1kcmFnLW92ZXInLGV2ZW50LHRoaXMpO2V2ZW50LnByZXZlbnREZWZhdWx0KCk7fSxoYW5kbGVEcm9wOmZ1bmN0aW9uIGhhbmRsZURyb3AoZXZlbnQpe2V2ZW50LnByZXZlbnREZWZhdWx0KCk7fSxoYW5kbGVEcmFnRW5kOmZ1bmN0aW9uIGhhbmRsZURyYWdFbmQoZXZlbnQpe2lmKCF0aGlzLnRyZWUuZHJhZ2dhYmxlKXJldHVybjt0aGlzLnRyZWUuJGVtaXQoJ3RyZWUtbm9kZS1kcmFnLWVuZCcsZXZlbnQsdGhpcyk7fX0sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dmFyIF90aGlzMz10aGlzO3ZhciBwYXJlbnQ9dGhpcy4kcGFyZW50O2lmKHBhcmVudC5pc1RyZWUpe3RoaXMudHJlZT1wYXJlbnQ7fWVsc2V7dGhpcy50cmVlPXBhcmVudC50cmVlO312YXIgdHJlZT10aGlzLnRyZWU7aWYoIXRyZWUpe2NvbnNvbGUud2FybignQ2FuIG5vdCBmaW5kIG5vZGVcJ3MgdHJlZS4nKTt9dmFyIHByb3BzPXRyZWUucHJvcHN8fHt9O3ZhciBjaGlsZHJlbktleT1wcm9wc1snY2hpbGRyZW4nXXx8J2NoaWxkcmVuJzt0aGlzLiR3YXRjaCgnbm9kZS5kYXRhLicrY2hpbGRyZW5LZXksZnVuY3Rpb24oKXtfdGhpczMubm9kZS51cGRhdGVDaGlsZHJlbigpO30pO2lmKHRoaXMubm9kZS5leHBhbmRlZCl7dGhpcy5leHBhbmRlZD10cnVlO3RoaXMuY2hpbGROb2RlUmVuZGVyZWQ9dHJ1ZTt9aWYodGhpcy50cmVlLmFjY29yZGlvbil7dGhpcy4kb24oJ3RyZWUtbm9kZS1leHBhbmQnLGZ1bmN0aW9uKG5vZGUpe2lmKF90aGlzMy5ub2RlIT09bm9kZSl7X3RoaXMzLm5vZGUuY29sbGFwc2UoKTt9fSk7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS1ub2RlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfdHJlZV9ub2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXRyZWVfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyZWUvc3JjL3RyZWUtbm9kZS52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciB0cmVlX25vZGVfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfdHJlZV9ub2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHRyZWVfbm9kZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNiYTNlZjBlX3JlbmRlcix0cmVlX25vZGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zYmEzZWYwZV9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHRyZWVfbm9kZV9hcGk7fXRyZWVfbm9kZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3RyZWUvc3JjL3RyZWUtbm9kZS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdHJlZV9ub2RlPXRyZWVfbm9kZV9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90cmVlL3NyYy90cmVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0cmVldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFRyZWUnLG1peGluczpbZW1pdHRlcl9kZWZhdWx0LmFdLGNvbXBvbmVudHM6e0VsVHJlZU5vZGU6dHJlZV9ub2RlfSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57c3RvcmU6bnVsbCxyb290Om51bGwsY3VycmVudE5vZGU6bnVsbCx0cmVlSXRlbXM6bnVsbCxjaGVja2JveEl0ZW1zOltdLGRyYWdTdGF0ZTp7c2hvd0Ryb3BJbmRpY2F0b3I6ZmFsc2UsZHJhZ2dpbmdOb2RlOm51bGwsZHJvcE5vZGU6bnVsbCxhbGxvd0Ryb3A6dHJ1ZX19O30scHJvcHM6e2RhdGE6e3R5cGU6QXJyYXl9LGVtcHR5VGV4dDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybiBPYmplY3QobGliX2xvY2FsZV9bInQiXSkoJ2VsLnRyZWUuZW1wdHlUZXh0Jyk7fX0scmVuZGVyQWZ0ZXJFeHBhbmQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LG5vZGVLZXk6U3RyaW5nLGNoZWNrU3RyaWN0bHk6Qm9vbGVhbixkZWZhdWx0RXhwYW5kQWxsOkJvb2xlYW4sZXhwYW5kT25DbGlja05vZGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGNoZWNrT25DbGlja05vZGU6Qm9vbGVhbixjaGVja0Rlc2NlbmRhbnRzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX0sYXV0b0V4cGFuZFBhcmVudDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sZGVmYXVsdENoZWNrZWRLZXlzOkFycmF5LGRlZmF1bHRFeHBhbmRlZEtleXM6QXJyYXksY3VycmVudE5vZGVLZXk6W1N0cmluZyxOdW1iZXJdLHJlbmRlckNvbnRlbnQ6RnVuY3Rpb24sc2hvd0NoZWNrYm94Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX0sZHJhZ2dhYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX0sYWxsb3dEcmFnOkZ1bmN0aW9uLGFsbG93RHJvcDpGdW5jdGlvbixwcm9wczp7ZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybntjaGlsZHJlbjonY2hpbGRyZW4nLGxhYmVsOidsYWJlbCcsZGlzYWJsZWQ6J2Rpc2FibGVkJ307fX0sbGF6eTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ZmFsc2V9LGhpZ2hsaWdodEN1cnJlbnQ6Qm9vbGVhbixsb2FkOkZ1bmN0aW9uLGZpbHRlck5vZGVNZXRob2Q6RnVuY3Rpb24sYWNjb3JkaW9uOkJvb2xlYW4saW5kZW50Ont0eXBlOk51bWJlcixkZWZhdWx0OjE4fSxpY29uQ2xhc3M6U3RyaW5nfSxjb21wdXRlZDp7Y2hpbGRyZW46e3NldDpmdW5jdGlvbiBzZXQodmFsdWUpe3RoaXMuZGF0YT12YWx1ZTt9LGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5kYXRhO319LHRyZWVJdGVtQXJyYXk6ZnVuY3Rpb24gdHJlZUl0ZW1BcnJheSgpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLnRyZWVJdGVtcyk7fSxpc0VtcHR5OmZ1bmN0aW9uIGlzRW1wdHkoKXt2YXIgY2hpbGROb2Rlcz10aGlzLnJvb3QuY2hpbGROb2RlcztyZXR1cm4hY2hpbGROb2Rlc3x8Y2hpbGROb2Rlcy5sZW5ndGg9PT0wfHxjaGlsZE5vZGVzLmV2ZXJ5KGZ1bmN0aW9uKF9yZWYpe3ZhciB2aXNpYmxlPV9yZWYudmlzaWJsZTtyZXR1cm4hdmlzaWJsZTt9KTt9fSx3YXRjaDp7ZGVmYXVsdENoZWNrZWRLZXlzOmZ1bmN0aW9uIGRlZmF1bHRDaGVja2VkS2V5cyhuZXdWYWwpe3RoaXMuc3RvcmUuc2V0RGVmYXVsdENoZWNrZWRLZXkobmV3VmFsKTt9LGRlZmF1bHRFeHBhbmRlZEtleXM6ZnVuY3Rpb24gZGVmYXVsdEV4cGFuZGVkS2V5cyhuZXdWYWwpe3RoaXMuc3RvcmUuZGVmYXVsdEV4cGFuZGVkS2V5cz1uZXdWYWw7dGhpcy5zdG9yZS5zZXREZWZhdWx0RXhwYW5kZWRLZXlzKG5ld1ZhbCk7fSxkYXRhOmZ1bmN0aW9uIGRhdGEobmV3VmFsKXt0aGlzLnN0b3JlLnNldERhdGEobmV3VmFsKTt9LGNoZWNrYm94SXRlbXM6ZnVuY3Rpb24gY2hlY2tib3hJdGVtcyh2YWwpe0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodmFsLGZ1bmN0aW9uKGNoZWNrYm94KXtjaGVja2JveC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywtMSk7fSk7fSxjaGVja1N0cmljdGx5OmZ1bmN0aW9uIGNoZWNrU3RyaWN0bHkobmV3VmFsKXt0aGlzLnN0b3JlLmNoZWNrU3RyaWN0bHk9bmV3VmFsO319LG1ldGhvZHM6e2ZpbHRlcjpmdW5jdGlvbiBmaWx0ZXIodmFsdWUpe2lmKCF0aGlzLmZpbHRlck5vZGVNZXRob2QpdGhyb3cgbmV3IEVycm9yKCdbVHJlZV0gZmlsdGVyTm9kZU1ldGhvZCBpcyByZXF1aXJlZCB3aGVuIGZpbHRlcicpO3RoaXMuc3RvcmUuZmlsdGVyKHZhbHVlKTt9LGdldE5vZGVLZXk6ZnVuY3Rpb24gZ2V0Tm9kZUtleShub2RlKXtyZXR1cm4gdXRpbF9nZXROb2RlS2V5KHRoaXMubm9kZUtleSxub2RlLmRhdGEpO30sZ2V0Tm9kZVBhdGg6ZnVuY3Rpb24gZ2V0Tm9kZVBhdGgoZGF0YSl7aWYoIXRoaXMubm9kZUtleSl0aHJvdyBuZXcgRXJyb3IoJ1tUcmVlXSBub2RlS2V5IGlzIHJlcXVpcmVkIGluIGdldE5vZGVQYXRoJyk7dmFyIG5vZGU9dGhpcy5zdG9yZS5nZXROb2RlKGRhdGEpO2lmKCFub2RlKXJldHVybltdO3ZhciBwYXRoPVtub2RlLmRhdGFdO3ZhciBwYXJlbnQ9bm9kZS5wYXJlbnQ7d2hpbGUocGFyZW50JiZwYXJlbnQhPT10aGlzLnJvb3Qpe3BhdGgucHVzaChwYXJlbnQuZGF0YSk7cGFyZW50PXBhcmVudC5wYXJlbnQ7fXJldHVybiBwYXRoLnJldmVyc2UoKTt9LGdldENoZWNrZWROb2RlczpmdW5jdGlvbiBnZXRDaGVja2VkTm9kZXMobGVhZk9ubHksaW5jbHVkZUhhbGZDaGVja2VkKXtyZXR1cm4gdGhpcy5zdG9yZS5nZXRDaGVja2VkTm9kZXMobGVhZk9ubHksaW5jbHVkZUhhbGZDaGVja2VkKTt9LGdldENoZWNrZWRLZXlzOmZ1bmN0aW9uIGdldENoZWNrZWRLZXlzKGxlYWZPbmx5KXtyZXR1cm4gdGhpcy5zdG9yZS5nZXRDaGVja2VkS2V5cyhsZWFmT25seSk7fSxnZXRDdXJyZW50Tm9kZTpmdW5jdGlvbiBnZXRDdXJyZW50Tm9kZSgpe3ZhciBjdXJyZW50Tm9kZT10aGlzLnN0b3JlLmdldEN1cnJlbnROb2RlKCk7cmV0dXJuIGN1cnJlbnROb2RlP2N1cnJlbnROb2RlLmRhdGE6bnVsbDt9LGdldEN1cnJlbnRLZXk6ZnVuY3Rpb24gZ2V0Q3VycmVudEtleSgpe2lmKCF0aGlzLm5vZGVLZXkpdGhyb3cgbmV3IEVycm9yKCdbVHJlZV0gbm9kZUtleSBpcyByZXF1aXJlZCBpbiBnZXRDdXJyZW50S2V5Jyk7dmFyIGN1cnJlbnROb2RlPXRoaXMuZ2V0Q3VycmVudE5vZGUoKTtyZXR1cm4gY3VycmVudE5vZGU/Y3VycmVudE5vZGVbdGhpcy5ub2RlS2V5XTpudWxsO30sc2V0Q2hlY2tlZE5vZGVzOmZ1bmN0aW9uIHNldENoZWNrZWROb2Rlcyhub2RlcyxsZWFmT25seSl7aWYoIXRoaXMubm9kZUtleSl0aHJvdyBuZXcgRXJyb3IoJ1tUcmVlXSBub2RlS2V5IGlzIHJlcXVpcmVkIGluIHNldENoZWNrZWROb2RlcycpO3RoaXMuc3RvcmUuc2V0Q2hlY2tlZE5vZGVzKG5vZGVzLGxlYWZPbmx5KTt9LHNldENoZWNrZWRLZXlzOmZ1bmN0aW9uIHNldENoZWNrZWRLZXlzKGtleXMsbGVhZk9ubHkpe2lmKCF0aGlzLm5vZGVLZXkpdGhyb3cgbmV3IEVycm9yKCdbVHJlZV0gbm9kZUtleSBpcyByZXF1aXJlZCBpbiBzZXRDaGVja2VkS2V5cycpO3RoaXMuc3RvcmUuc2V0Q2hlY2tlZEtleXMoa2V5cyxsZWFmT25seSk7fSxzZXRDaGVja2VkOmZ1bmN0aW9uIHNldENoZWNrZWQoZGF0YSxjaGVja2VkLGRlZXApe3RoaXMuc3RvcmUuc2V0Q2hlY2tlZChkYXRhLGNoZWNrZWQsZGVlcCk7fSxnZXRIYWxmQ2hlY2tlZE5vZGVzOmZ1bmN0aW9uIGdldEhhbGZDaGVja2VkTm9kZXMoKXtyZXR1cm4gdGhpcy5zdG9yZS5nZXRIYWxmQ2hlY2tlZE5vZGVzKCk7fSxnZXRIYWxmQ2hlY2tlZEtleXM6ZnVuY3Rpb24gZ2V0SGFsZkNoZWNrZWRLZXlzKCl7cmV0dXJuIHRoaXMuc3RvcmUuZ2V0SGFsZkNoZWNrZWRLZXlzKCk7fSxzZXRDdXJyZW50Tm9kZTpmdW5jdGlvbiBzZXRDdXJyZW50Tm9kZShub2RlKXtpZighdGhpcy5ub2RlS2V5KXRocm93IG5ldyBFcnJvcignW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q3VycmVudE5vZGUnKTt0aGlzLnN0b3JlLnNldFVzZXJDdXJyZW50Tm9kZShub2RlKTt9LHNldEN1cnJlbnRLZXk6ZnVuY3Rpb24gc2V0Q3VycmVudEtleShrZXkpe2lmKCF0aGlzLm5vZGVLZXkpdGhyb3cgbmV3IEVycm9yKCdbVHJlZV0gbm9kZUtleSBpcyByZXF1aXJlZCBpbiBzZXRDdXJyZW50S2V5Jyk7dGhpcy5zdG9yZS5zZXRDdXJyZW50Tm9kZUtleShrZXkpO30sZ2V0Tm9kZTpmdW5jdGlvbiBnZXROb2RlKGRhdGEpe3JldHVybiB0aGlzLnN0b3JlLmdldE5vZGUoZGF0YSk7fSxyZW1vdmU6ZnVuY3Rpb24gcmVtb3ZlKGRhdGEpe3RoaXMuc3RvcmUucmVtb3ZlKGRhdGEpO30sYXBwZW5kOmZ1bmN0aW9uIGFwcGVuZChkYXRhLHBhcmVudE5vZGUpe3RoaXMuc3RvcmUuYXBwZW5kKGRhdGEscGFyZW50Tm9kZSk7fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKGRhdGEscmVmTm9kZSl7dGhpcy5zdG9yZS5pbnNlcnRCZWZvcmUoZGF0YSxyZWZOb2RlKTt9LGluc2VydEFmdGVyOmZ1bmN0aW9uIGluc2VydEFmdGVyKGRhdGEscmVmTm9kZSl7dGhpcy5zdG9yZS5pbnNlcnRBZnRlcihkYXRhLHJlZk5vZGUpO30saGFuZGxlTm9kZUV4cGFuZDpmdW5jdGlvbiBoYW5kbGVOb2RlRXhwYW5kKG5vZGVEYXRhLG5vZGUsaW5zdGFuY2Upe3RoaXMuYnJvYWRjYXN0KCdFbFRyZWVOb2RlJywndHJlZS1ub2RlLWV4cGFuZCcsbm9kZSk7dGhpcy4kZW1pdCgnbm9kZS1leHBhbmQnLG5vZGVEYXRhLG5vZGUsaW5zdGFuY2UpO30sdXBkYXRlS2V5Q2hpbGRyZW46ZnVuY3Rpb24gdXBkYXRlS2V5Q2hpbGRyZW4oa2V5LGRhdGEpe2lmKCF0aGlzLm5vZGVLZXkpdGhyb3cgbmV3IEVycm9yKCdbVHJlZV0gbm9kZUtleSBpcyByZXF1aXJlZCBpbiB1cGRhdGVLZXlDaGlsZCcpO3RoaXMuc3RvcmUudXBkYXRlQ2hpbGRyZW4oa2V5LGRhdGEpO30saW5pdFRhYkluZGV4OmZ1bmN0aW9uIGluaXRUYWJJbmRleCgpe3RoaXMudHJlZUl0ZW1zPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5pcy1mb2N1c2FibGVbcm9sZT10cmVlaXRlbV0nKTt0aGlzLmNoZWNrYm94SXRlbXM9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1jaGVja2JveF0nKTt2YXIgY2hlY2tlZEl0ZW09dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnLmlzLWNoZWNrZWRbcm9sZT10cmVlaXRlbV0nKTtpZihjaGVja2VkSXRlbS5sZW5ndGgpe2NoZWNrZWRJdGVtWzBdLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLDApO3JldHVybjt9dGhpcy50cmVlSXRlbXNbMF0mJnRoaXMudHJlZUl0ZW1zWzBdLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLDApO30saGFuZGxlS2V5ZG93bjpmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGV2KXt2YXIgY3VycmVudEl0ZW09ZXYudGFyZ2V0O2lmKGN1cnJlbnRJdGVtLmNsYXNzTmFtZS5pbmRleE9mKCdlbC10cmVlLW5vZGUnKT09PS0xKXJldHVybjt2YXIga2V5Q29kZT1ldi5rZXlDb2RlO3RoaXMudHJlZUl0ZW1zPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5pcy1mb2N1c2FibGVbcm9sZT10cmVlaXRlbV0nKTt2YXIgY3VycmVudEluZGV4PXRoaXMudHJlZUl0ZW1BcnJheS5pbmRleE9mKGN1cnJlbnRJdGVtKTt2YXIgbmV4dEluZGV4PXZvaWQgMDtpZihbMzgsNDBdLmluZGV4T2Yoa2V5Q29kZSk+LTEpey8vIHVw44CBZG93bgpldi5wcmV2ZW50RGVmYXVsdCgpO2lmKGtleUNvZGU9PT0zOCl7Ly8gdXAKbmV4dEluZGV4PWN1cnJlbnRJbmRleCE9PTA/Y3VycmVudEluZGV4LTE6MDt9ZWxzZXtuZXh0SW5kZXg9Y3VycmVudEluZGV4PHRoaXMudHJlZUl0ZW1BcnJheS5sZW5ndGgtMT9jdXJyZW50SW5kZXgrMTowO310aGlzLnRyZWVJdGVtQXJyYXlbbmV4dEluZGV4XS5mb2N1cygpOy8vIOmAieS4rQp9aWYoWzM3LDM5XS5pbmRleE9mKGtleUNvZGUpPi0xKXsvLyBsZWZ044CBcmlnaHQg5bGV5byACmV2LnByZXZlbnREZWZhdWx0KCk7Y3VycmVudEl0ZW0uY2xpY2soKTsvLyDpgInkuK0KfXZhciBoYXNJbnB1dD1jdXJyZW50SXRlbS5xdWVyeVNlbGVjdG9yKCdbdHlwZT0iY2hlY2tib3giXScpO2lmKFsxMywzMl0uaW5kZXhPZihrZXlDb2RlKT4tMSYmaGFzSW5wdXQpey8vIHNwYWNlIGVudGVy6YCJ5LitY2hlY2tib3gKZXYucHJldmVudERlZmF1bHQoKTtoYXNJbnB1dC5jbGljaygpO319fSxjcmVhdGVkOmZ1bmN0aW9uIGNyZWF0ZWQoKXt2YXIgX3RoaXM9dGhpczt0aGlzLmlzVHJlZT10cnVlO3RoaXMuc3RvcmU9bmV3IHRyZWVfc3RvcmUoe2tleTp0aGlzLm5vZGVLZXksZGF0YTp0aGlzLmRhdGEsbGF6eTp0aGlzLmxhenkscHJvcHM6dGhpcy5wcm9wcyxsb2FkOnRoaXMubG9hZCxjdXJyZW50Tm9kZUtleTp0aGlzLmN1cnJlbnROb2RlS2V5LGNoZWNrU3RyaWN0bHk6dGhpcy5jaGVja1N0cmljdGx5LGNoZWNrRGVzY2VuZGFudHM6dGhpcy5jaGVja0Rlc2NlbmRhbnRzLGRlZmF1bHRDaGVja2VkS2V5czp0aGlzLmRlZmF1bHRDaGVja2VkS2V5cyxkZWZhdWx0RXhwYW5kZWRLZXlzOnRoaXMuZGVmYXVsdEV4cGFuZGVkS2V5cyxhdXRvRXhwYW5kUGFyZW50OnRoaXMuYXV0b0V4cGFuZFBhcmVudCxkZWZhdWx0RXhwYW5kQWxsOnRoaXMuZGVmYXVsdEV4cGFuZEFsbCxmaWx0ZXJOb2RlTWV0aG9kOnRoaXMuZmlsdGVyTm9kZU1ldGhvZH0pO3RoaXMucm9vdD10aGlzLnN0b3JlLnJvb3Q7dmFyIGRyYWdTdGF0ZT10aGlzLmRyYWdTdGF0ZTt0aGlzLiRvbigndHJlZS1ub2RlLWRyYWctc3RhcnQnLGZ1bmN0aW9uKGV2ZW50LHRyZWVOb2RlKXtpZih0eXBlb2YgX3RoaXMuYWxsb3dEcmFnPT09J2Z1bmN0aW9uJyYmIV90aGlzLmFsbG93RHJhZyh0cmVlTm9kZS5ub2RlKSl7ZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7fWV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSdtb3ZlJzsvLyB3cmFwIGluIHRyeSBjYXRjaCB0byBhZGRyZXNzIElFJ3MgZXJyb3Igd2hlbiBmaXJzdCBwYXJhbSBpcyAndGV4dC9wbGFpbicKdHJ5ey8vIHNldERhdGEgaXMgcmVxdWlyZWQgZm9yIGRyYWdnYWJsZSB0byB3b3JrIGluIEZpcmVGb3gKLy8gdGhlIGNvbnRlbnQgaGFzIHRvIGJlICcnIHNvIGRyYWdnaW5nIGEgbm9kZSBvdXQgb2YgdGhlIHRyZWUgd29uJ3Qgb3BlbiBhIG5ldyB0YWIgaW4gRmlyZUZveApldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC9wbGFpbicsJycpO31jYXRjaChlKXt9ZHJhZ1N0YXRlLmRyYWdnaW5nTm9kZT10cmVlTm9kZTtfdGhpcy4kZW1pdCgnbm9kZS1kcmFnLXN0YXJ0Jyx0cmVlTm9kZS5ub2RlLGV2ZW50KTt9KTt0aGlzLiRvbigndHJlZS1ub2RlLWRyYWctb3ZlcicsZnVuY3Rpb24oZXZlbnQsdHJlZU5vZGUpe3ZhciBkcm9wTm9kZT1maW5kTmVhcmVzdENvbXBvbmVudChldmVudC50YXJnZXQsJ0VsVHJlZU5vZGUnKTt2YXIgb2xkRHJvcE5vZGU9ZHJhZ1N0YXRlLmRyb3BOb2RlO2lmKG9sZERyb3BOb2RlJiZvbGREcm9wTm9kZSE9PWRyb3BOb2RlKXtPYmplY3QoZG9tX1sicmVtb3ZlQ2xhc3MiXSkob2xkRHJvcE5vZGUuJGVsLCdpcy1kcm9wLWlubmVyJyk7fXZhciBkcmFnZ2luZ05vZGU9ZHJhZ1N0YXRlLmRyYWdnaW5nTm9kZTtpZighZHJhZ2dpbmdOb2RlfHwhZHJvcE5vZGUpcmV0dXJuO3ZhciBkcm9wUHJldj10cnVlO3ZhciBkcm9wSW5uZXI9dHJ1ZTt2YXIgZHJvcE5leHQ9dHJ1ZTt2YXIgdXNlckFsbG93RHJvcElubmVyPXRydWU7aWYodHlwZW9mIF90aGlzLmFsbG93RHJvcD09PSdmdW5jdGlvbicpe2Ryb3BQcmV2PV90aGlzLmFsbG93RHJvcChkcmFnZ2luZ05vZGUubm9kZSxkcm9wTm9kZS5ub2RlLCdwcmV2Jyk7dXNlckFsbG93RHJvcElubmVyPWRyb3BJbm5lcj1fdGhpcy5hbGxvd0Ryb3AoZHJhZ2dpbmdOb2RlLm5vZGUsZHJvcE5vZGUubm9kZSwnaW5uZXInKTtkcm9wTmV4dD1fdGhpcy5hbGxvd0Ryb3AoZHJhZ2dpbmdOb2RlLm5vZGUsZHJvcE5vZGUubm9kZSwnbmV4dCcpO31ldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD1kcm9wSW5uZXI/J21vdmUnOidub25lJztpZigoZHJvcFByZXZ8fGRyb3BJbm5lcnx8ZHJvcE5leHQpJiZvbGREcm9wTm9kZSE9PWRyb3BOb2RlKXtpZihvbGREcm9wTm9kZSl7X3RoaXMuJGVtaXQoJ25vZGUtZHJhZy1sZWF2ZScsZHJhZ2dpbmdOb2RlLm5vZGUsb2xkRHJvcE5vZGUubm9kZSxldmVudCk7fV90aGlzLiRlbWl0KCdub2RlLWRyYWctZW50ZXInLGRyYWdnaW5nTm9kZS5ub2RlLGRyb3BOb2RlLm5vZGUsZXZlbnQpO31pZihkcm9wUHJldnx8ZHJvcElubmVyfHxkcm9wTmV4dCl7ZHJhZ1N0YXRlLmRyb3BOb2RlPWRyb3BOb2RlO31pZihkcm9wTm9kZS5ub2RlLm5leHRTaWJsaW5nPT09ZHJhZ2dpbmdOb2RlLm5vZGUpe2Ryb3BOZXh0PWZhbHNlO31pZihkcm9wTm9kZS5ub2RlLnByZXZpb3VzU2libGluZz09PWRyYWdnaW5nTm9kZS5ub2RlKXtkcm9wUHJldj1mYWxzZTt9aWYoZHJvcE5vZGUubm9kZS5jb250YWlucyhkcmFnZ2luZ05vZGUubm9kZSxmYWxzZSkpe2Ryb3BJbm5lcj1mYWxzZTt9aWYoZHJhZ2dpbmdOb2RlLm5vZGU9PT1kcm9wTm9kZS5ub2RlfHxkcmFnZ2luZ05vZGUubm9kZS5jb250YWlucyhkcm9wTm9kZS5ub2RlKSl7ZHJvcFByZXY9ZmFsc2U7ZHJvcElubmVyPWZhbHNlO2Ryb3BOZXh0PWZhbHNlO312YXIgdGFyZ2V0UG9zaXRpb249ZHJvcE5vZGUuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciB0cmVlUG9zaXRpb249X3RoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciBkcm9wVHlwZT12b2lkIDA7dmFyIHByZXZQZXJjZW50PWRyb3BQcmV2P2Ryb3BJbm5lcj8wLjI1OmRyb3BOZXh0PzAuNDU6MTotMTt2YXIgbmV4dFBlcmNlbnQ9ZHJvcE5leHQ/ZHJvcElubmVyPzAuNzU6ZHJvcFByZXY/MC41NTowOjE7dmFyIGluZGljYXRvclRvcD0tOTk5OTt2YXIgZGlzdGFuY2U9ZXZlbnQuY2xpZW50WS10YXJnZXRQb3NpdGlvbi50b3A7aWYoZGlzdGFuY2U8dGFyZ2V0UG9zaXRpb24uaGVpZ2h0KnByZXZQZXJjZW50KXtkcm9wVHlwZT0nYmVmb3JlJzt9ZWxzZSBpZihkaXN0YW5jZT50YXJnZXRQb3NpdGlvbi5oZWlnaHQqbmV4dFBlcmNlbnQpe2Ryb3BUeXBlPSdhZnRlcic7fWVsc2UgaWYoZHJvcElubmVyKXtkcm9wVHlwZT0naW5uZXInO31lbHNle2Ryb3BUeXBlPSdub25lJzt9dmFyIGljb25Qb3NpdGlvbj1kcm9wTm9kZS4kZWwucXVlcnlTZWxlY3RvcignLmVsLXRyZWUtbm9kZV9fZXhwYW5kLWljb24nKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgZHJvcEluZGljYXRvcj1fdGhpcy4kcmVmcy5kcm9wSW5kaWNhdG9yO2lmKGRyb3BUeXBlPT09J2JlZm9yZScpe2luZGljYXRvclRvcD1pY29uUG9zaXRpb24udG9wLXRyZWVQb3NpdGlvbi50b3A7fWVsc2UgaWYoZHJvcFR5cGU9PT0nYWZ0ZXInKXtpbmRpY2F0b3JUb3A9aWNvblBvc2l0aW9uLmJvdHRvbS10cmVlUG9zaXRpb24udG9wO31kcm9wSW5kaWNhdG9yLnN0eWxlLnRvcD1pbmRpY2F0b3JUb3ArJ3B4Jztkcm9wSW5kaWNhdG9yLnN0eWxlLmxlZnQ9aWNvblBvc2l0aW9uLnJpZ2h0LXRyZWVQb3NpdGlvbi5sZWZ0KydweCc7aWYoZHJvcFR5cGU9PT0naW5uZXInKXtPYmplY3QoZG9tX1siYWRkQ2xhc3MiXSkoZHJvcE5vZGUuJGVsLCdpcy1kcm9wLWlubmVyJyk7fWVsc2V7T2JqZWN0KGRvbV9bInJlbW92ZUNsYXNzIl0pKGRyb3BOb2RlLiRlbCwnaXMtZHJvcC1pbm5lcicpO31kcmFnU3RhdGUuc2hvd0Ryb3BJbmRpY2F0b3I9ZHJvcFR5cGU9PT0nYmVmb3JlJ3x8ZHJvcFR5cGU9PT0nYWZ0ZXInO2RyYWdTdGF0ZS5hbGxvd0Ryb3A9ZHJhZ1N0YXRlLnNob3dEcm9wSW5kaWNhdG9yfHx1c2VyQWxsb3dEcm9wSW5uZXI7ZHJhZ1N0YXRlLmRyb3BUeXBlPWRyb3BUeXBlO190aGlzLiRlbWl0KCdub2RlLWRyYWctb3ZlcicsZHJhZ2dpbmdOb2RlLm5vZGUsZHJvcE5vZGUubm9kZSxldmVudCk7fSk7dGhpcy4kb24oJ3RyZWUtbm9kZS1kcmFnLWVuZCcsZnVuY3Rpb24oZXZlbnQpe3ZhciBkcmFnZ2luZ05vZGU9ZHJhZ1N0YXRlLmRyYWdnaW5nTm9kZSxkcm9wVHlwZT1kcmFnU3RhdGUuZHJvcFR5cGUsZHJvcE5vZGU9ZHJhZ1N0YXRlLmRyb3BOb2RlO2V2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9J21vdmUnO2lmKGRyYWdnaW5nTm9kZSYmZHJvcE5vZGUpe3ZhciBkcmFnZ2luZ05vZGVDb3B5PXtkYXRhOmRyYWdnaW5nTm9kZS5ub2RlLmRhdGF9O2lmKGRyb3BUeXBlIT09J25vbmUnKXtkcmFnZ2luZ05vZGUubm9kZS5yZW1vdmUoKTt9aWYoZHJvcFR5cGU9PT0nYmVmb3JlJyl7ZHJvcE5vZGUubm9kZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKGRyYWdnaW5nTm9kZUNvcHksZHJvcE5vZGUubm9kZSk7fWVsc2UgaWYoZHJvcFR5cGU9PT0nYWZ0ZXInKXtkcm9wTm9kZS5ub2RlLnBhcmVudC5pbnNlcnRBZnRlcihkcmFnZ2luZ05vZGVDb3B5LGRyb3BOb2RlLm5vZGUpO31lbHNlIGlmKGRyb3BUeXBlPT09J2lubmVyJyl7ZHJvcE5vZGUubm9kZS5pbnNlcnRDaGlsZChkcmFnZ2luZ05vZGVDb3B5KTt9aWYoZHJvcFR5cGUhPT0nbm9uZScpe190aGlzLnN0b3JlLnJlZ2lzdGVyTm9kZShkcmFnZ2luZ05vZGVDb3B5KTt9T2JqZWN0KGRvbV9bInJlbW92ZUNsYXNzIl0pKGRyb3BOb2RlLiRlbCwnaXMtZHJvcC1pbm5lcicpO190aGlzLiRlbWl0KCdub2RlLWRyYWctZW5kJyxkcmFnZ2luZ05vZGUubm9kZSxkcm9wTm9kZS5ub2RlLGRyb3BUeXBlLGV2ZW50KTtpZihkcm9wVHlwZSE9PSdub25lJyl7X3RoaXMuJGVtaXQoJ25vZGUtZHJvcCcsZHJhZ2dpbmdOb2RlLm5vZGUsZHJvcE5vZGUubm9kZSxkcm9wVHlwZSxldmVudCk7fX1pZihkcmFnZ2luZ05vZGUmJiFkcm9wTm9kZSl7X3RoaXMuJGVtaXQoJ25vZGUtZHJhZy1lbmQnLGRyYWdnaW5nTm9kZS5ub2RlLG51bGwsZHJvcFR5cGUsZXZlbnQpO31kcmFnU3RhdGUuc2hvd0Ryb3BJbmRpY2F0b3I9ZmFsc2U7ZHJhZ1N0YXRlLmRyYWdnaW5nTm9kZT1udWxsO2RyYWdTdGF0ZS5kcm9wTm9kZT1udWxsO2RyYWdTdGF0ZS5hbGxvd0Ryb3A9dHJ1ZTt9KTt9LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3RoaXMuaW5pdFRhYkluZGV4KCk7dGhpcy4kZWwuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsdGhpcy5oYW5kbGVLZXlkb3duKTt9LHVwZGF0ZWQ6ZnVuY3Rpb24gdXBkYXRlZCgpe3RoaXMudHJlZUl0ZW1zPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPXRyZWVpdGVtXScpO3RoaXMuY2hlY2tib3hJdGVtcz10aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPWNoZWNrYm94XScpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3RyZWV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189dHJlZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyZWUvc3JjL3RyZWUudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgdHJlZV9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY190cmVldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHRyZWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF81NDc1NzVhNl9yZW5kZXIsdHJlZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0NzU3NWE2X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgdHJlZV9hcGk7fXRyZWVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90cmVlL3NyYy90cmVlLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfdHJlZT10cmVlX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3NyY190cmVlLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHNyY190cmVlLm5hbWUsc3JjX3RyZWUpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc190cmVlPXNyY190cmVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYWxlcnQvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZlNTMzNDFiJgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZlNTMzNDFiX3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmU1MzM0MWJfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLWFsZXJ0LWZhZGUifX0sW19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0udmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1hbGVydCIsY2xhc3M6W192bS50eXBlQ2xhc3MsX3ZtLmNlbnRlcj8iaXMtY2VudGVyIjoiIiwiaXMtIitfdm0uZWZmZWN0XSxhdHRyczp7cm9sZToiYWxlcnQifX0sW192bS5zaG93SWNvbj9fYygiaSIse3N0YXRpY0NsYXNzOiJlbC1hbGVydF9faWNvbiIsY2xhc3M6W192bS5pY29uQ2xhc3MsX3ZtLmlzQmlnSWNvbl19KTpfdm0uX2UoKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWFsZXJ0X19jb250ZW50In0sW192bS50aXRsZXx8X3ZtLiRzbG90cy50aXRsZT9fYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1hbGVydF9fdGl0bGUiLGNsYXNzOltfdm0uaXNCb2xkVGl0bGVdfSxbX3ZtLl90KCJ0aXRsZSIsW192bS5fdihfdm0uX3MoX3ZtLnRpdGxlKSldKV0sMik6X3ZtLl9lKCksX3ZtLiRzbG90cy5kZWZhdWx0JiYhX3ZtLmRlc2NyaXB0aW9uP19jKCJwIix7c3RhdGljQ2xhc3M6ImVsLWFsZXJ0X19kZXNjcmlwdGlvbiJ9LFtfdm0uX3QoImRlZmF1bHQiKV0sMik6X3ZtLl9lKCksX3ZtLmRlc2NyaXB0aW9uJiYhX3ZtLiRzbG90cy5kZWZhdWx0P19jKCJwIix7c3RhdGljQ2xhc3M6ImVsLWFsZXJ0X19kZXNjcmlwdGlvbiJ9LFtfdm0uX3YoX3ZtLl9zKF92bS5kZXNjcmlwdGlvbikpXSk6X3ZtLl9lKCksX2MoImkiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uY2xvc2FibGUsZXhwcmVzc2lvbjoiY2xvc2FibGUifV0sc3RhdGljQ2xhc3M6ImVsLWFsZXJ0X19jbG9zZWJ0biIsY2xhc3M6eyJpcy1jdXN0b21lZCI6X3ZtLmNsb3NlVGV4dCE9PSIiLCJlbC1pY29uLWNsb3NlIjpfdm0uY2xvc2VUZXh0PT09IiJ9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5jbG9zZSgpO319fSxbX3ZtLl92KF92bS5fcyhfdm0uY2xvc2VUZXh0KSldKV0pXSldKTt9O3ZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmU1MzM0MWJfc3RhdGljUmVuZGVyRm5zPVtdO21haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZTUzMzQxYl9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYWxlcnQvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZlNTMzNDFiJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9hbGVydC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBUWVBFX0NMQVNTRVNfTUFQPXsnc3VjY2Vzcyc6J2VsLWljb24tc3VjY2VzcycsJ3dhcm5pbmcnOidlbC1pY29uLXdhcm5pbmcnLCdlcnJvcic6J2VsLWljb24tZXJyb3InfTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGFsZXJ0X3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbEFsZXJ0Jyxwcm9wczp7dGl0bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Jyd9LGRlc2NyaXB0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OicnfSx0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OidpbmZvJ30sY2xvc2FibGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGNsb3NlVGV4dDp7dHlwZTpTdHJpbmcsZGVmYXVsdDonJ30sc2hvd0ljb246Qm9vbGVhbixjZW50ZXI6Qm9vbGVhbixlZmZlY3Q6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J2xpZ2h0Jyx2YWxpZGF0b3I6ZnVuY3Rpb24gdmFsaWRhdG9yKHZhbHVlKXtyZXR1cm5bJ2xpZ2h0JywnZGFyayddLmluZGV4T2YodmFsdWUpIT09LTE7fX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnt2aXNpYmxlOnRydWV9O30sbWV0aG9kczp7Y2xvc2U6ZnVuY3Rpb24gY2xvc2UoKXt0aGlzLnZpc2libGU9ZmFsc2U7dGhpcy4kZW1pdCgnY2xvc2UnKTt9fSxjb21wdXRlZDp7dHlwZUNsYXNzOmZ1bmN0aW9uIHR5cGVDbGFzcygpe3JldHVybidlbC1hbGVydC0tJyt0aGlzLnR5cGU7fSxpY29uQ2xhc3M6ZnVuY3Rpb24gaWNvbkNsYXNzKCl7cmV0dXJuIFRZUEVfQ0xBU1NFU19NQVBbdGhpcy50eXBlXXx8J2VsLWljb24taW5mbyc7fSxpc0JpZ0ljb246ZnVuY3Rpb24gaXNCaWdJY29uKCl7cmV0dXJuIHRoaXMuZGVzY3JpcHRpb258fHRoaXMuJHNsb3RzLmRlZmF1bHQ/J2lzLWJpZyc6Jyc7fSxpc0JvbGRUaXRsZTpmdW5jdGlvbiBpc0JvbGRUaXRsZSgpe3JldHVybiB0aGlzLmRlc2NyaXB0aW9ufHx0aGlzLiRzbG90cy5kZWZhdWx0Pydpcy1ib2xkJzonJzt9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hbGVydC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfYWxlcnRfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189YWxlcnRfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hbGVydC9zcmMvbWFpbi52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBhbGVydF9zcmNfbWFpbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhY2thZ2VzX2FsZXJ0X3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZTUzMzQxYl9yZW5kZXIsbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZlNTMzNDFiX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgYWxlcnRfc3JjX21haW5fYXBpO31hbGVydF9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2FsZXJ0L3NyYy9tYWluLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBhbGVydF9zcmNfbWFpbj1hbGVydF9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2FsZXJ0L2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovYWxlcnRfc3JjX21haW4uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoYWxlcnRfc3JjX21haW4ubmFtZSxhbGVydF9zcmNfbWFpbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2FsZXJ0PWFsZXJ0X3NyY19tYWluOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbm90aWZpY2F0aW9uL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00M2RiYzNkOCYKdmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80M2RiYzNkOF9yZW5kZXI9ZnVuY3Rpb24gbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQzZGJjM2Q4X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC1ub3RpZmljYXRpb24tZmFkZSJ9fSxbX2MoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sY2xhc3M6WyJlbC1ub3RpZmljYXRpb24iLF92bS5jdXN0b21DbGFzcyxfdm0uaG9yaXpvbnRhbENsYXNzXSxzdHlsZTpfdm0ucG9zaXRpb25TdHlsZSxhdHRyczp7cm9sZToiYWxlcnQifSxvbjp7bW91c2VlbnRlcjpmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCl7X3ZtLmNsZWFyVGltZXIoKTt9LG1vdXNlbGVhdmU6ZnVuY3Rpb24gbW91c2VsZWF2ZSgkZXZlbnQpe192bS5zdGFydFRpbWVyKCk7fSxjbGljazpfdm0uY2xpY2t9fSxbX3ZtLnR5cGV8fF92bS5pY29uQ2xhc3M/X2MoImkiLHtzdGF0aWNDbGFzczoiZWwtbm90aWZpY2F0aW9uX19pY29uIixjbGFzczpbX3ZtLnR5cGVDbGFzcyxfdm0uaWNvbkNsYXNzXX0pOl92bS5fZSgpLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbm90aWZpY2F0aW9uX19ncm91cCIsY2xhc3M6eyJpcy13aXRoLWljb24iOl92bS50eXBlQ2xhc3N8fF92bS5pY29uQ2xhc3N9fSxbX2MoImgyIix7c3RhdGljQ2xhc3M6ImVsLW5vdGlmaWNhdGlvbl9fdGl0bGUiLGRvbVByb3BzOnt0ZXh0Q29udGVudDpfdm0uX3MoX3ZtLnRpdGxlKX19KSxfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLm1lc3NhZ2UsZXhwcmVzc2lvbjoibWVzc2FnZSJ9XSxzdGF0aWNDbGFzczoiZWwtbm90aWZpY2F0aW9uX19jb250ZW50In0sW192bS5fdCgiZGVmYXVsdCIsWyFfdm0uZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nP19jKCJwIixbX3ZtLl92KF92bS5fcyhfdm0ubWVzc2FnZSkpXSk6X2MoInAiLHtkb21Qcm9wczp7aW5uZXJIVE1MOl92bS5fcyhfdm0ubWVzc2FnZSl9fSldKV0sMiksX3ZtLnNob3dDbG9zZT9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLW5vdGlmaWNhdGlvbl9fY2xvc2VCdG4gZWwtaWNvbi1jbG9zZSIsb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBfdm0uY2xvc2UoJGV2ZW50KTt9fX0pOl92bS5fZSgpXSldKV0pO307dmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80M2RiYzNkOF9zdGF0aWNSZW5kZXJGbnM9W107bWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQzZGJjM2Q4X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQzZGJjM2Q4JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwp2YXIgbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3R5cGVNYXA9e3N1Y2Nlc3M6J3N1Y2Nlc3MnLGluZm86J2luZm8nLHdhcm5pbmc6J3dhcm5pbmcnLGVycm9yOidlcnJvcid9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbm90aWZpY2F0aW9uX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57dmlzaWJsZTpmYWxzZSx0aXRsZTonJyxtZXNzYWdlOicnLGR1cmF0aW9uOjQ1MDAsdHlwZTonJyxzaG93Q2xvc2U6dHJ1ZSxjdXN0b21DbGFzczonJyxpY29uQ2xhc3M6Jycsb25DbG9zZTpudWxsLG9uQ2xpY2s6bnVsbCxjbG9zZWQ6ZmFsc2UsdmVydGljYWxPZmZzZXQ6MCx0aW1lcjpudWxsLGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzpmYWxzZSxwb3NpdGlvbjondG9wLXJpZ2h0J307fSxjb21wdXRlZDp7dHlwZUNsYXNzOmZ1bmN0aW9uIHR5cGVDbGFzcygpe3JldHVybiB0aGlzLnR5cGUmJm1haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc190eXBlTWFwW3RoaXMudHlwZV0/J2VsLWljb24tJyttYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfdHlwZU1hcFt0aGlzLnR5cGVdOicnO30saG9yaXpvbnRhbENsYXNzOmZ1bmN0aW9uIGhvcml6b250YWxDbGFzcygpe3JldHVybiB0aGlzLnBvc2l0aW9uLmluZGV4T2YoJ3JpZ2h0Jyk+LTE/J3JpZ2h0JzonbGVmdCc7fSx2ZXJ0aWNhbFByb3BlcnR5OmZ1bmN0aW9uIHZlcnRpY2FsUHJvcGVydHkoKXtyZXR1cm4gL150b3AtLy50ZXN0KHRoaXMucG9zaXRpb24pPyd0b3AnOidib3R0b20nO30scG9zaXRpb25TdHlsZTpmdW5jdGlvbiBwb3NpdGlvblN0eWxlKCl7dmFyIF9yZWY7cmV0dXJuIF9yZWY9e30sX3JlZlt0aGlzLnZlcnRpY2FsUHJvcGVydHldPXRoaXMudmVydGljYWxPZmZzZXQrJ3B4JyxfcmVmO319LHdhdGNoOntjbG9zZWQ6ZnVuY3Rpb24gY2xvc2VkKG5ld1ZhbCl7aWYobmV3VmFsKXt0aGlzLnZpc2libGU9ZmFsc2U7dGhpcy4kZWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsdGhpcy5kZXN0cm95RWxlbWVudCk7fX19LG1ldGhvZHM6e2Rlc3Ryb3lFbGVtZW50OmZ1bmN0aW9uIGRlc3Ryb3lFbGVtZW50KCl7dGhpcy4kZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsdGhpcy5kZXN0cm95RWxlbWVudCk7dGhpcy4kZGVzdHJveSh0cnVlKTt0aGlzLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJGVsKTt9LGNsaWNrOmZ1bmN0aW9uIGNsaWNrKCl7aWYodHlwZW9mIHRoaXMub25DbGljaz09PSdmdW5jdGlvbicpe3RoaXMub25DbGljaygpO319LGNsb3NlOmZ1bmN0aW9uIGNsb3NlKCl7dGhpcy5jbG9zZWQ9dHJ1ZTtpZih0eXBlb2YgdGhpcy5vbkNsb3NlPT09J2Z1bmN0aW9uJyl7dGhpcy5vbkNsb3NlKCk7fX0sY2xlYXJUaW1lcjpmdW5jdGlvbiBjbGVhclRpbWVyKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO30sc3RhcnRUaW1lcjpmdW5jdGlvbiBzdGFydFRpbWVyKCl7dmFyIF90aGlzPXRoaXM7aWYodGhpcy5kdXJhdGlvbj4wKXt0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZighX3RoaXMuY2xvc2VkKXtfdGhpcy5jbG9zZSgpO319LHRoaXMuZHVyYXRpb24pO319LGtleWRvd246ZnVuY3Rpb24ga2V5ZG93bihlKXtpZihlLmtleUNvZGU9PT00Nnx8ZS5rZXlDb2RlPT09OCl7dGhpcy5jbGVhclRpbWVyKCk7Ly8gZGV0ZWxlIOWPlua2iOWAkuiuoeaXtgp9ZWxzZSBpZihlLmtleUNvZGU9PT0yNyl7Ly8gZXNj5YWz6Zet5raI5oGvCmlmKCF0aGlzLmNsb3NlZCl7dGhpcy5jbG9zZSgpO319ZWxzZXt0aGlzLnN0YXJ0VGltZXIoKTsvLyDmgaLlpI3lgJLorqHml7YKfX19LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3ZhciBfdGhpczI9dGhpcztpZih0aGlzLmR1cmF0aW9uPjApe3RoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFfdGhpczIuY2xvc2VkKXtfdGhpczIuY2xvc2UoKTt9fSx0aGlzLmR1cmF0aW9uKTt9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsdGhpcy5rZXlkb3duKTt9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLHRoaXMua2V5ZG93bik7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX25vdGlmaWNhdGlvbl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1ub3RpZmljYXRpb25fc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgbm90aWZpY2F0aW9uX3NyY19tYWluX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQocGFja2FnZXNfbm90aWZpY2F0aW9uX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80M2RiYzNkOF9yZW5kZXIsbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQzZGJjM2Q4X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgbm90aWZpY2F0aW9uX3NyY19tYWluX2FwaTt9bm90aWZpY2F0aW9uX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvbm90aWZpY2F0aW9uL3NyYy9tYWluLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBub3RpZmljYXRpb25fc3JjX21haW49bm90aWZpY2F0aW9uX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbm90aWZpY2F0aW9uL3NyYy9tYWluLmpzCnZhciBOb3RpZmljYXRpb25Db25zdHJ1Y3Rvcj1leHRlcm5hbF92dWVfZGVmYXVsdC5hLmV4dGVuZChub3RpZmljYXRpb25fc3JjX21haW4pO3ZhciBzcmNfbWFpbl9pbnN0YW5jZT12b2lkIDA7dmFyIGluc3RhbmNlcz1bXTt2YXIgc2VlZD0xO3ZhciBtYWluX05vdGlmaWNhdGlvbj1mdW5jdGlvbiBOb3RpZmljYXRpb24ob3B0aW9ucyl7aWYoZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5wcm90b3R5cGUuJGlzU2VydmVyKXJldHVybjtvcHRpb25zPW1lcmdlX2RlZmF1bHQoKSh7fSxvcHRpb25zKTt2YXIgdXNlck9uQ2xvc2U9b3B0aW9ucy5vbkNsb3NlO3ZhciBpZD0nbm90aWZpY2F0aW9uXycrc2VlZCsrO3ZhciBwb3NpdGlvbj1vcHRpb25zLnBvc2l0aW9ufHwndG9wLXJpZ2h0JztvcHRpb25zLm9uQ2xvc2U9ZnVuY3Rpb24oKXtOb3RpZmljYXRpb24uY2xvc2UoaWQsdXNlck9uQ2xvc2UpO307c3JjX21haW5faW5zdGFuY2U9bmV3IE5vdGlmaWNhdGlvbkNvbnN0cnVjdG9yKHtkYXRhOm9wdGlvbnN9KTtpZihPYmplY3QodmRvbV9bImlzVk5vZGUiXSkob3B0aW9ucy5tZXNzYWdlKSl7c3JjX21haW5faW5zdGFuY2UuJHNsb3RzLmRlZmF1bHQ9W29wdGlvbnMubWVzc2FnZV07b3B0aW9ucy5tZXNzYWdlPSdSRVBMQUNFRF9CWV9WTk9ERSc7fXNyY19tYWluX2luc3RhbmNlLmlkPWlkO3NyY19tYWluX2luc3RhbmNlLiRtb3VudCgpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3JjX21haW5faW5zdGFuY2UuJGVsKTtzcmNfbWFpbl9pbnN0YW5jZS52aXNpYmxlPXRydWU7c3JjX21haW5faW5zdGFuY2UuZG9tPXNyY19tYWluX2luc3RhbmNlLiRlbDtzcmNfbWFpbl9pbnN0YW5jZS5kb20uc3R5bGUuekluZGV4PXBvcHVwX1siUG9wdXBNYW5hZ2VyIl0ubmV4dFpJbmRleCgpO3ZhciB2ZXJ0aWNhbE9mZnNldD1vcHRpb25zLm9mZnNldHx8MDtpbnN0YW5jZXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBpdGVtLnBvc2l0aW9uPT09cG9zaXRpb247fSkuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt2ZXJ0aWNhbE9mZnNldCs9aXRlbS4kZWwub2Zmc2V0SGVpZ2h0KzE2O30pO3ZlcnRpY2FsT2Zmc2V0Kz0xNjtzcmNfbWFpbl9pbnN0YW5jZS52ZXJ0aWNhbE9mZnNldD12ZXJ0aWNhbE9mZnNldDtpbnN0YW5jZXMucHVzaChzcmNfbWFpbl9pbnN0YW5jZSk7cmV0dXJuIHNyY19tYWluX2luc3RhbmNlO307WydzdWNjZXNzJywnd2FybmluZycsJ2luZm8nLCdlcnJvciddLmZvckVhY2goZnVuY3Rpb24odHlwZSl7bWFpbl9Ob3RpZmljYXRpb25bdHlwZV09ZnVuY3Rpb24ob3B0aW9ucyl7aWYodHlwZW9mIG9wdGlvbnM9PT0nc3RyaW5nJ3x8T2JqZWN0KHZkb21fWyJpc1ZOb2RlIl0pKG9wdGlvbnMpKXtvcHRpb25zPXttZXNzYWdlOm9wdGlvbnN9O31vcHRpb25zLnR5cGU9dHlwZTtyZXR1cm4gbWFpbl9Ob3RpZmljYXRpb24ob3B0aW9ucyk7fTt9KTttYWluX05vdGlmaWNhdGlvbi5jbG9zZT1mdW5jdGlvbihpZCx1c2VyT25DbG9zZSl7dmFyIGluZGV4PS0xO3ZhciBsZW49aW5zdGFuY2VzLmxlbmd0aDt2YXIgaW5zdGFuY2U9aW5zdGFuY2VzLmZpbHRlcihmdW5jdGlvbihpbnN0YW5jZSxpKXtpZihpbnN0YW5jZS5pZD09PWlkKXtpbmRleD1pO3JldHVybiB0cnVlO31yZXR1cm4gZmFsc2U7fSlbMF07aWYoIWluc3RhbmNlKXJldHVybjtpZih0eXBlb2YgdXNlck9uQ2xvc2U9PT0nZnVuY3Rpb24nKXt1c2VyT25DbG9zZShpbnN0YW5jZSk7fWluc3RhbmNlcy5zcGxpY2UoaW5kZXgsMSk7aWYobGVuPD0xKXJldHVybjt2YXIgcG9zaXRpb249aW5zdGFuY2UucG9zaXRpb247dmFyIHJlbW92ZWRIZWlnaHQ9aW5zdGFuY2UuZG9tLm9mZnNldEhlaWdodDtmb3IodmFyIGk9aW5kZXg7aTxsZW4tMTtpKyspe2lmKGluc3RhbmNlc1tpXS5wb3NpdGlvbj09PXBvc2l0aW9uKXtpbnN0YW5jZXNbaV0uZG9tLnN0eWxlW2luc3RhbmNlLnZlcnRpY2FsUHJvcGVydHldPXBhcnNlSW50KGluc3RhbmNlc1tpXS5kb20uc3R5bGVbaW5zdGFuY2UudmVydGljYWxQcm9wZXJ0eV0sMTApLXJlbW92ZWRIZWlnaHQtMTYrJ3B4Jzt9fX07bWFpbl9Ob3RpZmljYXRpb24uY2xvc2VBbGw9ZnVuY3Rpb24oKXtmb3IodmFyIGk9aW5zdGFuY2VzLmxlbmd0aC0xO2k+PTA7aS0tKXtpbnN0YW5jZXNbaV0uY2xvc2UoKTt9fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX25vdGlmaWNhdGlvbl9zcmNfbWFpbj1tYWluX05vdGlmaWNhdGlvbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL25vdGlmaWNhdGlvbi9pbmRleC5qcwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIG5vdGlmaWNhdGlvbj1wYWNrYWdlc19ub3RpZmljYXRpb25fc3JjX21haW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zbGlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMyNzA4NjQ0Jgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzMyNzA4NjQ0X3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMzI3MDg2NDRfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc2xpZGVyIixjbGFzczp7ImlzLXZlcnRpY2FsIjpfdm0udmVydGljYWwsImVsLXNsaWRlci0td2l0aC1pbnB1dCI6X3ZtLnNob3dJbnB1dH0sYXR0cnM6e3JvbGU6InNsaWRlciIsImFyaWEtdmFsdWVtaW4iOl92bS5taW4sImFyaWEtdmFsdWVtYXgiOl92bS5tYXgsImFyaWEtb3JpZW50YXRpb24iOl92bS52ZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIiwiYXJpYS1kaXNhYmxlZCI6X3ZtLnNsaWRlckRpc2FibGVkfX0sW192bS5zaG93SW5wdXQmJiFfdm0ucmFuZ2U/X2MoImVsLWlucHV0LW51bWJlciIse3JlZjoiaW5wdXQiLHN0YXRpY0NsYXNzOiJlbC1zbGlkZXJfX2lucHV0IixhdHRyczp7c3RlcDpfdm0uc3RlcCxkaXNhYmxlZDpfdm0uc2xpZGVyRGlzYWJsZWQsY29udHJvbHM6X3ZtLnNob3dJbnB1dENvbnRyb2xzLG1pbjpfdm0ubWluLG1heDpfdm0ubWF4LGRlYm91bmNlOl92bS5kZWJvdW5jZSxzaXplOl92bS5pbnB1dFNpemV9LG9uOntjaGFuZ2U6X3ZtLmVtaXRDaGFuZ2V9LG1vZGVsOnt2YWx1ZTpfdm0uZmlyc3RWYWx1ZSxjYWxsYmFjazpmdW5jdGlvbiBjYWxsYmFjaygkJHYpe192bS5maXJzdFZhbHVlPSQkdjt9LGV4cHJlc3Npb246ImZpcnN0VmFsdWUifX0pOl92bS5fZSgpLF9jKCJkaXYiLHtyZWY6InNsaWRlciIsc3RhdGljQ2xhc3M6ImVsLXNsaWRlcl9fcnVud2F5IixjbGFzczp7InNob3ctaW5wdXQiOl92bS5zaG93SW5wdXQsZGlzYWJsZWQ6X3ZtLnNsaWRlckRpc2FibGVkfSxzdHlsZTpfdm0ucnVud2F5U3R5bGUsb246e2NsaWNrOl92bS5vblNsaWRlckNsaWNrfX0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc2xpZGVyX19iYXIiLHN0eWxlOl92bS5iYXJTdHlsZX0pLF9jKCJzbGlkZXItYnV0dG9uIix7cmVmOiJidXR0b24xIixhdHRyczp7dmVydGljYWw6X3ZtLnZlcnRpY2FsLCJ0b29sdGlwLWNsYXNzIjpfdm0udG9vbHRpcENsYXNzfSxtb2RlbDp7dmFsdWU6X3ZtLmZpcnN0VmFsdWUsY2FsbGJhY2s6ZnVuY3Rpb24gY2FsbGJhY2soJCR2KXtfdm0uZmlyc3RWYWx1ZT0kJHY7fSxleHByZXNzaW9uOiJmaXJzdFZhbHVlIn19KSxfdm0ucmFuZ2U/X2MoInNsaWRlci1idXR0b24iLHtyZWY6ImJ1dHRvbjIiLGF0dHJzOnt2ZXJ0aWNhbDpfdm0udmVydGljYWwsInRvb2x0aXAtY2xhc3MiOl92bS50b29sdGlwQ2xhc3N9LG1vZGVsOnt2YWx1ZTpfdm0uc2Vjb25kVmFsdWUsY2FsbGJhY2s6ZnVuY3Rpb24gY2FsbGJhY2soJCR2KXtfdm0uc2Vjb25kVmFsdWU9JCR2O30sZXhwcmVzc2lvbjoic2Vjb25kVmFsdWUifX0pOl92bS5fZSgpLF92bS5fbChfdm0uc3RvcHMsZnVuY3Rpb24oaXRlbSxrZXkpe3JldHVybiBfdm0uc2hvd1N0b3BzP19jKCJkaXYiLHtrZXk6a2V5LHN0YXRpY0NsYXNzOiJlbC1zbGlkZXJfX3N0b3AiLHN0eWxlOl92bS5nZXRTdG9wU3R5bGUoaXRlbSl9KTpfdm0uX2UoKTt9KSxfdm0ubWFya0xpc3QubGVuZ3RoPjA/W19jKCJkaXYiLF92bS5fbChfdm0ubWFya0xpc3QsZnVuY3Rpb24oaXRlbSxrZXkpe3JldHVybiBfYygiZGl2Iix7a2V5OmtleSxzdGF0aWNDbGFzczoiZWwtc2xpZGVyX19zdG9wIGVsLXNsaWRlcl9fbWFya3Mtc3RvcCIsc3R5bGU6X3ZtLmdldFN0b3BTdHlsZShpdGVtLnBvc2l0aW9uKX0pO30pLDApLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc2xpZGVyX19tYXJrcyJ9LF92bS5fbChfdm0ubWFya0xpc3QsZnVuY3Rpb24oaXRlbSxrZXkpe3JldHVybiBfYygic2xpZGVyLW1hcmtlciIse2tleTprZXksc3R5bGU6X3ZtLmdldFN0b3BTdHlsZShpdGVtLnBvc2l0aW9uKSxhdHRyczp7bWFyazppdGVtLm1hcmt9fSk7fSksMSldOl92bS5fZSgpXSwyKV0sMSk7fTt2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzMyNzA4NjQ0X3N0YXRpY1JlbmRlckZucz1bXTttYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMzI3MDg2NDRfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzI3MDg2NDQmCi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL2lucHV0LW51bWJlciIKdmFyIGlucHV0X251bWJlcl89X193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7dmFyIGlucHV0X251bWJlcl9kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oaW5wdXRfbnVtYmVyXyk7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zbGlkZXIvc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZTcyZDJhZDImCnZhciBidXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9lNzJkMmFkMl9yZW5kZXI9ZnVuY3Rpb24gYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfZTcyZDJhZDJfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtyZWY6ImJ1dHRvbiIsc3RhdGljQ2xhc3M6ImVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXIiLGNsYXNzOntob3Zlcjpfdm0uaG92ZXJpbmcsZHJhZ2dpbmc6X3ZtLmRyYWdnaW5nfSxzdHlsZTpfdm0ud3JhcHBlclN0eWxlLGF0dHJzOnt0YWJpbmRleDoiMCJ9LG9uOnttb3VzZWVudGVyOl92bS5oYW5kbGVNb3VzZUVudGVyLG1vdXNlbGVhdmU6X3ZtLmhhbmRsZU1vdXNlTGVhdmUsbW91c2Vkb3duOl92bS5vbkJ1dHRvbkRvd24sdG91Y2hzdGFydDpfdm0ub25CdXR0b25Eb3duLGZvY3VzOl92bS5oYW5kbGVNb3VzZUVudGVyLGJsdXI6X3ZtLmhhbmRsZU1vdXNlTGVhdmUsa2V5ZG93bjpbZnVuY3Rpb24oJGV2ZW50KXtpZighKCJidXR0b24iaW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLCJsZWZ0IiwzNywkZXZlbnQua2V5LFsiTGVmdCIsIkFycm93TGVmdCJdKSl7cmV0dXJuIG51bGw7fWlmKCJidXR0b24iaW4gJGV2ZW50JiYkZXZlbnQuYnV0dG9uIT09MCl7cmV0dXJuIG51bGw7fXJldHVybiBfdm0ub25MZWZ0S2V5RG93bigkZXZlbnQpO30sZnVuY3Rpb24oJGV2ZW50KXtpZighKCJidXR0b24iaW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLCJyaWdodCIsMzksJGV2ZW50LmtleSxbIlJpZ2h0IiwiQXJyb3dSaWdodCJdKSl7cmV0dXJuIG51bGw7fWlmKCJidXR0b24iaW4gJGV2ZW50JiYkZXZlbnQuYnV0dG9uIT09Mil7cmV0dXJuIG51bGw7fXJldHVybiBfdm0ub25SaWdodEtleURvd24oJGV2ZW50KTt9LGZ1bmN0aW9uKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwiZG93biIsNDAsJGV2ZW50LmtleSxbIkRvd24iLCJBcnJvd0Rvd24iXSkpe3JldHVybiBudWxsO30kZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gX3ZtLm9uTGVmdEtleURvd24oJGV2ZW50KTt9LGZ1bmN0aW9uKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwidXAiLDM4LCRldmVudC5rZXksWyJVcCIsIkFycm93VXAiXSkpe3JldHVybiBudWxsO30kZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gX3ZtLm9uUmlnaHRLZXlEb3duKCRldmVudCk7fV19fSxbX2MoImVsLXRvb2x0aXAiLHtyZWY6InRvb2x0aXAiLGF0dHJzOntwbGFjZW1lbnQ6InRvcCIsInBvcHBlci1jbGFzcyI6X3ZtLnRvb2x0aXBDbGFzcyxkaXNhYmxlZDohX3ZtLnNob3dUb29sdGlwfX0sW19jKCJzcGFuIix7YXR0cnM6e3Nsb3Q6ImNvbnRlbnQifSxzbG90OiJjb250ZW50In0sW192bS5fdihfdm0uX3MoX3ZtLmZvcm1hdFZhbHVlKSldKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXNsaWRlcl9fYnV0dG9uIixjbGFzczp7aG92ZXI6X3ZtLmhvdmVyaW5nLGRyYWdnaW5nOl92bS5kcmFnZ2luZ319KV0pXSwxKTt9O3ZhciBidXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9lNzJkMmFkMl9zdGF0aWNSZW5kZXJGbnM9W107YnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfZTcyZDJhZDJfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lNzJkMmFkMiYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2xpZGVyL3NyYy9idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNsaWRlcl9zcmNfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFNsaWRlckJ1dHRvbicsY29tcG9uZW50czp7RWxUb29sdGlwOnRvb2x0aXBfZGVmYXVsdC5hfSxwcm9wczp7dmFsdWU6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sdmVydGljYWw6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSx0b29sdGlwQ2xhc3M6U3RyaW5nfSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57aG92ZXJpbmc6ZmFsc2UsZHJhZ2dpbmc6ZmFsc2UsaXNDbGljazpmYWxzZSxzdGFydFg6MCxjdXJyZW50WDowLHN0YXJ0WTowLGN1cnJlbnRZOjAsc3RhcnRQb3NpdGlvbjowLG5ld1Bvc2l0aW9uOm51bGwsb2xkVmFsdWU6dGhpcy52YWx1ZX07fSxjb21wdXRlZDp7ZGlzYWJsZWQ6ZnVuY3Rpb24gZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy4kcGFyZW50LnNsaWRlckRpc2FibGVkO30sbWF4OmZ1bmN0aW9uIG1heCgpe3JldHVybiB0aGlzLiRwYXJlbnQubWF4O30sbWluOmZ1bmN0aW9uIG1pbigpe3JldHVybiB0aGlzLiRwYXJlbnQubWluO30sc3RlcDpmdW5jdGlvbiBzdGVwKCl7cmV0dXJuIHRoaXMuJHBhcmVudC5zdGVwO30sc2hvd1Rvb2x0aXA6ZnVuY3Rpb24gc2hvd1Rvb2x0aXAoKXtyZXR1cm4gdGhpcy4kcGFyZW50LnNob3dUb29sdGlwO30scHJlY2lzaW9uOmZ1bmN0aW9uIHByZWNpc2lvbigpe3JldHVybiB0aGlzLiRwYXJlbnQucHJlY2lzaW9uO30sY3VycmVudFBvc2l0aW9uOmZ1bmN0aW9uIGN1cnJlbnRQb3NpdGlvbigpe3JldHVybih0aGlzLnZhbHVlLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pKjEwMCsnJSc7fSxlbmFibGVGb3JtYXQ6ZnVuY3Rpb24gZW5hYmxlRm9ybWF0KCl7cmV0dXJuIHRoaXMuJHBhcmVudC5mb3JtYXRUb29sdGlwIGluc3RhbmNlb2YgRnVuY3Rpb247fSxmb3JtYXRWYWx1ZTpmdW5jdGlvbiBmb3JtYXRWYWx1ZSgpe3JldHVybiB0aGlzLmVuYWJsZUZvcm1hdCYmdGhpcy4kcGFyZW50LmZvcm1hdFRvb2x0aXAodGhpcy52YWx1ZSl8fHRoaXMudmFsdWU7fSx3cmFwcGVyU3R5bGU6ZnVuY3Rpb24gd3JhcHBlclN0eWxlKCl7cmV0dXJuIHRoaXMudmVydGljYWw/e2JvdHRvbTp0aGlzLmN1cnJlbnRQb3NpdGlvbn06e2xlZnQ6dGhpcy5jdXJyZW50UG9zaXRpb259O319LHdhdGNoOntkcmFnZ2luZzpmdW5jdGlvbiBkcmFnZ2luZyh2YWwpe3RoaXMuJHBhcmVudC5kcmFnZ2luZz12YWw7fX0sbWV0aG9kczp7ZGlzcGxheVRvb2x0aXA6ZnVuY3Rpb24gZGlzcGxheVRvb2x0aXAoKXt0aGlzLiRyZWZzLnRvb2x0aXAmJih0aGlzLiRyZWZzLnRvb2x0aXAuc2hvd1BvcHBlcj10cnVlKTt9LGhpZGVUb29sdGlwOmZ1bmN0aW9uIGhpZGVUb29sdGlwKCl7dGhpcy4kcmVmcy50b29sdGlwJiYodGhpcy4kcmVmcy50b29sdGlwLnNob3dQb3BwZXI9ZmFsc2UpO30saGFuZGxlTW91c2VFbnRlcjpmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCl7dGhpcy5ob3ZlcmluZz10cnVlO3RoaXMuZGlzcGxheVRvb2x0aXAoKTt9LGhhbmRsZU1vdXNlTGVhdmU6ZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpe3RoaXMuaG92ZXJpbmc9ZmFsc2U7dGhpcy5oaWRlVG9vbHRpcCgpO30sb25CdXR0b25Eb3duOmZ1bmN0aW9uIG9uQnV0dG9uRG93bihldmVudCl7aWYodGhpcy5kaXNhYmxlZClyZXR1cm47ZXZlbnQucHJldmVudERlZmF1bHQoKTt0aGlzLm9uRHJhZ1N0YXJ0KGV2ZW50KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyx0aGlzLm9uRHJhZ2dpbmcpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLHRoaXMub25EcmFnZ2luZyk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLHRoaXMub25EcmFnRW5kKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLHRoaXMub25EcmFnRW5kKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLHRoaXMub25EcmFnRW5kKTt9LG9uTGVmdEtleURvd246ZnVuY3Rpb24gb25MZWZ0S2V5RG93bigpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO3RoaXMubmV3UG9zaXRpb249cGFyc2VGbG9hdCh0aGlzLmN1cnJlbnRQb3NpdGlvbiktdGhpcy5zdGVwLyh0aGlzLm1heC10aGlzLm1pbikqMTAwO3RoaXMuc2V0UG9zaXRpb24odGhpcy5uZXdQb3NpdGlvbik7dGhpcy4kcGFyZW50LmVtaXRDaGFuZ2UoKTt9LG9uUmlnaHRLZXlEb3duOmZ1bmN0aW9uIG9uUmlnaHRLZXlEb3duKCl7aWYodGhpcy5kaXNhYmxlZClyZXR1cm47dGhpcy5uZXdQb3NpdGlvbj1wYXJzZUZsb2F0KHRoaXMuY3VycmVudFBvc2l0aW9uKSt0aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKSoxMDA7dGhpcy5zZXRQb3NpdGlvbih0aGlzLm5ld1Bvc2l0aW9uKTt0aGlzLiRwYXJlbnQuZW1pdENoYW5nZSgpO30sb25EcmFnU3RhcnQ6ZnVuY3Rpb24gb25EcmFnU3RhcnQoZXZlbnQpe3RoaXMuZHJhZ2dpbmc9dHJ1ZTt0aGlzLmlzQ2xpY2s9dHJ1ZTtpZihldmVudC50eXBlPT09J3RvdWNoc3RhcnQnKXtldmVudC5jbGllbnRZPWV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtldmVudC5jbGllbnRYPWV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDt9aWYodGhpcy52ZXJ0aWNhbCl7dGhpcy5zdGFydFk9ZXZlbnQuY2xpZW50WTt9ZWxzZXt0aGlzLnN0YXJ0WD1ldmVudC5jbGllbnRYO310aGlzLnN0YXJ0UG9zaXRpb249cGFyc2VGbG9hdCh0aGlzLmN1cnJlbnRQb3NpdGlvbik7dGhpcy5uZXdQb3NpdGlvbj10aGlzLnN0YXJ0UG9zaXRpb247fSxvbkRyYWdnaW5nOmZ1bmN0aW9uIG9uRHJhZ2dpbmcoZXZlbnQpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuaXNDbGljaz1mYWxzZTt0aGlzLmRpc3BsYXlUb29sdGlwKCk7dGhpcy4kcGFyZW50LnJlc2V0U2l6ZSgpO3ZhciBkaWZmPTA7aWYoZXZlbnQudHlwZT09PSd0b3VjaG1vdmUnKXtldmVudC5jbGllbnRZPWV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtldmVudC5jbGllbnRYPWV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDt9aWYodGhpcy52ZXJ0aWNhbCl7dGhpcy5jdXJyZW50WT1ldmVudC5jbGllbnRZO2RpZmY9KHRoaXMuc3RhcnRZLXRoaXMuY3VycmVudFkpL3RoaXMuJHBhcmVudC5zbGlkZXJTaXplKjEwMDt9ZWxzZXt0aGlzLmN1cnJlbnRYPWV2ZW50LmNsaWVudFg7ZGlmZj0odGhpcy5jdXJyZW50WC10aGlzLnN0YXJ0WCkvdGhpcy4kcGFyZW50LnNsaWRlclNpemUqMTAwO310aGlzLm5ld1Bvc2l0aW9uPXRoaXMuc3RhcnRQb3NpdGlvbitkaWZmO3RoaXMuc2V0UG9zaXRpb24odGhpcy5uZXdQb3NpdGlvbik7fX0sb25EcmFnRW5kOmZ1bmN0aW9uIG9uRHJhZ0VuZCgpe3ZhciBfdGhpcz10aGlzO2lmKHRoaXMuZHJhZ2dpbmcpey8qCiAgICAgICAgICog6Ziy5q2i5ZyoIG1vdXNldXAg5ZCO56uL5Y2z6Kem5Y+RIGNsaWNr77yM5a+86Ie05ruR5Z2X5pyJ5Yeg546H5Lqn55Sf5LiA5bCP5q615L2N56e7CiAgICAgICAgICog5LiN5L2/55SoIHByZXZlbnREZWZhdWx0IOaYr+WboOS4uiBtb3VzZXVwIOWSjCBjbGljayDmsqHmnInms6jlhozlnKjlkIzkuIDkuKogRE9NIOS4igogICAgICAgICAqL3NldFRpbWVvdXQoZnVuY3Rpb24oKXtfdGhpcy5kcmFnZ2luZz1mYWxzZTtfdGhpcy5oaWRlVG9vbHRpcCgpO2lmKCFfdGhpcy5pc0NsaWNrKXtfdGhpcy5zZXRQb3NpdGlvbihfdGhpcy5uZXdQb3NpdGlvbik7X3RoaXMuJHBhcmVudC5lbWl0Q2hhbmdlKCk7fX0sMCk7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsdGhpcy5vbkRyYWdnaW5nKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJyx0aGlzLm9uRHJhZ2dpbmcpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJyx0aGlzLm9uRHJhZ0VuZCk7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJyx0aGlzLm9uRHJhZ0VuZCk7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51Jyx0aGlzLm9uRHJhZ0VuZCk7fX0sc2V0UG9zaXRpb246ZnVuY3Rpb24gc2V0UG9zaXRpb24obmV3UG9zaXRpb24pe3ZhciBfdGhpczI9dGhpcztpZihuZXdQb3NpdGlvbj09PW51bGx8fGlzTmFOKG5ld1Bvc2l0aW9uKSlyZXR1cm47aWYobmV3UG9zaXRpb248MCl7bmV3UG9zaXRpb249MDt9ZWxzZSBpZihuZXdQb3NpdGlvbj4xMDApe25ld1Bvc2l0aW9uPTEwMDt9dmFyIGxlbmd0aFBlclN0ZXA9MTAwLygodGhpcy5tYXgtdGhpcy5taW4pL3RoaXMuc3RlcCk7dmFyIHN0ZXBzPU1hdGgucm91bmQobmV3UG9zaXRpb24vbGVuZ3RoUGVyU3RlcCk7dmFyIHZhbHVlPXN0ZXBzKmxlbmd0aFBlclN0ZXAqKHRoaXMubWF4LXRoaXMubWluKSowLjAxK3RoaXMubWluO3ZhbHVlPXBhcnNlRmxvYXQodmFsdWUudG9GaXhlZCh0aGlzLnByZWNpc2lvbikpO3RoaXMuJGVtaXQoJ2lucHV0Jyx2YWx1ZSk7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtfdGhpczIuZGlzcGxheVRvb2x0aXAoKTtfdGhpczIuJHJlZnMudG9vbHRpcCYmX3RoaXMyLiRyZWZzLnRvb2x0aXAudXBkYXRlUG9wcGVyKCk7fSk7aWYoIXRoaXMuZHJhZ2dpbmcmJnRoaXMudmFsdWUhPT10aGlzLm9sZFZhbHVlKXt0aGlzLm9sZFZhbHVlPXRoaXMudmFsdWU7fX19fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19zbGlkZXJfc3JjX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1zbGlkZXJfc3JjX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9zcmMvYnV0dG9uLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHNyY19idXR0b25fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc19zbGlkZXJfc3JjX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxidXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9lNzJkMmFkMl9yZW5kZXIsYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfZTcyZDJhZDJfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBzcmNfYnV0dG9uX2FwaTt9c3JjX2J1dHRvbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3NsaWRlci9zcmMvYnV0dG9uLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzbGlkZXJfc3JjX2J1dHRvbj1zcmNfYnV0dG9uX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2xpZGVyL3NyYy9tYXJrZXIuanMKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBtYXJrZXI9e25hbWU6J0VsTWFya2VyJyxwcm9wczp7bWFyazp7dHlwZTpbU3RyaW5nLE9iamVjdF19fSxyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKCl7dmFyIGg9YXJndW1lbnRzWzBdO3ZhciBsYWJlbD10eXBlb2YgdGhpcy5tYXJrPT09J3N0cmluZyc/dGhpcy5tYXJrOnRoaXMubWFyay5sYWJlbDtyZXR1cm4gaCgnZGl2Jyx7J2NsYXNzJzonZWwtc2xpZGVyX19tYXJrcy10ZXh0JyxzdHlsZTp0aGlzLm1hcmsuc3R5bGV8fHt9fSxbbGFiZWxdKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zbGlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNsaWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxTbGlkZXInLG1peGluczpbZW1pdHRlcl9kZWZhdWx0LmFdLGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OicnfX0scHJvcHM6e21pbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxtYXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTAwfSxzdGVwOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LHZhbHVlOnt0eXBlOltOdW1iZXIsQXJyYXldLGRlZmF1bHQ6MH0sc2hvd0lucHV0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX0sc2hvd0lucHV0Q29udHJvbHM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGlucHV0U2l6ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDonc21hbGwnfSxzaG93U3RvcHM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxzaG93VG9vbHRpcDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sZm9ybWF0VG9vbHRpcDpGdW5jdGlvbixkaXNhYmxlZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ZmFsc2V9LHJhbmdlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX0sdmVydGljYWw6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxoZWlnaHQ6e3R5cGU6U3RyaW5nfSxkZWJvdW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDozMDB9LGxhYmVsOnt0eXBlOlN0cmluZ30sdG9vbHRpcENsYXNzOlN0cmluZyxtYXJrczpPYmplY3R9LGNvbXBvbmVudHM6e0VsSW5wdXROdW1iZXI6aW5wdXRfbnVtYmVyX2RlZmF1bHQuYSxTbGlkZXJCdXR0b246c2xpZGVyX3NyY19idXR0b24sU2xpZGVyTWFya2VyOm1hcmtlcn0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2ZpcnN0VmFsdWU6bnVsbCxzZWNvbmRWYWx1ZTpudWxsLG9sZFZhbHVlOm51bGwsZHJhZ2dpbmc6ZmFsc2Usc2xpZGVyU2l6ZToxfTt9LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbiB2YWx1ZSh2YWwsb2xkVmFsKXtpZih0aGlzLmRyYWdnaW5nfHxBcnJheS5pc0FycmF5KHZhbCkmJkFycmF5LmlzQXJyYXkob2xkVmFsKSYmdmFsLmV2ZXJ5KGZ1bmN0aW9uKGl0ZW0saW5kZXgpe3JldHVybiBpdGVtPT09b2xkVmFsW2luZGV4XTt9KSl7cmV0dXJuO310aGlzLnNldFZhbHVlcygpO30sZHJhZ2dpbmc6ZnVuY3Rpb24gZHJhZ2dpbmcodmFsKXtpZighdmFsKXt0aGlzLnNldFZhbHVlcygpO319LGZpcnN0VmFsdWU6ZnVuY3Rpb24gZmlyc3RWYWx1ZSh2YWwpe2lmKHRoaXMucmFuZ2Upe3RoaXMuJGVtaXQoJ2lucHV0JyxbdGhpcy5taW5WYWx1ZSx0aGlzLm1heFZhbHVlXSk7fWVsc2V7dGhpcy4kZW1pdCgnaW5wdXQnLHZhbCk7fX0sc2Vjb25kVmFsdWU6ZnVuY3Rpb24gc2Vjb25kVmFsdWUoKXtpZih0aGlzLnJhbmdlKXt0aGlzLiRlbWl0KCdpbnB1dCcsW3RoaXMubWluVmFsdWUsdGhpcy5tYXhWYWx1ZV0pO319LG1pbjpmdW5jdGlvbiBtaW4oKXt0aGlzLnNldFZhbHVlcygpO30sbWF4OmZ1bmN0aW9uIG1heCgpe3RoaXMuc2V0VmFsdWVzKCk7fX0sbWV0aG9kczp7dmFsdWVDaGFuZ2VkOmZ1bmN0aW9uIHZhbHVlQ2hhbmdlZCgpe3ZhciBfdGhpcz10aGlzO2lmKHRoaXMucmFuZ2Upe3JldHVybiFbdGhpcy5taW5WYWx1ZSx0aGlzLm1heFZhbHVlXS5ldmVyeShmdW5jdGlvbihpdGVtLGluZGV4KXtyZXR1cm4gaXRlbT09PV90aGlzLm9sZFZhbHVlW2luZGV4XTt9KTt9ZWxzZXtyZXR1cm4gdGhpcy52YWx1ZSE9PXRoaXMub2xkVmFsdWU7fX0sc2V0VmFsdWVzOmZ1bmN0aW9uIHNldFZhbHVlcygpe2lmKHRoaXMubWluPnRoaXMubWF4KXtjb25zb2xlLmVycm9yKCdbRWxlbWVudCBFcnJvcl1bU2xpZGVyXW1pbiBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiBtYXguJyk7cmV0dXJuO312YXIgdmFsPXRoaXMudmFsdWU7aWYodGhpcy5yYW5nZSYmQXJyYXkuaXNBcnJheSh2YWwpKXtpZih2YWxbMV08dGhpcy5taW4pe3RoaXMuJGVtaXQoJ2lucHV0JyxbdGhpcy5taW4sdGhpcy5taW5dKTt9ZWxzZSBpZih2YWxbMF0+dGhpcy5tYXgpe3RoaXMuJGVtaXQoJ2lucHV0JyxbdGhpcy5tYXgsdGhpcy5tYXhdKTt9ZWxzZSBpZih2YWxbMF08dGhpcy5taW4pe3RoaXMuJGVtaXQoJ2lucHV0JyxbdGhpcy5taW4sdmFsWzFdXSk7fWVsc2UgaWYodmFsWzFdPnRoaXMubWF4KXt0aGlzLiRlbWl0KCdpbnB1dCcsW3ZhbFswXSx0aGlzLm1heF0pO31lbHNle3RoaXMuZmlyc3RWYWx1ZT12YWxbMF07dGhpcy5zZWNvbmRWYWx1ZT12YWxbMV07aWYodGhpcy52YWx1ZUNoYW5nZWQoKSl7dGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsJ2VsLmZvcm0uY2hhbmdlJyxbdGhpcy5taW5WYWx1ZSx0aGlzLm1heFZhbHVlXSk7dGhpcy5vbGRWYWx1ZT12YWwuc2xpY2UoKTt9fX1lbHNlIGlmKCF0aGlzLnJhbmdlJiZ0eXBlb2YgdmFsPT09J251bWJlcicmJiFpc05hTih2YWwpKXtpZih2YWw8dGhpcy5taW4pe3RoaXMuJGVtaXQoJ2lucHV0Jyx0aGlzLm1pbik7fWVsc2UgaWYodmFsPnRoaXMubWF4KXt0aGlzLiRlbWl0KCdpbnB1dCcsdGhpcy5tYXgpO31lbHNle3RoaXMuZmlyc3RWYWx1ZT12YWw7aWYodGhpcy52YWx1ZUNoYW5nZWQoKSl7dGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsJ2VsLmZvcm0uY2hhbmdlJyx2YWwpO3RoaXMub2xkVmFsdWU9dmFsO319fX0sc2V0UG9zaXRpb246ZnVuY3Rpb24gc2V0UG9zaXRpb24ocGVyY2VudCl7dmFyIHRhcmdldFZhbHVlPXRoaXMubWluK3BlcmNlbnQqKHRoaXMubWF4LXRoaXMubWluKS8xMDA7aWYoIXRoaXMucmFuZ2Upe3RoaXMuJHJlZnMuYnV0dG9uMS5zZXRQb3NpdGlvbihwZXJjZW50KTtyZXR1cm47fXZhciBidXR0b249dm9pZCAwO2lmKE1hdGguYWJzKHRoaXMubWluVmFsdWUtdGFyZ2V0VmFsdWUpPE1hdGguYWJzKHRoaXMubWF4VmFsdWUtdGFyZ2V0VmFsdWUpKXtidXR0b249dGhpcy5maXJzdFZhbHVlPHRoaXMuc2Vjb25kVmFsdWU/J2J1dHRvbjEnOididXR0b24yJzt9ZWxzZXtidXR0b249dGhpcy5maXJzdFZhbHVlPnRoaXMuc2Vjb25kVmFsdWU/J2J1dHRvbjEnOididXR0b24yJzt9dGhpcy4kcmVmc1tidXR0b25dLnNldFBvc2l0aW9uKHBlcmNlbnQpO30sb25TbGlkZXJDbGljazpmdW5jdGlvbiBvblNsaWRlckNsaWNrKGV2ZW50KXtpZih0aGlzLnNsaWRlckRpc2FibGVkfHx0aGlzLmRyYWdnaW5nKXJldHVybjt0aGlzLnJlc2V0U2l6ZSgpO2lmKHRoaXMudmVydGljYWwpe3ZhciBzbGlkZXJPZmZzZXRCb3R0b209dGhpcy4kcmVmcy5zbGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO3RoaXMuc2V0UG9zaXRpb24oKHNsaWRlck9mZnNldEJvdHRvbS1ldmVudC5jbGllbnRZKS90aGlzLnNsaWRlclNpemUqMTAwKTt9ZWxzZXt2YXIgc2xpZGVyT2Zmc2V0TGVmdD10aGlzLiRyZWZzLnNsaWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O3RoaXMuc2V0UG9zaXRpb24oKGV2ZW50LmNsaWVudFgtc2xpZGVyT2Zmc2V0TGVmdCkvdGhpcy5zbGlkZXJTaXplKjEwMCk7fXRoaXMuZW1pdENoYW5nZSgpO30scmVzZXRTaXplOmZ1bmN0aW9uIHJlc2V0U2l6ZSgpe2lmKHRoaXMuJHJlZnMuc2xpZGVyKXt0aGlzLnNsaWRlclNpemU9dGhpcy4kcmVmcy5zbGlkZXJbJ2NsaWVudCcrKHRoaXMudmVydGljYWw/J0hlaWdodCc6J1dpZHRoJyldO319LGVtaXRDaGFuZ2U6ZnVuY3Rpb24gZW1pdENoYW5nZSgpe3ZhciBfdGhpczI9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe190aGlzMi4kZW1pdCgnY2hhbmdlJyxfdGhpczIucmFuZ2U/W190aGlzMi5taW5WYWx1ZSxfdGhpczIubWF4VmFsdWVdOl90aGlzMi52YWx1ZSk7fSk7fSxnZXRTdG9wU3R5bGU6ZnVuY3Rpb24gZ2V0U3RvcFN0eWxlKHBvc2l0aW9uKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbD97J2JvdHRvbSc6cG9zaXRpb24rJyUnfTp7J2xlZnQnOnBvc2l0aW9uKyclJ307fX0sY29tcHV0ZWQ6e3N0b3BzOmZ1bmN0aW9uIHN0b3BzKCl7dmFyIF90aGlzMz10aGlzO2lmKCF0aGlzLnNob3dTdG9wc3x8dGhpcy5taW4+dGhpcy5tYXgpcmV0dXJuW107aWYodGhpcy5zdGVwPT09MCl7ZmFsc2UmJmZhbHNlO3JldHVybltdO312YXIgc3RvcENvdW50PSh0aGlzLm1heC10aGlzLm1pbikvdGhpcy5zdGVwO3ZhciBzdGVwV2lkdGg9MTAwKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pO3ZhciByZXN1bHQ9W107Zm9yKHZhciBpPTE7aTxzdG9wQ291bnQ7aSsrKXtyZXN1bHQucHVzaChpKnN0ZXBXaWR0aCk7fWlmKHRoaXMucmFuZ2Upe3JldHVybiByZXN1bHQuZmlsdGVyKGZ1bmN0aW9uKHN0ZXApe3JldHVybiBzdGVwPDEwMCooX3RoaXMzLm1pblZhbHVlLV90aGlzMy5taW4pLyhfdGhpczMubWF4LV90aGlzMy5taW4pfHxzdGVwPjEwMCooX3RoaXMzLm1heFZhbHVlLV90aGlzMy5taW4pLyhfdGhpczMubWF4LV90aGlzMy5taW4pO30pO31lbHNle3JldHVybiByZXN1bHQuZmlsdGVyKGZ1bmN0aW9uKHN0ZXApe3JldHVybiBzdGVwPjEwMCooX3RoaXMzLmZpcnN0VmFsdWUtX3RoaXMzLm1pbikvKF90aGlzMy5tYXgtX3RoaXMzLm1pbik7fSk7fX0sbWFya0xpc3Q6ZnVuY3Rpb24gbWFya0xpc3QoKXt2YXIgX3RoaXM0PXRoaXM7aWYoIXRoaXMubWFya3Mpe3JldHVybltdO312YXIgbWFya3NLZXlzPU9iamVjdC5rZXlzKHRoaXMubWFya3MpO3JldHVybiBtYXJrc0tleXMubWFwKHBhcnNlRmxvYXQpLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1iO30pLmZpbHRlcihmdW5jdGlvbihwb2ludCl7cmV0dXJuIHBvaW50PD1fdGhpczQubWF4JiZwb2ludD49X3RoaXM0Lm1pbjt9KS5tYXAoZnVuY3Rpb24ocG9pbnQpe3JldHVybntwb2ludDpwb2ludCxwb3NpdGlvbjoocG9pbnQtX3RoaXM0Lm1pbikqMTAwLyhfdGhpczQubWF4LV90aGlzNC5taW4pLG1hcms6X3RoaXM0Lm1hcmtzW3BvaW50XX07fSk7fSxtaW5WYWx1ZTpmdW5jdGlvbiBtaW5WYWx1ZSgpe3JldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0VmFsdWUsdGhpcy5zZWNvbmRWYWx1ZSk7fSxtYXhWYWx1ZTpmdW5jdGlvbiBtYXhWYWx1ZSgpe3JldHVybiBNYXRoLm1heCh0aGlzLmZpcnN0VmFsdWUsdGhpcy5zZWNvbmRWYWx1ZSk7fSxiYXJTaXplOmZ1bmN0aW9uIGJhclNpemUoKXtyZXR1cm4gdGhpcy5yYW5nZT8xMDAqKHRoaXMubWF4VmFsdWUtdGhpcy5taW5WYWx1ZSkvKHRoaXMubWF4LXRoaXMubWluKSsnJSc6MTAwKih0aGlzLmZpcnN0VmFsdWUtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikrJyUnO30sYmFyU3RhcnQ6ZnVuY3Rpb24gYmFyU3RhcnQoKXtyZXR1cm4gdGhpcy5yYW5nZT8xMDAqKHRoaXMubWluVmFsdWUtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikrJyUnOicwJSc7fSxwcmVjaXNpb246ZnVuY3Rpb24gcHJlY2lzaW9uKCl7dmFyIHByZWNpc2lvbnM9W3RoaXMubWluLHRoaXMubWF4LHRoaXMuc3RlcF0ubWFwKGZ1bmN0aW9uKGl0ZW0pe3ZhciBkZWNpbWFsPSgnJytpdGVtKS5zcGxpdCgnLicpWzFdO3JldHVybiBkZWNpbWFsP2RlY2ltYWwubGVuZ3RoOjA7fSk7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwscHJlY2lzaW9ucyk7fSxydW53YXlTdHlsZTpmdW5jdGlvbiBydW53YXlTdHlsZSgpe3JldHVybiB0aGlzLnZlcnRpY2FsP3toZWlnaHQ6dGhpcy5oZWlnaHR9Ont9O30sYmFyU3R5bGU6ZnVuY3Rpb24gYmFyU3R5bGUoKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbD97aGVpZ2h0OnRoaXMuYmFyU2l6ZSxib3R0b206dGhpcy5iYXJTdGFydH06e3dpZHRoOnRoaXMuYmFyU2l6ZSxsZWZ0OnRoaXMuYmFyU3RhcnR9O30sc2xpZGVyRGlzYWJsZWQ6ZnVuY3Rpb24gc2xpZGVyRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8KHRoaXMuZWxGb3JtfHx7fSkuZGlzYWJsZWQ7fX0sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dmFyIHZhbHVldGV4dD12b2lkIDA7aWYodGhpcy5yYW5nZSl7aWYoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSl7dGhpcy5maXJzdFZhbHVlPU1hdGgubWF4KHRoaXMubWluLHRoaXMudmFsdWVbMF0pO3RoaXMuc2Vjb25kVmFsdWU9TWF0aC5taW4odGhpcy5tYXgsdGhpcy52YWx1ZVsxXSk7fWVsc2V7dGhpcy5maXJzdFZhbHVlPXRoaXMubWluO3RoaXMuc2Vjb25kVmFsdWU9dGhpcy5tYXg7fXRoaXMub2xkVmFsdWU9W3RoaXMuZmlyc3RWYWx1ZSx0aGlzLnNlY29uZFZhbHVlXTt2YWx1ZXRleHQ9dGhpcy5maXJzdFZhbHVlKyctJyt0aGlzLnNlY29uZFZhbHVlO31lbHNle2lmKHR5cGVvZiB0aGlzLnZhbHVlIT09J251bWJlcid8fGlzTmFOKHRoaXMudmFsdWUpKXt0aGlzLmZpcnN0VmFsdWU9dGhpcy5taW47fWVsc2V7dGhpcy5maXJzdFZhbHVlPU1hdGgubWluKHRoaXMubWF4LE1hdGgubWF4KHRoaXMubWluLHRoaXMudmFsdWUpKTt9dGhpcy5vbGRWYWx1ZT10aGlzLmZpcnN0VmFsdWU7dmFsdWV0ZXh0PXRoaXMuZmlyc3RWYWx1ZTt9dGhpcy4kZWwuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVldGV4dCcsdmFsdWV0ZXh0KTsvLyBsYWJlbCBzY3JlZW4gcmVhZGVyCnRoaXMuJGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsdGhpcy5sYWJlbD90aGlzLmxhYmVsOidzbGlkZXIgYmV0d2VlbiAnK3RoaXMubWluKycgYW5kICcrdGhpcy5tYXgpO3RoaXMucmVzZXRTaXplKCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsdGhpcy5yZXNldFNpemUpO30sYmVmb3JlRGVzdHJveTpmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsdGhpcy5yZXNldFNpemUpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2xpZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19zbGlkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189c2xpZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2xpZGVyL3NyYy9tYWluLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHNsaWRlcl9zcmNfbWFpbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhY2thZ2VzX3NsaWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMzI3MDg2NDRfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8zMjcwODY0NF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHNsaWRlcl9zcmNfbWFpbl9hcGk7fXNsaWRlcl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3NsaWRlci9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc2xpZGVyX3NyY19tYWluPXNsaWRlcl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3NsaWRlcl9zcmNfbWFpbi5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzbGlkZXJfc3JjX21haW4ubmFtZSxzbGlkZXJfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzbGlkZXI9c2xpZGVyX3NyY19tYWluOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbG9hZGluZy9zcmMvbG9hZGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWVlMGE3YWMmCnZhciBsb2FkaW5ndnVlX3R5cGVfdGVtcGxhdGVfaWRfZWVlMGE3YWNfcmVuZGVyPWZ1bmN0aW9uIGxvYWRpbmd2dWVfdHlwZV90ZW1wbGF0ZV9pZF9lZWUwYTdhY19yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtbG9hZGluZy1mYWRlIn0sb246eyJhZnRlci1sZWF2ZSI6X3ZtLmhhbmRsZUFmdGVyTGVhdmV9fSxbX2MoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLWxvYWRpbmctbWFzayIsY2xhc3M6W192bS5jdXN0b21DbGFzcyx7ImlzLWZ1bGxzY3JlZW4iOl92bS5mdWxsc2NyZWVufV0sc3R5bGU6e2JhY2tncm91bmRDb2xvcjpfdm0uYmFja2dyb3VuZHx8IiJ9fSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1sb2FkaW5nLXNwaW5uZXIifSxbIV92bS5zcGlubmVyP19jKCJzdmciLHtzdGF0aWNDbGFzczoiY2lyY3VsYXIiLGF0dHJzOnt2aWV3Qm94OiIyNSAyNSA1MCA1MCJ9fSxbX2MoImNpcmNsZSIse3N0YXRpY0NsYXNzOiJwYXRoIixhdHRyczp7Y3g6IjUwIixjeToiNTAiLHI6IjIwIixmaWxsOiJub25lIn19KV0pOl9jKCJpIix7Y2xhc3M6X3ZtLnNwaW5uZXJ9KSxfdm0udGV4dD9fYygicCIse3N0YXRpY0NsYXNzOiJlbC1sb2FkaW5nLXRleHQifSxbX3ZtLl92KF92bS5fcyhfdm0udGV4dCkpXSk6X3ZtLl9lKCldKV0pXSk7fTt2YXIgbG9hZGluZ3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2VlZTBhN2FjX3N0YXRpY1JlbmRlckZucz1bXTtsb2FkaW5ndnVlX3R5cGVfdGVtcGxhdGVfaWRfZWVlMGE3YWNfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2xvYWRpbmcvc3JjL2xvYWRpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVlZTBhN2FjJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9sb2FkaW5nL3NyYy9sb2FkaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBsb2FkaW5ndnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57dGV4dDpudWxsLHNwaW5uZXI6bnVsbCxiYWNrZ3JvdW5kOm51bGwsZnVsbHNjcmVlbjp0cnVlLHZpc2libGU6ZmFsc2UsY3VzdG9tQ2xhc3M6Jyd9O30sbWV0aG9kczp7aGFuZGxlQWZ0ZXJMZWF2ZTpmdW5jdGlvbiBoYW5kbGVBZnRlckxlYXZlKCl7dGhpcy4kZW1pdCgnYWZ0ZXItbGVhdmUnKTt9LHNldFRleHQ6ZnVuY3Rpb24gc2V0VGV4dCh0ZXh0KXt0aGlzLnRleHQ9dGV4dDt9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9sb2FkaW5nL3NyYy9sb2FkaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfbG9hZGluZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1sb2FkaW5ndnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbG9hZGluZy9zcmMvbG9hZGluZy52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBsb2FkaW5nX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX2xvYWRpbmd2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sbG9hZGluZ3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2VlZTBhN2FjX3JlbmRlcixsb2FkaW5ndnVlX3R5cGVfdGVtcGxhdGVfaWRfZWVlMGE3YWNfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBsb2FkaW5nX2FwaTt9bG9hZGluZ19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2xvYWRpbmcvc3JjL2xvYWRpbmcudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGxvYWRpbmc9bG9hZGluZ19jb21wb25lbnQuZXhwb3J0czsvLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi91dGlscy9hZnRlci1sZWF2ZSIKdmFyIGFmdGVyX2xlYXZlXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTt2YXIgYWZ0ZXJfbGVhdmVfZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGFmdGVyX2xlYXZlXyk7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9sb2FkaW5nL3NyYy9kaXJlY3RpdmUuanMKdmFyIE1hc2s9ZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5leHRlbmQobG9hZGluZyk7dmFyIGxvYWRpbmdEaXJlY3RpdmU9e307bG9hZGluZ0RpcmVjdGl2ZS5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7aWYoVnVlLnByb3RvdHlwZS4kaXNTZXJ2ZXIpcmV0dXJuO3ZhciB0b2dnbGVMb2FkaW5nPWZ1bmN0aW9uIHRvZ2dsZUxvYWRpbmcoZWwsYmluZGluZyl7aWYoYmluZGluZy52YWx1ZSl7VnVlLm5leHRUaWNrKGZ1bmN0aW9uKCl7aWYoYmluZGluZy5tb2RpZmllcnMuZnVsbHNjcmVlbil7ZWwub3JpZ2luYWxQb3NpdGlvbj1PYmplY3QoZG9tX1siZ2V0U3R5bGUiXSkoZG9jdW1lbnQuYm9keSwncG9zaXRpb24nKTtlbC5vcmlnaW5hbE92ZXJmbG93PU9iamVjdChkb21fWyJnZXRTdHlsZSJdKShkb2N1bWVudC5ib2R5LCdvdmVyZmxvdycpO2VsLm1hc2tTdHlsZS56SW5kZXg9cG9wdXBfWyJQb3B1cE1hbmFnZXIiXS5uZXh0WkluZGV4KCk7T2JqZWN0KGRvbV9bImFkZENsYXNzIl0pKGVsLm1hc2ssJ2lzLWZ1bGxzY3JlZW4nKTtpbnNlcnREb20oZG9jdW1lbnQuYm9keSxlbCxiaW5kaW5nKTt9ZWxzZXtPYmplY3QoZG9tX1sicmVtb3ZlQ2xhc3MiXSkoZWwubWFzaywnaXMtZnVsbHNjcmVlbicpO2lmKGJpbmRpbmcubW9kaWZpZXJzLmJvZHkpe2VsLm9yaWdpbmFsUG9zaXRpb249T2JqZWN0KGRvbV9bImdldFN0eWxlIl0pKGRvY3VtZW50LmJvZHksJ3Bvc2l0aW9uJyk7Wyd0b3AnLCdsZWZ0J10uZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7dmFyIHNjcm9sbD1wcm9wZXJ0eT09PSd0b3AnPydzY3JvbGxUb3AnOidzY3JvbGxMZWZ0JztlbC5tYXNrU3R5bGVbcHJvcGVydHldPWVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3Byb3BlcnR5XStkb2N1bWVudC5ib2R5W3Njcm9sbF0rZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W3Njcm9sbF0tcGFyc2VJbnQoT2JqZWN0KGRvbV9bImdldFN0eWxlIl0pKGRvY3VtZW50LmJvZHksJ21hcmdpbi0nK3Byb3BlcnR5KSwxMCkrJ3B4Jzt9KTtbJ2hlaWdodCcsJ3dpZHRoJ10uZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7ZWwubWFza1N0eWxlW3Byb3BlcnR5XT1lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtwcm9wZXJ0eV0rJ3B4Jzt9KTtpbnNlcnREb20oZG9jdW1lbnQuYm9keSxlbCxiaW5kaW5nKTt9ZWxzZXtlbC5vcmlnaW5hbFBvc2l0aW9uPU9iamVjdChkb21fWyJnZXRTdHlsZSJdKShlbCwncG9zaXRpb24nKTtpbnNlcnREb20oZWwsZWwsYmluZGluZyk7fX19KTt9ZWxzZXthZnRlcl9sZWF2ZV9kZWZhdWx0KCkoZWwuaW5zdGFuY2UsZnVuY3Rpb24oXyl7aWYoIWVsLmluc3RhbmNlLmhpZGluZylyZXR1cm47ZWwuZG9tVmlzaWJsZT1mYWxzZTt2YXIgdGFyZ2V0PWJpbmRpbmcubW9kaWZpZXJzLmZ1bGxzY3JlZW58fGJpbmRpbmcubW9kaWZpZXJzLmJvZHk/ZG9jdW1lbnQuYm9keTplbDtPYmplY3QoZG9tX1sicmVtb3ZlQ2xhc3MiXSkodGFyZ2V0LCdlbC1sb2FkaW5nLXBhcmVudC0tcmVsYXRpdmUnKTtPYmplY3QoZG9tX1sicmVtb3ZlQ2xhc3MiXSkodGFyZ2V0LCdlbC1sb2FkaW5nLXBhcmVudC0taGlkZGVuJyk7ZWwuaW5zdGFuY2UuaGlkaW5nPWZhbHNlO30sMzAwLHRydWUpO2VsLmluc3RhbmNlLnZpc2libGU9ZmFsc2U7ZWwuaW5zdGFuY2UuaGlkaW5nPXRydWU7fX07dmFyIGluc2VydERvbT1mdW5jdGlvbiBpbnNlcnREb20ocGFyZW50LGVsLGJpbmRpbmcpe2lmKCFlbC5kb21WaXNpYmxlJiZPYmplY3QoZG9tX1siZ2V0U3R5bGUiXSkoZWwsJ2Rpc3BsYXknKSE9PSdub25lJyYmT2JqZWN0KGRvbV9bImdldFN0eWxlIl0pKGVsLCd2aXNpYmlsaXR5JykhPT0naGlkZGVuJyl7T2JqZWN0LmtleXMoZWwubWFza1N0eWxlKS5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KXtlbC5tYXNrLnN0eWxlW3Byb3BlcnR5XT1lbC5tYXNrU3R5bGVbcHJvcGVydHldO30pO2lmKGVsLm9yaWdpbmFsUG9zaXRpb24hPT0nYWJzb2x1dGUnJiZlbC5vcmlnaW5hbFBvc2l0aW9uIT09J2ZpeGVkJyl7T2JqZWN0KGRvbV9bImFkZENsYXNzIl0pKHBhcmVudCwnZWwtbG9hZGluZy1wYXJlbnQtLXJlbGF0aXZlJyk7fWlmKGJpbmRpbmcubW9kaWZpZXJzLmZ1bGxzY3JlZW4mJmJpbmRpbmcubW9kaWZpZXJzLmxvY2spe09iamVjdChkb21fWyJhZGRDbGFzcyJdKShwYXJlbnQsJ2VsLWxvYWRpbmctcGFyZW50LS1oaWRkZW4nKTt9ZWwuZG9tVmlzaWJsZT10cnVlO3BhcmVudC5hcHBlbmRDaGlsZChlbC5tYXNrKTtWdWUubmV4dFRpY2soZnVuY3Rpb24oKXtpZihlbC5pbnN0YW5jZS5oaWRpbmcpe2VsLmluc3RhbmNlLiRlbWl0KCdhZnRlci1sZWF2ZScpO31lbHNle2VsLmluc3RhbmNlLnZpc2libGU9dHJ1ZTt9fSk7ZWwuZG9tSW5zZXJ0ZWQ9dHJ1ZTt9ZWxzZSBpZihlbC5kb21WaXNpYmxlJiZlbC5pbnN0YW5jZS5oaWRpbmc9PT10cnVlKXtlbC5pbnN0YW5jZS52aXNpYmxlPXRydWU7ZWwuaW5zdGFuY2UuaGlkaW5nPWZhbHNlO319O1Z1ZS5kaXJlY3RpdmUoJ2xvYWRpbmcnLHtiaW5kOmZ1bmN0aW9uIGJpbmQoZWwsYmluZGluZyx2bm9kZSl7dmFyIHRleHRFeHI9ZWwuZ2V0QXR0cmlidXRlKCdlbGVtZW50LWxvYWRpbmctdGV4dCcpO3ZhciBzcGlubmVyRXhyPWVsLmdldEF0dHJpYnV0ZSgnZWxlbWVudC1sb2FkaW5nLXNwaW5uZXInKTt2YXIgYmFja2dyb3VuZEV4cj1lbC5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQtbG9hZGluZy1iYWNrZ3JvdW5kJyk7dmFyIGN1c3RvbUNsYXNzRXhyPWVsLmdldEF0dHJpYnV0ZSgnZWxlbWVudC1sb2FkaW5nLWN1c3RvbS1jbGFzcycpO3ZhciB2bT12bm9kZS5jb250ZXh0O3ZhciBtYXNrPW5ldyBNYXNrKHtlbDpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxkYXRhOnt0ZXh0OnZtJiZ2bVt0ZXh0RXhyXXx8dGV4dEV4cixzcGlubmVyOnZtJiZ2bVtzcGlubmVyRXhyXXx8c3Bpbm5lckV4cixiYWNrZ3JvdW5kOnZtJiZ2bVtiYWNrZ3JvdW5kRXhyXXx8YmFja2dyb3VuZEV4cixjdXN0b21DbGFzczp2bSYmdm1bY3VzdG9tQ2xhc3NFeHJdfHxjdXN0b21DbGFzc0V4cixmdWxsc2NyZWVuOiEhYmluZGluZy5tb2RpZmllcnMuZnVsbHNjcmVlbn19KTtlbC5pbnN0YW5jZT1tYXNrO2VsLm1hc2s9bWFzay4kZWw7ZWwubWFza1N0eWxlPXt9O2JpbmRpbmcudmFsdWUmJnRvZ2dsZUxvYWRpbmcoZWwsYmluZGluZyk7fSx1cGRhdGU6ZnVuY3Rpb24gdXBkYXRlKGVsLGJpbmRpbmcpe2VsLmluc3RhbmNlLnNldFRleHQoZWwuZ2V0QXR0cmlidXRlKCdlbGVtZW50LWxvYWRpbmctdGV4dCcpKTtpZihiaW5kaW5nLm9sZFZhbHVlIT09YmluZGluZy52YWx1ZSl7dG9nZ2xlTG9hZGluZyhlbCxiaW5kaW5nKTt9fSx1bmJpbmQ6ZnVuY3Rpb24gdW5iaW5kKGVsLGJpbmRpbmcpe2lmKGVsLmRvbUluc2VydGVkKXtlbC5tYXNrJiZlbC5tYXNrLnBhcmVudE5vZGUmJmVsLm1hc2sucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbC5tYXNrKTt0b2dnbGVMb2FkaW5nKGVsLHt2YWx1ZTpmYWxzZSxtb2RpZmllcnM6YmluZGluZy5tb2RpZmllcnN9KTt9ZWwuaW5zdGFuY2UmJmVsLmluc3RhbmNlLiRkZXN0cm95KCk7fX0pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfZGlyZWN0aXZlPWxvYWRpbmdEaXJlY3RpdmU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9sb2FkaW5nL3NyYy9pbmRleC5qcwp2YXIgTG9hZGluZ0NvbnN0cnVjdG9yPWV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEuZXh0ZW5kKGxvYWRpbmcpO3ZhciBzcmNfZGVmYXVsdHM9e3RleHQ6bnVsbCxmdWxsc2NyZWVuOnRydWUsYm9keTpmYWxzZSxsb2NrOmZhbHNlLGN1c3RvbUNsYXNzOicnfTt2YXIgZnVsbHNjcmVlbkxvYWRpbmc9dm9pZCAwO0xvYWRpbmdDb25zdHJ1Y3Rvci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbj0nJztMb2FkaW5nQ29uc3RydWN0b3IucHJvdG90eXBlLm9yaWdpbmFsT3ZlcmZsb3c9Jyc7TG9hZGluZ0NvbnN0cnVjdG9yLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3ZhciBfdGhpcz10aGlzO2lmKHRoaXMuZnVsbHNjcmVlbil7ZnVsbHNjcmVlbkxvYWRpbmc9dW5kZWZpbmVkO31hZnRlcl9sZWF2ZV9kZWZhdWx0KCkodGhpcyxmdW5jdGlvbihfKXt2YXIgdGFyZ2V0PV90aGlzLmZ1bGxzY3JlZW58fF90aGlzLmJvZHk/ZG9jdW1lbnQuYm9keTpfdGhpcy50YXJnZXQ7T2JqZWN0KGRvbV9bInJlbW92ZUNsYXNzIl0pKHRhcmdldCwnZWwtbG9hZGluZy1wYXJlbnQtLXJlbGF0aXZlJyk7T2JqZWN0KGRvbV9bInJlbW92ZUNsYXNzIl0pKHRhcmdldCwnZWwtbG9hZGluZy1wYXJlbnQtLWhpZGRlbicpO2lmKF90aGlzLiRlbCYmX3RoaXMuJGVsLnBhcmVudE5vZGUpe190aGlzLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF90aGlzLiRlbCk7fV90aGlzLiRkZXN0cm95KCk7fSwzMDApO3RoaXMudmlzaWJsZT1mYWxzZTt9O3ZhciBzcmNfYWRkU3R5bGU9ZnVuY3Rpb24gYWRkU3R5bGUob3B0aW9ucyxwYXJlbnQsaW5zdGFuY2Upe3ZhciBtYXNrU3R5bGU9e307aWYob3B0aW9ucy5mdWxsc2NyZWVuKXtpbnN0YW5jZS5vcmlnaW5hbFBvc2l0aW9uPU9iamVjdChkb21fWyJnZXRTdHlsZSJdKShkb2N1bWVudC5ib2R5LCdwb3NpdGlvbicpO2luc3RhbmNlLm9yaWdpbmFsT3ZlcmZsb3c9T2JqZWN0KGRvbV9bImdldFN0eWxlIl0pKGRvY3VtZW50LmJvZHksJ292ZXJmbG93Jyk7bWFza1N0eWxlLnpJbmRleD1wb3B1cF9bIlBvcHVwTWFuYWdlciJdLm5leHRaSW5kZXgoKTt9ZWxzZSBpZihvcHRpb25zLmJvZHkpe2luc3RhbmNlLm9yaWdpbmFsUG9zaXRpb249T2JqZWN0KGRvbV9bImdldFN0eWxlIl0pKGRvY3VtZW50LmJvZHksJ3Bvc2l0aW9uJyk7Wyd0b3AnLCdsZWZ0J10uZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7dmFyIHNjcm9sbD1wcm9wZXJ0eT09PSd0b3AnPydzY3JvbGxUb3AnOidzY3JvbGxMZWZ0JzttYXNrU3R5bGVbcHJvcGVydHldPW9wdGlvbnMudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3Byb3BlcnR5XStkb2N1bWVudC5ib2R5W3Njcm9sbF0rZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W3Njcm9sbF0rJ3B4Jzt9KTtbJ2hlaWdodCcsJ3dpZHRoJ10uZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7bWFza1N0eWxlW3Byb3BlcnR5XT1vcHRpb25zLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtwcm9wZXJ0eV0rJ3B4Jzt9KTt9ZWxzZXtpbnN0YW5jZS5vcmlnaW5hbFBvc2l0aW9uPU9iamVjdChkb21fWyJnZXRTdHlsZSJdKShwYXJlbnQsJ3Bvc2l0aW9uJyk7fU9iamVjdC5rZXlzKG1hc2tTdHlsZSkuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7aW5zdGFuY2UuJGVsLnN0eWxlW3Byb3BlcnR5XT1tYXNrU3R5bGVbcHJvcGVydHldO30pO307dmFyIHNyY19Mb2FkaW5nPWZ1bmN0aW9uIExvYWRpbmcoKXt2YXIgb3B0aW9ucz1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMF06e307aWYoZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5wcm90b3R5cGUuJGlzU2VydmVyKXJldHVybjtvcHRpb25zPW1lcmdlX2RlZmF1bHQoKSh7fSxzcmNfZGVmYXVsdHMsb3B0aW9ucyk7aWYodHlwZW9mIG9wdGlvbnMudGFyZ2V0PT09J3N0cmluZycpe29wdGlvbnMudGFyZ2V0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iob3B0aW9ucy50YXJnZXQpO31vcHRpb25zLnRhcmdldD1vcHRpb25zLnRhcmdldHx8ZG9jdW1lbnQuYm9keTtpZihvcHRpb25zLnRhcmdldCE9PWRvY3VtZW50LmJvZHkpe29wdGlvbnMuZnVsbHNjcmVlbj1mYWxzZTt9ZWxzZXtvcHRpb25zLmJvZHk9dHJ1ZTt9aWYob3B0aW9ucy5mdWxsc2NyZWVuJiZmdWxsc2NyZWVuTG9hZGluZyl7cmV0dXJuIGZ1bGxzY3JlZW5Mb2FkaW5nO312YXIgcGFyZW50PW9wdGlvbnMuYm9keT9kb2N1bWVudC5ib2R5Om9wdGlvbnMudGFyZ2V0O3ZhciBpbnN0YW5jZT1uZXcgTG9hZGluZ0NvbnN0cnVjdG9yKHtlbDpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxkYXRhOm9wdGlvbnN9KTtzcmNfYWRkU3R5bGUob3B0aW9ucyxwYXJlbnQsaW5zdGFuY2UpO2lmKGluc3RhbmNlLm9yaWdpbmFsUG9zaXRpb24hPT0nYWJzb2x1dGUnJiZpbnN0YW5jZS5vcmlnaW5hbFBvc2l0aW9uIT09J2ZpeGVkJyl7T2JqZWN0KGRvbV9bImFkZENsYXNzIl0pKHBhcmVudCwnZWwtbG9hZGluZy1wYXJlbnQtLXJlbGF0aXZlJyk7fWlmKG9wdGlvbnMuZnVsbHNjcmVlbiYmb3B0aW9ucy5sb2NrKXtPYmplY3QoZG9tX1siYWRkQ2xhc3MiXSkocGFyZW50LCdlbC1sb2FkaW5nLXBhcmVudC0taGlkZGVuJyk7fXBhcmVudC5hcHBlbmRDaGlsZChpbnN0YW5jZS4kZWwpO2V4dGVybmFsX3Z1ZV9kZWZhdWx0LmEubmV4dFRpY2soZnVuY3Rpb24oKXtpbnN0YW5jZS52aXNpYmxlPXRydWU7fSk7aWYob3B0aW9ucy5mdWxsc2NyZWVuKXtmdWxsc2NyZWVuTG9hZGluZz1pbnN0YW5jZTt9cmV0dXJuIGluc3RhbmNlO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmM9c3JjX0xvYWRpbmc7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9sb2FkaW5nL2luZGV4LmpzCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfbG9hZGluZz17aW5zdGFsbDpmdW5jdGlvbiBpbnN0YWxsKFZ1ZSl7VnVlLnVzZShzcmNfZGlyZWN0aXZlKTtWdWUucHJvdG90eXBlLiRsb2FkaW5nPXNyYzt9LGRpcmVjdGl2ZTpzcmNfZGlyZWN0aXZlLHNlcnZpY2U6c3JjfTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2ljb24vc3JjL2ljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNiM2ZlN2Y0Jgp2YXIgaWNvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NiM2ZlN2Y0X3JlbmRlcj1mdW5jdGlvbiBpY29udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2IzZmU3ZjRfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJpIix7Y2xhc3M6ImVsLWljb24tIitfdm0ubmFtZX0pO307dmFyIGljb252dWVfdHlwZV90ZW1wbGF0ZV9pZF9jYjNmZTdmNF9zdGF0aWNSZW5kZXJGbnM9W107aWNvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NiM2ZlN2Y0X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pY29uL3NyYy9pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYjNmZTdmNCYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaWNvbi9zcmMvaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgaWNvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxJY29uJyxwcm9wczp7bmFtZTpTdHJpbmd9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ljb24vc3JjL2ljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19pY29udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWljb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pY29uL3NyYy9pY29uLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGljb25fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfaWNvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxpY29udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2IzZmU3ZjRfcmVuZGVyLGljb252dWVfdHlwZV90ZW1wbGF0ZV9pZF9jYjNmZTdmNF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGljb25fYXBpO31pY29uX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvaWNvbi9zcmMvaWNvbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgaWNvbj1pY29uX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaWNvbi9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2ljb24uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoaWNvbi5uYW1lLGljb24pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19pY29uPWljb247Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yb3cvc3JjL3Jvdy5qcwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19yb3c9e25hbWU6J0VsUm93Jyxjb21wb25lbnROYW1lOidFbFJvdycscHJvcHM6e3RhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDonZGl2J30sZ3V0dGVyOk51bWJlcix0eXBlOlN0cmluZyxqdXN0aWZ5Ont0eXBlOlN0cmluZyxkZWZhdWx0OidzdGFydCd9LGFsaWduOnt0eXBlOlN0cmluZyxkZWZhdWx0Oid0b3AnfX0sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uIHN0eWxlKCl7dmFyIHJldD17fTtpZih0aGlzLmd1dHRlcil7cmV0Lm1hcmdpbkxlZnQ9Jy0nK3RoaXMuZ3V0dGVyLzIrJ3B4JztyZXQubWFyZ2luUmlnaHQ9cmV0Lm1hcmdpbkxlZnQ7fXJldHVybiByZXQ7fX0scmVuZGVyOmZ1bmN0aW9uIHJlbmRlcihoKXtyZXR1cm4gaCh0aGlzLnRhZyx7Y2xhc3M6WydlbC1yb3cnLHRoaXMuanVzdGlmeSE9PSdzdGFydCc/J2lzLWp1c3RpZnktJyt0aGlzLmp1c3RpZnk6JycsdGhpcy5hbGlnbiE9PSd0b3AnPydpcy1hbGlnbi0nK3RoaXMuYWxpZ246JycseydlbC1yb3ctLWZsZXgnOnRoaXMudHlwZT09PSdmbGV4J31dLHN0eWxlOnRoaXMuc3R5bGV9LHRoaXMuJHNsb3RzLmRlZmF1bHQpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcm93L2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovc3JjX3Jvdy5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzcmNfcm93Lm5hbWUsc3JjX3Jvdyk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3Jvdz1zcmNfcm93Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sL3NyYy9jb2wuanMKdmFyIGNvbF90eXBlb2Y9dHlwZW9mIFN5bWJvbD09PSJmdW5jdGlvbiImJl90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcik9PT0ic3ltYm9sIj9mdW5jdGlvbihvYmope3JldHVybiBfdHlwZW9mMihvYmopO306ZnVuY3Rpb24ob2JqKXtyZXR1cm4gb2JqJiZ0eXBlb2YgU3ltYm9sPT09ImZ1bmN0aW9uIiYmb2JqLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZvYmohPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOl90eXBlb2YyKG9iaik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNvbD17bmFtZTonRWxDb2wnLHByb3BzOntzcGFuOnt0eXBlOk51bWJlcixkZWZhdWx0OjI0fSx0YWc6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J2Rpdid9LG9mZnNldDpOdW1iZXIscHVsbDpOdW1iZXIscHVzaDpOdW1iZXIseHM6W051bWJlcixPYmplY3RdLHNtOltOdW1iZXIsT2JqZWN0XSxtZDpbTnVtYmVyLE9iamVjdF0sbGc6W051bWJlcixPYmplY3RdLHhsOltOdW1iZXIsT2JqZWN0XX0sY29tcHV0ZWQ6e2d1dHRlcjpmdW5jdGlvbiBndXR0ZXIoKXt2YXIgcGFyZW50PXRoaXMuJHBhcmVudDt3aGlsZShwYXJlbnQmJnBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lIT09J0VsUm93Jyl7cGFyZW50PXBhcmVudC4kcGFyZW50O31yZXR1cm4gcGFyZW50P3BhcmVudC5ndXR0ZXI6MDt9fSxyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKGgpe3ZhciBfdGhpcz10aGlzO3ZhciBjbGFzc0xpc3Q9W107dmFyIHN0eWxlPXt9O2lmKHRoaXMuZ3V0dGVyKXtzdHlsZS5wYWRkaW5nTGVmdD10aGlzLmd1dHRlci8yKydweCc7c3R5bGUucGFkZGluZ1JpZ2h0PXN0eWxlLnBhZGRpbmdMZWZ0O31bJ3NwYW4nLCdvZmZzZXQnLCdwdWxsJywncHVzaCddLmZvckVhY2goZnVuY3Rpb24ocHJvcCl7aWYoX3RoaXNbcHJvcF18fF90aGlzW3Byb3BdPT09MCl7Y2xhc3NMaXN0LnB1c2gocHJvcCE9PSdzcGFuJz8nZWwtY29sLScrcHJvcCsnLScrX3RoaXNbcHJvcF06J2VsLWNvbC0nK190aGlzW3Byb3BdKTt9fSk7Wyd4cycsJ3NtJywnbWQnLCdsZycsJ3hsJ10uZm9yRWFjaChmdW5jdGlvbihzaXplKXtpZih0eXBlb2YgX3RoaXNbc2l6ZV09PT0nbnVtYmVyJyl7Y2xhc3NMaXN0LnB1c2goJ2VsLWNvbC0nK3NpemUrJy0nK190aGlzW3NpemVdKTt9ZWxzZSBpZihjb2xfdHlwZW9mKF90aGlzW3NpemVdKT09PSdvYmplY3QnKXt2YXIgcHJvcHM9X3RoaXNbc2l6ZV07T2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goZnVuY3Rpb24ocHJvcCl7Y2xhc3NMaXN0LnB1c2gocHJvcCE9PSdzcGFuJz8nZWwtY29sLScrc2l6ZSsnLScrcHJvcCsnLScrcHJvcHNbcHJvcF06J2VsLWNvbC0nK3NpemUrJy0nK3Byb3BzW3Byb3BdKTt9KTt9fSk7cmV0dXJuIGgodGhpcy50YWcse2NsYXNzOlsnZWwtY29sJyxjbGFzc0xpc3RdLHN0eWxlOnN0eWxlfSx0aGlzLiRzbG90cy5kZWZhdWx0KTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbC9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2NvbC5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChjb2wubmFtZSxjb2wpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19jb2w9Y29sOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtbGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTczZmVkZjUmCnZhciB1cGxvYWRfbGlzdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE3M2ZlZGY1X3JlbmRlcj1mdW5jdGlvbiB1cGxvYWRfbGlzdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE3M2ZlZGY1X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygidHJhbnNpdGlvbi1ncm91cCIse2NsYXNzOlsiZWwtdXBsb2FkLWxpc3QiLCJlbC11cGxvYWQtbGlzdC0tIitfdm0ubGlzdFR5cGUseyJpcy1kaXNhYmxlZCI6X3ZtLmRpc2FibGVkfV0sYXR0cnM6e3RhZzoidWwiLG5hbWU6ImVsLWxpc3QifX0sX3ZtLl9sKF92bS5maWxlcyxmdW5jdGlvbihmaWxlKXtyZXR1cm4gX2MoImxpIix7a2V5OmZpbGUudWlkLGNsYXNzOlsiZWwtdXBsb2FkLWxpc3RfX2l0ZW0iLCJpcy0iK2ZpbGUuc3RhdHVzLF92bS5mb2N1c2luZz8iZm9jdXNpbmciOiIiXSxhdHRyczp7dGFiaW5kZXg6IjAifSxvbjp7a2V5ZG93bjpmdW5jdGlvbiBrZXlkb3duKCRldmVudCl7aWYoISgiYnV0dG9uImluICRldmVudCkmJl92bS5faygkZXZlbnQua2V5Q29kZSwiZGVsZXRlIixbOCw0Nl0sJGV2ZW50LmtleSxbIkJhY2tzcGFjZSIsIkRlbGV0ZSIsIkRlbCJdKSl7cmV0dXJuIG51bGw7fSFfdm0uZGlzYWJsZWQmJl92bS4kZW1pdCgicmVtb3ZlIixmaWxlKTt9LGZvY3VzOmZ1bmN0aW9uIGZvY3VzKCRldmVudCl7X3ZtLmZvY3VzaW5nPXRydWU7fSxibHVyOmZ1bmN0aW9uIGJsdXIoJGV2ZW50KXtfdm0uZm9jdXNpbmc9ZmFsc2U7fSxjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5mb2N1c2luZz1mYWxzZTt9fX0sW192bS5fdCgiZGVmYXVsdCIsW2ZpbGUuc3RhdHVzIT09InVwbG9hZGluZyImJlsicGljdHVyZS1jYXJkIiwicGljdHVyZSJdLmluZGV4T2YoX3ZtLmxpc3RUeXBlKT4tMT9fYygiaW1nIix7c3RhdGljQ2xhc3M6ImVsLXVwbG9hZC1saXN0X19pdGVtLXRodW1ibmFpbCIsYXR0cnM6e3NyYzpmaWxlLnVybCxhbHQ6IiJ9fSk6X3ZtLl9lKCksX2MoImEiLHtzdGF0aWNDbGFzczoiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZSIsb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLmhhbmRsZUNsaWNrKGZpbGUpO319fSxbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1kb2N1bWVudCJ9KSxfdm0uX3YoX3ZtLl9zKGZpbGUubmFtZSkrIlxuICAgICAgIildKSxfYygibGFiZWwiLHtzdGF0aWNDbGFzczoiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsIn0sW19jKCJpIix7Y2xhc3M6eyJlbC1pY29uLXVwbG9hZC1zdWNjZXNzIjp0cnVlLCJlbC1pY29uLWNpcmNsZS1jaGVjayI6X3ZtLmxpc3RUeXBlPT09InRleHQiLCJlbC1pY29uLWNoZWNrIjpbInBpY3R1cmUtY2FyZCIsInBpY3R1cmUiXS5pbmRleE9mKF92bS5saXN0VHlwZSk+LTF9fSldKSwhX3ZtLmRpc2FibGVkP19jKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tY2xvc2UiLG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS4kZW1pdCgicmVtb3ZlIixmaWxlKTt9fX0pOl92bS5fZSgpLCFfdm0uZGlzYWJsZWQ/X2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1jbG9zZS10aXAifSxbX3ZtLl92KF92bS5fcyhfdm0udCgiZWwudXBsb2FkLmRlbGV0ZVRpcCIpKSldKTpfdm0uX2UoKSxmaWxlLnN0YXR1cz09PSJ1cGxvYWRpbmciP19jKCJlbC1wcm9ncmVzcyIse2F0dHJzOnt0eXBlOl92bS5saXN0VHlwZT09PSJwaWN0dXJlLWNhcmQiPyJjaXJjbGUiOiJsaW5lIiwic3Ryb2tlLXdpZHRoIjpfdm0ubGlzdFR5cGU9PT0icGljdHVyZS1jYXJkIj82OjIscGVyY2VudGFnZTpfdm0ucGFyc2VQZXJjZW50YWdlKGZpbGUucGVyY2VudGFnZSl9fSk6X3ZtLl9lKCksX3ZtLmxpc3RUeXBlPT09InBpY3R1cmUtY2FyZCI/X2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyJ9LFtfdm0uaGFuZGxlUHJldmlldyYmX3ZtLmxpc3RUeXBlPT09InBpY3R1cmUtY2FyZCI/X2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tcHJldmlldyIsb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLmhhbmRsZVByZXZpZXcoZmlsZSk7fX19LFtfYygiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLXpvb20taW4ifSldKTpfdm0uX2UoKSwhX3ZtLmRpc2FibGVkP19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXVwbG9hZC1saXN0X19pdGVtLWRlbGV0ZSIsb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLiRlbWl0KCJyZW1vdmUiLGZpbGUpO319fSxbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1kZWxldGUifSldKTpfdm0uX2UoKV0pOl92bS5fZSgpXSx7ZmlsZTpmaWxlfSldLDIpO30pLDApO307dmFyIHVwbG9hZF9saXN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMTczZmVkZjVfc3RhdGljUmVuZGVyRm5zPVtdO3VwbG9hZF9saXN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMTczZmVkZjVfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE3M2ZlZGY1JgovLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi9wcm9ncmVzcyIKdmFyIHByb2dyZXNzXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTt2YXIgcHJvZ3Jlc3NfZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHByb2dyZXNzXyk7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtbGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdXBsb2FkX2xpc3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsVXBsb2FkTGlzdCcsbWl4aW5zOltsb2NhbGVfZGVmYXVsdC5hXSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57Zm9jdXNpbmc6ZmFsc2V9O30sY29tcG9uZW50czp7RWxQcm9ncmVzczpwcm9ncmVzc19kZWZhdWx0LmF9LHByb3BzOntmaWxlczp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJuW107fX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxoYW5kbGVQcmV2aWV3OkZ1bmN0aW9uLGxpc3RUeXBlOlN0cmluZ30sbWV0aG9kczp7cGFyc2VQZXJjZW50YWdlOmZ1bmN0aW9uIHBhcnNlUGVyY2VudGFnZSh2YWwpe3JldHVybiBwYXJzZUludCh2YWwsMTApO30saGFuZGxlQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlQ2xpY2soZmlsZSl7dGhpcy5oYW5kbGVQcmV2aWV3JiZ0aGlzLmhhbmRsZVByZXZpZXcoZmlsZSk7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtbGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3VwbG9hZF9saXN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXVwbG9hZF9saXN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtbGlzdC52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciB1cGxvYWRfbGlzdF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY191cGxvYWRfbGlzdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyx1cGxvYWRfbGlzdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE3M2ZlZGY1X3JlbmRlcix1cGxvYWRfbGlzdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE3M2ZlZGY1X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgdXBsb2FkX2xpc3RfYXBpO311cGxvYWRfbGlzdF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWxpc3QudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHVwbG9hZF9saXN0PXVwbG9hZF9saXN0X2NvbXBvbmVudC5leHBvcnRzOy8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImJhYmVsLWhlbHBlci12dWUtanN4LW1lcmdlLXByb3BzIgp2YXIgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfPV9fd2VicGFja19yZXF1aXJlX18oMjQpO3ZhciBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvYWpheC5qcwpmdW5jdGlvbiBnZXRFcnJvcihhY3Rpb24sb3B0aW9uLHhocil7dmFyIG1zZz12b2lkIDA7aWYoeGhyLnJlc3BvbnNlKXttc2c9JycrKHhoci5yZXNwb25zZS5lcnJvcnx8eGhyLnJlc3BvbnNlKTt9ZWxzZSBpZih4aHIucmVzcG9uc2VUZXh0KXttc2c9JycreGhyLnJlc3BvbnNlVGV4dDt9ZWxzZXttc2c9J2ZhaWwgdG8gcG9zdCAnK2FjdGlvbisnICcreGhyLnN0YXR1czt9dmFyIGVycj1uZXcgRXJyb3IobXNnKTtlcnIuc3RhdHVzPXhoci5zdGF0dXM7ZXJyLm1ldGhvZD0ncG9zdCc7ZXJyLnVybD1hY3Rpb247cmV0dXJuIGVycjt9ZnVuY3Rpb24gZ2V0Qm9keSh4aHIpe3ZhciB0ZXh0PXhoci5yZXNwb25zZVRleHR8fHhoci5yZXNwb25zZTtpZighdGV4dCl7cmV0dXJuIHRleHQ7fXRyeXtyZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KTt9Y2F0Y2goZSl7cmV0dXJuIHRleHQ7fX1mdW5jdGlvbiB1cGxvYWQob3B0aW9uKXtpZih0eXBlb2YgWE1MSHR0cFJlcXVlc3Q9PT0ndW5kZWZpbmVkJyl7cmV0dXJuO312YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdCgpO3ZhciBhY3Rpb249b3B0aW9uLmFjdGlvbjtpZih4aHIudXBsb2FkKXt4aHIudXBsb2FkLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24gcHJvZ3Jlc3MoZSl7aWYoZS50b3RhbD4wKXtlLnBlcmNlbnQ9ZS5sb2FkZWQvZS50b3RhbCoxMDA7fW9wdGlvbi5vblByb2dyZXNzKGUpO307fXZhciBmb3JtRGF0YT1uZXcgRm9ybURhdGEoKTtpZihvcHRpb24uZGF0YSl7T2JqZWN0LmtleXMob3B0aW9uLmRhdGEpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtmb3JtRGF0YS5hcHBlbmQoa2V5LG9wdGlvbi5kYXRhW2tleV0pO30pO31mb3JtRGF0YS5hcHBlbmQob3B0aW9uLmZpbGVuYW1lLG9wdGlvbi5maWxlLG9wdGlvbi5maWxlLm5hbWUpO3hoci5vbmVycm9yPWZ1bmN0aW9uIGVycm9yKGUpe29wdGlvbi5vbkVycm9yKGUpO307eGhyLm9ubG9hZD1mdW5jdGlvbiBvbmxvYWQoKXtpZih4aHIuc3RhdHVzPDIwMHx8eGhyLnN0YXR1cz49MzAwKXtyZXR1cm4gb3B0aW9uLm9uRXJyb3IoZ2V0RXJyb3IoYWN0aW9uLG9wdGlvbix4aHIpKTt9b3B0aW9uLm9uU3VjY2VzcyhnZXRCb2R5KHhocikpO307eGhyLm9wZW4oJ3Bvc3QnLGFjdGlvbix0cnVlKTtpZihvcHRpb24ud2l0aENyZWRlbnRpYWxzJiYnd2l0aENyZWRlbnRpYWxzJ2luIHhocil7eGhyLndpdGhDcmVkZW50aWFscz10cnVlO312YXIgaGVhZGVycz1vcHRpb24uaGVhZGVyc3x8e307Zm9yKHZhciBpdGVtIGluIGhlYWRlcnMpe2lmKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaXRlbSkmJmhlYWRlcnNbaXRlbV0hPT1udWxsKXt4aHIuc2V0UmVxdWVzdEhlYWRlcihpdGVtLGhlYWRlcnNbaXRlbV0pO319eGhyLnNlbmQoZm9ybURhdGEpO3JldHVybiB4aHI7fS8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtZHJhZ2dlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2ViYmYyMTkmCnZhciB1cGxvYWRfZHJhZ2dlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdlYmJmMjE5X3JlbmRlcj1mdW5jdGlvbiB1cGxvYWRfZHJhZ2dlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdlYmJmMjE5X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXVwbG9hZC1kcmFnZ2VyIixjbGFzczp7ImlzLWRyYWdvdmVyIjpfdm0uZHJhZ292ZXJ9LG9uOntkcm9wOmZ1bmN0aW9uIGRyb3AoJGV2ZW50KXskZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gX3ZtLm9uRHJvcCgkZXZlbnQpO30sZHJhZ292ZXI6ZnVuY3Rpb24gZHJhZ292ZXIoJGV2ZW50KXskZXZlbnQucHJldmVudERlZmF1bHQoKTtyZXR1cm4gX3ZtLm9uRHJhZ292ZXIoJGV2ZW50KTt9LGRyYWdsZWF2ZTpmdW5jdGlvbiBkcmFnbGVhdmUoJGV2ZW50KXskZXZlbnQucHJldmVudERlZmF1bHQoKTtfdm0uZHJhZ292ZXI9ZmFsc2U7fX19LFtfdm0uX3QoImRlZmF1bHQiKV0sMik7fTt2YXIgdXBsb2FkX2RyYWdnZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZWJiZjIxOV9zdGF0aWNSZW5kZXJGbnM9W107dXBsb2FkX2RyYWdnZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZWJiZjIxOV9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtZHJhZ2dlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2ViYmYyMTkmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWRyYWdnZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHVwbG9hZF9kcmFnZ2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFVwbG9hZERyYWcnLHByb3BzOntkaXNhYmxlZDpCb29sZWFufSxpbmplY3Q6e3VwbG9hZGVyOntkZWZhdWx0OicnfX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2RyYWdvdmVyOmZhbHNlfTt9LG1ldGhvZHM6e29uRHJhZ292ZXI6ZnVuY3Rpb24gb25EcmFnb3Zlcigpe2lmKCF0aGlzLmRpc2FibGVkKXt0aGlzLmRyYWdvdmVyPXRydWU7fX0sb25Ecm9wOmZ1bmN0aW9uIG9uRHJvcChlKXtpZih0aGlzLmRpc2FibGVkfHwhdGhpcy51cGxvYWRlcilyZXR1cm47dmFyIGFjY2VwdD10aGlzLnVwbG9hZGVyLmFjY2VwdDt0aGlzLmRyYWdvdmVyPWZhbHNlO2lmKCFhY2NlcHQpe3RoaXMuJGVtaXQoJ2ZpbGUnLGUuZGF0YVRyYW5zZmVyLmZpbGVzKTtyZXR1cm47fXRoaXMuJGVtaXQoJ2ZpbGUnLFtdLnNsaWNlLmNhbGwoZS5kYXRhVHJhbnNmZXIuZmlsZXMpLmZpbHRlcihmdW5jdGlvbihmaWxlKXt2YXIgdHlwZT1maWxlLnR5cGUsbmFtZT1maWxlLm5hbWU7dmFyIGV4dGVuc2lvbj1uYW1lLmluZGV4T2YoJy4nKT4tMT8nLicrbmFtZS5zcGxpdCgnLicpLnBvcCgpOicnO3ZhciBiYXNlVHlwZT10eXBlLnJlcGxhY2UoL1wvLiokLywnJyk7cmV0dXJuIGFjY2VwdC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbih0eXBlKXtyZXR1cm4gdHlwZS50cmltKCk7fSkuZmlsdGVyKGZ1bmN0aW9uKHR5cGUpe3JldHVybiB0eXBlO30pLnNvbWUoZnVuY3Rpb24oYWNjZXB0ZWRUeXBlKXtpZigvXC4uKyQvLnRlc3QoYWNjZXB0ZWRUeXBlKSl7cmV0dXJuIGV4dGVuc2lvbj09PWFjY2VwdGVkVHlwZTt9aWYoL1wvXCokLy50ZXN0KGFjY2VwdGVkVHlwZSkpe3JldHVybiBiYXNlVHlwZT09PWFjY2VwdGVkVHlwZS5yZXBsYWNlKC9cL1wqJC8sJycpO31pZigvXlteXC9dK1wvW15cL10rJC8udGVzdChhY2NlcHRlZFR5cGUpKXtyZXR1cm4gdHlwZT09PWFjY2VwdGVkVHlwZTt9cmV0dXJuIGZhbHNlO30pO30pKTt9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC1kcmFnZ2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfdXBsb2FkX2RyYWdnZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189dXBsb2FkX2RyYWdnZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC1kcmFnZ2VyLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHVwbG9hZF9kcmFnZ2VyX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX3VwbG9hZF9kcmFnZ2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHVwbG9hZF9kcmFnZ2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfN2ViYmYyMTlfcmVuZGVyLHVwbG9hZF9kcmFnZ2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfN2ViYmYyMTlfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciB1cGxvYWRfZHJhZ2dlcl9hcGk7fXVwbG9hZF9kcmFnZ2VyX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtZHJhZ2dlci52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdXBsb2FkX2RyYWdnZXI9dXBsb2FkX2RyYWdnZXJfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHVwbG9hZHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17aW5qZWN0OlsndXBsb2FkZXInXSxjb21wb25lbnRzOntVcGxvYWREcmFnZ2VyOnVwbG9hZF9kcmFnZ2VyfSxwcm9wczp7dHlwZTpTdHJpbmcsYWN0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDp0cnVlfSxuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OidmaWxlJ30sZGF0YTpPYmplY3QsaGVhZGVyczpPYmplY3Qsd2l0aENyZWRlbnRpYWxzOkJvb2xlYW4sbXVsdGlwbGU6Qm9vbGVhbixhY2NlcHQ6U3RyaW5nLG9uU3RhcnQ6RnVuY3Rpb24sb25Qcm9ncmVzczpGdW5jdGlvbixvblN1Y2Nlc3M6RnVuY3Rpb24sb25FcnJvcjpGdW5jdGlvbixiZWZvcmVVcGxvYWQ6RnVuY3Rpb24sZHJhZzpCb29sZWFuLG9uUHJldmlldzp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7fX0sb25SZW1vdmU6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe319LGZpbGVMaXN0OkFycmF5LGF1dG9VcGxvYWQ6Qm9vbGVhbixsaXN0VHlwZTpTdHJpbmcsaHR0cFJlcXVlc3Q6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDp1cGxvYWR9LGRpc2FibGVkOkJvb2xlYW4sbGltaXQ6TnVtYmVyLG9uRXhjZWVkOkZ1bmN0aW9ufSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57bW91c2VvdmVyOmZhbHNlLHJlcXM6e319O30sbWV0aG9kczp7aXNJbWFnZTpmdW5jdGlvbiBpc0ltYWdlKHN0cil7cmV0dXJuIHN0ci5pbmRleE9mKCdpbWFnZScpIT09LTE7fSxoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2KXt2YXIgZmlsZXM9ZXYudGFyZ2V0LmZpbGVzO2lmKCFmaWxlcylyZXR1cm47dGhpcy51cGxvYWRGaWxlcyhmaWxlcyk7fSx1cGxvYWRGaWxlczpmdW5jdGlvbiB1cGxvYWRGaWxlcyhmaWxlcyl7dmFyIF90aGlzPXRoaXM7aWYodGhpcy5saW1pdCYmdGhpcy5maWxlTGlzdC5sZW5ndGgrZmlsZXMubGVuZ3RoPnRoaXMubGltaXQpe3RoaXMub25FeGNlZWQmJnRoaXMub25FeGNlZWQoZmlsZXMsdGhpcy5maWxlTGlzdCk7cmV0dXJuO312YXIgcG9zdEZpbGVzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZpbGVzKTtpZighdGhpcy5tdWx0aXBsZSl7cG9zdEZpbGVzPXBvc3RGaWxlcy5zbGljZSgwLDEpO31pZihwb3N0RmlsZXMubGVuZ3RoPT09MCl7cmV0dXJuO31wb3N0RmlsZXMuZm9yRWFjaChmdW5jdGlvbihyYXdGaWxlKXtfdGhpcy5vblN0YXJ0KHJhd0ZpbGUpO2lmKF90aGlzLmF1dG9VcGxvYWQpX3RoaXMudXBsb2FkKHJhd0ZpbGUpO30pO30sdXBsb2FkOmZ1bmN0aW9uIHVwbG9hZChyYXdGaWxlKXt2YXIgX3RoaXMyPXRoaXM7dGhpcy4kcmVmcy5pbnB1dC52YWx1ZT1udWxsO2lmKCF0aGlzLmJlZm9yZVVwbG9hZCl7cmV0dXJuIHRoaXMucG9zdChyYXdGaWxlKTt9dmFyIGJlZm9yZT10aGlzLmJlZm9yZVVwbG9hZChyYXdGaWxlKTtpZihiZWZvcmUmJmJlZm9yZS50aGVuKXtiZWZvcmUudGhlbihmdW5jdGlvbihwcm9jZXNzZWRGaWxlKXt2YXIgZmlsZVR5cGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3NlZEZpbGUpO2lmKGZpbGVUeXBlPT09J1tvYmplY3QgRmlsZV0nfHxmaWxlVHlwZT09PSdbb2JqZWN0IEJsb2JdJyl7aWYoZmlsZVR5cGU9PT0nW29iamVjdCBCbG9iXScpe3Byb2Nlc3NlZEZpbGU9bmV3IEZpbGUoW3Byb2Nlc3NlZEZpbGVdLHJhd0ZpbGUubmFtZSx7dHlwZTpyYXdGaWxlLnR5cGV9KTt9Zm9yKHZhciBwIGluIHJhd0ZpbGUpe2lmKHJhd0ZpbGUuaGFzT3duUHJvcGVydHkocCkpe3Byb2Nlc3NlZEZpbGVbcF09cmF3RmlsZVtwXTt9fV90aGlzMi5wb3N0KHByb2Nlc3NlZEZpbGUpO31lbHNle190aGlzMi5wb3N0KHJhd0ZpbGUpO319LGZ1bmN0aW9uKCl7X3RoaXMyLm9uUmVtb3ZlKG51bGwscmF3RmlsZSk7fSk7fWVsc2UgaWYoYmVmb3JlIT09ZmFsc2Upe3RoaXMucG9zdChyYXdGaWxlKTt9ZWxzZXt0aGlzLm9uUmVtb3ZlKG51bGwscmF3RmlsZSk7fX0sYWJvcnQ6ZnVuY3Rpb24gYWJvcnQoZmlsZSl7dmFyIHJlcXM9dGhpcy5yZXFzO2lmKGZpbGUpe3ZhciB1aWQ9ZmlsZTtpZihmaWxlLnVpZCl1aWQ9ZmlsZS51aWQ7aWYocmVxc1t1aWRdKXtyZXFzW3VpZF0uYWJvcnQoKTt9fWVsc2V7T2JqZWN0LmtleXMocmVxcykuZm9yRWFjaChmdW5jdGlvbih1aWQpe2lmKHJlcXNbdWlkXSlyZXFzW3VpZF0uYWJvcnQoKTtkZWxldGUgcmVxc1t1aWRdO30pO319LHBvc3Q6ZnVuY3Rpb24gcG9zdChyYXdGaWxlKXt2YXIgX3RoaXMzPXRoaXM7dmFyIHVpZD1yYXdGaWxlLnVpZDt2YXIgb3B0aW9ucz17aGVhZGVyczp0aGlzLmhlYWRlcnMsd2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLGZpbGU6cmF3RmlsZSxkYXRhOnRoaXMuZGF0YSxmaWxlbmFtZTp0aGlzLm5hbWUsYWN0aW9uOnRoaXMuYWN0aW9uLG9uUHJvZ3Jlc3M6ZnVuY3Rpb24gb25Qcm9ncmVzcyhlKXtfdGhpczMub25Qcm9ncmVzcyhlLHJhd0ZpbGUpO30sb25TdWNjZXNzOmZ1bmN0aW9uIG9uU3VjY2VzcyhyZXMpe190aGlzMy5vblN1Y2Nlc3MocmVzLHJhd0ZpbGUpO2RlbGV0ZSBfdGhpczMucmVxc1t1aWRdO30sb25FcnJvcjpmdW5jdGlvbiBvbkVycm9yKGVycil7X3RoaXMzLm9uRXJyb3IoZXJyLHJhd0ZpbGUpO2RlbGV0ZSBfdGhpczMucmVxc1t1aWRdO319O3ZhciByZXE9dGhpcy5odHRwUmVxdWVzdChvcHRpb25zKTt0aGlzLnJlcXNbdWlkXT1yZXE7aWYocmVxJiZyZXEudGhlbil7cmVxLnRoZW4ob3B0aW9ucy5vblN1Y2Nlc3Msb3B0aW9ucy5vbkVycm9yKTt9fSxoYW5kbGVDbGljazpmdW5jdGlvbiBoYW5kbGVDbGljaygpe2lmKCF0aGlzLmRpc2FibGVkKXt0aGlzLiRyZWZzLmlucHV0LnZhbHVlPW51bGw7dGhpcy4kcmVmcy5pbnB1dC5jbGljaygpO319LGhhbmRsZUtleWRvd246ZnVuY3Rpb24gaGFuZGxlS2V5ZG93bihlKXtpZihlLnRhcmdldCE9PWUuY3VycmVudFRhcmdldClyZXR1cm47aWYoZS5rZXlDb2RlPT09MTN8fGUua2V5Q29kZT09PTMyKXt0aGlzLmhhbmRsZUNsaWNrKCk7fX19LHJlbmRlcjpmdW5jdGlvbiByZW5kZXIoaCl7dmFyIGhhbmRsZUNsaWNrPXRoaXMuaGFuZGxlQ2xpY2ssZHJhZz10aGlzLmRyYWcsbmFtZT10aGlzLm5hbWUsaGFuZGxlQ2hhbmdlPXRoaXMuaGFuZGxlQ2hhbmdlLG11bHRpcGxlPXRoaXMubXVsdGlwbGUsYWNjZXB0PXRoaXMuYWNjZXB0LGxpc3RUeXBlPXRoaXMubGlzdFR5cGUsdXBsb2FkRmlsZXM9dGhpcy51cGxvYWRGaWxlcyxkaXNhYmxlZD10aGlzLmRpc2FibGVkLGhhbmRsZUtleWRvd249dGhpcy5oYW5kbGVLZXlkb3duO3ZhciBkYXRhPXtjbGFzczp7J2VsLXVwbG9hZCc6dHJ1ZX0sb246e2NsaWNrOmhhbmRsZUNsaWNrLGtleWRvd246aGFuZGxlS2V5ZG93bn19O2RhdGEuY2xhc3NbJ2VsLXVwbG9hZC0tJytsaXN0VHlwZV09dHJ1ZTtyZXR1cm4gaCgnZGl2JyxleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW2RhdGEse2F0dHJzOnt0YWJpbmRleDonMCd9fV0pLFtkcmFnP2goJ3VwbG9hZC1kcmFnZ2VyJyx7YXR0cnM6e2Rpc2FibGVkOmRpc2FibGVkfSxvbjp7J2ZpbGUnOnVwbG9hZEZpbGVzfX0sW3RoaXMuJHNsb3RzLmRlZmF1bHRdKTp0aGlzLiRzbG90cy5kZWZhdWx0LGgoJ2lucHV0Jyx7J2NsYXNzJzonZWwtdXBsb2FkX19pbnB1dCcsYXR0cnM6e3R5cGU6J2ZpbGUnLG5hbWU6bmFtZSxtdWx0aXBsZTptdWx0aXBsZSxhY2NlcHQ6YWNjZXB0fSxyZWY6J2lucHV0Jyxvbjp7J2NoYW5nZSc6aGFuZGxlQ2hhbmdlfX0pXSk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3VwbG9hZHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz11cGxvYWR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC52dWUKdmFyIHVwbG9hZF9yZW5kZXIsdXBsb2FkX3N0YXRpY1JlbmRlckZuczsvKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHVwbG9hZF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY191cGxvYWR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sdXBsb2FkX3JlbmRlcix1cGxvYWRfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciB1cGxvYWRfYXBpO311cGxvYWRfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3VwbG9hZD11cGxvYWRfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdXBsb2FkL3NyYy9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCmZ1bmN0aW9uIHNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX25vb3AoKXt9LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsVXBsb2FkJyxtaXhpbnM6W21pZ3JhdGluZ19kZWZhdWx0LmFdLGNvbXBvbmVudHM6e0VsUHJvZ3Jlc3M6cHJvZ3Jlc3NfZGVmYXVsdC5hLFVwbG9hZExpc3Q6dXBsb2FkX2xpc3QsVXBsb2FkOnNyY191cGxvYWR9LHByb3ZpZGU6ZnVuY3Rpb24gcHJvdmlkZSgpe3JldHVybnt1cGxvYWRlcjp0aGlzfTt9LGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OicnfX0scHJvcHM6e2FjdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6dHJ1ZX0saGVhZGVyczp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybnt9O319LGRhdGE6T2JqZWN0LG11bHRpcGxlOkJvb2xlYW4sbmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDonZmlsZSd9LGRyYWc6Qm9vbGVhbixkcmFnZ2VyOkJvb2xlYW4sd2l0aENyZWRlbnRpYWxzOkJvb2xlYW4sc2hvd0ZpbGVMaXN0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxhY2NlcHQ6U3RyaW5nLHR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J3NlbGVjdCd9LGJlZm9yZVVwbG9hZDpGdW5jdGlvbixiZWZvcmVSZW1vdmU6RnVuY3Rpb24sb25SZW1vdmU6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19ub29wfSxvbkNoYW5nZTp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OnNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX25vb3B9LG9uUHJldmlldzp7dHlwZTpGdW5jdGlvbn0sb25TdWNjZXNzOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6c3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfbm9vcH0sb25Qcm9ncmVzczp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OnNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX25vb3B9LG9uRXJyb3I6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19ub29wfSxmaWxlTGlzdDp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJuW107fX0sYXV0b1VwbG9hZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sbGlzdFR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J3RleHQnLy8gdGV4dCxwaWN0dXJlLHBpY3R1cmUtY2FyZAp9LGh0dHBSZXF1ZXN0OkZ1bmN0aW9uLGRpc2FibGVkOkJvb2xlYW4sbGltaXQ6TnVtYmVyLG9uRXhjZWVkOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6c3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfbm9vcH19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnt1cGxvYWRGaWxlczpbXSxkcmFnT3ZlcjpmYWxzZSxkcmFnaW5nOmZhbHNlLHRlbXBJbmRleDoxfTt9LGNvbXB1dGVkOnt1cGxvYWREaXNhYmxlZDpmdW5jdGlvbiB1cGxvYWREaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZDt9fSx3YXRjaDp7bGlzdFR5cGU6ZnVuY3Rpb24gbGlzdFR5cGUodHlwZSl7aWYodHlwZT09PSdwaWN0dXJlLWNhcmQnfHx0eXBlPT09J3BpY3R1cmUnKXt0aGlzLnVwbG9hZEZpbGVzPXRoaXMudXBsb2FkRmlsZXMubWFwKGZ1bmN0aW9uKGZpbGUpe2lmKCFmaWxlLnVybCYmZmlsZS5yYXcpe3RyeXtmaWxlLnVybD1VUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUucmF3KTt9Y2F0Y2goZXJyKXtjb25zb2xlLmVycm9yKCdbRWxlbWVudCBFcnJvcl1bVXBsb2FkXScsZXJyKTt9fXJldHVybiBmaWxlO30pO319LGZpbGVMaXN0OntpbW1lZGlhdGU6dHJ1ZSxoYW5kbGVyOmZ1bmN0aW9uIGhhbmRsZXIoZmlsZUxpc3Qpe3ZhciBfdGhpcz10aGlzO3RoaXMudXBsb2FkRmlsZXM9ZmlsZUxpc3QubWFwKGZ1bmN0aW9uKGl0ZW0pe2l0ZW0udWlkPWl0ZW0udWlkfHxEYXRlLm5vdygpK190aGlzLnRlbXBJbmRleCsrO2l0ZW0uc3RhdHVzPWl0ZW0uc3RhdHVzfHwnc3VjY2Vzcyc7cmV0dXJuIGl0ZW07fSk7fX19LG1ldGhvZHM6e2hhbmRsZVN0YXJ0OmZ1bmN0aW9uIGhhbmRsZVN0YXJ0KHJhd0ZpbGUpe3Jhd0ZpbGUudWlkPURhdGUubm93KCkrdGhpcy50ZW1wSW5kZXgrKzt2YXIgZmlsZT17c3RhdHVzOidyZWFkeScsbmFtZTpyYXdGaWxlLm5hbWUsc2l6ZTpyYXdGaWxlLnNpemUscGVyY2VudGFnZTowLHVpZDpyYXdGaWxlLnVpZCxyYXc6cmF3RmlsZX07aWYodGhpcy5saXN0VHlwZT09PSdwaWN0dXJlLWNhcmQnfHx0aGlzLmxpc3RUeXBlPT09J3BpY3R1cmUnKXt0cnl7ZmlsZS51cmw9VVJMLmNyZWF0ZU9iamVjdFVSTChyYXdGaWxlKTt9Y2F0Y2goZXJyKXtjb25zb2xlLmVycm9yKCdbRWxlbWVudCBFcnJvcl1bVXBsb2FkXScsZXJyKTtyZXR1cm47fX10aGlzLnVwbG9hZEZpbGVzLnB1c2goZmlsZSk7dGhpcy5vbkNoYW5nZShmaWxlLHRoaXMudXBsb2FkRmlsZXMpO30saGFuZGxlUHJvZ3Jlc3M6ZnVuY3Rpb24gaGFuZGxlUHJvZ3Jlc3MoZXYscmF3RmlsZSl7dmFyIGZpbGU9dGhpcy5nZXRGaWxlKHJhd0ZpbGUpO3RoaXMub25Qcm9ncmVzcyhldixmaWxlLHRoaXMudXBsb2FkRmlsZXMpO2ZpbGUuc3RhdHVzPSd1cGxvYWRpbmcnO2ZpbGUucGVyY2VudGFnZT1ldi5wZXJjZW50fHwwO30saGFuZGxlU3VjY2VzczpmdW5jdGlvbiBoYW5kbGVTdWNjZXNzKHJlcyxyYXdGaWxlKXt2YXIgZmlsZT10aGlzLmdldEZpbGUocmF3RmlsZSk7aWYoZmlsZSl7ZmlsZS5zdGF0dXM9J3N1Y2Nlc3MnO2ZpbGUucmVzcG9uc2U9cmVzO3RoaXMub25TdWNjZXNzKHJlcyxmaWxlLHRoaXMudXBsb2FkRmlsZXMpO3RoaXMub25DaGFuZ2UoZmlsZSx0aGlzLnVwbG9hZEZpbGVzKTt9fSxoYW5kbGVFcnJvcjpmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIscmF3RmlsZSl7dmFyIGZpbGU9dGhpcy5nZXRGaWxlKHJhd0ZpbGUpO3ZhciBmaWxlTGlzdD10aGlzLnVwbG9hZEZpbGVzO2ZpbGUuc3RhdHVzPSdmYWlsJztmaWxlTGlzdC5zcGxpY2UoZmlsZUxpc3QuaW5kZXhPZihmaWxlKSwxKTt0aGlzLm9uRXJyb3IoZXJyLGZpbGUsdGhpcy51cGxvYWRGaWxlcyk7dGhpcy5vbkNoYW5nZShmaWxlLHRoaXMudXBsb2FkRmlsZXMpO30saGFuZGxlUmVtb3ZlOmZ1bmN0aW9uIGhhbmRsZVJlbW92ZShmaWxlLHJhdyl7dmFyIF90aGlzMj10aGlzO2lmKHJhdyl7ZmlsZT10aGlzLmdldEZpbGUocmF3KTt9dmFyIGRvUmVtb3ZlPWZ1bmN0aW9uIGRvUmVtb3ZlKCl7X3RoaXMyLmFib3J0KGZpbGUpO3ZhciBmaWxlTGlzdD1fdGhpczIudXBsb2FkRmlsZXM7ZmlsZUxpc3Quc3BsaWNlKGZpbGVMaXN0LmluZGV4T2YoZmlsZSksMSk7X3RoaXMyLm9uUmVtb3ZlKGZpbGUsZmlsZUxpc3QpO307aWYoIXRoaXMuYmVmb3JlUmVtb3ZlKXtkb1JlbW92ZSgpO31lbHNlIGlmKHR5cGVvZiB0aGlzLmJlZm9yZVJlbW92ZT09PSdmdW5jdGlvbicpe3ZhciBiZWZvcmU9dGhpcy5iZWZvcmVSZW1vdmUoZmlsZSx0aGlzLnVwbG9hZEZpbGVzKTtpZihiZWZvcmUmJmJlZm9yZS50aGVuKXtiZWZvcmUudGhlbihmdW5jdGlvbigpe2RvUmVtb3ZlKCk7fSxzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19ub29wKTt9ZWxzZSBpZihiZWZvcmUhPT1mYWxzZSl7ZG9SZW1vdmUoKTt9fX0sZ2V0RmlsZTpmdW5jdGlvbiBnZXRGaWxlKHJhd0ZpbGUpe3ZhciBmaWxlTGlzdD10aGlzLnVwbG9hZEZpbGVzO3ZhciB0YXJnZXQ9dm9pZCAwO2ZpbGVMaXN0LmV2ZXJ5KGZ1bmN0aW9uKGl0ZW0pe3RhcmdldD1yYXdGaWxlLnVpZD09PWl0ZW0udWlkP2l0ZW06bnVsbDtyZXR1cm4hdGFyZ2V0O30pO3JldHVybiB0YXJnZXQ7fSxhYm9ydDpmdW5jdGlvbiBhYm9ydChmaWxlKXt0aGlzLiRyZWZzWyd1cGxvYWQtaW5uZXInXS5hYm9ydChmaWxlKTt9LGNsZWFyRmlsZXM6ZnVuY3Rpb24gY2xlYXJGaWxlcygpe3RoaXMudXBsb2FkRmlsZXM9W107fSxzdWJtaXQ6ZnVuY3Rpb24gc3VibWl0KCl7dmFyIF90aGlzMz10aGlzO3RoaXMudXBsb2FkRmlsZXMuZmlsdGVyKGZ1bmN0aW9uKGZpbGUpe3JldHVybiBmaWxlLnN0YXR1cz09PSdyZWFkeSc7fSkuZm9yRWFjaChmdW5jdGlvbihmaWxlKXtfdGhpczMuJHJlZnNbJ3VwbG9hZC1pbm5lciddLnVwbG9hZChmaWxlLnJhdyk7fSk7fSxnZXRNaWdyYXRpbmdDb25maWc6ZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCl7cmV0dXJue3Byb3BzOnsnZGVmYXVsdC1maWxlLWxpc3QnOidkZWZhdWx0LWZpbGUtbGlzdCBpcyByZW5hbWVkIHRvIGZpbGUtbGlzdC4nLCdzaG93LXVwbG9hZC1saXN0Jzonc2hvdy11cGxvYWQtbGlzdCBpcyByZW5hbWVkIHRvIHNob3ctZmlsZS1saXN0LicsJ3RodW1ibmFpbC1tb2RlJzondGh1bWJuYWlsLW1vZGUgaGFzIGJlZW4gZGVwcmVjYXRlZCwgeW91IGNhbiBpbXBsZW1lbnQgdGhlIHNhbWUgZWZmZWN0IGFjY29yZGluZyB0byB0aGlzIGNhc2U6IGh0dHA6Ly9lbGVtZW50LmVsZW1lLmlvLyMvemgtQ04vY29tcG9uZW50L3VwbG9hZCN5b25nLWh1LXRvdS14aWFuZy1zaGFuZy1jaHVhbid9fTt9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKXt0aGlzLnVwbG9hZEZpbGVzLmZvckVhY2goZnVuY3Rpb24oZmlsZSl7aWYoZmlsZS51cmwmJmZpbGUudXJsLmluZGV4T2YoJ2Jsb2I6Jyk9PT0wKXtVUkwucmV2b2tlT2JqZWN0VVJMKGZpbGUudXJsKTt9fSk7fSxyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKGgpe3ZhciBfdGhpczQ9dGhpczt2YXIgdXBsb2FkTGlzdD12b2lkIDA7aWYodGhpcy5zaG93RmlsZUxpc3Qpe3VwbG9hZExpc3Q9aCh1cGxvYWRfbGlzdCx7YXR0cnM6e2Rpc2FibGVkOnRoaXMudXBsb2FkRGlzYWJsZWQsbGlzdFR5cGU6dGhpcy5saXN0VHlwZSxmaWxlczp0aGlzLnVwbG9hZEZpbGVzLGhhbmRsZVByZXZpZXc6dGhpcy5vblByZXZpZXd9LG9uOnsncmVtb3ZlJzp0aGlzLmhhbmRsZVJlbW92ZX19LFtmdW5jdGlvbihwcm9wcyl7aWYoX3RoaXM0LiRzY29wZWRTbG90cy5maWxlKXtyZXR1cm4gX3RoaXM0LiRzY29wZWRTbG90cy5maWxlKHtmaWxlOnByb3BzLmZpbGV9KTt9fV0pO312YXIgdXBsb2FkRGF0YT17cHJvcHM6e3R5cGU6dGhpcy50eXBlLGRyYWc6dGhpcy5kcmFnLGFjdGlvbjp0aGlzLmFjdGlvbixtdWx0aXBsZTp0aGlzLm11bHRpcGxlLCdiZWZvcmUtdXBsb2FkJzp0aGlzLmJlZm9yZVVwbG9hZCwnd2l0aC1jcmVkZW50aWFscyc6dGhpcy53aXRoQ3JlZGVudGlhbHMsaGVhZGVyczp0aGlzLmhlYWRlcnMsbmFtZTp0aGlzLm5hbWUsZGF0YTp0aGlzLmRhdGEsYWNjZXB0OnRoaXMuYWNjZXB0LGZpbGVMaXN0OnRoaXMudXBsb2FkRmlsZXMsYXV0b1VwbG9hZDp0aGlzLmF1dG9VcGxvYWQsbGlzdFR5cGU6dGhpcy5saXN0VHlwZSxkaXNhYmxlZDp0aGlzLnVwbG9hZERpc2FibGVkLGxpbWl0OnRoaXMubGltaXQsJ29uLWV4Y2VlZCc6dGhpcy5vbkV4Y2VlZCwnb24tc3RhcnQnOnRoaXMuaGFuZGxlU3RhcnQsJ29uLXByb2dyZXNzJzp0aGlzLmhhbmRsZVByb2dyZXNzLCdvbi1zdWNjZXNzJzp0aGlzLmhhbmRsZVN1Y2Nlc3MsJ29uLWVycm9yJzp0aGlzLmhhbmRsZUVycm9yLCdvbi1wcmV2aWV3Jzp0aGlzLm9uUHJldmlldywnb24tcmVtb3ZlJzp0aGlzLmhhbmRsZVJlbW92ZSwnaHR0cC1yZXF1ZXN0Jzp0aGlzLmh0dHBSZXF1ZXN0fSxyZWY6J3VwbG9hZC1pbm5lcid9O3ZhciB0cmlnZ2VyPXRoaXMuJHNsb3RzLnRyaWdnZXJ8fHRoaXMuJHNsb3RzLmRlZmF1bHQ7dmFyIHVwbG9hZENvbXBvbmVudD1oKCd1cGxvYWQnLHVwbG9hZERhdGEsW3RyaWdnZXJdKTtyZXR1cm4gaCgnZGl2JyxbdGhpcy5saXN0VHlwZT09PSdwaWN0dXJlLWNhcmQnP3VwbG9hZExpc3Q6JycsdGhpcy4kc2xvdHMudHJpZ2dlcj9bdXBsb2FkQ29tcG9uZW50LHRoaXMuJHNsb3RzLmRlZmF1bHRdOnVwbG9hZENvbXBvbmVudCx0aGlzLiRzbG90cy50aXAsdGhpcy5saXN0VHlwZSE9PSdwaWN0dXJlLWNhcmQnP3VwbG9hZExpc3Q6JyddKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHVwbG9hZF9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189c3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdXBsb2FkL3NyYy9pbmRleC52dWUKdmFyIHNyY19yZW5kZXIsc3JjX3N0YXRpY1JlbmRlckZuczsvKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHVwbG9hZF9zcmNfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudCh1cGxvYWRfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHNyY19yZW5kZXIsc3JjX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgc3JjX2FwaTt9dXBsb2FkX3NyY19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3VwbG9hZC9zcmMvaW5kZXgudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHVwbG9hZF9zcmM9dXBsb2FkX3NyY19jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3VwbG9hZF9zcmMuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQodXBsb2FkX3NyYy5uYW1lLHVwbG9hZF9zcmMpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc191cGxvYWQ9dXBsb2FkX3NyYzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Byb2dyZXNzL3NyYy9wcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjI5ZWU0MDYmCnZhciBwcm9ncmVzc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIyOWVlNDA2X3JlbmRlcj1mdW5jdGlvbiBwcm9ncmVzc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIyOWVlNDA2X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXByb2dyZXNzIixjbGFzczpbImVsLXByb2dyZXNzLS0iK192bS50eXBlLF92bS5zdGF0dXM/ImlzLSIrX3ZtLnN0YXR1czoiIix7ImVsLXByb2dyZXNzLS13aXRob3V0LXRleHQiOiFfdm0uc2hvd1RleHQsImVsLXByb2dyZXNzLS10ZXh0LWluc2lkZSI6X3ZtLnRleHRJbnNpZGV9XSxhdHRyczp7cm9sZToicHJvZ3Jlc3NiYXIiLCJhcmlhLXZhbHVlbm93Ijpfdm0ucGVyY2VudGFnZSwiYXJpYS12YWx1ZW1pbiI6IjAiLCJhcmlhLXZhbHVlbWF4IjoiMTAwIn19LFtfdm0udHlwZT09PSJsaW5lIj9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXByb2dyZXNzLWJhciJ9LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXByb2dyZXNzLWJhcl9fb3V0ZXIiLHN0eWxlOntoZWlnaHQ6X3ZtLnN0cm9rZVdpZHRoKyJweCJ9fSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzcy1iYXJfX2lubmVyIixzdHlsZTpfdm0uYmFyU3R5bGV9LFtfdm0uc2hvd1RleHQmJl92bS50ZXh0SW5zaWRlP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcHJvZ3Jlc3MtYmFyX19pbm5lclRleHQifSxbX3ZtLl92KF92bS5fcyhfdm0uY29udGVudCkpXSk6X3ZtLl9lKCldKV0pXSk6X2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzcy1jaXJjbGUiLHN0eWxlOntoZWlnaHQ6X3ZtLndpZHRoKyJweCIsd2lkdGg6X3ZtLndpZHRoKyJweCJ9fSxbX2MoInN2ZyIse2F0dHJzOnt2aWV3Qm94OiIwIDAgMTAwIDEwMCJ9fSxbX2MoInBhdGgiLHtzdGF0aWNDbGFzczoiZWwtcHJvZ3Jlc3MtY2lyY2xlX190cmFjayIsc3R5bGU6X3ZtLnRyYWlsUGF0aFN0eWxlLGF0dHJzOntkOl92bS50cmFja1BhdGgsc3Ryb2tlOiIjZTVlOWYyIiwic3Ryb2tlLXdpZHRoIjpfdm0ucmVsYXRpdmVTdHJva2VXaWR0aCxmaWxsOiJub25lIn19KSxfYygicGF0aCIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzcy1jaXJjbGVfX3BhdGgiLHN0eWxlOl92bS5jaXJjbGVQYXRoU3R5bGUsYXR0cnM6e2Q6X3ZtLnRyYWNrUGF0aCxzdHJva2U6X3ZtLnN0cm9rZSxmaWxsOiJub25lIiwic3Ryb2tlLWxpbmVjYXAiOl92bS5zdHJva2VMaW5lY2FwLCJzdHJva2Utd2lkdGgiOl92bS5wZXJjZW50YWdlP192bS5yZWxhdGl2ZVN0cm9rZVdpZHRoOjB9fSldKV0pLF92bS5zaG93VGV4dCYmIV92bS50ZXh0SW5zaWRlP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcHJvZ3Jlc3NfX3RleHQiLHN0eWxlOntmb250U2l6ZTpfdm0ucHJvZ3Jlc3NUZXh0U2l6ZSsicHgifX0sWyFfdm0uc3RhdHVzP1tfdm0uX3YoX3ZtLl9zKF92bS5jb250ZW50KSldOl9jKCJpIix7Y2xhc3M6X3ZtLmljb25DbGFzc30pXSwyKTpfdm0uX2UoKV0pO307dmFyIHByb2dyZXNzdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjI5ZWU0MDZfc3RhdGljUmVuZGVyRm5zPVtdO3Byb2dyZXNzdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjI5ZWU0MDZfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Byb2dyZXNzL3NyYy9wcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjI5ZWU0MDYmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Byb2dyZXNzL3NyYy9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcHJvZ3Jlc3N2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsUHJvZ3Jlc3MnLHByb3BzOnt0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OidsaW5lJyx2YWxpZGF0b3I6ZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCl7cmV0dXJuWydsaW5lJywnY2lyY2xlJywnZGFzaGJvYXJkJ10uaW5kZXhPZih2YWwpPi0xO319LHBlcmNlbnRhZ2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MCxyZXF1aXJlZDp0cnVlLHZhbGlkYXRvcjpmdW5jdGlvbiB2YWxpZGF0b3IodmFsKXtyZXR1cm4gdmFsPj0wJiZ2YWw8PTEwMDt9fSxzdGF0dXM6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbiB2YWxpZGF0b3IodmFsKXtyZXR1cm5bJ3N1Y2Nlc3MnLCdleGNlcHRpb24nLCd3YXJuaW5nJ10uaW5kZXhPZih2YWwpPi0xO319LHN0cm9rZVdpZHRoOnt0eXBlOk51bWJlcixkZWZhdWx0OjZ9LHN0cm9rZUxpbmVjYXA6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J3JvdW5kJ30sdGV4dEluc2lkZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ZmFsc2V9LHdpZHRoOnt0eXBlOk51bWJlcixkZWZhdWx0OjEyNn0sc2hvd1RleHQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGNvbG9yOnt0eXBlOltTdHJpbmcsQXJyYXksRnVuY3Rpb25dLGRlZmF1bHQ6Jyd9LGZvcm1hdDpGdW5jdGlvbn0sY29tcHV0ZWQ6e2JhclN0eWxlOmZ1bmN0aW9uIGJhclN0eWxlKCl7dmFyIHN0eWxlPXt9O3N0eWxlLndpZHRoPXRoaXMucGVyY2VudGFnZSsnJSc7c3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuZ2V0Q3VycmVudENvbG9yKHRoaXMucGVyY2VudGFnZSk7cmV0dXJuIHN0eWxlO30scmVsYXRpdmVTdHJva2VXaWR0aDpmdW5jdGlvbiByZWxhdGl2ZVN0cm9rZVdpZHRoKCl7cmV0dXJuKHRoaXMuc3Ryb2tlV2lkdGgvdGhpcy53aWR0aCoxMDApLnRvRml4ZWQoMSk7fSxyYWRpdXM6ZnVuY3Rpb24gcmFkaXVzKCl7aWYodGhpcy50eXBlPT09J2NpcmNsZSd8fHRoaXMudHlwZT09PSdkYXNoYm9hcmQnKXtyZXR1cm4gcGFyc2VJbnQoNTAtcGFyc2VGbG9hdCh0aGlzLnJlbGF0aXZlU3Ryb2tlV2lkdGgpLzIsMTApO31lbHNle3JldHVybiAwO319LHRyYWNrUGF0aDpmdW5jdGlvbiB0cmFja1BhdGgoKXt2YXIgcmFkaXVzPXRoaXMucmFkaXVzO3ZhciBpc0Rhc2hib2FyZD10aGlzLnR5cGU9PT0nZGFzaGJvYXJkJztyZXR1cm4nXG4gICAgICAgIE0gNTAgNTBcbiAgICAgICAgbSAwICcrKGlzRGFzaGJvYXJkPycnOictJykrcmFkaXVzKydcbiAgICAgICAgYSAnK3JhZGl1cysnICcrcmFkaXVzKycgMCAxIDEgMCAnKyhpc0Rhc2hib2FyZD8nLSc6JycpK3JhZGl1cyoyKydcbiAgICAgICAgYSAnK3JhZGl1cysnICcrcmFkaXVzKycgMCAxIDEgMCAnKyhpc0Rhc2hib2FyZD8nJzonLScpK3JhZGl1cyoyKydcbiAgICAgICAgJzt9LHBlcmltZXRlcjpmdW5jdGlvbiBwZXJpbWV0ZXIoKXtyZXR1cm4gMipNYXRoLlBJKnRoaXMucmFkaXVzO30scmF0ZTpmdW5jdGlvbiByYXRlKCl7cmV0dXJuIHRoaXMudHlwZT09PSdkYXNoYm9hcmQnPzAuNzU6MTt9LHN0cm9rZURhc2hvZmZzZXQ6ZnVuY3Rpb24gc3Ryb2tlRGFzaG9mZnNldCgpe3ZhciBvZmZzZXQ9LTEqdGhpcy5wZXJpbWV0ZXIqKDEtdGhpcy5yYXRlKS8yO3JldHVybiBvZmZzZXQrJ3B4Jzt9LHRyYWlsUGF0aFN0eWxlOmZ1bmN0aW9uIHRyYWlsUGF0aFN0eWxlKCl7cmV0dXJue3N0cm9rZURhc2hhcnJheTp0aGlzLnBlcmltZXRlcip0aGlzLnJhdGUrJ3B4LCAnK3RoaXMucGVyaW1ldGVyKydweCcsc3Ryb2tlRGFzaG9mZnNldDp0aGlzLnN0cm9rZURhc2hvZmZzZXR9O30sY2lyY2xlUGF0aFN0eWxlOmZ1bmN0aW9uIGNpcmNsZVBhdGhTdHlsZSgpe3JldHVybntzdHJva2VEYXNoYXJyYXk6dGhpcy5wZXJpbWV0ZXIqdGhpcy5yYXRlKih0aGlzLnBlcmNlbnRhZ2UvMTAwKSsncHgsICcrdGhpcy5wZXJpbWV0ZXIrJ3B4JyxzdHJva2VEYXNob2Zmc2V0OnRoaXMuc3Ryb2tlRGFzaG9mZnNldCx0cmFuc2l0aW9uOidzdHJva2UtZGFzaGFycmF5IDAuNnMgZWFzZSAwcywgc3Ryb2tlIDAuNnMgZWFzZSd9O30sc3Ryb2tlOmZ1bmN0aW9uIHN0cm9rZSgpe3ZhciByZXQ9dm9pZCAwO2lmKHRoaXMuY29sb3Ipe3JldD10aGlzLmdldEN1cnJlbnRDb2xvcih0aGlzLnBlcmNlbnRhZ2UpO31lbHNle3N3aXRjaCh0aGlzLnN0YXR1cyl7Y2FzZSdzdWNjZXNzJzpyZXQ9JyMxM2NlNjYnO2JyZWFrO2Nhc2UnZXhjZXB0aW9uJzpyZXQ9JyNmZjQ5NDknO2JyZWFrO2Nhc2Und2FybmluZyc6cmV0PScjZTZhMjNjJzticmVhaztkZWZhdWx0OnJldD0nIzIwYTBmZic7fX1yZXR1cm4gcmV0O30saWNvbkNsYXNzOmZ1bmN0aW9uIGljb25DbGFzcygpe2lmKHRoaXMuc3RhdHVzPT09J3dhcm5pbmcnKXtyZXR1cm4nZWwtaWNvbi13YXJuaW5nJzt9aWYodGhpcy50eXBlPT09J2xpbmUnKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT0nc3VjY2Vzcyc/J2VsLWljb24tY2lyY2xlLWNoZWNrJzonZWwtaWNvbi1jaXJjbGUtY2xvc2UnO31lbHNle3JldHVybiB0aGlzLnN0YXR1cz09PSdzdWNjZXNzJz8nZWwtaWNvbi1jaGVjayc6J2VsLWljb24tY2xvc2UnO319LHByb2dyZXNzVGV4dFNpemU6ZnVuY3Rpb24gcHJvZ3Jlc3NUZXh0U2l6ZSgpe3JldHVybiB0aGlzLnR5cGU9PT0nbGluZSc/MTIrdGhpcy5zdHJva2VXaWR0aCowLjQ6dGhpcy53aWR0aCowLjExMTExMSsyO30sY29udGVudDpmdW5jdGlvbiBjb250ZW50KCl7aWYodHlwZW9mIHRoaXMuZm9ybWF0PT09J2Z1bmN0aW9uJyl7cmV0dXJuIHRoaXMuZm9ybWF0KHRoaXMucGVyY2VudGFnZSl8fCcnO31lbHNle3JldHVybiB0aGlzLnBlcmNlbnRhZ2UrJyUnO319fSxtZXRob2RzOntnZXRDdXJyZW50Q29sb3I6ZnVuY3Rpb24gZ2V0Q3VycmVudENvbG9yKHBlcmNlbnRhZ2Upe2lmKHR5cGVvZiB0aGlzLmNvbG9yPT09J2Z1bmN0aW9uJyl7cmV0dXJuIHRoaXMuY29sb3IocGVyY2VudGFnZSk7fWVsc2UgaWYodHlwZW9mIHRoaXMuY29sb3I9PT0nc3RyaW5nJyl7cmV0dXJuIHRoaXMuY29sb3I7fWVsc2V7cmV0dXJuIHRoaXMuZ2V0TGV2ZWxDb2xvcihwZXJjZW50YWdlKTt9fSxnZXRMZXZlbENvbG9yOmZ1bmN0aW9uIGdldExldmVsQ29sb3IocGVyY2VudGFnZSl7dmFyIGNvbG9yQXJyYXk9dGhpcy5nZXRDb2xvckFycmF5KCkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnBlcmNlbnRhZ2UtYi5wZXJjZW50YWdlO30pO2Zvcih2YXIgaT0wO2k8Y29sb3JBcnJheS5sZW5ndGg7aSsrKXtpZihjb2xvckFycmF5W2ldLnBlcmNlbnRhZ2U+cGVyY2VudGFnZSl7cmV0dXJuIGNvbG9yQXJyYXlbaV0uY29sb3I7fX1yZXR1cm4gY29sb3JBcnJheVtjb2xvckFycmF5Lmxlbmd0aC0xXS5jb2xvcjt9LGdldENvbG9yQXJyYXk6ZnVuY3Rpb24gZ2V0Q29sb3JBcnJheSgpe3ZhciBjb2xvcj10aGlzLmNvbG9yO3ZhciBzcGFuPTEwMC9jb2xvci5sZW5ndGg7cmV0dXJuIGNvbG9yLm1hcChmdW5jdGlvbihzZXJpZXNDb2xvcixpbmRleCl7aWYodHlwZW9mIHNlcmllc0NvbG9yPT09J3N0cmluZycpe3JldHVybntjb2xvcjpzZXJpZXNDb2xvcixwZXJjZW50YWdlOihpbmRleCsxKSpzcGFufTt9cmV0dXJuIHNlcmllc0NvbG9yO30pO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Byb2dyZXNzL3NyYy9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3Byb2dyZXNzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXByb2dyZXNzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcHJvZ3Jlc3Mvc3JjL3Byb2dyZXNzLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHByb2dyZXNzX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX3Byb2dyZXNzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHByb2dyZXNzdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjI5ZWU0MDZfcmVuZGVyLHByb2dyZXNzdnVlX3R5cGVfdGVtcGxhdGVfaWRfMjI5ZWU0MDZfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBwcm9ncmVzc19hcGk7fXByb2dyZXNzX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvcHJvZ3Jlc3Mvc3JjL3Byb2dyZXNzLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwcm9ncmVzcz1wcm9ncmVzc19jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Byb2dyZXNzL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovcHJvZ3Jlc3MuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQocHJvZ3Jlc3MubmFtZSxwcm9ncmVzcyk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3Byb2dyZXNzPXByb2dyZXNzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3Bpbm5lci9zcmMvc3Bpbm5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njk3Yjg1MzgmCnZhciBzcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNjk3Yjg1MzhfcmVuZGVyPWZ1bmN0aW9uIHNwaW5uZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF82OTdiODUzOF9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtc3Bpbm5lciJ9LFtfYygic3ZnIix7c3RhdGljQ2xhc3M6ImVsLXNwaW5uZXItaW5uZXIiLHN0eWxlOnt3aWR0aDpfdm0ucmFkaXVzLzIrInB4IixoZWlnaHQ6X3ZtLnJhZGl1cy8yKyJweCJ9LGF0dHJzOnt2aWV3Qm94OiIwIDAgNTAgNTAifX0sW19jKCJjaXJjbGUiLHtzdGF0aWNDbGFzczoicGF0aCIsYXR0cnM6e2N4OiIyNSIsY3k6IjI1IixyOiIyMCIsZmlsbDoibm9uZSIsc3Ryb2tlOl92bS5zdHJva2VDb2xvciwic3Ryb2tlLXdpZHRoIjpfdm0uc3Ryb2tlV2lkdGh9fSldKV0pO307dmFyIHNwaW5uZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF82OTdiODUzOF9zdGF0aWNSZW5kZXJGbnM9W107c3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY5N2I4NTM4X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zcGlubmVyL3NyYy9zcGlubmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OTdiODUzOCYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3Bpbm5lci9zcmMvc3Bpbm5lci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxTcGlubmVyJyxwcm9wczp7dHlwZTpTdHJpbmcscmFkaXVzOnt0eXBlOk51bWJlcixkZWZhdWx0OjEwMH0sc3Ryb2tlV2lkdGg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NX0sc3Ryb2tlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6JyNlZmVmZWYnfX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3Bpbm5lci9zcmMvc3Bpbm5lci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3NwaW5uZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189c3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NwaW5uZXIvc3JjL3NwaW5uZXIudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgc3Bpbm5lcl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19zcGlubmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHNwaW5uZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF82OTdiODUzOF9yZW5kZXIsc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY5N2I4NTM4X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgc3Bpbm5lcl9hcGk7fXNwaW5uZXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9zcGlubmVyL3NyYy9zcGlubmVyLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcGlubmVyPXNwaW5uZXJfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zcGlubmVyL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovc3Bpbm5lci5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzcGlubmVyLm5hbWUsc3Bpbm5lcik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3NwaW5uZXI9c3Bpbm5lcjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21lc3NhZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ1NWI5ZjYwJgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ1NWI5ZjYwX3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDU1YjlmNjBfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLW1lc3NhZ2UtZmFkZSJ9LG9uOnsiYWZ0ZXItbGVhdmUiOl92bS5oYW5kbGVBZnRlckxlYXZlfX0sW19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0udmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLGNsYXNzOlsiZWwtbWVzc2FnZSIsX3ZtLnR5cGUmJiFfdm0uaWNvbkNsYXNzPyJlbC1tZXNzYWdlLS0iK192bS50eXBlOiIiLF92bS5jZW50ZXI/ImlzLWNlbnRlciI6IiIsX3ZtLnNob3dDbG9zZT8iaXMtY2xvc2FibGUiOiIiLF92bS5jdXN0b21DbGFzc10sc3R5bGU6X3ZtLnBvc2l0aW9uU3R5bGUsYXR0cnM6e3JvbGU6ImFsZXJ0In0sb246e21vdXNlZW50ZXI6X3ZtLmNsZWFyVGltZXIsbW91c2VsZWF2ZTpfdm0uc3RhcnRUaW1lcn19LFtfdm0uaWNvbkNsYXNzP19jKCJpIix7Y2xhc3M6X3ZtLmljb25DbGFzc30pOl9jKCJpIix7Y2xhc3M6X3ZtLnR5cGVDbGFzc30pLF92bS5fdCgiZGVmYXVsdCIsWyFfdm0uZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nP19jKCJwIix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2VfX2NvbnRlbnQifSxbX3ZtLl92KF92bS5fcyhfdm0ubWVzc2FnZSkpXSk6X2MoInAiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZV9fY29udGVudCIsZG9tUHJvcHM6e2lubmVySFRNTDpfdm0uX3MoX3ZtLm1lc3NhZ2UpfX0pXSksX3ZtLnNob3dDbG9zZT9fYygiaSIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlX19jbG9zZUJ0biBlbC1pY29uLWNsb3NlIixvbjp7Y2xpY2s6X3ZtLmNsb3NlfX0pOl92bS5fZSgpXSwyKV0pO307dmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NTViOWY2MF9zdGF0aWNSZW5kZXJGbnM9W107bWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ1NWI5ZjYwX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZXNzYWdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NTViOWY2MCYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBzcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3R5cGVNYXA9e3N1Y2Nlc3M6J3N1Y2Nlc3MnLGluZm86J2luZm8nLHdhcm5pbmc6J3dhcm5pbmcnLGVycm9yOidlcnJvcid9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbWVzc2FnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17ZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3Zpc2libGU6ZmFsc2UsbWVzc2FnZTonJyxkdXJhdGlvbjozMDAwLHR5cGU6J2luZm8nLGljb25DbGFzczonJyxjdXN0b21DbGFzczonJyxvbkNsb3NlOm51bGwsc2hvd0Nsb3NlOmZhbHNlLGNsb3NlZDpmYWxzZSx2ZXJ0aWNhbE9mZnNldDoyMCx0aW1lcjpudWxsLGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzpmYWxzZSxjZW50ZXI6ZmFsc2V9O30sY29tcHV0ZWQ6e3R5cGVDbGFzczpmdW5jdGlvbiB0eXBlQ2xhc3MoKXtyZXR1cm4gdGhpcy50eXBlJiYhdGhpcy5pY29uQ2xhc3M/J2VsLW1lc3NhZ2VfX2ljb24gZWwtaWNvbi0nK3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfdHlwZU1hcFt0aGlzLnR5cGVdOicnO30scG9zaXRpb25TdHlsZTpmdW5jdGlvbiBwb3NpdGlvblN0eWxlKCl7cmV0dXJueyd0b3AnOnRoaXMudmVydGljYWxPZmZzZXQrJ3B4J307fX0sd2F0Y2g6e2Nsb3NlZDpmdW5jdGlvbiBjbG9zZWQobmV3VmFsKXtpZihuZXdWYWwpe3RoaXMudmlzaWJsZT1mYWxzZTt9fX0sbWV0aG9kczp7aGFuZGxlQWZ0ZXJMZWF2ZTpmdW5jdGlvbiBoYW5kbGVBZnRlckxlYXZlKCl7dGhpcy4kZGVzdHJveSh0cnVlKTt0aGlzLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJGVsKTt9LGNsb3NlOmZ1bmN0aW9uIGNsb3NlKCl7dGhpcy5jbG9zZWQ9dHJ1ZTtpZih0eXBlb2YgdGhpcy5vbkNsb3NlPT09J2Z1bmN0aW9uJyl7dGhpcy5vbkNsb3NlKHRoaXMpO319LGNsZWFyVGltZXI6ZnVuY3Rpb24gY2xlYXJUaW1lcigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKTt9LHN0YXJ0VGltZXI6ZnVuY3Rpb24gc3RhcnRUaW1lcigpe3ZhciBfdGhpcz10aGlzO2lmKHRoaXMuZHVyYXRpb24+MCl7dGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIV90aGlzLmNsb3NlZCl7X3RoaXMuY2xvc2UoKTt9fSx0aGlzLmR1cmF0aW9uKTt9fSxrZXlkb3duOmZ1bmN0aW9uIGtleWRvd24oZSl7aWYoZS5rZXlDb2RlPT09Mjcpey8vIGVzY+WFs+mXrea2iOaBrwppZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2UoKTt9fX19LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3RoaXMuc3RhcnRUaW1lcigpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLHRoaXMua2V5ZG93bik7fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLmtleWRvd24pO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfbWVzc2FnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1tZXNzYWdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBtZXNzYWdlX3NyY19tYWluX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQocGFja2FnZXNfbWVzc2FnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDU1YjlmNjBfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NTViOWY2MF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIG1lc3NhZ2Vfc3JjX21haW5fYXBpO31tZXNzYWdlX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbWVzc2FnZV9zcmNfbWFpbj1tZXNzYWdlX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi5qcwp2YXIgTWVzc2FnZUNvbnN0cnVjdG9yPWV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEuZXh0ZW5kKG1lc3NhZ2Vfc3JjX21haW4pO3ZhciBtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlPXZvaWQgMDt2YXIgbWFpbl9pbnN0YW5jZXM9W107dmFyIG1haW5fc2VlZD0xO3ZhciBtYWluX01lc3NhZ2U9ZnVuY3Rpb24gTWVzc2FnZShvcHRpb25zKXtpZihleHRlcm5hbF92dWVfZGVmYXVsdC5hLnByb3RvdHlwZS4kaXNTZXJ2ZXIpcmV0dXJuO29wdGlvbnM9b3B0aW9uc3x8e307aWYodHlwZW9mIG9wdGlvbnM9PT0nc3RyaW5nJyl7b3B0aW9ucz17bWVzc2FnZTpvcHRpb25zfTt9dmFyIHVzZXJPbkNsb3NlPW9wdGlvbnMub25DbG9zZTt2YXIgaWQ9J21lc3NhZ2VfJyttYWluX3NlZWQrKztvcHRpb25zLm9uQ2xvc2U9ZnVuY3Rpb24oKXtNZXNzYWdlLmNsb3NlKGlkLHVzZXJPbkNsb3NlKTt9O21lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2U9bmV3IE1lc3NhZ2VDb25zdHJ1Y3Rvcih7ZGF0YTpvcHRpb25zfSk7bWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZS5pZD1pZDtpZihPYmplY3QodmRvbV9bImlzVk5vZGUiXSkobWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZS5tZXNzYWdlKSl7bWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZS4kc2xvdHMuZGVmYXVsdD1bbWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZS5tZXNzYWdlXTttZXNzYWdlX3NyY19tYWluX2luc3RhbmNlLm1lc3NhZ2U9bnVsbDt9bWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZS4kbW91bnQoKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UuJGVsKTt2YXIgdmVydGljYWxPZmZzZXQ9b3B0aW9ucy5vZmZzZXR8fDIwO21haW5faW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7dmVydGljYWxPZmZzZXQrPWl0ZW0uJGVsLm9mZnNldEhlaWdodCsxNjt9KTttZXNzYWdlX3NyY19tYWluX2luc3RhbmNlLnZlcnRpY2FsT2Zmc2V0PXZlcnRpY2FsT2Zmc2V0O21lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UudmlzaWJsZT10cnVlO21lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UuJGVsLnN0eWxlLnpJbmRleD1wb3B1cF9bIlBvcHVwTWFuYWdlciJdLm5leHRaSW5kZXgoKTttYWluX2luc3RhbmNlcy5wdXNoKG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UpO3JldHVybiBtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlO307WydzdWNjZXNzJywnd2FybmluZycsJ2luZm8nLCdlcnJvciddLmZvckVhY2goZnVuY3Rpb24odHlwZSl7bWFpbl9NZXNzYWdlW3R5cGVdPWZ1bmN0aW9uKG9wdGlvbnMpe2lmKHR5cGVvZiBvcHRpb25zPT09J3N0cmluZycpe29wdGlvbnM9e21lc3NhZ2U6b3B0aW9uc307fW9wdGlvbnMudHlwZT10eXBlO3JldHVybiBtYWluX01lc3NhZ2Uob3B0aW9ucyk7fTt9KTttYWluX01lc3NhZ2UuY2xvc2U9ZnVuY3Rpb24oaWQsdXNlck9uQ2xvc2Upe3ZhciBsZW49bWFpbl9pbnN0YW5jZXMubGVuZ3RoO3ZhciBpbmRleD0tMTt2YXIgcmVtb3ZlZEhlaWdodD12b2lkIDA7Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZihpZD09PW1haW5faW5zdGFuY2VzW2ldLmlkKXtyZW1vdmVkSGVpZ2h0PW1haW5faW5zdGFuY2VzW2ldLiRlbC5vZmZzZXRIZWlnaHQ7aW5kZXg9aTtpZih0eXBlb2YgdXNlck9uQ2xvc2U9PT0nZnVuY3Rpb24nKXt1c2VyT25DbG9zZShtYWluX2luc3RhbmNlc1tpXSk7fW1haW5faW5zdGFuY2VzLnNwbGljZShpLDEpO2JyZWFrO319aWYobGVuPD0xfHxpbmRleD09PS0xfHxpbmRleD5tYWluX2luc3RhbmNlcy5sZW5ndGgtMSlyZXR1cm47Zm9yKHZhciBfaT1pbmRleDtfaTxsZW4tMTtfaSsrKXt2YXIgZG9tPW1haW5faW5zdGFuY2VzW19pXS4kZWw7ZG9tLnN0eWxlWyd0b3AnXT1wYXJzZUludChkb20uc3R5bGVbJ3RvcCddLDEwKS1yZW1vdmVkSGVpZ2h0LTE2KydweCc7fX07bWFpbl9NZXNzYWdlLmNsb3NlQWxsPWZ1bmN0aW9uKCl7Zm9yKHZhciBpPW1haW5faW5zdGFuY2VzLmxlbmd0aC0xO2k+PTA7aS0tKXttYWluX2luc3RhbmNlc1tpXS5jbG9zZSgpO319Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfbWVzc2FnZV9zcmNfbWFpbj1tYWluX01lc3NhZ2U7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZXNzYWdlL2luZGV4LmpzCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfbWVzc2FnZT1wYWNrYWdlc19tZXNzYWdlX3NyY19tYWluOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYmFkZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdjY2I2NTk4Jgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdjY2I2NTk4X3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfN2NjYjY1OThfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtYmFkZ2UifSxbX3ZtLl90KCJkZWZhdWx0IiksX2MoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi1jZW50ZXIifX0sW19jKCJzdXAiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTohX3ZtLmhpZGRlbiYmKF92bS5jb250ZW50fHxfdm0uY29udGVudD09PTB8fF92bS5pc0RvdCksZXhwcmVzc2lvbjoiIWhpZGRlbiAmJiAoY29udGVudCB8fCBjb250ZW50ID09PSAwIHx8IGlzRG90KSJ9XSxzdGF0aWNDbGFzczoiZWwtYmFkZ2VfX2NvbnRlbnQiLGNsYXNzOlsiZWwtYmFkZ2VfX2NvbnRlbnQtLSIrX3ZtLnR5cGUseyJpcy1maXhlZCI6X3ZtLiRzbG90cy5kZWZhdWx0LCJpcy1kb3QiOl92bS5pc0RvdH1dLGRvbVByb3BzOnt0ZXh0Q29udGVudDpfdm0uX3MoX3ZtLmNvbnRlbnQpfX0pXSldLDIpO307dmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83Y2NiNjU5OF9zdGF0aWNSZW5kZXJGbnM9W107bWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdjY2I2NTk4X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9iYWRnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NjYjY1OTgmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2JhZGdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBiYWRnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxCYWRnZScscHJvcHM6e3ZhbHVlOltTdHJpbmcsTnVtYmVyXSxtYXg6TnVtYmVyLGlzRG90OkJvb2xlYW4saGlkZGVuOkJvb2xlYW4sdHlwZTp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpe3JldHVyblsncHJpbWFyeScsJ3N1Y2Nlc3MnLCd3YXJuaW5nJywnaW5mbycsJ2RhbmdlciddLmluZGV4T2YodmFsKT4tMTt9fX0sY29tcHV0ZWQ6e2NvbnRlbnQ6ZnVuY3Rpb24gY29udGVudCgpe2lmKHRoaXMuaXNEb3QpcmV0dXJuO3ZhciB2YWx1ZT10aGlzLnZhbHVlO3ZhciBtYXg9dGhpcy5tYXg7aWYodHlwZW9mIHZhbHVlPT09J251bWJlcicmJnR5cGVvZiBtYXg9PT0nbnVtYmVyJyl7cmV0dXJuIG1heDx2YWx1ZT9tYXgrJysnOnZhbHVlO31yZXR1cm4gdmFsdWU7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYmFkZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2JhZGdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWJhZGdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYmFkZ2Uvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgYmFkZ2Vfc3JjX21haW5fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc19iYWRnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfN2NjYjY1OThfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83Y2NiNjU5OF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGJhZGdlX3NyY19tYWluX2FwaTt9YmFkZ2Vfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9iYWRnZS9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgYmFkZ2Vfc3JjX21haW49YmFkZ2Vfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9iYWRnZS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2JhZGdlX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGJhZGdlX3NyY19tYWluLm5hbWUsYmFkZ2Vfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBiYWRnZT1iYWRnZV9zcmNfbWFpbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NhcmQvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU5YTRhNDBmJgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU5YTRhNDBmX3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTlhNGE0MGZfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY2FyZCIsY2xhc3M6X3ZtLnNoYWRvdz8iaXMtIitfdm0uc2hhZG93KyItc2hhZG93IjoiaXMtYWx3YXlzLXNoYWRvdyJ9LFtfdm0uJHNsb3RzLmhlYWRlcnx8X3ZtLmhlYWRlcj9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNhcmRfX2hlYWRlciJ9LFtfdm0uX3QoImhlYWRlciIsW192bS5fdihfdm0uX3MoX3ZtLmhlYWRlcikpXSldLDIpOl92bS5fZSgpLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY2FyZF9fYm9keSIsc3R5bGU6X3ZtLmJvZHlTdHlsZX0sW192bS5fdCgiZGVmYXVsdCIpXSwyKV0pO307dmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81OWE0YTQwZl9zdGF0aWNSZW5kZXJGbnM9W107bWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU5YTRhNDBmX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJkL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01OWE0YTQwZiYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FyZC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY2FyZF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxDYXJkJyxwcm9wczp7aGVhZGVyOnt9LGJvZHlTdHlsZTp7fSxzaGFkb3c6e3R5cGU6U3RyaW5nfX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FyZC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfY2FyZF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1jYXJkX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FyZC9zcmMvbWFpbi52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBjYXJkX3NyY19tYWluX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQocGFja2FnZXNfY2FyZF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTlhNGE0MGZfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81OWE0YTQwZl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGNhcmRfc3JjX21haW5fYXBpO31jYXJkX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvY2FyZC9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY2FyZF9zcmNfbWFpbj1jYXJkX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FyZC9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2NhcmRfc3JjX21haW4uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoY2FyZF9zcmNfbWFpbi5uYW1lLGNhcmRfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjYXJkPWNhcmRfc3JjX21haW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yYXRlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hZGE1Nzc4MiYKdmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF9hZGE1Nzc4Ml9yZW5kZXI9ZnVuY3Rpb24gbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2FkYTU3NzgyX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXJhdGUiLGF0dHJzOntyb2xlOiJzbGlkZXIiLCJhcmlhLXZhbHVlbm93Ijpfdm0uY3VycmVudFZhbHVlLCJhcmlhLXZhbHVldGV4dCI6X3ZtLnRleHQsImFyaWEtdmFsdWVtaW4iOiIwIiwiYXJpYS12YWx1ZW1heCI6X3ZtLm1heCx0YWJpbmRleDoiMCJ9LG9uOntrZXlkb3duOl92bS5oYW5kbGVLZXl9fSxbX3ZtLl9sKF92bS5tYXgsZnVuY3Rpb24oaXRlbSxrZXkpe3JldHVybiBfYygic3BhbiIse2tleTprZXksc3RhdGljQ2xhc3M6ImVsLXJhdGVfX2l0ZW0iLHN0eWxlOntjdXJzb3I6X3ZtLnJhdGVEaXNhYmxlZD8iYXV0byI6InBvaW50ZXIifSxvbjp7bW91c2Vtb3ZlOmZ1bmN0aW9uIG1vdXNlbW92ZSgkZXZlbnQpe192bS5zZXRDdXJyZW50VmFsdWUoaXRlbSwkZXZlbnQpO30sbW91c2VsZWF2ZTpfdm0ucmVzZXRDdXJyZW50VmFsdWUsY2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtfdm0uc2VsZWN0VmFsdWUoaXRlbSk7fX19LFtfYygiaSIse3N0YXRpY0NsYXNzOiJlbC1yYXRlX19pY29uIixjbGFzczpbX3ZtLmNsYXNzZXNbaXRlbS0xXSx7aG92ZXI6X3ZtLmhvdmVySW5kZXg9PT1pdGVtfV0sc3R5bGU6X3ZtLmdldEljb25TdHlsZShpdGVtKX0sW192bS5zaG93RGVjaW1hbEljb24oaXRlbSk/X2MoImkiLHtzdGF0aWNDbGFzczoiZWwtcmF0ZV9fZGVjaW1hbCIsY2xhc3M6X3ZtLmRlY2ltYWxJY29uQ2xhc3Msc3R5bGU6X3ZtLmRlY2ltYWxTdHlsZX0pOl92bS5fZSgpXSldKTt9KSxfdm0uc2hvd1RleHR8fF92bS5zaG93U2NvcmU/X2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtcmF0ZV9fdGV4dCIsc3R5bGU6e2NvbG9yOl92bS50ZXh0Q29sb3J9fSxbX3ZtLl92KF92bS5fcyhfdm0udGV4dCkpXSk6X3ZtLl9lKCldLDIpO307dmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF9hZGE1Nzc4Ml9zdGF0aWNSZW5kZXJGbnM9W107bWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2FkYTU3NzgyX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYXRlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hZGE1Nzc4MiYKLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvdXRpbHMvdHlwZXMiCnZhciB0eXBlc189X193ZWJwYWNrX3JlcXVpcmVfXygxOCk7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmF0ZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcmF0ZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxSYXRlJyxtaXhpbnM6W21pZ3JhdGluZ19kZWZhdWx0LmFdLGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OicnfX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3BvaW50ZXJBdExlZnRIYWxmOnRydWUsY3VycmVudFZhbHVlOnRoaXMudmFsdWUsaG92ZXJJbmRleDotMX07fSxwcm9wczp7dmFsdWU6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sbG93VGhyZXNob2xkOnt0eXBlOk51bWJlcixkZWZhdWx0OjJ9LGhpZ2hUaHJlc2hvbGQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NH0sbWF4Ont0eXBlOk51bWJlcixkZWZhdWx0OjV9LGNvbG9yczp7dHlwZTpbQXJyYXksT2JqZWN0XSxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJuWycjRjdCQTJBJywnI0Y3QkEyQScsJyNGN0JBMkEnXTt9fSx2b2lkQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6JyNDNkQxREUnfSxkaXNhYmxlZFZvaWRDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDonI0VGRjJGNyd9LGljb25DbGFzc2VzOnt0eXBlOltBcnJheSxPYmplY3RdLGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm5bJ2VsLWljb24tc3Rhci1vbicsJ2VsLWljb24tc3Rhci1vbicsJ2VsLWljb24tc3Rhci1vbiddO319LHZvaWRJY29uQ2xhc3M6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J2VsLWljb24tc3Rhci1vZmYnfSxkaXNhYmxlZFZvaWRJY29uQ2xhc3M6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J2VsLWljb24tc3Rhci1vbid9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX0sYWxsb3dIYWxmOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpmYWxzZX0sc2hvd1RleHQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxzaG93U2NvcmU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSx0ZXh0Q29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6JyMxZjJkM2QnfSx0ZXh0czp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJuWyfmnoHlt64nLCflpLHmnJsnLCfkuIDoiKwnLCfmu6HmhI8nLCfmg4rllpwnXTt9fSxzY29yZVRlbXBsYXRlOnt0eXBlOlN0cmluZyxkZWZhdWx0Oid7dmFsdWV9J319LGNvbXB1dGVkOnt0ZXh0OmZ1bmN0aW9uIHRleHQoKXt2YXIgcmVzdWx0PScnO2lmKHRoaXMuc2hvd1Njb3JlKXtyZXN1bHQ9dGhpcy5zY29yZVRlbXBsYXRlLnJlcGxhY2UoL1x7XHMqdmFsdWVccypcfS8sdGhpcy5yYXRlRGlzYWJsZWQ/dGhpcy52YWx1ZTp0aGlzLmN1cnJlbnRWYWx1ZSk7fWVsc2UgaWYodGhpcy5zaG93VGV4dCl7cmVzdWx0PXRoaXMudGV4dHNbTWF0aC5jZWlsKHRoaXMuY3VycmVudFZhbHVlKS0xXTt9cmV0dXJuIHJlc3VsdDt9LGRlY2ltYWxTdHlsZTpmdW5jdGlvbiBkZWNpbWFsU3R5bGUoKXt2YXIgd2lkdGg9Jyc7aWYodGhpcy5yYXRlRGlzYWJsZWQpe3dpZHRoPXRoaXMudmFsdWVEZWNpbWFsKyclJzt9ZWxzZSBpZih0aGlzLmFsbG93SGFsZil7d2lkdGg9JzUwJSc7fXJldHVybntjb2xvcjp0aGlzLmFjdGl2ZUNvbG9yLHdpZHRoOndpZHRofTt9LHZhbHVlRGVjaW1hbDpmdW5jdGlvbiB2YWx1ZURlY2ltYWwoKXtyZXR1cm4gdGhpcy52YWx1ZSoxMDAtTWF0aC5mbG9vcih0aGlzLnZhbHVlKSoxMDA7fSxjbGFzc01hcDpmdW5jdGlvbiBjbGFzc01hcCgpe3ZhciBfcmVmO3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMuaWNvbkNsYXNzZXMpPyhfcmVmPXt9LF9yZWZbdGhpcy5sb3dUaHJlc2hvbGRdPXRoaXMuaWNvbkNsYXNzZXNbMF0sX3JlZlt0aGlzLmhpZ2hUaHJlc2hvbGRdPXt2YWx1ZTp0aGlzLmljb25DbGFzc2VzWzFdLGV4Y2x1ZGVkOnRydWV9LF9yZWZbdGhpcy5tYXhdPXRoaXMuaWNvbkNsYXNzZXNbMl0sX3JlZik6dGhpcy5pY29uQ2xhc3Nlczt9LGRlY2ltYWxJY29uQ2xhc3M6ZnVuY3Rpb24gZGVjaW1hbEljb25DbGFzcygpe3JldHVybiB0aGlzLmdldFZhbHVlRnJvbU1hcCh0aGlzLnZhbHVlLHRoaXMuY2xhc3NNYXApO30sdm9pZENsYXNzOmZ1bmN0aW9uIHZvaWRDbGFzcygpe3JldHVybiB0aGlzLnJhdGVEaXNhYmxlZD90aGlzLmRpc2FibGVkVm9pZEljb25DbGFzczp0aGlzLnZvaWRJY29uQ2xhc3M7fSxhY3RpdmVDbGFzczpmdW5jdGlvbiBhY3RpdmVDbGFzcygpe3JldHVybiB0aGlzLmdldFZhbHVlRnJvbU1hcCh0aGlzLmN1cnJlbnRWYWx1ZSx0aGlzLmNsYXNzTWFwKTt9LGNvbG9yTWFwOmZ1bmN0aW9uIGNvbG9yTWFwKCl7dmFyIF9yZWYyO3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMuY29sb3JzKT8oX3JlZjI9e30sX3JlZjJbdGhpcy5sb3dUaHJlc2hvbGRdPXRoaXMuY29sb3JzWzBdLF9yZWYyW3RoaXMuaGlnaFRocmVzaG9sZF09e3ZhbHVlOnRoaXMuY29sb3JzWzFdLGV4Y2x1ZGVkOnRydWV9LF9yZWYyW3RoaXMubWF4XT10aGlzLmNvbG9yc1syXSxfcmVmMik6dGhpcy5jb2xvcnM7fSxhY3RpdmVDb2xvcjpmdW5jdGlvbiBhY3RpdmVDb2xvcigpe3JldHVybiB0aGlzLmdldFZhbHVlRnJvbU1hcCh0aGlzLmN1cnJlbnRWYWx1ZSx0aGlzLmNvbG9yTWFwKTt9LGNsYXNzZXM6ZnVuY3Rpb24gY2xhc3Nlcygpe3ZhciByZXN1bHQ9W107dmFyIGk9MDt2YXIgdGhyZXNob2xkPXRoaXMuY3VycmVudFZhbHVlO2lmKHRoaXMuYWxsb3dIYWxmJiZ0aGlzLmN1cnJlbnRWYWx1ZSE9PU1hdGguZmxvb3IodGhpcy5jdXJyZW50VmFsdWUpKXt0aHJlc2hvbGQtLTt9Zm9yKDtpPHRocmVzaG9sZDtpKyspe3Jlc3VsdC5wdXNoKHRoaXMuYWN0aXZlQ2xhc3MpO31mb3IoO2k8dGhpcy5tYXg7aSsrKXtyZXN1bHQucHVzaCh0aGlzLnZvaWRDbGFzcyk7fXJldHVybiByZXN1bHQ7fSxyYXRlRGlzYWJsZWQ6ZnVuY3Rpb24gcmF0ZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkO319LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbiB2YWx1ZSh2YWwpe3RoaXMuY3VycmVudFZhbHVlPXZhbDt0aGlzLnBvaW50ZXJBdExlZnRIYWxmPXRoaXMudmFsdWUhPT1NYXRoLmZsb29yKHRoaXMudmFsdWUpO319LG1ldGhvZHM6e2dldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKXtyZXR1cm57cHJvcHM6eyd0ZXh0LXRlbXBsYXRlJzondGV4dC10ZW1wbGF0ZSBpcyByZW5hbWVkIHRvIHNjb3JlLXRlbXBsYXRlLid9fTt9LGdldFZhbHVlRnJvbU1hcDpmdW5jdGlvbiBnZXRWYWx1ZUZyb21NYXAodmFsdWUsbWFwKXt2YXIgbWF0Y2hlZEtleXM9T2JqZWN0LmtleXMobWFwKS5maWx0ZXIoZnVuY3Rpb24oa2V5KXt2YXIgdmFsPW1hcFtrZXldO3ZhciBleGNsdWRlZD1PYmplY3QodHlwZXNfWyJpc09iamVjdCJdKSh2YWwpP3ZhbC5leGNsdWRlZDpmYWxzZTtyZXR1cm4gZXhjbHVkZWQ/dmFsdWU8a2V5OnZhbHVlPD1rZXk7fSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLWI7fSk7dmFyIG1hdGNoZWRWYWx1ZT1tYXBbbWF0Y2hlZEtleXNbMF1dO3JldHVybiBPYmplY3QodHlwZXNfWyJpc09iamVjdCJdKShtYXRjaGVkVmFsdWUpP21hdGNoZWRWYWx1ZS52YWx1ZTptYXRjaGVkVmFsdWV8fCcnO30sc2hvd0RlY2ltYWxJY29uOmZ1bmN0aW9uIHNob3dEZWNpbWFsSWNvbihpdGVtKXt2YXIgc2hvd1doZW5EaXNhYmxlZD10aGlzLnJhdGVEaXNhYmxlZCYmdGhpcy52YWx1ZURlY2ltYWw+MCYmaXRlbS0xPHRoaXMudmFsdWUmJml0ZW0+dGhpcy52YWx1ZTsvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3ZhciBzaG93V2hlbkFsbG93SGFsZj10aGlzLmFsbG93SGFsZiYmdGhpcy5wb2ludGVyQXRMZWZ0SGFsZiYmaXRlbS0wLjU8PXRoaXMuY3VycmVudFZhbHVlJiZpdGVtPnRoaXMuY3VycmVudFZhbHVlO3JldHVybiBzaG93V2hlbkRpc2FibGVkfHxzaG93V2hlbkFsbG93SGFsZjt9LGdldEljb25TdHlsZTpmdW5jdGlvbiBnZXRJY29uU3R5bGUoaXRlbSl7dmFyIHZvaWRDb2xvcj10aGlzLnJhdGVEaXNhYmxlZD90aGlzLmRpc2FibGVkVm9pZENvbG9yOnRoaXMudm9pZENvbG9yO3JldHVybntjb2xvcjppdGVtPD10aGlzLmN1cnJlbnRWYWx1ZT90aGlzLmFjdGl2ZUNvbG9yOnZvaWRDb2xvcn07fSxzZWxlY3RWYWx1ZTpmdW5jdGlvbiBzZWxlY3RWYWx1ZSh2YWx1ZSl7aWYodGhpcy5yYXRlRGlzYWJsZWQpe3JldHVybjt9aWYodGhpcy5hbGxvd0hhbGYmJnRoaXMucG9pbnRlckF0TGVmdEhhbGYpe3RoaXMuJGVtaXQoJ2lucHV0Jyx0aGlzLmN1cnJlbnRWYWx1ZSk7dGhpcy4kZW1pdCgnY2hhbmdlJyx0aGlzLmN1cnJlbnRWYWx1ZSk7fWVsc2V7dGhpcy4kZW1pdCgnaW5wdXQnLHZhbHVlKTt0aGlzLiRlbWl0KCdjaGFuZ2UnLHZhbHVlKTt9fSxoYW5kbGVLZXk6ZnVuY3Rpb24gaGFuZGxlS2V5KGUpe2lmKHRoaXMucmF0ZURpc2FibGVkKXtyZXR1cm47fXZhciBjdXJyZW50VmFsdWU9dGhpcy5jdXJyZW50VmFsdWU7dmFyIGtleUNvZGU9ZS5rZXlDb2RlO2lmKGtleUNvZGU9PT0zOHx8a2V5Q29kZT09PTM5KXsvLyBsZWZ0IC8gZG93bgppZih0aGlzLmFsbG93SGFsZil7Y3VycmVudFZhbHVlKz0wLjU7fWVsc2V7Y3VycmVudFZhbHVlKz0xO31lLnN0b3BQcm9wYWdhdGlvbigpO2UucHJldmVudERlZmF1bHQoKTt9ZWxzZSBpZihrZXlDb2RlPT09Mzd8fGtleUNvZGU9PT00MCl7aWYodGhpcy5hbGxvd0hhbGYpe2N1cnJlbnRWYWx1ZS09MC41O31lbHNle2N1cnJlbnRWYWx1ZS09MTt9ZS5zdG9wUHJvcGFnYXRpb24oKTtlLnByZXZlbnREZWZhdWx0KCk7fWN1cnJlbnRWYWx1ZT1jdXJyZW50VmFsdWU8MD8wOmN1cnJlbnRWYWx1ZTtjdXJyZW50VmFsdWU9Y3VycmVudFZhbHVlPnRoaXMubWF4P3RoaXMubWF4OmN1cnJlbnRWYWx1ZTt0aGlzLiRlbWl0KCdpbnB1dCcsY3VycmVudFZhbHVlKTt0aGlzLiRlbWl0KCdjaGFuZ2UnLGN1cnJlbnRWYWx1ZSk7fSxzZXRDdXJyZW50VmFsdWU6ZnVuY3Rpb24gc2V0Q3VycmVudFZhbHVlKHZhbHVlLGV2ZW50KXtpZih0aGlzLnJhdGVEaXNhYmxlZCl7cmV0dXJuO30vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9pZih0aGlzLmFsbG93SGFsZil7dmFyIHRhcmdldD1ldmVudC50YXJnZXQ7aWYoT2JqZWN0KGRvbV9bImhhc0NsYXNzIl0pKHRhcmdldCwnZWwtcmF0ZV9faXRlbScpKXt0YXJnZXQ9dGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5lbC1yYXRlX19pY29uJyk7fWlmKE9iamVjdChkb21fWyJoYXNDbGFzcyJdKSh0YXJnZXQsJ2VsLXJhdGVfX2RlY2ltYWwnKSl7dGFyZ2V0PXRhcmdldC5wYXJlbnROb2RlO310aGlzLnBvaW50ZXJBdExlZnRIYWxmPWV2ZW50Lm9mZnNldFgqMjw9dGFyZ2V0LmNsaWVudFdpZHRoO3RoaXMuY3VycmVudFZhbHVlPXRoaXMucG9pbnRlckF0TGVmdEhhbGY/dmFsdWUtMC41OnZhbHVlO31lbHNle3RoaXMuY3VycmVudFZhbHVlPXZhbHVlO310aGlzLmhvdmVySW5kZXg9dmFsdWU7fSxyZXNldEN1cnJlbnRWYWx1ZTpmdW5jdGlvbiByZXNldEN1cnJlbnRWYWx1ZSgpe2lmKHRoaXMucmF0ZURpc2FibGVkKXtyZXR1cm47fWlmKHRoaXMuYWxsb3dIYWxmKXt0aGlzLnBvaW50ZXJBdExlZnRIYWxmPXRoaXMudmFsdWUhPT1NYXRoLmZsb29yKHRoaXMudmFsdWUpO310aGlzLmN1cnJlbnRWYWx1ZT10aGlzLnZhbHVlO3RoaXMuaG92ZXJJbmRleD0tMTt9fSxjcmVhdGVkOmZ1bmN0aW9uIGNyZWF0ZWQoKXtpZighdGhpcy52YWx1ZSl7dGhpcy4kZW1pdCgnaW5wdXQnLDApO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhdGUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3JhdGVfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189cmF0ZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhdGUvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgcmF0ZV9zcmNfbWFpbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhY2thZ2VzX3JhdGVfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2FkYTU3NzgyX3JlbmRlcixtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYWRhNTc3ODJfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciByYXRlX3NyY19tYWluX2FwaTt9cmF0ZV9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3JhdGUvc3JjL21haW4udnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHJhdGVfc3JjX21haW49cmF0ZV9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhdGUvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9yYXRlX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHJhdGVfc3JjX21haW4ubmFtZSxyYXRlX3NyY19tYWluKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcmF0ZT1yYXRlX3NyY19tYWluOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXBzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYzZiNmRjMCYKdmFyIHN0ZXBzdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2M2YjZkYzBfcmVuZGVyPWZ1bmN0aW9uIHN0ZXBzdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2M2YjZkYzBfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3RlcHMiLGNsYXNzOlshX3ZtLnNpbXBsZSYmImVsLXN0ZXBzLS0iK192bS5kaXJlY3Rpb24sX3ZtLnNpbXBsZSYmImVsLXN0ZXBzLS1zaW1wbGUiXX0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTt9O3ZhciBzdGVwc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNjNmI2ZGMwX3N0YXRpY1JlbmRlckZucz1bXTtzdGVwc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNjNmI2ZGMwX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjNmI2ZGMwJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHN0ZXBzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFN0ZXBzJyxtaXhpbnM6W21pZ3JhdGluZ19kZWZhdWx0LmFdLHByb3BzOntzcGFjZTpbTnVtYmVyLFN0cmluZ10sYWN0aXZlOk51bWJlcixkaXJlY3Rpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J2hvcml6b250YWwnfSxhbGlnbkNlbnRlcjpCb29sZWFuLHNpbXBsZTpCb29sZWFuLGZpbmlzaFN0YXR1czp7dHlwZTpTdHJpbmcsZGVmYXVsdDonZmluaXNoJ30scHJvY2Vzc1N0YXR1czp7dHlwZTpTdHJpbmcsZGVmYXVsdDoncHJvY2Vzcyd9fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57c3RlcHM6W10sc3RlcE9mZnNldDowfTt9LG1ldGhvZHM6e2dldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKXtyZXR1cm57cHJvcHM6eydjZW50ZXInOidjZW50ZXIgaXMgcmVtb3ZlZC4nfX07fX0sd2F0Y2g6e2FjdGl2ZTpmdW5jdGlvbiBhY3RpdmUobmV3VmFsLG9sZFZhbCl7dGhpcy4kZW1pdCgnY2hhbmdlJyxuZXdWYWwsb2xkVmFsKTt9LHN0ZXBzOmZ1bmN0aW9uIHN0ZXBzKF9zdGVwcyl7X3N0ZXBzLmZvckVhY2goZnVuY3Rpb24oY2hpbGQsaW5kZXgpe2NoaWxkLmluZGV4PWluZGV4O30pO319fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N0ZXBzL3NyYy9zdGVwcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3N0ZXBzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXN0ZXBzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXBzLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHN0ZXBzX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX3N0ZXBzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLHN0ZXBzdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2M2YjZkYzBfcmVuZGVyLHN0ZXBzdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2M2YjZkYzBfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBzdGVwc19hcGk7fXN0ZXBzX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvc3RlcHMvc3JjL3N0ZXBzLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzdGVwcz1zdGVwc19jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N0ZXBzL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovc3RlcHMuaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoc3RlcHMubmFtZSxzdGVwcyk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3N0ZXBzPXN0ZXBzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWY0MTRhODdhJgp2YXIgc3RlcHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Y0MTRhODdhX3JlbmRlcj1mdW5jdGlvbiBzdGVwdnVlX3R5cGVfdGVtcGxhdGVfaWRfZjQxNGE4N2FfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3RlcCIsY2xhc3M6WyFfdm0uaXNTaW1wbGUmJiJpcy0iK192bS4kcGFyZW50LmRpcmVjdGlvbixfdm0uaXNTaW1wbGUmJiJpcy1zaW1wbGUiLF92bS5pc0xhc3QmJiFfdm0uc3BhY2UmJiFfdm0uaXNDZW50ZXImJiJpcy1mbGV4Iixfdm0uaXNDZW50ZXImJiFfdm0uaXNWZXJ0aWNhbCYmIV92bS5pc1NpbXBsZSYmImlzLWNlbnRlciJdLHN0eWxlOl92bS5zdHlsZX0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9faGVhZCIsY2xhc3M6ImlzLSIrX3ZtLmN1cnJlbnRTdGF0dXN9LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXN0ZXBfX2xpbmUiLHN0eWxlOl92bS5pc0xhc3Q/IiI6e21hcmdpblJpZ2h0Ol92bS4kcGFyZW50LnN0ZXBPZmZzZXQrInB4In19LFtfYygiaSIse3N0YXRpY0NsYXNzOiJlbC1zdGVwX19saW5lLWlubmVyIixzdHlsZTpfdm0ubGluZVN0eWxlfSldKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXN0ZXBfX2ljb24iLGNsYXNzOiJpcy0iKyhfdm0uaWNvbj8iaWNvbiI6InRleHQiKX0sW192bS5jdXJyZW50U3RhdHVzIT09InN1Y2Nlc3MiJiZfdm0uY3VycmVudFN0YXR1cyE9PSJlcnJvciI/X3ZtLl90KCJpY29uIixbX3ZtLmljb24/X2MoImkiLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9faWNvbi1pbm5lciIsY2xhc3M6W192bS5pY29uXX0pOl92bS5fZSgpLCFfdm0uaWNvbiYmIV92bS5pc1NpbXBsZT9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXN0ZXBfX2ljb24taW5uZXIifSxbX3ZtLl92KF92bS5fcyhfdm0uaW5kZXgrMSkpXSk6X3ZtLl9lKCldKTpfYygiaSIse3N0YXRpY0NsYXNzOiJlbC1zdGVwX19pY29uLWlubmVyIGlzLXN0YXR1cyIsY2xhc3M6WyJlbC1pY29uLSIrKF92bS5jdXJyZW50U3RhdHVzPT09InN1Y2Nlc3MiPyJjaGVjayI6ImNsb3NlIildfSldLDIpXSksX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zdGVwX19tYWluIn0sW19jKCJkaXYiLHtyZWY6InRpdGxlIixzdGF0aWNDbGFzczoiZWwtc3RlcF9fdGl0bGUiLGNsYXNzOlsiaXMtIitfdm0uY3VycmVudFN0YXR1c119LFtfdm0uX3QoInRpdGxlIixbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pXSwyKSxfdm0uaXNTaW1wbGU/X2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zdGVwX19hcnJvdyJ9KTpfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXN0ZXBfX2Rlc2NyaXB0aW9uIixjbGFzczpbImlzLSIrX3ZtLmN1cnJlbnRTdGF0dXNdfSxbX3ZtLl90KCJkZXNjcmlwdGlvbiIsW192bS5fdihfdm0uX3MoX3ZtLmRlc2NyaXB0aW9uKSldKV0sMildKV0pO307dmFyIHN0ZXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mNDE0YTg3YV9zdGF0aWNSZW5kZXJGbnM9W107c3RlcHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Y0MTRhODdhX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjQxNGE4N2EmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3N0ZXBzL3NyYy9zdGVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzdGVwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFN0ZXAnLHByb3BzOnt0aXRsZTpTdHJpbmcsaWNvbjpTdHJpbmcsZGVzY3JpcHRpb246U3RyaW5nLHN0YXR1czpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntpbmRleDotMSxsaW5lU3R5bGU6e30saW50ZXJuYWxTdGF0dXM6Jyd9O30sYmVmb3JlQ3JlYXRlOmZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSgpe3RoaXMuJHBhcmVudC5zdGVwcy5wdXNoKHRoaXMpO30sYmVmb3JlRGVzdHJveTpmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCl7dmFyIHN0ZXBzPXRoaXMuJHBhcmVudC5zdGVwczt2YXIgaW5kZXg9c3RlcHMuaW5kZXhPZih0aGlzKTtpZihpbmRleD49MCl7c3RlcHMuc3BsaWNlKGluZGV4LDEpO319LGNvbXB1dGVkOntjdXJyZW50U3RhdHVzOmZ1bmN0aW9uIGN1cnJlbnRTdGF0dXMoKXtyZXR1cm4gdGhpcy5zdGF0dXN8fHRoaXMuaW50ZXJuYWxTdGF0dXM7fSxwcmV2U3RhdHVzOmZ1bmN0aW9uIHByZXZTdGF0dXMoKXt2YXIgcHJldlN0ZXA9dGhpcy4kcGFyZW50LnN0ZXBzW3RoaXMuaW5kZXgtMV07cmV0dXJuIHByZXZTdGVwP3ByZXZTdGVwLmN1cnJlbnRTdGF0dXM6J3dhaXQnO30saXNDZW50ZXI6ZnVuY3Rpb24gaXNDZW50ZXIoKXtyZXR1cm4gdGhpcy4kcGFyZW50LmFsaWduQ2VudGVyO30saXNWZXJ0aWNhbDpmdW5jdGlvbiBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMuJHBhcmVudC5kaXJlY3Rpb249PT0ndmVydGljYWwnO30saXNTaW1wbGU6ZnVuY3Rpb24gaXNTaW1wbGUoKXtyZXR1cm4gdGhpcy4kcGFyZW50LnNpbXBsZTt9LGlzTGFzdDpmdW5jdGlvbiBpc0xhc3QoKXt2YXIgcGFyZW50PXRoaXMuJHBhcmVudDtyZXR1cm4gcGFyZW50LnN0ZXBzW3BhcmVudC5zdGVwcy5sZW5ndGgtMV09PT10aGlzO30sc3RlcHNDb3VudDpmdW5jdGlvbiBzdGVwc0NvdW50KCl7cmV0dXJuIHRoaXMuJHBhcmVudC5zdGVwcy5sZW5ndGg7fSxzcGFjZTpmdW5jdGlvbiBzcGFjZSgpe3ZhciBpc1NpbXBsZT10aGlzLmlzU2ltcGxlLHNwYWNlPXRoaXMuJHBhcmVudC5zcGFjZTtyZXR1cm4gaXNTaW1wbGU/Jyc6c3BhY2U7fSxzdHlsZTpmdW5jdGlvbiBzdHlsZSgpe3ZhciBzdHlsZT17fTt2YXIgcGFyZW50PXRoaXMuJHBhcmVudDt2YXIgbGVuPXBhcmVudC5zdGVwcy5sZW5ndGg7dmFyIHNwYWNlPXR5cGVvZiB0aGlzLnNwYWNlPT09J251bWJlcic/dGhpcy5zcGFjZSsncHgnOnRoaXMuc3BhY2U/dGhpcy5zcGFjZToxMDAvKGxlbi0odGhpcy5pc0NlbnRlcj8wOjEpKSsnJSc7c3R5bGUuZmxleEJhc2lzPXNwYWNlO2lmKHRoaXMuaXNWZXJ0aWNhbClyZXR1cm4gc3R5bGU7aWYodGhpcy5pc0xhc3Qpe3N0eWxlLm1heFdpZHRoPTEwMC90aGlzLnN0ZXBzQ291bnQrJyUnO31lbHNle3N0eWxlLm1hcmdpblJpZ2h0PS10aGlzLiRwYXJlbnQuc3RlcE9mZnNldCsncHgnO31yZXR1cm4gc3R5bGU7fX0sbWV0aG9kczp7dXBkYXRlU3RhdHVzOmZ1bmN0aW9uIHVwZGF0ZVN0YXR1cyh2YWwpe3ZhciBwcmV2Q2hpbGQ9dGhpcy4kcGFyZW50LiRjaGlsZHJlblt0aGlzLmluZGV4LTFdO2lmKHZhbD50aGlzLmluZGV4KXt0aGlzLmludGVybmFsU3RhdHVzPXRoaXMuJHBhcmVudC5maW5pc2hTdGF0dXM7fWVsc2UgaWYodmFsPT09dGhpcy5pbmRleCYmdGhpcy5wcmV2U3RhdHVzIT09J2Vycm9yJyl7dGhpcy5pbnRlcm5hbFN0YXR1cz10aGlzLiRwYXJlbnQucHJvY2Vzc1N0YXR1czt9ZWxzZXt0aGlzLmludGVybmFsU3RhdHVzPSd3YWl0Jzt9aWYocHJldkNoaWxkKXByZXZDaGlsZC5jYWxjUHJvZ3Jlc3ModGhpcy5pbnRlcm5hbFN0YXR1cyk7fSxjYWxjUHJvZ3Jlc3M6ZnVuY3Rpb24gY2FsY1Byb2dyZXNzKHN0YXR1cyl7dmFyIHN0ZXA9MTAwO3ZhciBzdHlsZT17fTtzdHlsZS50cmFuc2l0aW9uRGVsYXk9MTUwKnRoaXMuaW5kZXgrJ21zJztpZihzdGF0dXM9PT10aGlzLiRwYXJlbnQucHJvY2Vzc1N0YXR1cyl7c3RlcD10aGlzLmN1cnJlbnRTdGF0dXMhPT0nZXJyb3InPzA6MDt9ZWxzZSBpZihzdGF0dXM9PT0nd2FpdCcpe3N0ZXA9MDtzdHlsZS50cmFuc2l0aW9uRGVsYXk9LTE1MCp0aGlzLmluZGV4Kydtcyc7fXN0eWxlLmJvcmRlcldpZHRoPXN0ZXAmJiF0aGlzLmlzU2ltcGxlPycxcHgnOjA7dGhpcy4kcGFyZW50LmRpcmVjdGlvbj09PSd2ZXJ0aWNhbCc/c3R5bGUuaGVpZ2h0PXN0ZXArJyUnOnN0eWxlLndpZHRoPXN0ZXArJyUnO3RoaXMubGluZVN0eWxlPXN0eWxlO319LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3ZhciBfdGhpcz10aGlzO3ZhciB1bndhdGNoPXRoaXMuJHdhdGNoKCdpbmRleCcsZnVuY3Rpb24odmFsKXtfdGhpcy4kd2F0Y2goJyRwYXJlbnQuYWN0aXZlJyxfdGhpcy51cGRhdGVTdGF0dXMse2ltbWVkaWF0ZTp0cnVlfSk7X3RoaXMuJHdhdGNoKCckcGFyZW50LnByb2Nlc3NTdGF0dXMnLGZ1bmN0aW9uKCl7dmFyIGFjdGl2ZUluZGV4PV90aGlzLiRwYXJlbnQuYWN0aXZlO190aGlzLnVwZGF0ZVN0YXR1cyhhY3RpdmVJbmRleCk7fSx7aW1tZWRpYXRlOnRydWV9KTt1bndhdGNoKCk7fSk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX3N0ZXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189c3RlcHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N0ZXBzL3NyYy9zdGVwLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHN0ZXBfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfc3RlcHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxzdGVwdnVlX3R5cGVfdGVtcGxhdGVfaWRfZjQxNGE4N2FfcmVuZGVyLHN0ZXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mNDE0YTg3YV9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHN0ZXBfYXBpO31zdGVwX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvc3RlcHMvc3JjL3N0ZXAudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHN0ZXA9c3RlcF9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N0ZXAvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9zdGVwLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHN0ZXAubmFtZSxzdGVwKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfc3RlcD1zdGVwOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkNWQxNDgyJgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkNWQxNDgyX3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQ1ZDE0ODJfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtjbGFzczpfdm0uY2Fyb3VzZWxDbGFzc2VzLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uIG1vdXNlZW50ZXIoJGV2ZW50KXskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIF92bS5oYW5kbGVNb3VzZUVudGVyKCRldmVudCk7fSxtb3VzZWxlYXZlOmZ1bmN0aW9uIG1vdXNlbGVhdmUoJGV2ZW50KXskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIF92bS5oYW5kbGVNb3VzZUxlYXZlKCRldmVudCk7fX19LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNhcm91c2VsX19jb250YWluZXIiLHN0eWxlOntoZWlnaHQ6X3ZtLmhlaWdodH19LFtfdm0uYXJyb3dEaXNwbGF5P19jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImNhcm91c2VsLWFycm93LWxlZnQifX0sW19jKCJidXR0b24iLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTooX3ZtLmFycm93PT09ImFsd2F5cyJ8fF92bS5ob3ZlcikmJihfdm0ubG9vcHx8X3ZtLmFjdGl2ZUluZGV4PjApLGV4cHJlc3Npb246IihhcnJvdyA9PT0gJ2Fsd2F5cycgfHwgaG92ZXIpICYmIChsb29wIHx8IGFjdGl2ZUluZGV4ID4gMCkifV0sc3RhdGljQ2xhc3M6ImVsLWNhcm91c2VsX19hcnJvdyBlbC1jYXJvdXNlbF9fYXJyb3ctLWxlZnQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7bW91c2VlbnRlcjpmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCl7X3ZtLmhhbmRsZUJ1dHRvbkVudGVyKCJsZWZ0Iik7fSxtb3VzZWxlYXZlOl92bS5oYW5kbGVCdXR0b25MZWF2ZSxjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpeyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtfdm0udGhyb3R0bGVkQXJyb3dDbGljayhfdm0uYWN0aXZlSW5kZXgtMSk7fX19LFtfYygiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWFycm93LWxlZnQifSldKV0pOl92bS5fZSgpLF92bS5hcnJvd0Rpc3BsYXk/X2MoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiY2Fyb3VzZWwtYXJyb3ctcmlnaHQifX0sW19jKCJidXR0b24iLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTooX3ZtLmFycm93PT09ImFsd2F5cyJ8fF92bS5ob3ZlcikmJihfdm0ubG9vcHx8X3ZtLmFjdGl2ZUluZGV4PF92bS5pdGVtcy5sZW5ndGgtMSksZXhwcmVzc2lvbjoiKGFycm93ID09PSAnYWx3YXlzJyB8fCBob3ZlcikgJiYgKGxvb3AgfHwgYWN0aXZlSW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSJ9XSxzdGF0aWNDbGFzczoiZWwtY2Fyb3VzZWxfX2Fycm93IGVsLWNhcm91c2VsX19hcnJvdy0tcmlnaHQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7bW91c2VlbnRlcjpmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCl7X3ZtLmhhbmRsZUJ1dHRvbkVudGVyKCJyaWdodCIpO30sbW91c2VsZWF2ZTpfdm0uaGFuZGxlQnV0dG9uTGVhdmUsY2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7X3ZtLnRocm90dGxlZEFycm93Q2xpY2soX3ZtLmFjdGl2ZUluZGV4KzEpO319fSxbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1hcnJvdy1yaWdodCJ9KV0pXSk6X3ZtLl9lKCksX3ZtLl90KCJkZWZhdWx0IildLDIpLF92bS5pbmRpY2F0b3JQb3NpdGlvbiE9PSJub25lIj9fYygidWwiLHtjbGFzczpfdm0uaW5kaWNhdG9yc0NsYXNzZXN9LF92bS5fbChfdm0uaXRlbXMsZnVuY3Rpb24oaXRlbSxpbmRleCl7cmV0dXJuIF9jKCJsaSIse2tleTppbmRleCxjbGFzczpbImVsLWNhcm91c2VsX19pbmRpY2F0b3IiLCJlbC1jYXJvdXNlbF9faW5kaWNhdG9yLS0iK192bS5kaXJlY3Rpb24seyJpcy1hY3RpdmUiOmluZGV4PT09X3ZtLmFjdGl2ZUluZGV4fV0sb246e21vdXNlZW50ZXI6ZnVuY3Rpb24gbW91c2VlbnRlcigkZXZlbnQpe192bS50aHJvdHRsZWRJbmRpY2F0b3JIb3ZlcihpbmRleCk7fSxjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpeyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtfdm0uaGFuZGxlSW5kaWNhdG9yQ2xpY2soaW5kZXgpO319fSxbX2MoImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1jYXJvdXNlbF9fYnV0dG9uIn0sW192bS5oYXNMYWJlbD9fYygic3BhbiIsW192bS5fdihfdm0uX3MoaXRlbS5sYWJlbCkpXSk6X3ZtLl9lKCldKV0pO30pLDApOl92bS5fZSgpXSk7fTt2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkNWQxNDgyX3N0YXRpY1JlbmRlckZucz1bXTttYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQ1ZDE0ODJfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhcm91c2VsL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZDVkMTQ4MiYKLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAidGhyb3R0bGUtZGVib3VuY2UvdGhyb3R0bGUiCnZhciB0aHJvdHRsZV89X193ZWJwYWNrX3JlcXVpcmVfXygyNSk7dmFyIHRocm90dGxlX2RlZmF1bHQ9LyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih0aHJvdHRsZV8pOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Nhcm91c2VsL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjYXJvdXNlbF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxDYXJvdXNlbCcscHJvcHM6e2luaXRpYWxJbmRleDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxoZWlnaHQ6U3RyaW5nLHRyaWdnZXI6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J2hvdmVyJ30sYXV0b3BsYXk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGludGVydmFsOnt0eXBlOk51bWJlcixkZWZhdWx0OjMwMDB9LGluZGljYXRvclBvc2l0aW9uOlN0cmluZyxpbmRpY2F0b3I6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGFycm93Ont0eXBlOlN0cmluZyxkZWZhdWx0Oidob3Zlcid9LHR5cGU6U3RyaW5nLGxvb3A6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGRpcmVjdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDonaG9yaXpvbnRhbCcsdmFsaWRhdG9yOmZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpe3JldHVyblsnaG9yaXpvbnRhbCcsJ3ZlcnRpY2FsJ10uaW5kZXhPZih2YWwpIT09LTE7fX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntpdGVtczpbXSxhY3RpdmVJbmRleDotMSxjb250YWluZXJXaWR0aDowLHRpbWVyOm51bGwsaG92ZXI6ZmFsc2V9O30sY29tcHV0ZWQ6e2Fycm93RGlzcGxheTpmdW5jdGlvbiBhcnJvd0Rpc3BsYXkoKXtyZXR1cm4gdGhpcy5hcnJvdyE9PSduZXZlcicmJnRoaXMuZGlyZWN0aW9uIT09J3ZlcnRpY2FsJzt9LGhhc0xhYmVsOmZ1bmN0aW9uIGhhc0xhYmVsKCl7cmV0dXJuIHRoaXMuaXRlbXMuc29tZShmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbS5sYWJlbC50b1N0cmluZygpLmxlbmd0aD4wO30pO30sY2Fyb3VzZWxDbGFzc2VzOmZ1bmN0aW9uIGNhcm91c2VsQ2xhc3Nlcygpe3ZhciBjbGFzc2VzPVsnZWwtY2Fyb3VzZWwnLCdlbC1jYXJvdXNlbC0tJyt0aGlzLmRpcmVjdGlvbl07aWYodGhpcy50eXBlPT09J2NhcmQnKXtjbGFzc2VzLnB1c2goJ2VsLWNhcm91c2VsLS1jYXJkJyk7fXJldHVybiBjbGFzc2VzO30saW5kaWNhdG9yc0NsYXNzZXM6ZnVuY3Rpb24gaW5kaWNhdG9yc0NsYXNzZXMoKXt2YXIgY2xhc3Nlcz1bJ2VsLWNhcm91c2VsX19pbmRpY2F0b3JzJywnZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLScrdGhpcy5kaXJlY3Rpb25dO2lmKHRoaXMuaGFzTGFiZWwpe2NsYXNzZXMucHVzaCgnZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWxhYmVscycpO31pZih0aGlzLmluZGljYXRvclBvc2l0aW9uPT09J291dHNpZGUnfHx0aGlzLnR5cGU9PT0nY2FyZCcpe2NsYXNzZXMucHVzaCgnZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLW91dHNpZGUnKTt9cmV0dXJuIGNsYXNzZXM7fX0sd2F0Y2g6e2l0ZW1zOmZ1bmN0aW9uIGl0ZW1zKHZhbCl7aWYodmFsLmxlbmd0aD4wKXRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmluaXRpYWxJbmRleCk7fSxhY3RpdmVJbmRleDpmdW5jdGlvbiBhY3RpdmVJbmRleCh2YWwsb2xkVmFsKXt0aGlzLnJlc2V0SXRlbVBvc2l0aW9uKG9sZFZhbCk7aWYob2xkVmFsPi0xKXt0aGlzLiRlbWl0KCdjaGFuZ2UnLHZhbCxvbGRWYWwpO319LGF1dG9wbGF5OmZ1bmN0aW9uIGF1dG9wbGF5KHZhbCl7dmFsP3RoaXMuc3RhcnRUaW1lcigpOnRoaXMucGF1c2VUaW1lcigpO30sbG9vcDpmdW5jdGlvbiBsb29wKCl7dGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlSW5kZXgpO319LG1ldGhvZHM6e2hhbmRsZU1vdXNlRW50ZXI6ZnVuY3Rpb24gaGFuZGxlTW91c2VFbnRlcigpe3RoaXMuaG92ZXI9dHJ1ZTt0aGlzLnBhdXNlVGltZXIoKTt9LGhhbmRsZU1vdXNlTGVhdmU6ZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpe3RoaXMuaG92ZXI9ZmFsc2U7dGhpcy5zdGFydFRpbWVyKCk7fSxpdGVtSW5TdGFnZTpmdW5jdGlvbiBpdGVtSW5TdGFnZShpdGVtLGluZGV4KXt2YXIgbGVuZ3RoPXRoaXMuaXRlbXMubGVuZ3RoO2lmKGluZGV4PT09bGVuZ3RoLTEmJml0ZW0uaW5TdGFnZSYmdGhpcy5pdGVtc1swXS5hY3RpdmV8fGl0ZW0uaW5TdGFnZSYmdGhpcy5pdGVtc1tpbmRleCsxXSYmdGhpcy5pdGVtc1tpbmRleCsxXS5hY3RpdmUpe3JldHVybidsZWZ0Jzt9ZWxzZSBpZihpbmRleD09PTAmJml0ZW0uaW5TdGFnZSYmdGhpcy5pdGVtc1tsZW5ndGgtMV0uYWN0aXZlfHxpdGVtLmluU3RhZ2UmJnRoaXMuaXRlbXNbaW5kZXgtMV0mJnRoaXMuaXRlbXNbaW5kZXgtMV0uYWN0aXZlKXtyZXR1cm4ncmlnaHQnO31yZXR1cm4gZmFsc2U7fSxoYW5kbGVCdXR0b25FbnRlcjpmdW5jdGlvbiBoYW5kbGVCdXR0b25FbnRlcihhcnJvdyl7dmFyIF90aGlzPXRoaXM7aWYodGhpcy5kaXJlY3Rpb249PT0ndmVydGljYWwnKXJldHVybjt0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXRlbSxpbmRleCl7aWYoYXJyb3c9PT1fdGhpcy5pdGVtSW5TdGFnZShpdGVtLGluZGV4KSl7aXRlbS5ob3Zlcj10cnVlO319KTt9LGhhbmRsZUJ1dHRvbkxlYXZlOmZ1bmN0aW9uIGhhbmRsZUJ1dHRvbkxlYXZlKCl7aWYodGhpcy5kaXJlY3Rpb249PT0ndmVydGljYWwnKXJldHVybjt0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aXRlbS5ob3Zlcj1mYWxzZTt9KTt9LHVwZGF0ZUl0ZW1zOmZ1bmN0aW9uIHVwZGF0ZUl0ZW1zKCl7dGhpcy5pdGVtcz10aGlzLiRjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpe3JldHVybiBjaGlsZC4kb3B0aW9ucy5uYW1lPT09J0VsQ2Fyb3VzZWxJdGVtJzt9KTt9LHJlc2V0SXRlbVBvc2l0aW9uOmZ1bmN0aW9uIHJlc2V0SXRlbVBvc2l0aW9uKG9sZEluZGV4KXt2YXIgX3RoaXMyPXRoaXM7dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0saW5kZXgpe2l0ZW0udHJhbnNsYXRlSXRlbShpbmRleCxfdGhpczIuYWN0aXZlSW5kZXgsb2xkSW5kZXgpO30pO30scGxheVNsaWRlczpmdW5jdGlvbiBwbGF5U2xpZGVzKCl7aWYodGhpcy5hY3RpdmVJbmRleDx0aGlzLml0ZW1zLmxlbmd0aC0xKXt0aGlzLmFjdGl2ZUluZGV4Kys7fWVsc2UgaWYodGhpcy5sb29wKXt0aGlzLmFjdGl2ZUluZGV4PTA7fX0scGF1c2VUaW1lcjpmdW5jdGlvbiBwYXVzZVRpbWVyKCl7aWYodGhpcy50aW1lcil7Y2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKTt0aGlzLnRpbWVyPW51bGw7fX0sc3RhcnRUaW1lcjpmdW5jdGlvbiBzdGFydFRpbWVyKCl7aWYodGhpcy5pbnRlcnZhbDw9MHx8IXRoaXMuYXV0b3BsYXl8fHRoaXMudGltZXIpcmV0dXJuO3RoaXMudGltZXI9c2V0SW50ZXJ2YWwodGhpcy5wbGF5U2xpZGVzLHRoaXMuaW50ZXJ2YWwpO30sc2V0QWN0aXZlSXRlbTpmdW5jdGlvbiBzZXRBY3RpdmVJdGVtKGluZGV4KXtpZih0eXBlb2YgaW5kZXg9PT0nc3RyaW5nJyl7dmFyIGZpbHRlcmVkSXRlbXM9dGhpcy5pdGVtcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIGl0ZW0ubmFtZT09PWluZGV4O30pO2lmKGZpbHRlcmVkSXRlbXMubGVuZ3RoPjApe2luZGV4PXRoaXMuaXRlbXMuaW5kZXhPZihmaWx0ZXJlZEl0ZW1zWzBdKTt9fWluZGV4PU51bWJlcihpbmRleCk7aWYoaXNOYU4oaW5kZXgpfHxpbmRleCE9PU1hdGguZmxvb3IoaW5kZXgpKXtjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW0Nhcm91c2VsXWluZGV4IG11c3QgYmUgYW4gaW50ZWdlci4nKTtyZXR1cm47fXZhciBsZW5ndGg9dGhpcy5pdGVtcy5sZW5ndGg7dmFyIG9sZEluZGV4PXRoaXMuYWN0aXZlSW5kZXg7aWYoaW5kZXg8MCl7dGhpcy5hY3RpdmVJbmRleD10aGlzLmxvb3A/bGVuZ3RoLTE6MDt9ZWxzZSBpZihpbmRleD49bGVuZ3RoKXt0aGlzLmFjdGl2ZUluZGV4PXRoaXMubG9vcD8wOmxlbmd0aC0xO31lbHNle3RoaXMuYWN0aXZlSW5kZXg9aW5kZXg7fWlmKG9sZEluZGV4PT09dGhpcy5hY3RpdmVJbmRleCl7dGhpcy5yZXNldEl0ZW1Qb3NpdGlvbihvbGRJbmRleCk7fX0scHJldjpmdW5jdGlvbiBwcmV2KCl7dGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlSW5kZXgtMSk7fSxuZXh0OmZ1bmN0aW9uIG5leHQoKXt0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVJbmRleCsxKTt9LGhhbmRsZUluZGljYXRvckNsaWNrOmZ1bmN0aW9uIGhhbmRsZUluZGljYXRvckNsaWNrKGluZGV4KXt0aGlzLmFjdGl2ZUluZGV4PWluZGV4O30saGFuZGxlSW5kaWNhdG9ySG92ZXI6ZnVuY3Rpb24gaGFuZGxlSW5kaWNhdG9ySG92ZXIoaW5kZXgpe2lmKHRoaXMudHJpZ2dlcj09PSdob3ZlcicmJmluZGV4IT09dGhpcy5hY3RpdmVJbmRleCl7dGhpcy5hY3RpdmVJbmRleD1pbmRleDt9fX0sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dmFyIF90aGlzMz10aGlzO3RoaXMudGhyb3R0bGVkQXJyb3dDbGljaz10aHJvdHRsZV9kZWZhdWx0KCkoMzAwLHRydWUsZnVuY3Rpb24oaW5kZXgpe190aGlzMy5zZXRBY3RpdmVJdGVtKGluZGV4KTt9KTt0aGlzLnRocm90dGxlZEluZGljYXRvckhvdmVyPXRocm90dGxlX2RlZmF1bHQoKSgzMDAsZnVuY3Rpb24oaW5kZXgpe190aGlzMy5oYW5kbGVJbmRpY2F0b3JIb3ZlcihpbmRleCk7fSk7fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt2YXIgX3RoaXM0PXRoaXM7dGhpcy51cGRhdGVJdGVtcygpO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7T2JqZWN0KHJlc2l6ZV9ldmVudF9bImFkZFJlc2l6ZUxpc3RlbmVyIl0pKF90aGlzNC4kZWwsX3RoaXM0LnJlc2V0SXRlbVBvc2l0aW9uKTtpZihfdGhpczQuaW5pdGlhbEluZGV4PF90aGlzNC5pdGVtcy5sZW5ndGgmJl90aGlzNC5pbml0aWFsSW5kZXg+PTApe190aGlzNC5hY3RpdmVJbmRleD1fdGhpczQuaW5pdGlhbEluZGV4O31fdGhpczQuc3RhcnRUaW1lcigpO30pO30sYmVmb3JlRGVzdHJveTpmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCl7aWYodGhpcy4kZWwpT2JqZWN0KHJlc2l6ZV9ldmVudF9bInJlbW92ZVJlc2l6ZUxpc3RlbmVyIl0pKHRoaXMuJGVsLHRoaXMucmVzZXRJdGVtUG9zaXRpb24pO3RoaXMucGF1c2VUaW1lcigpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2Nhcm91c2VsX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWNhcm91c2VsX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgY2Fyb3VzZWxfc3JjX21haW5fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc19jYXJvdXNlbF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQ1ZDE0ODJfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDVkMTQ4Ml9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGNhcm91c2VsX3NyY19tYWluX2FwaTt9Y2Fyb3VzZWxfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jYXJvdXNlbC9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY2Fyb3VzZWxfc3JjX21haW49Y2Fyb3VzZWxfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJvdXNlbC9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2Nhcm91c2VsX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGNhcm91c2VsX3NyY19tYWluLm5hbWUsY2Fyb3VzZWxfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjYXJvdXNlbD1jYXJvdXNlbF9zcmNfbWFpbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Njcm9sbGJhci9zcmMvdXRpbC5qcwp2YXIgQkFSX01BUD17dmVydGljYWw6e29mZnNldDonb2Zmc2V0SGVpZ2h0JyxzY3JvbGw6J3Njcm9sbFRvcCcsc2Nyb2xsU2l6ZTonc2Nyb2xsSGVpZ2h0JyxzaXplOidoZWlnaHQnLGtleTondmVydGljYWwnLGF4aXM6J1knLGNsaWVudDonY2xpZW50WScsZGlyZWN0aW9uOid0b3AnfSxob3Jpem9udGFsOntvZmZzZXQ6J29mZnNldFdpZHRoJyxzY3JvbGw6J3Njcm9sbExlZnQnLHNjcm9sbFNpemU6J3Njcm9sbFdpZHRoJyxzaXplOid3aWR0aCcsa2V5Oidob3Jpem9udGFsJyxheGlzOidYJyxjbGllbnQ6J2NsaWVudFgnLGRpcmVjdGlvbjonbGVmdCd9fTtmdW5jdGlvbiByZW5kZXJUaHVtYlN0eWxlKF9yZWYpe3ZhciBtb3ZlPV9yZWYubW92ZSxzaXplPV9yZWYuc2l6ZSxiYXI9X3JlZi5iYXI7dmFyIHN0eWxlPXt9O3ZhciB0cmFuc2xhdGU9J3RyYW5zbGF0ZScrYmFyLmF4aXMrJygnK21vdmUrJyUpJztzdHlsZVtiYXIuc2l6ZV09c2l6ZTtzdHlsZS50cmFuc2Zvcm09dHJhbnNsYXRlO3N0eWxlLm1zVHJhbnNmb3JtPXRyYW5zbGF0ZTtzdHlsZS53ZWJraXRUcmFuc2Zvcm09dHJhbnNsYXRlO3JldHVybiBzdHlsZTt9Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2Nyb2xsYmFyL3NyYy9iYXIuanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfYmFyPXtuYW1lOidCYXInLHByb3BzOnt2ZXJ0aWNhbDpCb29sZWFuLHNpemU6U3RyaW5nLG1vdmU6TnVtYmVyfSxjb21wdXRlZDp7YmFyOmZ1bmN0aW9uIGJhcigpe3JldHVybiBCQVJfTUFQW3RoaXMudmVydGljYWw/J3ZlcnRpY2FsJzonaG9yaXpvbnRhbCddO30sd3JhcDpmdW5jdGlvbiB3cmFwKCl7cmV0dXJuIHRoaXMuJHBhcmVudC53cmFwO319LHJlbmRlcjpmdW5jdGlvbiByZW5kZXIoaCl7dmFyIHNpemU9dGhpcy5zaXplLG1vdmU9dGhpcy5tb3ZlLGJhcj10aGlzLmJhcjtyZXR1cm4gaCgnZGl2Jyx7J2NsYXNzJzpbJ2VsLXNjcm9sbGJhcl9fYmFyJywnaXMtJytiYXIua2V5XSxvbjp7J21vdXNlZG93bic6dGhpcy5jbGlja1RyYWNrSGFuZGxlcn19LFtoKCdkaXYnLHtyZWY6J3RodW1iJywnY2xhc3MnOidlbC1zY3JvbGxiYXJfX3RodW1iJyxvbjp7J21vdXNlZG93bic6dGhpcy5jbGlja1RodW1iSGFuZGxlcn0sc3R5bGU6cmVuZGVyVGh1bWJTdHlsZSh7c2l6ZTpzaXplLG1vdmU6bW92ZSxiYXI6YmFyfSl9KV0pO30sbWV0aG9kczp7Y2xpY2tUaHVtYkhhbmRsZXI6ZnVuY3Rpb24gY2xpY2tUaHVtYkhhbmRsZXIoZSl7Ly8gcHJldmVudCBjbGljayBldmVudCBvZiByaWdodCBidXR0b24KaWYoZS5jdHJsS2V5fHxlLmJ1dHRvbj09PTIpe3JldHVybjt9dGhpcy5zdGFydERyYWcoZSk7dGhpc1t0aGlzLmJhci5heGlzXT1lLmN1cnJlbnRUYXJnZXRbdGhpcy5iYXIub2Zmc2V0XS0oZVt0aGlzLmJhci5jbGllbnRdLWUuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dKTt9LGNsaWNrVHJhY2tIYW5kbGVyOmZ1bmN0aW9uIGNsaWNrVHJhY2tIYW5kbGVyKGUpe3ZhciBvZmZzZXQ9TWF0aC5hYnMoZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdGhpcy5iYXIuZGlyZWN0aW9uXS1lW3RoaXMuYmFyLmNsaWVudF0pO3ZhciB0aHVtYkhhbGY9dGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdLzI7dmFyIHRodW1iUG9zaXRpb25QZXJjZW50YWdlPShvZmZzZXQtdGh1bWJIYWxmKSoxMDAvdGhpcy4kZWxbdGhpcy5iYXIub2Zmc2V0XTt0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsXT10aHVtYlBvc2l0aW9uUGVyY2VudGFnZSp0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsU2l6ZV0vMTAwO30sc3RhcnREcmFnOmZ1bmN0aW9uIHN0YXJ0RHJhZyhlKXtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO3RoaXMuY3Vyc29yRG93bj10cnVlO09iamVjdChkb21fWyJvbiJdKShkb2N1bWVudCwnbW91c2Vtb3ZlJyx0aGlzLm1vdXNlTW92ZURvY3VtZW50SGFuZGxlcik7T2JqZWN0KGRvbV9bIm9uIl0pKGRvY3VtZW50LCdtb3VzZXVwJyx0aGlzLm1vdXNlVXBEb2N1bWVudEhhbmRsZXIpO2RvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTt9LG1vdXNlTW92ZURvY3VtZW50SGFuZGxlcjpmdW5jdGlvbiBtb3VzZU1vdmVEb2N1bWVudEhhbmRsZXIoZSl7aWYodGhpcy5jdXJzb3JEb3duPT09ZmFsc2UpcmV0dXJuO3ZhciBwcmV2UGFnZT10aGlzW3RoaXMuYmFyLmF4aXNdO2lmKCFwcmV2UGFnZSlyZXR1cm47dmFyIG9mZnNldD0odGhpcy4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdGhpcy5iYXIuZGlyZWN0aW9uXS1lW3RoaXMuYmFyLmNsaWVudF0pKi0xO3ZhciB0aHVtYkNsaWNrUG9zaXRpb249dGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdLXByZXZQYWdlO3ZhciB0aHVtYlBvc2l0aW9uUGVyY2VudGFnZT0ob2Zmc2V0LXRodW1iQ2xpY2tQb3NpdGlvbikqMTAwL3RoaXMuJGVsW3RoaXMuYmFyLm9mZnNldF07dGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbF09dGh1bWJQb3NpdGlvblBlcmNlbnRhZ2UqdGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbFNpemVdLzEwMDt9LG1vdXNlVXBEb2N1bWVudEhhbmRsZXI6ZnVuY3Rpb24gbW91c2VVcERvY3VtZW50SGFuZGxlcihlKXt0aGlzLmN1cnNvckRvd249ZmFsc2U7dGhpc1t0aGlzLmJhci5heGlzXT0wO09iamVjdChkb21fWyJvZmYiXSkoZG9jdW1lbnQsJ21vdXNlbW92ZScsdGhpcy5tb3VzZU1vdmVEb2N1bWVudEhhbmRsZXIpO2RvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9bnVsbDt9fSxkZXN0cm95ZWQ6ZnVuY3Rpb24gZGVzdHJveWVkKCl7T2JqZWN0KGRvbV9bIm9mZiJdKShkb2N1bWVudCwnbW91c2V1cCcsdGhpcy5tb3VzZVVwRG9jdW1lbnRIYW5kbGVyKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Njcm9sbGJhci9zcmMvbWFpbi5qcwovLyByZWZlcmVuY2UgaHR0cHM6Ly9naXRodWIuY29tL25vZWxkZWxnYWRvL2dlbWluaS1zY3JvbGxiYXIvYmxvYi9tYXN0ZXIvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzY3JvbGxiYXJfc3JjX21haW49e25hbWU6J0VsU2Nyb2xsYmFyJyxjb21wb25lbnRzOntCYXI6c3JjX2Jhcn0scHJvcHM6e25hdGl2ZTpCb29sZWFuLHdyYXBTdHlsZTp7fSx3cmFwQ2xhc3M6e30sdmlld0NsYXNzOnt9LHZpZXdTdHlsZTp7fSxub3Jlc2l6ZTpCb29sZWFuLC8vIOWmguaenCBjb250YWluZXIg5bC65a+45LiN5Lya5Y+R55Sf5Y+Y5YyW77yM5pyA5aW96K6+572u5a6D5Y+v5Lul5LyY5YyW5oCn6IO9CnRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDonZGl2J319LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntzaXplV2lkdGg6JzAnLHNpemVIZWlnaHQ6JzAnLG1vdmVYOjAsbW92ZVk6MH07fSxjb21wdXRlZDp7d3JhcDpmdW5jdGlvbiB3cmFwKCl7cmV0dXJuIHRoaXMuJHJlZnMud3JhcDt9fSxyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKGgpe3ZhciBndXR0ZXI9c2Nyb2xsYmFyX3dpZHRoX2RlZmF1bHQoKSgpO3ZhciBzdHlsZT10aGlzLndyYXBTdHlsZTtpZihndXR0ZXIpe3ZhciBndXR0ZXJXaXRoPSctJytndXR0ZXIrJ3B4Jzt2YXIgZ3V0dGVyU3R5bGU9J21hcmdpbi1ib3R0b206ICcrZ3V0dGVyV2l0aCsnOyBtYXJnaW4tcmlnaHQ6ICcrZ3V0dGVyV2l0aCsnOyc7aWYoQXJyYXkuaXNBcnJheSh0aGlzLndyYXBTdHlsZSkpe3N0eWxlPU9iamVjdCh1dGlsX1sidG9PYmplY3QiXSkodGhpcy53cmFwU3R5bGUpO3N0eWxlLm1hcmdpblJpZ2h0PXN0eWxlLm1hcmdpbkJvdHRvbT1ndXR0ZXJXaXRoO31lbHNlIGlmKHR5cGVvZiB0aGlzLndyYXBTdHlsZT09PSdzdHJpbmcnKXtzdHlsZSs9Z3V0dGVyU3R5bGU7fWVsc2V7c3R5bGU9Z3V0dGVyU3R5bGU7fX12YXIgdmlldz1oKHRoaXMudGFnLHtjbGFzczpbJ2VsLXNjcm9sbGJhcl9fdmlldycsdGhpcy52aWV3Q2xhc3NdLHN0eWxlOnRoaXMudmlld1N0eWxlLHJlZjoncmVzaXplJ30sdGhpcy4kc2xvdHMuZGVmYXVsdCk7dmFyIHdyYXA9aCgnZGl2Jyx7cmVmOid3cmFwJyxzdHlsZTpzdHlsZSxvbjp7J3Njcm9sbCc6dGhpcy5oYW5kbGVTY3JvbGx9LCdjbGFzcyc6W3RoaXMud3JhcENsYXNzLCdlbC1zY3JvbGxiYXJfX3dyYXAnLGd1dHRlcj8nJzonZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdCddfSxbW3ZpZXddXSk7dmFyIG5vZGVzPXZvaWQgMDtpZighdGhpcy5uYXRpdmUpe25vZGVzPVt3cmFwLGgoc3JjX2Jhcix7YXR0cnM6e21vdmU6dGhpcy5tb3ZlWCxzaXplOnRoaXMuc2l6ZVdpZHRofX0pLGgoc3JjX2Jhcix7YXR0cnM6e3ZlcnRpY2FsOnRydWUsbW92ZTp0aGlzLm1vdmVZLHNpemU6dGhpcy5zaXplSGVpZ2h0fX0pXTt9ZWxzZXtub2Rlcz1baCgnZGl2Jyx7cmVmOid3cmFwJywnY2xhc3MnOlt0aGlzLndyYXBDbGFzcywnZWwtc2Nyb2xsYmFyX193cmFwJ10sc3R5bGU6c3R5bGV9LFtbdmlld11dKV07fXJldHVybiBoKCdkaXYnLHtjbGFzczonZWwtc2Nyb2xsYmFyJ30sbm9kZXMpO30sbWV0aG9kczp7aGFuZGxlU2Nyb2xsOmZ1bmN0aW9uIGhhbmRsZVNjcm9sbCgpe3ZhciB3cmFwPXRoaXMud3JhcDt0aGlzLm1vdmVZPXdyYXAuc2Nyb2xsVG9wKjEwMC93cmFwLmNsaWVudEhlaWdodDt0aGlzLm1vdmVYPXdyYXAuc2Nyb2xsTGVmdCoxMDAvd3JhcC5jbGllbnRXaWR0aDt9LHVwZGF0ZTpmdW5jdGlvbiB1cGRhdGUoKXt2YXIgaGVpZ2h0UGVyY2VudGFnZT12b2lkIDAsd2lkdGhQZXJjZW50YWdlPXZvaWQgMDt2YXIgd3JhcD10aGlzLndyYXA7aWYoIXdyYXApcmV0dXJuO2hlaWdodFBlcmNlbnRhZ2U9d3JhcC5jbGllbnRIZWlnaHQqMTAwL3dyYXAuc2Nyb2xsSGVpZ2h0O3dpZHRoUGVyY2VudGFnZT13cmFwLmNsaWVudFdpZHRoKjEwMC93cmFwLnNjcm9sbFdpZHRoO3RoaXMuc2l6ZUhlaWdodD1oZWlnaHRQZXJjZW50YWdlPDEwMD9oZWlnaHRQZXJjZW50YWdlKyclJzonJzt0aGlzLnNpemVXaWR0aD13aWR0aFBlcmNlbnRhZ2U8MTAwP3dpZHRoUGVyY2VudGFnZSsnJSc6Jyc7fX0sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7aWYodGhpcy5uYXRpdmUpcmV0dXJuO3RoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlKTshdGhpcy5ub3Jlc2l6ZSYmT2JqZWN0KHJlc2l6ZV9ldmVudF9bImFkZFJlc2l6ZUxpc3RlbmVyIl0pKHRoaXMuJHJlZnMucmVzaXplLHRoaXMudXBkYXRlKTt9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpe2lmKHRoaXMubmF0aXZlKXJldHVybjshdGhpcy5ub3Jlc2l6ZSYmT2JqZWN0KHJlc2l6ZV9ldmVudF9bInJlbW92ZVJlc2l6ZUxpc3RlbmVyIl0pKHRoaXMuJHJlZnMucmVzaXplLHRoaXMudXBkYXRlKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Njcm9sbGJhci9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3Njcm9sbGJhcl9zcmNfbWFpbi5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChzY3JvbGxiYXJfc3JjX21haW4ubmFtZSxzY3JvbGxiYXJfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzY3JvbGxiYXI9c2Nyb2xsYmFyX3NyY19tYWluOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE4MDFhZTE5Jgp2YXIgaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE4MDFhZTE5X3JlbmRlcj1mdW5jdGlvbiBpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTgwMWFlMTlfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0ucmVhZHksZXhwcmVzc2lvbjoicmVhZHkifV0sc3RhdGljQ2xhc3M6ImVsLWNhcm91c2VsX19pdGVtIixjbGFzczp7ImlzLWFjdGl2ZSI6X3ZtLmFjdGl2ZSwiZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQiOl92bS4kcGFyZW50LnR5cGU9PT0iY2FyZCIsImlzLWluLXN0YWdlIjpfdm0uaW5TdGFnZSwiaXMtaG92ZXIiOl92bS5ob3ZlciwiaXMtYW5pbWF0aW5nIjpfdm0uYW5pbWF0aW5nfSxzdHlsZTpfdm0uaXRlbVN0eWxlLG9uOntjbGljazpfdm0uaGFuZGxlSXRlbUNsaWNrfX0sW192bS4kcGFyZW50LnR5cGU9PT0iY2FyZCI/X2MoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiFfdm0uYWN0aXZlLGV4cHJlc3Npb246IiFhY3RpdmUifV0sc3RhdGljQ2xhc3M6ImVsLWNhcm91c2VsX19tYXNrIn0pOl92bS5fZSgpLF92bS5fdCgiZGVmYXVsdCIpXSwyKTt9O3ZhciBpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTgwMWFlMTlfc3RhdGljUmVuZGVyRm5zPVtdO2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8xODAxYWUxOV9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE4MDFhZTE5JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXJvdXNlbC9zcmMvaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBDQVJEX1NDQUxFPTAuODM7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBpdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbENhcm91c2VsSXRlbScscHJvcHM6e25hbWU6U3RyaW5nLGxhYmVsOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OicnfX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2hvdmVyOmZhbHNlLHRyYW5zbGF0ZTowLHNjYWxlOjEsYWN0aXZlOmZhbHNlLHJlYWR5OmZhbHNlLGluU3RhZ2U6ZmFsc2UsYW5pbWF0aW5nOmZhbHNlfTt9LG1ldGhvZHM6e3Byb2Nlc3NJbmRleDpmdW5jdGlvbiBwcm9jZXNzSW5kZXgoaW5kZXgsYWN0aXZlSW5kZXgsbGVuZ3RoKXtpZihhY3RpdmVJbmRleD09PTAmJmluZGV4PT09bGVuZ3RoLTEpe3JldHVybi0xO31lbHNlIGlmKGFjdGl2ZUluZGV4PT09bGVuZ3RoLTEmJmluZGV4PT09MCl7cmV0dXJuIGxlbmd0aDt9ZWxzZSBpZihpbmRleDxhY3RpdmVJbmRleC0xJiZhY3RpdmVJbmRleC1pbmRleD49bGVuZ3RoLzIpe3JldHVybiBsZW5ndGgrMTt9ZWxzZSBpZihpbmRleD5hY3RpdmVJbmRleCsxJiZpbmRleC1hY3RpdmVJbmRleD49bGVuZ3RoLzIpe3JldHVybi0yO31yZXR1cm4gaW5kZXg7fSxjYWxjQ2FyZFRyYW5zbGF0ZTpmdW5jdGlvbiBjYWxjQ2FyZFRyYW5zbGF0ZShpbmRleCxhY3RpdmVJbmRleCl7dmFyIHBhcmVudFdpZHRoPXRoaXMuJHBhcmVudC4kZWwub2Zmc2V0V2lkdGg7aWYodGhpcy5pblN0YWdlKXtyZXR1cm4gcGFyZW50V2lkdGgqKCgyLUNBUkRfU0NBTEUpKihpbmRleC1hY3RpdmVJbmRleCkrMSkvNDt9ZWxzZSBpZihpbmRleDxhY3RpdmVJbmRleCl7cmV0dXJuLSgxK0NBUkRfU0NBTEUpKnBhcmVudFdpZHRoLzQ7fWVsc2V7cmV0dXJuKDMrQ0FSRF9TQ0FMRSkqcGFyZW50V2lkdGgvNDt9fSxjYWxjVHJhbnNsYXRlOmZ1bmN0aW9uIGNhbGNUcmFuc2xhdGUoaW5kZXgsYWN0aXZlSW5kZXgsaXNWZXJ0aWNhbCl7dmFyIGRpc3RhbmNlPXRoaXMuJHBhcmVudC4kZWxbaXNWZXJ0aWNhbD8nb2Zmc2V0SGVpZ2h0Jzonb2Zmc2V0V2lkdGgnXTtyZXR1cm4gZGlzdGFuY2UqKGluZGV4LWFjdGl2ZUluZGV4KTt9LHRyYW5zbGF0ZUl0ZW06ZnVuY3Rpb24gdHJhbnNsYXRlSXRlbShpbmRleCxhY3RpdmVJbmRleCxvbGRJbmRleCl7dmFyIHBhcmVudFR5cGU9dGhpcy4kcGFyZW50LnR5cGU7dmFyIHBhcmVudERpcmVjdGlvbj10aGlzLnBhcmVudERpcmVjdGlvbjt2YXIgbGVuZ3RoPXRoaXMuJHBhcmVudC5pdGVtcy5sZW5ndGg7aWYocGFyZW50VHlwZSE9PSdjYXJkJyYmb2xkSW5kZXghPT11bmRlZmluZWQpe3RoaXMuYW5pbWF0aW5nPWluZGV4PT09YWN0aXZlSW5kZXh8fGluZGV4PT09b2xkSW5kZXg7fWlmKGluZGV4IT09YWN0aXZlSW5kZXgmJmxlbmd0aD4yJiZ0aGlzLiRwYXJlbnQubG9vcCl7aW5kZXg9dGhpcy5wcm9jZXNzSW5kZXgoaW5kZXgsYWN0aXZlSW5kZXgsbGVuZ3RoKTt9aWYocGFyZW50VHlwZT09PSdjYXJkJyl7aWYocGFyZW50RGlyZWN0aW9uPT09J3ZlcnRpY2FsJyl7Y29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXVtDYXJvdXNlbF12ZXJ0aWNhbCBkaXJlY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBjYXJkIG1vZGUnKTt9dGhpcy5pblN0YWdlPU1hdGgucm91bmQoTWF0aC5hYnMoaW5kZXgtYWN0aXZlSW5kZXgpKTw9MTt0aGlzLmFjdGl2ZT1pbmRleD09PWFjdGl2ZUluZGV4O3RoaXMudHJhbnNsYXRlPXRoaXMuY2FsY0NhcmRUcmFuc2xhdGUoaW5kZXgsYWN0aXZlSW5kZXgpO3RoaXMuc2NhbGU9dGhpcy5hY3RpdmU/MTpDQVJEX1NDQUxFO31lbHNle3RoaXMuYWN0aXZlPWluZGV4PT09YWN0aXZlSW5kZXg7dmFyIGlzVmVydGljYWw9cGFyZW50RGlyZWN0aW9uPT09J3ZlcnRpY2FsJzt0aGlzLnRyYW5zbGF0ZT10aGlzLmNhbGNUcmFuc2xhdGUoaW5kZXgsYWN0aXZlSW5kZXgsaXNWZXJ0aWNhbCk7fXRoaXMucmVhZHk9dHJ1ZTt9LGhhbmRsZUl0ZW1DbGljazpmdW5jdGlvbiBoYW5kbGVJdGVtQ2xpY2soKXt2YXIgcGFyZW50PXRoaXMuJHBhcmVudDtpZihwYXJlbnQmJnBhcmVudC50eXBlPT09J2NhcmQnKXt2YXIgaW5kZXg9cGFyZW50Lml0ZW1zLmluZGV4T2YodGhpcyk7cGFyZW50LnNldEFjdGl2ZUl0ZW0oaW5kZXgpO319fSxjb21wdXRlZDp7cGFyZW50RGlyZWN0aW9uOmZ1bmN0aW9uIHBhcmVudERpcmVjdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQuZGlyZWN0aW9uO30saXRlbVN0eWxlOmZ1bmN0aW9uIGl0ZW1TdHlsZSgpe3ZhciB0cmFuc2xhdGVUeXBlPXRoaXMucGFyZW50RGlyZWN0aW9uPT09J3ZlcnRpY2FsJz8ndHJhbnNsYXRlWSc6J3RyYW5zbGF0ZVgnO3ZhciB2YWx1ZT10cmFuc2xhdGVUeXBlKycoJyt0aGlzLnRyYW5zbGF0ZSsncHgpIHNjYWxlKCcrdGhpcy5zY2FsZSsnKSc7dmFyIHN0eWxlPXt0cmFuc2Zvcm06dmFsdWV9O3JldHVybiBPYmplY3QodXRpbF9bImF1dG9wcmVmaXhlciJdKShzdHlsZSk7fX0sY3JlYXRlZDpmdW5jdGlvbiBjcmVhdGVkKCl7dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQudXBkYXRlSXRlbXMoKTt9LGRlc3Ryb3llZDpmdW5jdGlvbiBkZXN0cm95ZWQoKXt0aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC51cGRhdGVJdGVtcygpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWl0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJvdXNlbC9zcmMvaXRlbS52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBpdGVtX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18saXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE4MDFhZTE5X3JlbmRlcixpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTgwMWFlMTlfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBpdGVtX2FwaTt9aXRlbV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Nhcm91c2VsL3NyYy9pdGVtLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfaXRlbT1pdGVtX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2Fyb3VzZWwtaXRlbS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3NyY19pdGVtLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHNyY19pdGVtLm5hbWUsc3JjX2l0ZW0pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjYXJvdXNlbF9pdGVtPXNyY19pdGVtOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NjFkNTdmNCYKdmFyIGNvbGxhcHNldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDYxZDU3ZjRfcmVuZGVyPWZ1bmN0aW9uIGNvbGxhcHNldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDYxZDU3ZjRfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sbGFwc2UiLGF0dHJzOntyb2xlOiJ0YWJsaXN0IiwiYXJpYS1tdWx0aXNlbGVjdGFibGUiOiJ0cnVlIn19LFtfdm0uX3QoImRlZmF1bHQiKV0sMik7fTt2YXIgY29sbGFwc2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NjFkNTdmNF9zdGF0aWNSZW5kZXJGbnM9W107Y29sbGFwc2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NjFkNTdmNF9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NjFkNTdmNCYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjb2xsYXBzZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxDb2xsYXBzZScsY29tcG9uZW50TmFtZTonRWxDb2xsYXBzZScscHJvcHM6e2FjY29yZGlvbjpCb29sZWFuLHZhbHVlOnt0eXBlOltBcnJheSxTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJuW107fX19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybnthY3RpdmVOYW1lczpbXS5jb25jYXQodGhpcy52YWx1ZSl9O30scHJvdmlkZTpmdW5jdGlvbiBwcm92aWRlKCl7cmV0dXJue2NvbGxhcHNlOnRoaXN9O30sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uIHZhbHVlKF92YWx1ZSl7dGhpcy5hY3RpdmVOYW1lcz1bXS5jb25jYXQoX3ZhbHVlKTt9fSxtZXRob2RzOntzZXRBY3RpdmVOYW1lczpmdW5jdGlvbiBzZXRBY3RpdmVOYW1lcyhhY3RpdmVOYW1lcyl7YWN0aXZlTmFtZXM9W10uY29uY2F0KGFjdGl2ZU5hbWVzKTt2YXIgdmFsdWU9dGhpcy5hY2NvcmRpb24/YWN0aXZlTmFtZXNbMF06YWN0aXZlTmFtZXM7dGhpcy5hY3RpdmVOYW1lcz1hY3RpdmVOYW1lczt0aGlzLiRlbWl0KCdpbnB1dCcsdmFsdWUpO3RoaXMuJGVtaXQoJ2NoYW5nZScsdmFsdWUpO30saGFuZGxlSXRlbUNsaWNrOmZ1bmN0aW9uIGhhbmRsZUl0ZW1DbGljayhpdGVtKXtpZih0aGlzLmFjY29yZGlvbil7dGhpcy5zZXRBY3RpdmVOYW1lcygodGhpcy5hY3RpdmVOYW1lc1swXXx8dGhpcy5hY3RpdmVOYW1lc1swXT09PTApJiZ0aGlzLmFjdGl2ZU5hbWVzWzBdPT09aXRlbS5uYW1lPycnOml0ZW0ubmFtZSk7fWVsc2V7dmFyIGFjdGl2ZU5hbWVzPXRoaXMuYWN0aXZlTmFtZXMuc2xpY2UoMCk7dmFyIGluZGV4PWFjdGl2ZU5hbWVzLmluZGV4T2YoaXRlbS5uYW1lKTtpZihpbmRleD4tMSl7YWN0aXZlTmFtZXMuc3BsaWNlKGluZGV4LDEpO31lbHNle2FjdGl2ZU5hbWVzLnB1c2goaXRlbS5uYW1lKTt9dGhpcy5zZXRBY3RpdmVOYW1lcyhhY3RpdmVOYW1lcyk7fX19LGNyZWF0ZWQ6ZnVuY3Rpb24gY3JlYXRlZCgpe3RoaXMuJG9uKCdpdGVtLWNsaWNrJyx0aGlzLmhhbmRsZUl0ZW1DbGljayk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19jb2xsYXBzZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1jb2xsYXBzZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBjb2xsYXBzZV9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19jb2xsYXBzZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxjb2xsYXBzZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ2MWQ1N2Y0X3JlbmRlcixjb2xsYXBzZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ2MWQ1N2Y0X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgY29sbGFwc2VfYXBpO31jb2xsYXBzZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY29sbGFwc2U9Y29sbGFwc2VfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xsYXBzZS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2NvbGxhcHNlLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGNvbGxhcHNlLm5hbWUsY29sbGFwc2UpO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19jb2xsYXBzZT1jb2xsYXBzZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZDA1ZmFhYyYKdmFyIGNvbGxhcHNlX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZDA1ZmFhY19yZW5kZXI9ZnVuY3Rpb24gY29sbGFwc2VfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkMDVmYWFjX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbGxhcHNlLWl0ZW0iLGNsYXNzOnsiaXMtYWN0aXZlIjpfdm0uaXNBY3RpdmUsImlzLWRpc2FibGVkIjpfdm0uZGlzYWJsZWR9fSxbX2MoImRpdiIse2F0dHJzOntyb2xlOiJ0YWIiLCJhcmlhLWV4cGFuZGVkIjpfdm0uaXNBY3RpdmUsImFyaWEtY29udHJvbHMiOiJlbC1jb2xsYXBzZS1jb250ZW50LSIrX3ZtLmlkLCJhcmlhLWRlc2NyaWJlZGJ5IjoiZWwtY29sbGFwc2UtY29udGVudC0iK192bS5pZH19LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbGxhcHNlLWl0ZW1fX2hlYWRlciIsY2xhc3M6e2ZvY3VzaW5nOl92bS5mb2N1c2luZywiaXMtYWN0aXZlIjpfdm0uaXNBY3RpdmV9LGF0dHJzOntyb2xlOiJidXR0b24iLGlkOiJlbC1jb2xsYXBzZS1oZWFkLSIrX3ZtLmlkLHRhYmluZGV4Ol92bS5kaXNhYmxlZD91bmRlZmluZWQ6MH0sb246e2NsaWNrOl92bS5oYW5kbGVIZWFkZXJDbGljayxrZXl1cDpmdW5jdGlvbiBrZXl1cCgkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsInNwYWNlIiwzMiwkZXZlbnQua2V5LFsiICIsIlNwYWNlYmFyIl0pJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsImVudGVyIiwxMywkZXZlbnQua2V5LCJFbnRlciIpKXtyZXR1cm4gbnVsbDt9JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBfdm0uaGFuZGxlRW50ZXJDbGljaygkZXZlbnQpO30sZm9jdXM6X3ZtLmhhbmRsZUZvY3VzLGJsdXI6ZnVuY3Rpb24gYmx1cigkZXZlbnQpe192bS5mb2N1c2luZz1mYWxzZTt9fX0sW192bS5fdCgidGl0bGUiLFtfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXSksX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtY29sbGFwc2UtaXRlbV9fYXJyb3cgZWwtaWNvbi1hcnJvdy1yaWdodCIsY2xhc3M6eyJpcy1hY3RpdmUiOl92bS5pc0FjdGl2ZX19KV0sMildKSxfYygiZWwtY29sbGFwc2UtdHJhbnNpdGlvbiIsW19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uaXNBY3RpdmUsZXhwcmVzc2lvbjoiaXNBY3RpdmUifV0sc3RhdGljQ2xhc3M6ImVsLWNvbGxhcHNlLWl0ZW1fX3dyYXAiLGF0dHJzOntyb2xlOiJ0YWJwYW5lbCIsImFyaWEtaGlkZGVuIjohX3ZtLmlzQWN0aXZlLCJhcmlhLWxhYmVsbGVkYnkiOiJlbC1jb2xsYXBzZS1oZWFkLSIrX3ZtLmlkLGlkOiJlbC1jb2xsYXBzZS1jb250ZW50LSIrX3ZtLmlkfX0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sbGFwc2UtaXRlbV9fY29udGVudCJ9LFtfdm0uX3QoImRlZmF1bHQiKV0sMildKV0pXSwxKTt9O3ZhciBjb2xsYXBzZV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmQwNWZhYWNfc3RhdGljUmVuZGVyRm5zPVtdO2NvbGxhcHNlX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZDA1ZmFhY19yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkMDVmYWFjJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY29sbGFwc2VfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxDb2xsYXBzZUl0ZW0nLGNvbXBvbmVudE5hbWU6J0VsQ29sbGFwc2VJdGVtJyxtaXhpbnM6W2VtaXR0ZXJfZGVmYXVsdC5hXSxjb21wb25lbnRzOntFbENvbGxhcHNlVHJhbnNpdGlvbjpjb2xsYXBzZV90cmFuc2l0aW9uX2RlZmF1bHQuYX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2NvbnRlbnRXcmFwU3R5bGU6e2hlaWdodDonYXV0bycsZGlzcGxheTonYmxvY2snfSxjb250ZW50SGVpZ2h0OjAsZm9jdXNpbmc6ZmFsc2UsaXNDbGljazpmYWxzZSxpZDpPYmplY3QodXRpbF9bImdlbmVyYXRlSWQiXSkoKX07fSxpbmplY3Q6Wydjb2xsYXBzZSddLHByb3BzOnt0aXRsZTpTdHJpbmcsbmFtZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybiB0aGlzLl91aWQ7fX0sZGlzYWJsZWQ6Qm9vbGVhbn0sY29tcHV0ZWQ6e2lzQWN0aXZlOmZ1bmN0aW9uIGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuY29sbGFwc2UuYWN0aXZlTmFtZXMuaW5kZXhPZih0aGlzLm5hbWUpPi0xO319LG1ldGhvZHM6e2hhbmRsZUZvY3VzOmZ1bmN0aW9uIGhhbmRsZUZvY3VzKCl7dmFyIF90aGlzPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFfdGhpcy5pc0NsaWNrKXtfdGhpcy5mb2N1c2luZz10cnVlO31lbHNle190aGlzLmlzQ2xpY2s9ZmFsc2U7fX0sNTApO30saGFuZGxlSGVhZGVyQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlSGVhZGVyQ2xpY2soKXtpZih0aGlzLmRpc2FibGVkKXJldHVybjt0aGlzLmRpc3BhdGNoKCdFbENvbGxhcHNlJywnaXRlbS1jbGljaycsdGhpcyk7dGhpcy5mb2N1c2luZz1mYWxzZTt0aGlzLmlzQ2xpY2s9dHJ1ZTt9LGhhbmRsZUVudGVyQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlRW50ZXJDbGljaygpe3RoaXMuZGlzcGF0Y2goJ0VsQ29sbGFwc2UnLCdpdGVtLWNsaWNrJyx0aGlzKTt9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX2NvbGxhcHNlX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189Y29sbGFwc2VfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS1pdGVtLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGNvbGxhcHNlX2l0ZW1fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfY29sbGFwc2VfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxjb2xsYXBzZV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmQwNWZhYWNfcmVuZGVyLGNvbGxhcHNlX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZDA1ZmFhY19zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGNvbGxhcHNlX2l0ZW1fYXBpO31jb2xsYXBzZV9pdGVtX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLWl0ZW0udnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNvbGxhcHNlX2l0ZW09Y29sbGFwc2VfaXRlbV9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbGxhcHNlLWl0ZW0vaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9jb2xsYXBzZV9pdGVtLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGNvbGxhcHNlX2l0ZW0ubmFtZSxjb2xsYXBzZV9pdGVtKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfY29sbGFwc2VfaXRlbT1jb2xsYXBzZV9pdGVtOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FzY2FkZXIvc3JjL2Nhc2NhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMzI1MzdhNiYKdmFyIGNhc2NhZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMDMyNTM3YTZfcmVuZGVyPWZ1bmN0aW9uIGNhc2NhZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMDMyNTM3YTZfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToiY2xpY2tvdXRzaWRlIixyYXdOYW1lOiJ2LWNsaWNrb3V0c2lkZSIsdmFsdWU6ZnVuY3Rpb24gdmFsdWUoKXtyZXR1cm4gX3ZtLnRvZ2dsZURyb3BEb3duVmlzaWJsZShmYWxzZSk7fSxleHByZXNzaW9uOiIoKSA9PiB0b2dnbGVEcm9wRG93blZpc2libGUoZmFsc2UpIn1dLHJlZjoicmVmZXJlbmNlIixjbGFzczpbImVsLWNhc2NhZGVyIixfdm0ucmVhbFNpemUmJiJlbC1jYXNjYWRlci0tIitfdm0ucmVhbFNpemUseyJpcy1kaXNhYmxlZCI6X3ZtLmlzRGlzYWJsZWR9XSxvbjp7bW91c2VlbnRlcjpmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCl7X3ZtLmlucHV0SG92ZXI9dHJ1ZTt9LG1vdXNlbGVhdmU6ZnVuY3Rpb24gbW91c2VsZWF2ZSgkZXZlbnQpe192bS5pbnB1dEhvdmVyPWZhbHNlO30sY2xpY2s6ZnVuY3Rpb24gY2xpY2soKXtyZXR1cm4gX3ZtLnRvZ2dsZURyb3BEb3duVmlzaWJsZShfdm0ucmVhZG9ubHk/dW5kZWZpbmVkOnRydWUpO30sa2V5ZG93bjpfdm0uaGFuZGxlS2V5RG93bn19LFtfYygiZWwtaW5wdXQiLHtyZWY6ImlucHV0IixjbGFzczp7ImlzLWZvY3VzIjpfdm0uZHJvcERvd25WaXNpYmxlfSxhdHRyczp7c2l6ZTpfdm0ucmVhbFNpemUscGxhY2Vob2xkZXI6X3ZtLnBsYWNlaG9sZGVyLHJlYWRvbmx5Ol92bS5yZWFkb25seSxkaXNhYmxlZDpfdm0uaXNEaXNhYmxlZCwidmFsaWRhdGUtZXZlbnQiOmZhbHNlfSxvbjp7Zm9jdXM6X3ZtLmhhbmRsZUZvY3VzLGJsdXI6X3ZtLmhhbmRsZUJsdXIsaW5wdXQ6X3ZtLmhhbmRsZUlucHV0fSxtb2RlbDp7dmFsdWU6X3ZtLm11bHRpcGxlP192bS5wcmVzZW50VGV4dDpfdm0uaW5wdXRWYWx1ZSxjYWxsYmFjazpmdW5jdGlvbiBjYWxsYmFjaygkJHYpe192bS5tdWx0aXBsZT9fdm0ucHJlc2VudFRleHQ6X3ZtLmlucHV0VmFsdWU9JCR2O30sZXhwcmVzc2lvbjoibXVsdGlwbGUgPyBwcmVzZW50VGV4dCA6IGlucHV0VmFsdWUifX0sW19jKCJ0ZW1wbGF0ZSIse3Nsb3Q6InN1ZmZpeCJ9LFtfdm0uY2xlYXJCdG5WaXNpYmxlP19jKCJpIix7a2V5OiJjbGVhciIsc3RhdGljQ2xhc3M6ImVsLWlucHV0X19pY29uIGVsLWljb24tY2lyY2xlLWNsb3NlIixvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIF92bS5oYW5kbGVDbGVhcigkZXZlbnQpO319fSk6X2MoImkiLHtrZXk6ImFycm93LWRvd24iLGNsYXNzOlsiZWwtaW5wdXRfX2ljb24iLCJlbC1pY29uLWFycm93LWRvd24iLF92bS5kcm9wRG93blZpc2libGUmJiJpcy1yZXZlcnNlIl0sb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO192bS50b2dnbGVEcm9wRG93blZpc2libGUoKTt9fX0pXSldLDIpLF92bS5tdWx0aXBsZT9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNhc2NhZGVyX190YWdzIn0sW192bS5fbChfdm0ucHJlc2VudFRhZ3MsZnVuY3Rpb24odGFnLGluZGV4KXtyZXR1cm4gX2MoImVsLXRhZyIse2tleTp0YWcua2V5LGF0dHJzOnt0eXBlOiJpbmZvIixzaXplOl92bS50YWdTaXplLGhpdDp0YWcuaGl0U3RhdGUsY2xvc2FibGU6dGFnLmNsb3NhYmxlLCJkaXNhYmxlLXRyYW5zaXRpb25zIjoiIn0sb246e2Nsb3NlOmZ1bmN0aW9uIGNsb3NlKCRldmVudCl7X3ZtLmRlbGV0ZVRhZyhpbmRleCk7fX19LFtfYygic3BhbiIsW192bS5fdihfdm0uX3ModGFnLnRleHQpKV0pXSk7fSksX3ZtLmZpbHRlcmFibGUmJiFfdm0uaXNEaXNhYmxlZD9fYygiaW5wdXQiLHtkaXJlY3RpdmVzOlt7bmFtZToibW9kZWwiLHJhd05hbWU6InYtbW9kZWwudHJpbSIsdmFsdWU6X3ZtLmlucHV0VmFsdWUsZXhwcmVzc2lvbjoiaW5wdXRWYWx1ZSIsbW9kaWZpZXJzOnt0cmltOnRydWV9fV0sc3RhdGljQ2xhc3M6ImVsLWNhc2NhZGVyX19zZWFyY2gtaW5wdXQiLGF0dHJzOnt0eXBlOiJ0ZXh0IixwbGFjZWhvbGRlcjpfdm0ucHJlc2VudFRhZ3MubGVuZ3RoPyIiOl92bS5wbGFjZWhvbGRlcn0sZG9tUHJvcHM6e3ZhbHVlOl92bS5pbnB1dFZhbHVlfSxvbjp7aW5wdXQ6W2Z1bmN0aW9uKCRldmVudCl7aWYoJGV2ZW50LnRhcmdldC5jb21wb3Npbmcpe3JldHVybjt9X3ZtLmlucHV0VmFsdWU9JGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCk7fSxmdW5jdGlvbihlKXtyZXR1cm4gX3ZtLmhhbmRsZUlucHV0KF92bS5pbnB1dFZhbHVlLGUpO31dLGNsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO192bS50b2dnbGVEcm9wRG93blZpc2libGUodHJ1ZSk7fSxrZXlkb3duOmZ1bmN0aW9uIGtleWRvd24oJGV2ZW50KXtpZighKCJidXR0b24iaW4gJGV2ZW50KSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLCJkZWxldGUiLFs4LDQ2XSwkZXZlbnQua2V5LFsiQmFja3NwYWNlIiwiRGVsZXRlIiwiRGVsIl0pKXtyZXR1cm4gbnVsbDt9cmV0dXJuIF92bS5oYW5kbGVEZWxldGUoJGV2ZW50KTt9LGJsdXI6ZnVuY3Rpb24gYmx1cigkZXZlbnQpe192bS4kZm9yY2VVcGRhdGUoKTt9fX0pOl92bS5fZSgpXSwyKTpfdm0uX2UoKSxfYygidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYWZ0ZXItbGVhdmUiOl92bS5oYW5kbGVEcm9wZG93bkxlYXZlfX0sW19jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uZHJvcERvd25WaXNpYmxlLGV4cHJlc3Npb246ImRyb3BEb3duVmlzaWJsZSJ9XSxyZWY6InBvcHBlciIsY2xhc3M6WyJlbC1wb3BwZXIiLCJlbC1jYXNjYWRlcl9fZHJvcGRvd24iLF92bS5wb3BwZXJDbGFzc119LFtfYygiZWwtY2FzY2FkZXItcGFuZWwiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTohX3ZtLmZpbHRlcmluZyxleHByZXNzaW9uOiIhZmlsdGVyaW5nIn1dLHJlZjoicGFuZWwiLGF0dHJzOntvcHRpb25zOl92bS5vcHRpb25zLHByb3BzOl92bS5jb25maWcsYm9yZGVyOmZhbHNlLCJyZW5kZXItbGFiZWwiOl92bS4kc2NvcGVkU2xvdHMuZGVmYXVsdH0sb246eyJleHBhbmQtY2hhbmdlIjpfdm0uaGFuZGxlRXhwYW5kQ2hhbmdlLGNsb3NlOmZ1bmN0aW9uIGNsb3NlKCRldmVudCl7X3ZtLnRvZ2dsZURyb3BEb3duVmlzaWJsZShmYWxzZSk7fX0sbW9kZWw6e3ZhbHVlOl92bS5jaGVja2VkVmFsdWUsY2FsbGJhY2s6ZnVuY3Rpb24gY2FsbGJhY2soJCR2KXtfdm0uY2hlY2tlZFZhbHVlPSQkdjt9LGV4cHJlc3Npb246ImNoZWNrZWRWYWx1ZSJ9fSksX3ZtLmZpbHRlcmFibGU/X2MoImVsLXNjcm9sbGJhciIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS5maWx0ZXJpbmcsZXhwcmVzc2lvbjoiZmlsdGVyaW5nIn1dLHJlZjoic3VnZ2VzdGlvblBhbmVsIixzdGF0aWNDbGFzczoiZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24tcGFuZWwiLGF0dHJzOnt0YWc6InVsIiwidmlldy1jbGFzcyI6ImVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWxpc3QifSxuYXRpdmVPbjp7a2V5ZG93bjpmdW5jdGlvbiBrZXlkb3duKCRldmVudCl7cmV0dXJuIF92bS5oYW5kbGVTdWdnZXN0aW9uS2V5RG93bigkZXZlbnQpO319fSxbX3ZtLnN1Z2dlc3Rpb25zLmxlbmd0aD9fdm0uX2woX3ZtLnN1Z2dlc3Rpb25zLGZ1bmN0aW9uKGl0ZW0saW5kZXgpe3JldHVybiBfYygibGkiLHtrZXk6aXRlbS51aWQsY2xhc3M6WyJlbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtIixpdGVtLmNoZWNrZWQmJiJpcy1jaGVja2VkIl0sYXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtfdm0uaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKGluZGV4KTt9fX0sW19jKCJzcGFuIixbX3ZtLl92KF92bS5fcyhpdGVtLnRleHQpKV0pLGl0ZW0uY2hlY2tlZD9fYygiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWNoZWNrIn0pOl92bS5fZSgpXSk7fSk6X3ZtLl90KCJlbXB0eSIsW19jKCJsaSIse3N0YXRpY0NsYXNzOiJlbC1jYXNjYWRlcl9fZW1wdHktdGV4dCJ9LFtfdm0uX3YoX3ZtLl9zKF92bS50KCJlbC5jYXNjYWRlci5ub01hdGNoIikpKV0pXSldLDIpOl92bS5fZSgpXSwxKV0pXSwxKTt9O3ZhciBjYXNjYWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAzMjUzN2E2X3N0YXRpY1JlbmRlckZucz1bXTtjYXNjYWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAzMjUzN2E2X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci9zcmMvY2FzY2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAzMjUzN2E2JgovLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi9jYXNjYWRlci1wYW5lbCIKdmFyIGNhc2NhZGVyX3BhbmVsXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTt2YXIgY2FzY2FkZXJfcGFuZWxfZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNhc2NhZGVyX3BhbmVsXyk7Ly8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS11dGlscyIKdmFyIGFyaWFfdXRpbHNfPV9fd2VicGFja19yZXF1aXJlX18oMjgpO3ZhciBhcmlhX3V0aWxzX2RlZmF1bHQ9LyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihhcmlhX3V0aWxzXyk7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FzY2FkZXIvc3JjL2Nhc2NhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KdmFyIEtleUNvZGU9YXJpYV91dGlsc19kZWZhdWx0LmEua2V5czt2YXIgTWlncmF0aW5nUHJvcHM9e2V4cGFuZFRyaWdnZXI6e25ld1Byb3A6J2V4cGFuZFRyaWdnZXInLHR5cGU6U3RyaW5nfSxjaGFuZ2VPblNlbGVjdDp7bmV3UHJvcDonY2hlY2tTdHJpY3RseScsdHlwZTpCb29sZWFufSxob3ZlclRocmVzaG9sZDp7bmV3UHJvcDonaG92ZXJUaHJlc2hvbGQnLHR5cGU6TnVtYmVyfX07dmFyIFBvcHBlck1peGluPXtwcm9wczp7cGxhY2VtZW50Ont0eXBlOlN0cmluZyxkZWZhdWx0Oidib3R0b20tc3RhcnQnfSxhcHBlbmRUb0JvZHk6dnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMuYXBwZW5kVG9Cb2R5LHZpc2libGVBcnJvdzp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sYXJyb3dPZmZzZXQ6dnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMuYXJyb3dPZmZzZXQsb2Zmc2V0OnZ1ZV9wb3BwZXJfZGVmYXVsdC5hLnByb3BzLm9mZnNldCxib3VuZGFyaWVzUGFkZGluZzp2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5ib3VuZGFyaWVzUGFkZGluZyxwb3BwZXJPcHRpb25zOnZ1ZV9wb3BwZXJfZGVmYXVsdC5hLnByb3BzLnBvcHBlck9wdGlvbnN9LG1ldGhvZHM6dnVlX3BvcHBlcl9kZWZhdWx0LmEubWV0aG9kcyxkYXRhOnZ1ZV9wb3BwZXJfZGVmYXVsdC5hLmRhdGEsYmVmb3JlRGVzdHJveTp2dWVfcG9wcGVyX2RlZmF1bHQuYS5iZWZvcmVEZXN0cm95fTt2YXIgSW5wdXRTaXplTWFwPXttZWRpdW06MzYsc21hbGw6MzIsbWluaToyOH07LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjYXNjYWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxDYXNjYWRlcicsZGlyZWN0aXZlczp7Q2xpY2tvdXRzaWRlOmNsaWNrb3V0c2lkZV9kZWZhdWx0LmF9LG1peGluczpbUG9wcGVyTWl4aW4sZW1pdHRlcl9kZWZhdWx0LmEsbG9jYWxlX2RlZmF1bHQuYSxtaWdyYXRpbmdfZGVmYXVsdC5hXSxpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDonJ30sZWxGb3JtSXRlbTp7ZGVmYXVsdDonJ319LGNvbXBvbmVudHM6e0VsSW5wdXQ6aW5wdXRfZGVmYXVsdC5hLEVsVGFnOnRhZ19kZWZhdWx0LmEsRWxTY3JvbGxiYXI6c2Nyb2xsYmFyX2RlZmF1bHQuYSxFbENhc2NhZGVyUGFuZWw6Y2FzY2FkZXJfcGFuZWxfZGVmYXVsdC5hfSxwcm9wczp7dmFsdWU6e30sb3B0aW9uczpBcnJheSxwcm9wczpPYmplY3Qsc2l6ZTpTdHJpbmcscGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm4gT2JqZWN0KGxpYl9sb2NhbGVfWyJ0Il0pKCdlbC5jYXNjYWRlci5wbGFjZWhvbGRlcicpO319LGRpc2FibGVkOkJvb2xlYW4sY2xlYXJhYmxlOkJvb2xlYW4sZmlsdGVyYWJsZTpCb29sZWFuLGZpbHRlck1ldGhvZDpGdW5jdGlvbixzZXBhcmF0b3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6JyAvICd9LHNob3dBbGxMZXZlbHM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LGNvbGxhcHNlVGFnczpCb29sZWFuLGRlYm91bmNlOnt0eXBlOk51bWJlcixkZWZhdWx0OjMwMH0sYmVmb3JlRmlsdGVyOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm4gZnVuY3Rpb24oKXt9O319LHBvcHBlckNsYXNzOlN0cmluZ30sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2Ryb3BEb3duVmlzaWJsZTpmYWxzZSxjaGVja2VkVmFsdWU6dGhpcy52YWx1ZXx8bnVsbCxpbnB1dEhvdmVyOmZhbHNlLGlucHV0VmFsdWU6bnVsbCxwcmVzZW50VGV4dDpudWxsLHByZXNlbnRUYWdzOltdLGNoZWNrZWROb2RlczpbXSxmaWx0ZXJpbmc6ZmFsc2Usc3VnZ2VzdGlvbnM6W10saW5wdXRJbml0aWFsSGVpZ2h0OjAscHJlc3NEZWxldGVDb3VudDowfTt9LGNvbXB1dGVkOntyZWFsU2l6ZTpmdW5jdGlvbiByZWFsU2l6ZSgpe3ZhciBfZWxGb3JtSXRlbVNpemU9KHRoaXMuZWxGb3JtSXRlbXx8e30pLmVsRm9ybUl0ZW1TaXplO3JldHVybiB0aGlzLnNpemV8fF9lbEZvcm1JdGVtU2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplO30sdGFnU2l6ZTpmdW5jdGlvbiB0YWdTaXplKCl7cmV0dXJuWydzbWFsbCcsJ21pbmknXS5pbmRleE9mKHRoaXMucmVhbFNpemUpPi0xPydtaW5pJzonc21hbGwnO30saXNEaXNhYmxlZDpmdW5jdGlvbiBpc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkO30sY29uZmlnOmZ1bmN0aW9uIGNvbmZpZygpe3ZhciBjb25maWc9dGhpcy5wcm9wc3x8e307dmFyICRhdHRycz10aGlzLiRhdHRycztPYmplY3Qua2V5cyhNaWdyYXRpbmdQcm9wcykuZm9yRWFjaChmdW5jdGlvbihvbGRQcm9wKXt2YXIgX01pZ3JhdGluZ1Byb3BzJG9sZFByPU1pZ3JhdGluZ1Byb3BzW29sZFByb3BdLG5ld1Byb3A9X01pZ3JhdGluZ1Byb3BzJG9sZFByLm5ld1Byb3AsdHlwZT1fTWlncmF0aW5nUHJvcHMkb2xkUHIudHlwZTt2YXIgb2xkVmFsdWU9JGF0dHJzW29sZFByb3BdfHwkYXR0cnNbT2JqZWN0KHV0aWxfWyJrZWJhYkNhc2UiXSkob2xkUHJvcCldO2lmKE9iamVjdChzaGFyZWRfWyJpc0RlZiJdKShvbGRQcm9wKSYmIU9iamVjdChzaGFyZWRfWyJpc0RlZiJdKShjb25maWdbbmV3UHJvcF0pKXtpZih0eXBlPT09Qm9vbGVhbiYmb2xkVmFsdWU9PT0nJyl7b2xkVmFsdWU9dHJ1ZTt9Y29uZmlnW25ld1Byb3BdPW9sZFZhbHVlO319KTtyZXR1cm4gY29uZmlnO30sbXVsdGlwbGU6ZnVuY3Rpb24gbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5jb25maWcubXVsdGlwbGU7fSxsZWFmT25seTpmdW5jdGlvbiBsZWFmT25seSgpe3JldHVybiF0aGlzLmNvbmZpZy5jaGVja1N0cmljdGx5O30scmVhZG9ubHk6ZnVuY3Rpb24gcmVhZG9ubHkoKXtyZXR1cm4hdGhpcy5maWx0ZXJhYmxlfHx0aGlzLm11bHRpcGxlO30sY2xlYXJCdG5WaXNpYmxlOmZ1bmN0aW9uIGNsZWFyQnRuVmlzaWJsZSgpe2lmKCF0aGlzLmNsZWFyYWJsZXx8dGhpcy5pc0Rpc2FibGVkfHx0aGlzLmZpbHRlcmluZ3x8IXRoaXMuaW5wdXRIb3Zlcil7cmV0dXJuIGZhbHNlO31yZXR1cm4gdGhpcy5tdWx0aXBsZT8hIXRoaXMuY2hlY2tlZE5vZGVzLmZpbHRlcihmdW5jdGlvbihub2RlKXtyZXR1cm4hbm9kZS5pc0Rpc2FibGVkO30pLmxlbmd0aDohIXRoaXMucHJlc2VudFRleHQ7fSxwYW5lbDpmdW5jdGlvbiBwYW5lbCgpe3JldHVybiB0aGlzLiRyZWZzLnBhbmVsO319LHdhdGNoOntkaXNhYmxlZDpmdW5jdGlvbiBkaXNhYmxlZCgpe3RoaXMuY29tcHV0ZVByZXNlbnRDb250ZW50KCk7fSx2YWx1ZTpmdW5jdGlvbiB2YWx1ZSh2YWwpe2lmKCFPYmplY3QodXRpbF9bImlzRXF1YWwiXSkodmFsLHRoaXMuY2hlY2tlZFZhbHVlKSl7dGhpcy5jaGVja2VkVmFsdWU9dmFsO3RoaXMuY29tcHV0ZVByZXNlbnRDb250ZW50KCk7fX0sY2hlY2tlZFZhbHVlOmZ1bmN0aW9uIGNoZWNrZWRWYWx1ZSh2YWwpe3ZhciB2YWx1ZT10aGlzLnZhbHVlLGRyb3BEb3duVmlzaWJsZT10aGlzLmRyb3BEb3duVmlzaWJsZTt2YXIgX2NvbmZpZz10aGlzLmNvbmZpZyxjaGVja1N0cmljdGx5PV9jb25maWcuY2hlY2tTdHJpY3RseSxtdWx0aXBsZT1fY29uZmlnLm11bHRpcGxlO2lmKCFPYmplY3QodXRpbF9bImlzRXF1YWwiXSkodmFsLHZhbHVlKXx8T2JqZWN0KHR5cGVzX1siaXNVbmRlZmluZWQiXSkodmFsdWUpKXt0aGlzLmNvbXB1dGVQcmVzZW50Q29udGVudCgpOy8vIGhpZGUgZHJvcGRvd24gd2hlbiBzaW5nbGUgbW9kZQppZighbXVsdGlwbGUmJiFjaGVja1N0cmljdGx5JiZkcm9wRG93blZpc2libGUpe3RoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKGZhbHNlKTt9dGhpcy4kZW1pdCgnaW5wdXQnLHZhbCk7dGhpcy4kZW1pdCgnY2hhbmdlJyx2YWwpO3RoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCdlbC5mb3JtLmNoYW5nZScsW3ZhbF0pO319LG9wdGlvbnM6e2hhbmRsZXI6ZnVuY3Rpb24gaGFuZGxlcigpe3RoaXMuJG5leHRUaWNrKHRoaXMuY29tcHV0ZVByZXNlbnRDb250ZW50KTt9LGRlZXA6dHJ1ZX0scHJlc2VudFRleHQ6ZnVuY3Rpb24gcHJlc2VudFRleHQodmFsKXt0aGlzLmlucHV0VmFsdWU9dmFsO30scHJlc2VudFRhZ3M6ZnVuY3Rpb24gcHJlc2VudFRhZ3ModmFsLG9sZFZhbCl7aWYodGhpcy5tdWx0aXBsZSYmKHZhbC5sZW5ndGh8fG9sZFZhbC5sZW5ndGgpKXt0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZVN0eWxlKTt9fSxmaWx0ZXJpbmc6ZnVuY3Rpb24gZmlsdGVyaW5nKHZhbCl7dGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVQb3BwZXIpO319LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3ZhciBfdGhpcz10aGlzO3ZhciBpbnB1dD10aGlzLiRyZWZzLmlucHV0O2lmKGlucHV0JiZpbnB1dC4kZWwpe3RoaXMuaW5wdXRJbml0aWFsSGVpZ2h0PWlucHV0LiRlbC5vZmZzZXRIZWlnaHR8fElucHV0U2l6ZU1hcFt0aGlzLnJlYWxTaXplXXx8NDA7fWlmKCFPYmplY3QodXRpbF9bImlzRW1wdHkiXSkodGhpcy52YWx1ZSkpe3RoaXMuY29tcHV0ZVByZXNlbnRDb250ZW50KCk7fXRoaXMuZmlsdGVySGFuZGxlcj1kZWJvdW5jZV9kZWZhdWx0KCkodGhpcy5kZWJvdW5jZSxmdW5jdGlvbigpe3ZhciBpbnB1dFZhbHVlPV90aGlzLmlucHV0VmFsdWU7aWYoIWlucHV0VmFsdWUpe190aGlzLmZpbHRlcmluZz1mYWxzZTtyZXR1cm47fXZhciBiZWZvcmU9X3RoaXMuYmVmb3JlRmlsdGVyKGlucHV0VmFsdWUpO2lmKGJlZm9yZSYmYmVmb3JlLnRoZW4pe2JlZm9yZS50aGVuKF90aGlzLmdldFN1Z2dlc3Rpb25zKTt9ZWxzZSBpZihiZWZvcmUhPT1mYWxzZSl7X3RoaXMuZ2V0U3VnZ2VzdGlvbnMoKTt9ZWxzZXtfdGhpcy5maWx0ZXJpbmc9ZmFsc2U7fX0pO09iamVjdChyZXNpemVfZXZlbnRfWyJhZGRSZXNpemVMaXN0ZW5lciJdKSh0aGlzLiRlbCx0aGlzLnVwZGF0ZVN0eWxlKTt9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpe09iamVjdChyZXNpemVfZXZlbnRfWyJyZW1vdmVSZXNpemVMaXN0ZW5lciJdKSh0aGlzLiRlbCx0aGlzLnVwZGF0ZVN0eWxlKTt9LG1ldGhvZHM6e2dldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKXtyZXR1cm57cHJvcHM6eydleHBhbmQtdHJpZ2dlcic6J2V4cGFuZC10cmlnZ2VyIGlzIHJlbW92ZWQsIHVzZSBgcHJvcHMuZXhwYW5kVHJpZ2dlcmAgaW5zdGVhZC4nLCdjaGFuZ2Utb24tc2VsZWN0JzonY2hhbmdlLW9uLXNlbGVjdCBpcyByZW1vdmVkLCB1c2UgYHByb3BzLmNoZWNrU3RyaWN0bHlgIGluc3RlYWQuJywnaG92ZXItdGhyZXNob2xkJzonaG92ZXItdGhyZXNob2xkIGlzIHJlbW92ZWQsIHVzZSBgcHJvcHMuaG92ZXJUaHJlc2hvbGRgIGluc3RlYWQnfSxldmVudHM6eydhY3RpdmUtaXRlbS1jaGFuZ2UnOidhY3RpdmUtaXRlbS1jaGFuZ2UgaXMgcmVuYW1lZCB0byBleHBhbmQtY2hhbmdlJ319O30sdG9nZ2xlRHJvcERvd25WaXNpYmxlOmZ1bmN0aW9uIHRvZ2dsZURyb3BEb3duVmlzaWJsZSh2aXNpYmxlKXt2YXIgX3RoaXMyPXRoaXM7aWYodGhpcy5pc0Rpc2FibGVkKXJldHVybjt2YXIgZHJvcERvd25WaXNpYmxlPXRoaXMuZHJvcERvd25WaXNpYmxlO3ZhciBpbnB1dD10aGlzLiRyZWZzLmlucHV0O3Zpc2libGU9T2JqZWN0KHNoYXJlZF9bImlzRGVmIl0pKHZpc2libGUpP3Zpc2libGU6IWRyb3BEb3duVmlzaWJsZTtpZih2aXNpYmxlIT09ZHJvcERvd25WaXNpYmxlKXt0aGlzLmRyb3BEb3duVmlzaWJsZT12aXNpYmxlO2lmKHZpc2libGUpe3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7X3RoaXMyLnVwZGF0ZVBvcHBlcigpO190aGlzMi5wYW5lbC5zY3JvbGxJbnRvVmlldygpO30pO31pbnB1dC4kcmVmcy5pbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLHZpc2libGUpO3RoaXMuJGVtaXQoJ3Zpc2libGUtY2hhbmdlJyx2aXNpYmxlKTt9fSxoYW5kbGVEcm9wZG93bkxlYXZlOmZ1bmN0aW9uIGhhbmRsZURyb3Bkb3duTGVhdmUoKXt0aGlzLmZpbHRlcmluZz1mYWxzZTt0aGlzLmlucHV0VmFsdWU9dGhpcy5wcmVzZW50VGV4dDt9LGhhbmRsZUtleURvd246ZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCl7c3dpdGNoKGV2ZW50LmtleUNvZGUpe2Nhc2UgS2V5Q29kZS5lbnRlcjp0aGlzLnRvZ2dsZURyb3BEb3duVmlzaWJsZSgpO2JyZWFrO2Nhc2UgS2V5Q29kZS5kb3duOnRoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKHRydWUpO3RoaXMuZm9jdXNGaXJzdE5vZGUoKTtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrO2Nhc2UgS2V5Q29kZS5lc2M6Y2FzZSBLZXlDb2RlLnRhYjp0aGlzLnRvZ2dsZURyb3BEb3duVmlzaWJsZShmYWxzZSk7YnJlYWs7fX0saGFuZGxlRm9jdXM6ZnVuY3Rpb24gaGFuZGxlRm9jdXMoZSl7dGhpcy4kZW1pdCgnZm9jdXMnLGUpO30saGFuZGxlQmx1cjpmdW5jdGlvbiBoYW5kbGVCbHVyKGUpe3RoaXMuJGVtaXQoJ2JsdXInLGUpO30saGFuZGxlSW5wdXQ6ZnVuY3Rpb24gaGFuZGxlSW5wdXQodmFsLGV2ZW50KXshdGhpcy5kcm9wRG93blZpc2libGUmJnRoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKHRydWUpO2lmKGV2ZW50JiZldmVudC5pc0NvbXBvc2luZylyZXR1cm47aWYodmFsKXt0aGlzLmZpbHRlckhhbmRsZXIoKTt9ZWxzZXt0aGlzLmZpbHRlcmluZz1mYWxzZTt9fSxoYW5kbGVDbGVhcjpmdW5jdGlvbiBoYW5kbGVDbGVhcigpe3RoaXMucHJlc2VudFRleHQ9Jyc7dGhpcy5wYW5lbC5jbGVhckNoZWNrZWROb2RlcygpO30saGFuZGxlRXhwYW5kQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZUV4cGFuZENoYW5nZSh2YWx1ZSl7dGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVQb3BwZXIuYmluZCh0aGlzKSk7dGhpcy4kZW1pdCgnZXhwYW5kLWNoYW5nZScsdmFsdWUpO3RoaXMuJGVtaXQoJ2FjdGl2ZS1pdGVtLWNoYW5nZScsdmFsdWUpOy8vIERlcHJlY2F0ZWQKfSxmb2N1c0ZpcnN0Tm9kZTpmdW5jdGlvbiBmb2N1c0ZpcnN0Tm9kZSgpe3ZhciBfdGhpczM9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3ZhciBmaWx0ZXJpbmc9X3RoaXMzLmZpbHRlcmluZzt2YXIgXyRyZWZzPV90aGlzMy4kcmVmcyxwb3BwZXI9XyRyZWZzLnBvcHBlcixzdWdnZXN0aW9uUGFuZWw9XyRyZWZzLnN1Z2dlc3Rpb25QYW5lbDt2YXIgZmlyc3ROb2RlPW51bGw7aWYoZmlsdGVyaW5nJiZzdWdnZXN0aW9uUGFuZWwpe2ZpcnN0Tm9kZT1zdWdnZXN0aW9uUGFuZWwuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtJyk7fWVsc2V7dmFyIGZpcnN0TWVudT1wb3BwZXIucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyLW1lbnUnKTtmaXJzdE5vZGU9Zmlyc3RNZW51LnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1ub2RlW3RhYmluZGV4PSItMSJdJyk7fWlmKGZpcnN0Tm9kZSl7Zmlyc3ROb2RlLmZvY3VzKCk7IWZpbHRlcmluZyYmZmlyc3ROb2RlLmNsaWNrKCk7fX0pO30sY29tcHV0ZVByZXNlbnRDb250ZW50OmZ1bmN0aW9uIGNvbXB1dGVQcmVzZW50Q29udGVudCgpe3ZhciBfdGhpczQ9dGhpczsvLyBuZXh0VGljayBpcyByZXF1aXJlZCwgYmVjYXVzZSBjaGVja2VkIG5vZGVzIG1heSBub3QgY2hhbmdlIHJpZ2h0IG5vdwp0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lmKF90aGlzNC5jb25maWcubXVsdGlwbGUpe190aGlzNC5jb21wdXRlUHJlc2VudFRhZ3MoKTtfdGhpczQucHJlc2VudFRleHQ9X3RoaXM0LnByZXNlbnRUYWdzLmxlbmd0aD8nICc6bnVsbDt9ZWxzZXtfdGhpczQuY29tcHV0ZVByZXNlbnRUZXh0KCk7fX0pO30sY29tcHV0ZVByZXNlbnRUZXh0OmZ1bmN0aW9uIGNvbXB1dGVQcmVzZW50VGV4dCgpe3ZhciBjaGVja2VkVmFsdWU9dGhpcy5jaGVja2VkVmFsdWUsY29uZmlnPXRoaXMuY29uZmlnO2lmKCFPYmplY3QodXRpbF9bImlzRW1wdHkiXSkoY2hlY2tlZFZhbHVlKSl7dmFyIG5vZGU9dGhpcy5wYW5lbC5nZXROb2RlQnlWYWx1ZShjaGVja2VkVmFsdWUpO2lmKG5vZGUmJihjb25maWcuY2hlY2tTdHJpY3RseXx8bm9kZS5pc0xlYWYpKXt0aGlzLnByZXNlbnRUZXh0PW5vZGUuZ2V0VGV4dCh0aGlzLnNob3dBbGxMZXZlbHMsdGhpcy5zZXBhcmF0b3IpO3JldHVybjt9fXRoaXMucHJlc2VudFRleHQ9bnVsbDt9LGNvbXB1dGVQcmVzZW50VGFnczpmdW5jdGlvbiBjb21wdXRlUHJlc2VudFRhZ3MoKXt2YXIgaXNEaXNhYmxlZD10aGlzLmlzRGlzYWJsZWQsbGVhZk9ubHk9dGhpcy5sZWFmT25seSxzaG93QWxsTGV2ZWxzPXRoaXMuc2hvd0FsbExldmVscyxzZXBhcmF0b3I9dGhpcy5zZXBhcmF0b3IsY29sbGFwc2VUYWdzPXRoaXMuY29sbGFwc2VUYWdzO3ZhciBjaGVja2VkTm9kZXM9dGhpcy5nZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpO3ZhciB0YWdzPVtdO3ZhciBnZW5UYWc9ZnVuY3Rpb24gZ2VuVGFnKG5vZGUpe3JldHVybntub2RlOm5vZGUsa2V5Om5vZGUudWlkLHRleHQ6bm9kZS5nZXRUZXh0KHNob3dBbGxMZXZlbHMsc2VwYXJhdG9yKSxoaXRTdGF0ZTpmYWxzZSxjbG9zYWJsZTohaXNEaXNhYmxlZCYmIW5vZGUuaXNEaXNhYmxlZH07fTtpZihjaGVja2VkTm9kZXMubGVuZ3RoKXt2YXIgZmlyc3Q9Y2hlY2tlZE5vZGVzWzBdLHJlc3Q9Y2hlY2tlZE5vZGVzLnNsaWNlKDEpO3ZhciByZXN0Q291bnQ9cmVzdC5sZW5ndGg7dGFncy5wdXNoKGdlblRhZyhmaXJzdCkpO2lmKHJlc3RDb3VudCl7aWYoY29sbGFwc2VUYWdzKXt0YWdzLnB1c2goe2tleTotMSx0ZXh0OicrICcrcmVzdENvdW50LGNsb3NhYmxlOmZhbHNlfSk7fWVsc2V7cmVzdC5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe3JldHVybiB0YWdzLnB1c2goZ2VuVGFnKG5vZGUpKTt9KTt9fX10aGlzLmNoZWNrZWROb2Rlcz1jaGVja2VkTm9kZXM7dGhpcy5wcmVzZW50VGFncz10YWdzO30sZ2V0U3VnZ2VzdGlvbnM6ZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvbnMoKXt2YXIgX3RoaXM1PXRoaXM7dmFyIGZpbHRlck1ldGhvZD10aGlzLmZpbHRlck1ldGhvZDtpZighT2JqZWN0KHR5cGVzX1siaXNGdW5jdGlvbiJdKShmaWx0ZXJNZXRob2QpKXtmaWx0ZXJNZXRob2Q9ZnVuY3Rpb24gZmlsdGVyTWV0aG9kKG5vZGUsa2V5d29yZCl7cmV0dXJuIG5vZGUudGV4dC5pbmNsdWRlcyhrZXl3b3JkKTt9O312YXIgc3VnZ2VzdGlvbnM9dGhpcy5wYW5lbC5nZXRGbGF0dGVkTm9kZXModGhpcy5sZWFmT25seSkuZmlsdGVyKGZ1bmN0aW9uKG5vZGUpe2lmKG5vZGUuaXNEaXNhYmxlZClyZXR1cm4gZmFsc2U7bm9kZS50ZXh0PW5vZGUuZ2V0VGV4dChfdGhpczUuc2hvd0FsbExldmVscyxfdGhpczUuc2VwYXJhdG9yKXx8Jyc7cmV0dXJuIGZpbHRlck1ldGhvZChub2RlLF90aGlzNS5pbnB1dFZhbHVlKTt9KTtpZih0aGlzLm11bHRpcGxlKXt0aGlzLnByZXNlbnRUYWdzLmZvckVhY2goZnVuY3Rpb24odGFnKXt0YWcuaGl0U3RhdGU9ZmFsc2U7fSk7fWVsc2V7c3VnZ2VzdGlvbnMuZm9yRWFjaChmdW5jdGlvbihub2RlKXtub2RlLmNoZWNrZWQ9T2JqZWN0KHV0aWxfWyJpc0VxdWFsIl0pKF90aGlzNS5jaGVja2VkVmFsdWUsbm9kZS5nZXRWYWx1ZUJ5T3B0aW9uKCkpO30pO310aGlzLmZpbHRlcmluZz10cnVlO3RoaXMuc3VnZ2VzdGlvbnM9c3VnZ2VzdGlvbnM7dGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVQb3BwZXIpO30saGFuZGxlU3VnZ2VzdGlvbktleURvd246ZnVuY3Rpb24gaGFuZGxlU3VnZ2VzdGlvbktleURvd24oZXZlbnQpe3ZhciBrZXlDb2RlPWV2ZW50LmtleUNvZGUsdGFyZ2V0PWV2ZW50LnRhcmdldDtzd2l0Y2goa2V5Q29kZSl7Y2FzZSBLZXlDb2RlLmVudGVyOnRhcmdldC5jbGljaygpO2JyZWFrO2Nhc2UgS2V5Q29kZS51cDp2YXIgcHJldj10YXJnZXQucHJldmlvdXNFbGVtZW50U2libGluZztwcmV2JiZwcmV2LmZvY3VzKCk7YnJlYWs7Y2FzZSBLZXlDb2RlLmRvd246dmFyIG5leHQ9dGFyZ2V0Lm5leHRFbGVtZW50U2libGluZztuZXh0JiZuZXh0LmZvY3VzKCk7YnJlYWs7Y2FzZSBLZXlDb2RlLmVzYzpjYXNlIEtleUNvZGUudGFiOnRoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKGZhbHNlKTticmVhazt9fSxoYW5kbGVEZWxldGU6ZnVuY3Rpb24gaGFuZGxlRGVsZXRlKCl7dmFyIGlucHV0VmFsdWU9dGhpcy5pbnB1dFZhbHVlLHByZXNzRGVsZXRlQ291bnQ9dGhpcy5wcmVzc0RlbGV0ZUNvdW50LHByZXNlbnRUYWdzPXRoaXMucHJlc2VudFRhZ3M7dmFyIGxhc3RJbmRleD1wcmVzZW50VGFncy5sZW5ndGgtMTt2YXIgbGFzdFRhZz1wcmVzZW50VGFnc1tsYXN0SW5kZXhdO3RoaXMucHJlc3NEZWxldGVDb3VudD1pbnB1dFZhbHVlPzA6cHJlc3NEZWxldGVDb3VudCsxO2lmKCFsYXN0VGFnKXJldHVybjtpZih0aGlzLnByZXNzRGVsZXRlQ291bnQpe2lmKGxhc3RUYWcuaGl0U3RhdGUpe3RoaXMuZGVsZXRlVGFnKGxhc3RJbmRleCk7fWVsc2V7bGFzdFRhZy5oaXRTdGF0ZT10cnVlO319fSxoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6ZnVuY3Rpb24gaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKGluZGV4KXt2YXIgbXVsdGlwbGU9dGhpcy5tdWx0aXBsZTt2YXIgdGFyZ2V0Tm9kZT10aGlzLnN1Z2dlc3Rpb25zW2luZGV4XTtpZihtdWx0aXBsZSl7dmFyIGNoZWNrZWQ9dGFyZ2V0Tm9kZS5jaGVja2VkO3RhcmdldE5vZGUuZG9DaGVjayghY2hlY2tlZCk7dGhpcy5wYW5lbC5jYWxjdWxhdGVNdWx0aUNoZWNrZWRWYWx1ZSgpO31lbHNle3RoaXMuY2hlY2tlZFZhbHVlPXRhcmdldE5vZGUuZ2V0VmFsdWVCeU9wdGlvbigpO3RoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKGZhbHNlKTt9fSxkZWxldGVUYWc6ZnVuY3Rpb24gZGVsZXRlVGFnKGluZGV4KXt2YXIgY2hlY2tlZFZhbHVlPXRoaXMuY2hlY2tlZFZhbHVlO3ZhciB2YWw9Y2hlY2tlZFZhbHVlW2luZGV4XTt0aGlzLmNoZWNrZWRWYWx1ZT1jaGVja2VkVmFsdWUuZmlsdGVyKGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkhPT1pbmRleDt9KTt0aGlzLiRlbWl0KCdyZW1vdmUtdGFnJyx2YWwpO30sdXBkYXRlU3R5bGU6ZnVuY3Rpb24gdXBkYXRlU3R5bGUoKXt2YXIgJGVsPXRoaXMuJGVsLGlucHV0SW5pdGlhbEhlaWdodD10aGlzLmlucHV0SW5pdGlhbEhlaWdodDtpZih0aGlzLiRpc1NlcnZlcnx8ISRlbClyZXR1cm47dmFyIHN1Z2dlc3Rpb25QYW5lbD10aGlzLiRyZWZzLnN1Z2dlc3Rpb25QYW5lbDt2YXIgaW5wdXRJbm5lcj0kZWwucXVlcnlTZWxlY3RvcignLmVsLWlucHV0X19pbm5lcicpO2lmKCFpbnB1dElubmVyKXJldHVybjt2YXIgdGFncz0kZWwucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyX190YWdzJyk7dmFyIHN1Z2dlc3Rpb25QYW5lbEVsPW51bGw7aWYoc3VnZ2VzdGlvblBhbmVsJiYoc3VnZ2VzdGlvblBhbmVsRWw9c3VnZ2VzdGlvblBhbmVsLiRlbCkpe3ZhciBzdWdnZXN0aW9uTGlzdD1zdWdnZXN0aW9uUGFuZWxFbC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24tbGlzdCcpO3N1Z2dlc3Rpb25MaXN0LnN0eWxlLm1pbldpZHRoPWlucHV0SW5uZXIub2Zmc2V0V2lkdGgrJ3B4Jzt9aWYodGFncyl7dmFyIG9mZnNldEhlaWdodD10YWdzLm9mZnNldEhlaWdodDt2YXIgaGVpZ2h0PU1hdGgubWF4KG9mZnNldEhlaWdodCs2LGlucHV0SW5pdGlhbEhlaWdodCkrJ3B4JztpbnB1dElubmVyLnN0eWxlLmhlaWdodD1oZWlnaHQ7dGhpcy51cGRhdGVQb3BwZXIoKTt9fSwvKioKICAgICAqIHB1YmxpYyBtZXRob2RzCiAgICAqL2dldENoZWNrZWROb2RlczpmdW5jdGlvbiBnZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpe3JldHVybiB0aGlzLnBhbmVsLmdldENoZWNrZWROb2RlcyhsZWFmT25seSk7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXIvc3JjL2Nhc2NhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfY2FzY2FkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189Y2FzY2FkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci9zcmMvY2FzY2FkZXIudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgY2FzY2FkZXJfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfY2FzY2FkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sY2FzY2FkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzI1MzdhNl9yZW5kZXIsY2FzY2FkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzI1MzdhNl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGNhc2NhZGVyX2FwaTt9Y2FzY2FkZXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jYXNjYWRlci9zcmMvY2FzY2FkZXIudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNhc2NhZGVyPWNhc2NhZGVyX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXIvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9jYXNjYWRlci5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChjYXNjYWRlci5uYW1lLGNhc2NhZGVyKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfY2FzY2FkZXI9Y2FzY2FkZXI7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU1YzhhZGU3Jgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU1YzhhZGU3X3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTVjOGFkZTdfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToiY2xpY2tvdXRzaWRlIixyYXdOYW1lOiJ2LWNsaWNrb3V0c2lkZSIsdmFsdWU6X3ZtLmhpZGUsZXhwcmVzc2lvbjoiaGlkZSJ9XSxjbGFzczpbImVsLWNvbG9yLXBpY2tlciIsX3ZtLmNvbG9yRGlzYWJsZWQ/ImlzLWRpc2FibGVkIjoiIixfdm0uY29sb3JTaXplPyJlbC1jb2xvci1waWNrZXItLSIrX3ZtLmNvbG9yU2l6ZToiIl19LFtfdm0uY29sb3JEaXNhYmxlZD9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLXBpY2tlcl9fbWFzayJ9KTpfdm0uX2UoKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLXBpY2tlcl9fdHJpZ2dlciIsb246e2NsaWNrOl92bS5oYW5kbGVUcmlnZ2VyfX0sW19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLXBpY2tlcl9fY29sb3IiLGNsYXNzOnsiaXMtYWxwaGEiOl92bS5zaG93QWxwaGF9fSxbX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtY29sb3ItcGlja2VyX19jb2xvci1pbm5lciIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpfdm0uZGlzcGxheWVkQ29sb3J9fSksIV92bS52YWx1ZSYmIV92bS5zaG93UGFuZWxDb2xvcj9fYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1waWNrZXJfX2VtcHR5IGVsLWljb24tY2xvc2UifSk6X3ZtLl9lKCldKSxfYygic3BhbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS52YWx1ZXx8X3ZtLnNob3dQYW5lbENvbG9yLGV4cHJlc3Npb246InZhbHVlIHx8IHNob3dQYW5lbENvbG9yIn1dLHN0YXRpY0NsYXNzOiJlbC1jb2xvci1waWNrZXJfX2ljb24gZWwtaWNvbi1hcnJvdy1kb3duIn0pXSksX2MoInBpY2tlci1kcm9wZG93biIse3JlZjoiZHJvcGRvd24iLGNsYXNzOlsiZWwtY29sb3ItcGlja2VyX19wYW5lbCIsX3ZtLnBvcHBlckNsYXNzfHwiIl0sYXR0cnM6e2NvbG9yOl92bS5jb2xvciwic2hvdy1hbHBoYSI6X3ZtLnNob3dBbHBoYSxwcmVkZWZpbmU6X3ZtLnByZWRlZmluZX0sb246e3BpY2s6X3ZtLmNvbmZpcm1WYWx1ZSxjbGVhcjpfdm0uY2xlYXJWYWx1ZX0sbW9kZWw6e3ZhbHVlOl92bS5zaG93UGlja2VyLGNhbGxiYWNrOmZ1bmN0aW9uIGNhbGxiYWNrKCQkdil7X3ZtLnNob3dQaWNrZXI9JCR2O30sZXhwcmVzc2lvbjoic2hvd1BpY2tlciJ9fSldLDEpO307dmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81NWM4YWRlN19zdGF0aWNSZW5kZXJGbnM9W107bWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU1YzhhZGU3X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU1YzhhZGU3JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29sb3IuanMKdmFyIGNvbG9yX3R5cGVvZj10eXBlb2YgU3ltYm9sPT09ImZ1bmN0aW9uIiYmX3R5cGVvZjIoU3ltYm9sLml0ZXJhdG9yKT09PSJzeW1ib2wiP2Z1bmN0aW9uKG9iail7cmV0dXJuIF90eXBlb2YyKG9iaik7fTpmdW5jdGlvbihvYmope3JldHVybiBvYmomJnR5cGVvZiBTeW1ib2w9PT0iZnVuY3Rpb24iJiZvYmouY29uc3RydWN0b3I9PT1TeW1ib2wmJm9iaiE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6X3R5cGVvZjIob2JqKTt9O2Z1bmN0aW9uIGNvbG9yX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTt9fXZhciBoc3YyaHNsPWZ1bmN0aW9uIGhzdjJoc2woaHVlLHNhdCx2YWwpe3JldHVybltodWUsc2F0KnZhbC8oKGh1ZT0oMi1zYXQpKnZhbCk8MT9odWU6Mi1odWUpfHwwLGh1ZS8yXTt9Oy8vIE5lZWQgdG8gaGFuZGxlIDEuMCBhcyAxMDAlLCBzaW5jZSBvbmNlIGl0IGlzIGEgbnVtYmVyLCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gaXQgYW5kIDEKLy8gPGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzQyMjA3Mi9qYXZhc2NyaXB0LWhvdy10by1kZXRlY3QtbnVtYmVyLWFzLWEtZGVjaW1hbC1pbmNsdWRpbmctMS0wPgp2YXIgaXNPbmVQb2ludFplcm89ZnVuY3Rpb24gaXNPbmVQb2ludFplcm8obil7cmV0dXJuIHR5cGVvZiBuPT09J3N0cmluZycmJm4uaW5kZXhPZignLicpIT09LTEmJnBhcnNlRmxvYXQobik9PT0xO307dmFyIGlzUGVyY2VudGFnZT1mdW5jdGlvbiBpc1BlcmNlbnRhZ2Uobil7cmV0dXJuIHR5cGVvZiBuPT09J3N0cmluZycmJm4uaW5kZXhPZignJScpIT09LTE7fTsvLyBUYWtlIGlucHV0IGZyb20gWzAsIG5dIGFuZCByZXR1cm4gaXQgYXMgWzAsIDFdCnZhciBib3VuZDAxPWZ1bmN0aW9uIGJvdW5kMDEodmFsdWUsbWF4KXtpZihpc09uZVBvaW50WmVybyh2YWx1ZSkpdmFsdWU9JzEwMCUnO3ZhciBwcm9jZXNzUGVyY2VudD1pc1BlcmNlbnRhZ2UodmFsdWUpO3ZhbHVlPU1hdGgubWluKG1heCxNYXRoLm1heCgwLHBhcnNlRmxvYXQodmFsdWUpKSk7Ly8gQXV0b21hdGljYWxseSBjb252ZXJ0IHBlcmNlbnRhZ2UgaW50byBudW1iZXIKaWYocHJvY2Vzc1BlcmNlbnQpe3ZhbHVlPXBhcnNlSW50KHZhbHVlKm1heCwxMCkvMTAwO30vLyBIYW5kbGUgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzCmlmKE1hdGguYWJzKHZhbHVlLW1heCk8MC4wMDAwMDEpe3JldHVybiAxO30vLyBDb252ZXJ0IGludG8gWzAsIDFdIHJhbmdlIGlmIGl0IGlzbid0IGFscmVhZHkKcmV0dXJuIHZhbHVlJW1heC9wYXJzZUZsb2F0KG1heCk7fTt2YXIgSU5UX0hFWF9NQVA9ezEwOidBJywxMTonQicsMTI6J0MnLDEzOidEJywxNDonRScsMTU6J0YnfTt2YXIgdG9IZXg9ZnVuY3Rpb24gdG9IZXgoX3JlZil7dmFyIHI9X3JlZi5yLGc9X3JlZi5nLGI9X3JlZi5iO3ZhciBoZXhPbmU9ZnVuY3Rpb24gaGV4T25lKHZhbHVlKXt2YWx1ZT1NYXRoLm1pbihNYXRoLnJvdW5kKHZhbHVlKSwyNTUpO3ZhciBoaWdoPU1hdGguZmxvb3IodmFsdWUvMTYpO3ZhciBsb3c9dmFsdWUlMTY7cmV0dXJuJycrKElOVF9IRVhfTUFQW2hpZ2hdfHxoaWdoKSsoSU5UX0hFWF9NQVBbbG93XXx8bG93KTt9O2lmKGlzTmFOKHIpfHxpc05hTihnKXx8aXNOYU4oYikpcmV0dXJuJyc7cmV0dXJuJyMnK2hleE9uZShyKStoZXhPbmUoZykraGV4T25lKGIpO307dmFyIEhFWF9JTlRfTUFQPXtBOjEwLEI6MTEsQzoxMixEOjEzLEU6MTQsRjoxNX07dmFyIHBhcnNlSGV4Q2hhbm5lbD1mdW5jdGlvbiBwYXJzZUhleENoYW5uZWwoaGV4KXtpZihoZXgubGVuZ3RoPT09Mil7cmV0dXJuKEhFWF9JTlRfTUFQW2hleFswXS50b1VwcGVyQ2FzZSgpXXx8K2hleFswXSkqMTYrKEhFWF9JTlRfTUFQW2hleFsxXS50b1VwcGVyQ2FzZSgpXXx8K2hleFsxXSk7fXJldHVybiBIRVhfSU5UX01BUFtoZXhbMV0udG9VcHBlckNhc2UoKV18fCtoZXhbMV07fTt2YXIgaHNsMmhzdj1mdW5jdGlvbiBoc2wyaHN2KGh1ZSxzYXQsbGlnaHQpe3NhdD1zYXQvMTAwO2xpZ2h0PWxpZ2h0LzEwMDt2YXIgc21pbj1zYXQ7dmFyIGxtaW49TWF0aC5tYXgobGlnaHQsMC4wMSk7dmFyIHN2PXZvaWQgMDt2YXIgdj12b2lkIDA7bGlnaHQqPTI7c2F0Kj1saWdodDw9MT9saWdodDoyLWxpZ2h0O3NtaW4qPWxtaW48PTE/bG1pbjoyLWxtaW47dj0obGlnaHQrc2F0KS8yO3N2PWxpZ2h0PT09MD8yKnNtaW4vKGxtaW4rc21pbik6MipzYXQvKGxpZ2h0K3NhdCk7cmV0dXJue2g6aHVlLHM6c3YqMTAwLHY6dioxMDB9O307Ly8gYHJnYlRvSHN2YAovLyBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNWCi8vICpBc3N1bWVzOiogciwgZywgYW5kIGIgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAyNTVdIG9yIFswLCAxXQovLyAqUmV0dXJuczoqIHsgaCwgcywgdiB9IGluIFswLDFdCnZhciByZ2IyaHN2PWZ1bmN0aW9uIHJnYjJoc3YocixnLGIpe3I9Ym91bmQwMShyLDI1NSk7Zz1ib3VuZDAxKGcsMjU1KTtiPWJvdW5kMDEoYiwyNTUpO3ZhciBtYXg9TWF0aC5tYXgocixnLGIpO3ZhciBtaW49TWF0aC5taW4ocixnLGIpO3ZhciBoPXZvaWQgMCxzPXZvaWQgMDt2YXIgdj1tYXg7dmFyIGQ9bWF4LW1pbjtzPW1heD09PTA/MDpkL21heDtpZihtYXg9PT1taW4pe2g9MDsvLyBhY2hyb21hdGljCn1lbHNle3N3aXRjaChtYXgpe2Nhc2UgcjpoPShnLWIpL2QrKGc8Yj82OjApO2JyZWFrO2Nhc2UgZzpoPShiLXIpL2QrMjticmVhaztjYXNlIGI6aD0oci1nKS9kKzQ7YnJlYWs7fWgvPTY7fXJldHVybntoOmgqMzYwLHM6cyoxMDAsdjp2KjEwMH07fTsvLyBgaHN2VG9SZ2JgCi8vIENvbnZlcnRzIGFuIEhTViBjb2xvciB2YWx1ZSB0byBSR0IuCi8vICpBc3N1bWVzOiogaCBpcyBjb250YWluZWQgaW4gWzAsIDFdIG9yIFswLCAzNjBdIGFuZCBzIGFuZCB2IGFyZSBjb250YWluZWQgaW4gWzAsIDFdIG9yIFswLCAxMDBdCi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gdGhlIHNldCBbMCwgMjU1XQp2YXIgaHN2MnJnYj1mdW5jdGlvbiBoc3YycmdiKGgscyx2KXtoPWJvdW5kMDEoaCwzNjApKjY7cz1ib3VuZDAxKHMsMTAwKTt2PWJvdW5kMDEodiwxMDApO3ZhciBpPU1hdGguZmxvb3IoaCk7dmFyIGY9aC1pO3ZhciBwPXYqKDEtcyk7dmFyIHE9diooMS1mKnMpO3ZhciB0PXYqKDEtKDEtZikqcyk7dmFyIG1vZD1pJTY7dmFyIHI9W3YscSxwLHAsdCx2XVttb2RdO3ZhciBnPVt0LHYsdixxLHAscF1bbW9kXTt2YXIgYj1bcCxwLHQsdix2LHFdW21vZF07cmV0dXJue3I6TWF0aC5yb3VuZChyKjI1NSksZzpNYXRoLnJvdW5kKGcqMjU1KSxiOk1hdGgucm91bmQoYioyNTUpfTt9O3ZhciBDb2xvcj1mdW5jdGlvbigpe2Z1bmN0aW9uIENvbG9yKG9wdGlvbnMpe2NvbG9yX2NsYXNzQ2FsbENoZWNrKHRoaXMsQ29sb3IpO3RoaXMuX2h1ZT0wO3RoaXMuX3NhdHVyYXRpb249MTAwO3RoaXMuX3ZhbHVlPTEwMDt0aGlzLl9hbHBoYT0xMDA7dGhpcy5lbmFibGVBbHBoYT1mYWxzZTt0aGlzLmZvcm1hdD0naGV4Jzt0aGlzLnZhbHVlPScnO29wdGlvbnM9b3B0aW9uc3x8e307Zm9yKHZhciBvcHRpb24gaW4gb3B0aW9ucyl7aWYob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHRpb24pKXt0aGlzW29wdGlvbl09b3B0aW9uc1tvcHRpb25dO319dGhpcy5kb09uQ2hhbmdlKCk7fUNvbG9yLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gc2V0KHByb3AsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0xJiYodHlwZW9mIHByb3A9PT0ndW5kZWZpbmVkJz8ndW5kZWZpbmVkJzpjb2xvcl90eXBlb2YocHJvcCkpPT09J29iamVjdCcpe2Zvcih2YXIgcCBpbiBwcm9wKXtpZihwcm9wLmhhc093blByb3BlcnR5KHApKXt0aGlzLnNldChwLHByb3BbcF0pO319cmV0dXJuO310aGlzWydfJytwcm9wXT12YWx1ZTt0aGlzLmRvT25DaGFuZ2UoKTt9O0NvbG9yLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gZ2V0KHByb3Ape3JldHVybiB0aGlzWydfJytwcm9wXTt9O0NvbG9yLnByb3RvdHlwZS50b1JnYj1mdW5jdGlvbiB0b1JnYigpe3JldHVybiBoc3YycmdiKHRoaXMuX2h1ZSx0aGlzLl9zYXR1cmF0aW9uLHRoaXMuX3ZhbHVlKTt9O0NvbG9yLnByb3RvdHlwZS5mcm9tU3RyaW5nPWZ1bmN0aW9uIGZyb21TdHJpbmcodmFsdWUpe3ZhciBfdGhpcz10aGlzO2lmKCF2YWx1ZSl7dGhpcy5faHVlPTA7dGhpcy5fc2F0dXJhdGlvbj0xMDA7dGhpcy5fdmFsdWU9MTAwO3RoaXMuZG9PbkNoYW5nZSgpO3JldHVybjt9dmFyIGZyb21IU1Y9ZnVuY3Rpb24gZnJvbUhTVihoLHMsdil7X3RoaXMuX2h1ZT1NYXRoLm1heCgwLE1hdGgubWluKDM2MCxoKSk7X3RoaXMuX3NhdHVyYXRpb249TWF0aC5tYXgoMCxNYXRoLm1pbigxMDAscykpO190aGlzLl92YWx1ZT1NYXRoLm1heCgwLE1hdGgubWluKDEwMCx2KSk7X3RoaXMuZG9PbkNoYW5nZSgpO307aWYodmFsdWUuaW5kZXhPZignaHNsJykhPT0tMSl7dmFyIHBhcnRzPXZhbHVlLnJlcGxhY2UoL2hzbGF8aHNsfFwofFwpL2dtLCcnKS5zcGxpdCgvXHN8LC9nKS5maWx0ZXIoZnVuY3Rpb24odmFsKXtyZXR1cm4gdmFsIT09Jyc7fSkubWFwKGZ1bmN0aW9uKHZhbCxpbmRleCl7cmV0dXJuIGluZGV4PjI/cGFyc2VGbG9hdCh2YWwpOnBhcnNlSW50KHZhbCwxMCk7fSk7aWYocGFydHMubGVuZ3RoPT09NCl7dGhpcy5fYWxwaGE9TWF0aC5mbG9vcihwYXJzZUZsb2F0KHBhcnRzWzNdKSoxMDApO31lbHNlIGlmKHBhcnRzLmxlbmd0aD09PTMpe3RoaXMuX2FscGhhPTEwMDt9aWYocGFydHMubGVuZ3RoPj0zKXt2YXIgX2hzbDJoc3Y9aHNsMmhzdihwYXJ0c1swXSxwYXJ0c1sxXSxwYXJ0c1syXSksaD1faHNsMmhzdi5oLHM9X2hzbDJoc3Yucyx2PV9oc2wyaHN2LnY7ZnJvbUhTVihoLHMsdik7fX1lbHNlIGlmKHZhbHVlLmluZGV4T2YoJ2hzdicpIT09LTEpe3ZhciBfcGFydHM9dmFsdWUucmVwbGFjZSgvaHN2YXxoc3Z8XCh8XCkvZ20sJycpLnNwbGl0KC9cc3wsL2cpLmZpbHRlcihmdW5jdGlvbih2YWwpe3JldHVybiB2YWwhPT0nJzt9KS5tYXAoZnVuY3Rpb24odmFsLGluZGV4KXtyZXR1cm4gaW5kZXg+Mj9wYXJzZUZsb2F0KHZhbCk6cGFyc2VJbnQodmFsLDEwKTt9KTtpZihfcGFydHMubGVuZ3RoPT09NCl7dGhpcy5fYWxwaGE9TWF0aC5mbG9vcihwYXJzZUZsb2F0KF9wYXJ0c1szXSkqMTAwKTt9ZWxzZSBpZihfcGFydHMubGVuZ3RoPT09Myl7dGhpcy5fYWxwaGE9MTAwO31pZihfcGFydHMubGVuZ3RoPj0zKXtmcm9tSFNWKF9wYXJ0c1swXSxfcGFydHNbMV0sX3BhcnRzWzJdKTt9fWVsc2UgaWYodmFsdWUuaW5kZXhPZigncmdiJykhPT0tMSl7dmFyIF9wYXJ0czI9dmFsdWUucmVwbGFjZSgvcmdiYXxyZ2J8XCh8XCkvZ20sJycpLnNwbGl0KC9cc3wsL2cpLmZpbHRlcihmdW5jdGlvbih2YWwpe3JldHVybiB2YWwhPT0nJzt9KS5tYXAoZnVuY3Rpb24odmFsLGluZGV4KXtyZXR1cm4gaW5kZXg+Mj9wYXJzZUZsb2F0KHZhbCk6cGFyc2VJbnQodmFsLDEwKTt9KTtpZihfcGFydHMyLmxlbmd0aD09PTQpe3RoaXMuX2FscGhhPU1hdGguZmxvb3IocGFyc2VGbG9hdChfcGFydHMyWzNdKSoxMDApO31lbHNlIGlmKF9wYXJ0czIubGVuZ3RoPT09Myl7dGhpcy5fYWxwaGE9MTAwO31pZihfcGFydHMyLmxlbmd0aD49Myl7dmFyIF9yZ2IyaHN2PXJnYjJoc3YoX3BhcnRzMlswXSxfcGFydHMyWzFdLF9wYXJ0czJbMl0pLF9oPV9yZ2IyaHN2LmgsX3M9X3JnYjJoc3Yucyxfdj1fcmdiMmhzdi52O2Zyb21IU1YoX2gsX3MsX3YpO319ZWxzZSBpZih2YWx1ZS5pbmRleE9mKCcjJykhPT0tMSl7dmFyIGhleD12YWx1ZS5yZXBsYWNlKCcjJywnJykudHJpbSgpO2lmKCEvXig/OlswLTlhLWZBLUZdezN9KXsxLDJ9JC8udGVzdChoZXgpKXJldHVybjt2YXIgcj12b2lkIDAsZz12b2lkIDAsYj12b2lkIDA7aWYoaGV4Lmxlbmd0aD09PTMpe3I9cGFyc2VIZXhDaGFubmVsKGhleFswXStoZXhbMF0pO2c9cGFyc2VIZXhDaGFubmVsKGhleFsxXStoZXhbMV0pO2I9cGFyc2VIZXhDaGFubmVsKGhleFsyXStoZXhbMl0pO31lbHNlIGlmKGhleC5sZW5ndGg9PT02fHxoZXgubGVuZ3RoPT09OCl7cj1wYXJzZUhleENoYW5uZWwoaGV4LnN1YnN0cmluZygwLDIpKTtnPXBhcnNlSGV4Q2hhbm5lbChoZXguc3Vic3RyaW5nKDIsNCkpO2I9cGFyc2VIZXhDaGFubmVsKGhleC5zdWJzdHJpbmcoNCw2KSk7fWlmKGhleC5sZW5ndGg9PT04KXt0aGlzLl9hbHBoYT1NYXRoLmZsb29yKHBhcnNlSGV4Q2hhbm5lbChoZXguc3Vic3RyaW5nKDYpKS8yNTUqMTAwKTt9ZWxzZSBpZihoZXgubGVuZ3RoPT09M3x8aGV4Lmxlbmd0aD09PTYpe3RoaXMuX2FscGhhPTEwMDt9dmFyIF9yZ2IyaHN2Mj1yZ2IyaHN2KHIsZyxiKSxfaDI9X3JnYjJoc3YyLmgsX3MyPV9yZ2IyaHN2Mi5zLF92Mj1fcmdiMmhzdjIudjtmcm9tSFNWKF9oMixfczIsX3YyKTt9fTtDb2xvci5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbiBjb21wYXJlKGNvbG9yKXtyZXR1cm4gTWF0aC5hYnMoY29sb3IuX2h1ZS10aGlzLl9odWUpPDImJk1hdGguYWJzKGNvbG9yLl9zYXR1cmF0aW9uLXRoaXMuX3NhdHVyYXRpb24pPDEmJk1hdGguYWJzKGNvbG9yLl92YWx1ZS10aGlzLl92YWx1ZSk8MSYmTWF0aC5hYnMoY29sb3IuX2FscGhhLXRoaXMuX2FscGhhKTwxO307Q29sb3IucHJvdG90eXBlLmRvT25DaGFuZ2U9ZnVuY3Rpb24gZG9PbkNoYW5nZSgpe3ZhciBfaHVlPXRoaXMuX2h1ZSxfc2F0dXJhdGlvbj10aGlzLl9zYXR1cmF0aW9uLF92YWx1ZT10aGlzLl92YWx1ZSxfYWxwaGE9dGhpcy5fYWxwaGEsZm9ybWF0PXRoaXMuZm9ybWF0O2lmKHRoaXMuZW5hYmxlQWxwaGEpe3N3aXRjaChmb3JtYXQpe2Nhc2UnaHNsJzp2YXIgaHNsPWhzdjJoc2woX2h1ZSxfc2F0dXJhdGlvbi8xMDAsX3ZhbHVlLzEwMCk7dGhpcy52YWx1ZT0naHNsYSgnK19odWUrJywgJytNYXRoLnJvdW5kKGhzbFsxXSoxMDApKyclLCAnK01hdGgucm91bmQoaHNsWzJdKjEwMCkrJyUsICcrX2FscGhhLzEwMCsnKSc7YnJlYWs7Y2FzZSdoc3YnOnRoaXMudmFsdWU9J2hzdmEoJytfaHVlKycsICcrTWF0aC5yb3VuZChfc2F0dXJhdGlvbikrJyUsICcrTWF0aC5yb3VuZChfdmFsdWUpKyclLCAnK19hbHBoYS8xMDArJyknO2JyZWFrO2RlZmF1bHQ6dmFyIF9oc3YycmdiPWhzdjJyZ2IoX2h1ZSxfc2F0dXJhdGlvbixfdmFsdWUpLHI9X2hzdjJyZ2IucixnPV9oc3YycmdiLmcsYj1faHN2MnJnYi5iO3RoaXMudmFsdWU9J3JnYmEoJytyKycsICcrZysnLCAnK2IrJywgJytfYWxwaGEvMTAwKycpJzt9fWVsc2V7c3dpdGNoKGZvcm1hdCl7Y2FzZSdoc2wnOnZhciBfaHNsPWhzdjJoc2woX2h1ZSxfc2F0dXJhdGlvbi8xMDAsX3ZhbHVlLzEwMCk7dGhpcy52YWx1ZT0naHNsKCcrX2h1ZSsnLCAnK01hdGgucm91bmQoX2hzbFsxXSoxMDApKyclLCAnK01hdGgucm91bmQoX2hzbFsyXSoxMDApKyclKSc7YnJlYWs7Y2FzZSdoc3YnOnRoaXMudmFsdWU9J2hzdignK19odWUrJywgJytNYXRoLnJvdW5kKF9zYXR1cmF0aW9uKSsnJSwgJytNYXRoLnJvdW5kKF92YWx1ZSkrJyUpJzticmVhaztjYXNlJ3JnYic6dmFyIF9oc3YycmdiMj1oc3YycmdiKF9odWUsX3NhdHVyYXRpb24sX3ZhbHVlKSxfcj1faHN2MnJnYjIucixfZz1faHN2MnJnYjIuZyxfYj1faHN2MnJnYjIuYjt0aGlzLnZhbHVlPSdyZ2IoJytfcisnLCAnK19nKycsICcrX2IrJyknO2JyZWFrO2RlZmF1bHQ6dGhpcy52YWx1ZT10b0hleChoc3YycmdiKF9odWUsX3NhdHVyYXRpb24sX3ZhbHVlKSk7fX19O3JldHVybiBDb2xvcjt9KCk7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfY29sb3I9Q29sb3I7Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3BpY2tlci1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDY2MDE2MjUmCnZhciBwaWNrZXJfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjYwMTYyNV9yZW5kZXI9ZnVuY3Rpb24gcGlja2VyX2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY2MDE2MjVfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn0sb246eyJhZnRlci1sZWF2ZSI6X3ZtLmRvRGVzdHJveX19LFtfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLnNob3dQb3BwZXIsZXhwcmVzc2lvbjoic2hvd1BvcHBlciJ9XSxzdGF0aWNDbGFzczoiZWwtY29sb3ItZHJvcGRvd24ifSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1kcm9wZG93bl9fbWFpbi13cmFwcGVyIn0sW19jKCJodWUtc2xpZGVyIix7cmVmOiJodWUiLHN0YXRpY1N0eWxlOntmbG9hdDoicmlnaHQifSxhdHRyczp7Y29sb3I6X3ZtLmNvbG9yLHZlcnRpY2FsOiIifX0pLF9jKCJzdi1wYW5lbCIse3JlZjoic2wiLGF0dHJzOntjb2xvcjpfdm0uY29sb3J9fSldLDEpLF92bS5zaG93QWxwaGE/X2MoImFscGhhLXNsaWRlciIse3JlZjoiYWxwaGEiLGF0dHJzOntjb2xvcjpfdm0uY29sb3J9fSk6X3ZtLl9lKCksX3ZtLnByZWRlZmluZT9fYygicHJlZGVmaW5lIix7YXR0cnM6e2NvbG9yOl92bS5jb2xvcixjb2xvcnM6X3ZtLnByZWRlZmluZX19KTpfdm0uX2UoKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLWRyb3Bkb3duX19idG5zIn0sW19jKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLWRyb3Bkb3duX192YWx1ZSJ9LFtfYygiZWwtaW5wdXQiLHthdHRyczp7InZhbGlkYXRlLWV2ZW50IjpmYWxzZSxzaXplOiJtaW5pIn0sb246e2JsdXI6X3ZtLmhhbmRsZUNvbmZpcm19LG5hdGl2ZU9uOntrZXl1cDpmdW5jdGlvbiBrZXl1cCgkZXZlbnQpe2lmKCEoImJ1dHRvbiJpbiAkZXZlbnQpJiZfdm0uX2soJGV2ZW50LmtleUNvZGUsImVudGVyIiwxMywkZXZlbnQua2V5LCJFbnRlciIpKXtyZXR1cm4gbnVsbDt9cmV0dXJuIF92bS5oYW5kbGVDb25maXJtKCRldmVudCk7fX0sbW9kZWw6e3ZhbHVlOl92bS5jdXN0b21JbnB1dCxjYWxsYmFjazpmdW5jdGlvbiBjYWxsYmFjaygkJHYpe192bS5jdXN0b21JbnB1dD0kJHY7fSxleHByZXNzaW9uOiJjdXN0b21JbnB1dCJ9fSldLDEpLF9jKCJlbC1idXR0b24iLHtzdGF0aWNDbGFzczoiZWwtY29sb3ItZHJvcGRvd25fX2xpbmstYnRuIixhdHRyczp7c2l6ZToibWluaSIsdHlwZToidGV4dCJ9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS4kZW1pdCgiY2xlYXIiKTt9fX0sW192bS5fdigiXG4gICAgICAgICIrX3ZtLl9zKF92bS50KCJlbC5jb2xvcnBpY2tlci5jbGVhciIpKSsiXG4gICAgICAiKV0pLF9jKCJlbC1idXR0b24iLHtzdGF0aWNDbGFzczoiZWwtY29sb3ItZHJvcGRvd25fX2J0biIsYXR0cnM6e3BsYWluOiIiLHNpemU6Im1pbmkifSxvbjp7Y2xpY2s6X3ZtLmNvbmZpcm1WYWx1ZX19LFtfdm0uX3YoIlxuICAgICAgICAiK192bS5fcyhfdm0udCgiZWwuY29sb3JwaWNrZXIuY29uZmlybSIpKSsiXG4gICAgICAiKV0pXSwxKV0sMSldKTt9O3ZhciBwaWNrZXJfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjYwMTYyNV9zdGF0aWNSZW5kZXJGbnM9W107cGlja2VyX2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY2MDE2MjVfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9waWNrZXItZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2NjAxNjI1JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9zdi1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDg1ODM1OTYmCnZhciBzdl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Q4NTgzNTk2X3JlbmRlcj1mdW5jdGlvbiBzdl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Q4NTgzNTk2X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLXN2cGFuZWwiLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6X3ZtLmJhY2tncm91bmR9fSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1zdnBhbmVsX193aGl0ZSJ9KSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLXN2cGFuZWxfX2JsYWNrIn0pLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sb3Itc3ZwYW5lbF9fY3Vyc29yIixzdHlsZTp7dG9wOl92bS5jdXJzb3JUb3ArInB4IixsZWZ0Ol92bS5jdXJzb3JMZWZ0KyJweCJ9fSxbX2MoImRpdiIpXSldKTt9O3ZhciBzdl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Q4NTgzNTk2X3N0YXRpY1JlbmRlckZucz1bXTtzdl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Q4NTgzNTk2X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvc3YtcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ4NTgzNTk2JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvZHJhZ2dhYmxlLmpzCnZhciBpc0RyYWdnaW5nPWZhbHNlOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZHJhZ2dhYmxlPWZ1bmN0aW9uIGRyYWdnYWJsZShlbGVtZW50LG9wdGlvbnMpe2lmKGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEucHJvdG90eXBlLiRpc1NlcnZlcilyZXR1cm47dmFyIG1vdmVGbj1mdW5jdGlvbiBtb3ZlRm4oZXZlbnQpe2lmKG9wdGlvbnMuZHJhZyl7b3B0aW9ucy5kcmFnKGV2ZW50KTt9fTt2YXIgdXBGbj1mdW5jdGlvbiB1cEZuKGV2ZW50KXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLG1vdmVGbik7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsdXBGbik7ZG9jdW1lbnQub25zZWxlY3RzdGFydD1udWxsO2RvY3VtZW50Lm9uZHJhZ3N0YXJ0PW51bGw7aXNEcmFnZ2luZz1mYWxzZTtpZihvcHRpb25zLmVuZCl7b3B0aW9ucy5lbmQoZXZlbnQpO319O2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJyxmdW5jdGlvbihldmVudCl7aWYoaXNEcmFnZ2luZylyZXR1cm47ZG9jdW1lbnQub25zZWxlY3RzdGFydD1mdW5jdGlvbigpe3JldHVybiBmYWxzZTt9O2RvY3VtZW50Lm9uZHJhZ3N0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlO307ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyxtb3ZlRm4pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLHVwRm4pO2lzRHJhZ2dpbmc9dHJ1ZTtpZihvcHRpb25zLnN0YXJ0KXtvcHRpb25zLnN0YXJ0KGV2ZW50KTt9fSk7fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvc3YtcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHN2X3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidlbC1zbC1wYW5lbCcscHJvcHM6e2NvbG9yOntyZXF1aXJlZDp0cnVlfX0sY29tcHV0ZWQ6e2NvbG9yVmFsdWU6ZnVuY3Rpb24gY29sb3JWYWx1ZSgpe3ZhciBodWU9dGhpcy5jb2xvci5nZXQoJ2h1ZScpO3ZhciB2YWx1ZT10aGlzLmNvbG9yLmdldCgndmFsdWUnKTtyZXR1cm57aHVlOmh1ZSx2YWx1ZTp2YWx1ZX07fX0sd2F0Y2g6e2NvbG9yVmFsdWU6ZnVuY3Rpb24gY29sb3JWYWx1ZSgpe3RoaXMudXBkYXRlKCk7fX0sbWV0aG9kczp7dXBkYXRlOmZ1bmN0aW9uIHVwZGF0ZSgpe3ZhciBzYXR1cmF0aW9uPXRoaXMuY29sb3IuZ2V0KCdzYXR1cmF0aW9uJyk7dmFyIHZhbHVlPXRoaXMuY29sb3IuZ2V0KCd2YWx1ZScpO3ZhciBlbD10aGlzLiRlbDt2YXIgd2lkdGg9ZWwuY2xpZW50V2lkdGgsaGVpZ2h0PWVsLmNsaWVudEhlaWdodDt0aGlzLmN1cnNvckxlZnQ9c2F0dXJhdGlvbip3aWR0aC8xMDA7dGhpcy5jdXJzb3JUb3A9KDEwMC12YWx1ZSkqaGVpZ2h0LzEwMDt0aGlzLmJhY2tncm91bmQ9J2hzbCgnK3RoaXMuY29sb3IuZ2V0KCdodWUnKSsnLCAxMDAlLCA1MCUpJzt9LGhhbmRsZURyYWc6ZnVuY3Rpb24gaGFuZGxlRHJhZyhldmVudCl7dmFyIGVsPXRoaXMuJGVsO3ZhciByZWN0PWVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciBsZWZ0PWV2ZW50LmNsaWVudFgtcmVjdC5sZWZ0O3ZhciB0b3A9ZXZlbnQuY2xpZW50WS1yZWN0LnRvcDtsZWZ0PU1hdGgubWF4KDAsbGVmdCk7bGVmdD1NYXRoLm1pbihsZWZ0LHJlY3Qud2lkdGgpO3RvcD1NYXRoLm1heCgwLHRvcCk7dG9wPU1hdGgubWluKHRvcCxyZWN0LmhlaWdodCk7dGhpcy5jdXJzb3JMZWZ0PWxlZnQ7dGhpcy5jdXJzb3JUb3A9dG9wO3RoaXMuY29sb3Iuc2V0KHtzYXR1cmF0aW9uOmxlZnQvcmVjdC53aWR0aCoxMDAsdmFsdWU6MTAwLXRvcC9yZWN0LmhlaWdodCoxMDB9KTt9fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt2YXIgX3RoaXM9dGhpcztkcmFnZ2FibGUodGhpcy4kZWwse2RyYWc6ZnVuY3Rpb24gZHJhZyhldmVudCl7X3RoaXMuaGFuZGxlRHJhZyhldmVudCk7fSxlbmQ6ZnVuY3Rpb24gZW5kKGV2ZW50KXtfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTt9fSk7dGhpcy51cGRhdGUoKTt9LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntjdXJzb3JUb3A6MCxjdXJzb3JMZWZ0OjAsYmFja2dyb3VuZDonaHNsKDAsIDEwMCUsIDUwJSknfTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9zdi1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY29tcG9uZW50c19zdl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1zdl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9zdi1wYW5lbC52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBzdl9wYW5lbF9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KGNvbXBvbmVudHNfc3ZfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sc3ZfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kODU4MzU5Nl9yZW5kZXIsc3ZfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kODU4MzU5Nl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHN2X3BhbmVsX2FwaTt9c3ZfcGFuZWxfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvc3YtcGFuZWwudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHN2X3BhbmVsPXN2X3BhbmVsX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2h1ZS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjZGM0M2IxJgp2YXIgaHVlX3NsaWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVjZGM0M2IxX3JlbmRlcj1mdW5jdGlvbiBodWVfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWNkYzQzYjFfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sb3ItaHVlLXNsaWRlciIsY2xhc3M6eyJpcy12ZXJ0aWNhbCI6X3ZtLnZlcnRpY2FsfX0sW19jKCJkaXYiLHtyZWY6ImJhciIsc3RhdGljQ2xhc3M6ImVsLWNvbG9yLWh1ZS1zbGlkZXJfX2JhciIsb246e2NsaWNrOl92bS5oYW5kbGVDbGlja319KSxfYygiZGl2Iix7cmVmOiJ0aHVtYiIsc3RhdGljQ2xhc3M6ImVsLWNvbG9yLWh1ZS1zbGlkZXJfX3RodW1iIixzdHlsZTp7bGVmdDpfdm0udGh1bWJMZWZ0KyJweCIsdG9wOl92bS50aHVtYlRvcCsicHgifX0pXSk7fTt2YXIgaHVlX3NsaWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVjZGM0M2IxX3N0YXRpY1JlbmRlckZucz1bXTtodWVfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWNkYzQzYjFfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9odWUtc2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2RjNDNiMSYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2h1ZS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGh1ZV9zbGlkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J2VsLWNvbG9yLWh1ZS1zbGlkZXInLHByb3BzOntjb2xvcjp7cmVxdWlyZWQ6dHJ1ZX0sdmVydGljYWw6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3RodW1iTGVmdDowLHRodW1iVG9wOjB9O30sY29tcHV0ZWQ6e2h1ZVZhbHVlOmZ1bmN0aW9uIGh1ZVZhbHVlKCl7dmFyIGh1ZT10aGlzLmNvbG9yLmdldCgnaHVlJyk7cmV0dXJuIGh1ZTt9fSx3YXRjaDp7aHVlVmFsdWU6ZnVuY3Rpb24gaHVlVmFsdWUoKXt0aGlzLnVwZGF0ZSgpO319LG1ldGhvZHM6e2hhbmRsZUNsaWNrOmZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KXt2YXIgdGh1bWI9dGhpcy4kcmVmcy50aHVtYjt2YXIgdGFyZ2V0PWV2ZW50LnRhcmdldDtpZih0YXJnZXQhPT10aHVtYil7dGhpcy5oYW5kbGVEcmFnKGV2ZW50KTt9fSxoYW5kbGVEcmFnOmZ1bmN0aW9uIGhhbmRsZURyYWcoZXZlbnQpe3ZhciByZWN0PXRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciB0aHVtYj10aGlzLiRyZWZzLnRodW1iO3ZhciBodWU9dm9pZCAwO2lmKCF0aGlzLnZlcnRpY2FsKXt2YXIgbGVmdD1ldmVudC5jbGllbnRYLXJlY3QubGVmdDtsZWZ0PU1hdGgubWluKGxlZnQscmVjdC53aWR0aC10aHVtYi5vZmZzZXRXaWR0aC8yKTtsZWZ0PU1hdGgubWF4KHRodW1iLm9mZnNldFdpZHRoLzIsbGVmdCk7aHVlPU1hdGgucm91bmQoKGxlZnQtdGh1bWIub2Zmc2V0V2lkdGgvMikvKHJlY3Qud2lkdGgtdGh1bWIub2Zmc2V0V2lkdGgpKjM2MCk7fWVsc2V7dmFyIHRvcD1ldmVudC5jbGllbnRZLXJlY3QudG9wO3RvcD1NYXRoLm1pbih0b3AscmVjdC5oZWlnaHQtdGh1bWIub2Zmc2V0SGVpZ2h0LzIpO3RvcD1NYXRoLm1heCh0aHVtYi5vZmZzZXRIZWlnaHQvMix0b3ApO2h1ZT1NYXRoLnJvdW5kKCh0b3AtdGh1bWIub2Zmc2V0SGVpZ2h0LzIpLyhyZWN0LmhlaWdodC10aHVtYi5vZmZzZXRIZWlnaHQpKjM2MCk7fXRoaXMuY29sb3Iuc2V0KCdodWUnLGh1ZSk7fSxnZXRUaHVtYkxlZnQ6ZnVuY3Rpb24gZ2V0VGh1bWJMZWZ0KCl7aWYodGhpcy52ZXJ0aWNhbClyZXR1cm4gMDt2YXIgZWw9dGhpcy4kZWw7dmFyIGh1ZT10aGlzLmNvbG9yLmdldCgnaHVlJyk7aWYoIWVsKXJldHVybiAwO3ZhciB0aHVtYj10aGlzLiRyZWZzLnRodW1iO3JldHVybiBNYXRoLnJvdW5kKGh1ZSooZWwub2Zmc2V0V2lkdGgtdGh1bWIub2Zmc2V0V2lkdGgvMikvMzYwKTt9LGdldFRodW1iVG9wOmZ1bmN0aW9uIGdldFRodW1iVG9wKCl7aWYoIXRoaXMudmVydGljYWwpcmV0dXJuIDA7dmFyIGVsPXRoaXMuJGVsO3ZhciBodWU9dGhpcy5jb2xvci5nZXQoJ2h1ZScpO2lmKCFlbClyZXR1cm4gMDt2YXIgdGh1bWI9dGhpcy4kcmVmcy50aHVtYjtyZXR1cm4gTWF0aC5yb3VuZChodWUqKGVsLm9mZnNldEhlaWdodC10aHVtYi5vZmZzZXRIZWlnaHQvMikvMzYwKTt9LHVwZGF0ZTpmdW5jdGlvbiB1cGRhdGUoKXt0aGlzLnRodW1iTGVmdD10aGlzLmdldFRodW1iTGVmdCgpO3RoaXMudGh1bWJUb3A9dGhpcy5nZXRUaHVtYlRvcCgpO319LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3ZhciBfdGhpcz10aGlzO3ZhciBfJHJlZnM9dGhpcy4kcmVmcyxiYXI9XyRyZWZzLmJhcix0aHVtYj1fJHJlZnMudGh1bWI7dmFyIGRyYWdDb25maWc9e2RyYWc6ZnVuY3Rpb24gZHJhZyhldmVudCl7X3RoaXMuaGFuZGxlRHJhZyhldmVudCk7fSxlbmQ6ZnVuY3Rpb24gZW5kKGV2ZW50KXtfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTt9fTtkcmFnZ2FibGUoYmFyLGRyYWdDb25maWcpO2RyYWdnYWJsZSh0aHVtYixkcmFnQ29uZmlnKTt0aGlzLnVwZGF0ZSgpO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2h1ZS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNvbXBvbmVudHNfaHVlX3NsaWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1odWVfc2xpZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2h1ZS1zbGlkZXIudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgaHVlX3NsaWRlcl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KGNvbXBvbmVudHNfaHVlX3NsaWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxodWVfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWNkYzQzYjFfcmVuZGVyLGh1ZV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81Y2RjNDNiMV9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGh1ZV9zbGlkZXJfYXBpO31odWVfc2xpZGVyX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2h1ZS1zbGlkZXIudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGh1ZV9zbGlkZXI9aHVlX3NsaWRlcl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9hbHBoYS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2OGM2NmNiJgp2YXIgYWxwaGFfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4YzY2Y2JfcmVuZGVyPWZ1bmN0aW9uIGFscGhhX3NsaWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2OGM2NmNiX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbG9yLWFscGhhLXNsaWRlciIsY2xhc3M6eyJpcy12ZXJ0aWNhbCI6X3ZtLnZlcnRpY2FsfX0sW19jKCJkaXYiLHtyZWY6ImJhciIsc3RhdGljQ2xhc3M6ImVsLWNvbG9yLWFscGhhLXNsaWRlcl9fYmFyIixzdHlsZTp7YmFja2dyb3VuZDpfdm0uYmFja2dyb3VuZH0sb246e2NsaWNrOl92bS5oYW5kbGVDbGlja319KSxfYygiZGl2Iix7cmVmOiJ0aHVtYiIsc3RhdGljQ2xhc3M6ImVsLWNvbG9yLWFscGhhLXNsaWRlcl9fdGh1bWIiLHN0eWxlOntsZWZ0Ol92bS50aHVtYkxlZnQrInB4Iix0b3A6X3ZtLnRodW1iVG9wKyJweCJ9fSldKTt9O3ZhciBhbHBoYV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjhjNjZjYl9zdGF0aWNSZW5kZXJGbnM9W107YWxwaGFfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4YzY2Y2JfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9hbHBoYS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2OGM2NmNiJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvYWxwaGEtc2xpZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBhbHBoYV9zbGlkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J2VsLWNvbG9yLWFscGhhLXNsaWRlcicscHJvcHM6e2NvbG9yOntyZXF1aXJlZDp0cnVlfSx2ZXJ0aWNhbDpCb29sZWFufSx3YXRjaDp7J2NvbG9yLl9hbHBoYSc6ZnVuY3Rpb24gY29sb3JfYWxwaGEoKXt0aGlzLnVwZGF0ZSgpO30sJ2NvbG9yLnZhbHVlJzpmdW5jdGlvbiBjb2xvclZhbHVlKCl7dGhpcy51cGRhdGUoKTt9fSxtZXRob2RzOntoYW5kbGVDbGljazpmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCl7dmFyIHRodW1iPXRoaXMuJHJlZnMudGh1bWI7dmFyIHRhcmdldD1ldmVudC50YXJnZXQ7aWYodGFyZ2V0IT09dGh1bWIpe3RoaXMuaGFuZGxlRHJhZyhldmVudCk7fX0saGFuZGxlRHJhZzpmdW5jdGlvbiBoYW5kbGVEcmFnKGV2ZW50KXt2YXIgcmVjdD10aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgdGh1bWI9dGhpcy4kcmVmcy50aHVtYjtpZighdGhpcy52ZXJ0aWNhbCl7dmFyIGxlZnQ9ZXZlbnQuY2xpZW50WC1yZWN0LmxlZnQ7bGVmdD1NYXRoLm1heCh0aHVtYi5vZmZzZXRXaWR0aC8yLGxlZnQpO2xlZnQ9TWF0aC5taW4obGVmdCxyZWN0LndpZHRoLXRodW1iLm9mZnNldFdpZHRoLzIpO3RoaXMuY29sb3Iuc2V0KCdhbHBoYScsTWF0aC5yb3VuZCgobGVmdC10aHVtYi5vZmZzZXRXaWR0aC8yKS8ocmVjdC53aWR0aC10aHVtYi5vZmZzZXRXaWR0aCkqMTAwKSk7fWVsc2V7dmFyIHRvcD1ldmVudC5jbGllbnRZLXJlY3QudG9wO3RvcD1NYXRoLm1heCh0aHVtYi5vZmZzZXRIZWlnaHQvMix0b3ApO3RvcD1NYXRoLm1pbih0b3AscmVjdC5oZWlnaHQtdGh1bWIub2Zmc2V0SGVpZ2h0LzIpO3RoaXMuY29sb3Iuc2V0KCdhbHBoYScsTWF0aC5yb3VuZCgodG9wLXRodW1iLm9mZnNldEhlaWdodC8yKS8ocmVjdC5oZWlnaHQtdGh1bWIub2Zmc2V0SGVpZ2h0KSoxMDApKTt9fSxnZXRUaHVtYkxlZnQ6ZnVuY3Rpb24gZ2V0VGh1bWJMZWZ0KCl7aWYodGhpcy52ZXJ0aWNhbClyZXR1cm4gMDt2YXIgZWw9dGhpcy4kZWw7dmFyIGFscGhhPXRoaXMuY29sb3IuX2FscGhhO2lmKCFlbClyZXR1cm4gMDt2YXIgdGh1bWI9dGhpcy4kcmVmcy50aHVtYjtyZXR1cm4gTWF0aC5yb3VuZChhbHBoYSooZWwub2Zmc2V0V2lkdGgtdGh1bWIub2Zmc2V0V2lkdGgvMikvMTAwKTt9LGdldFRodW1iVG9wOmZ1bmN0aW9uIGdldFRodW1iVG9wKCl7aWYoIXRoaXMudmVydGljYWwpcmV0dXJuIDA7dmFyIGVsPXRoaXMuJGVsO3ZhciBhbHBoYT10aGlzLmNvbG9yLl9hbHBoYTtpZighZWwpcmV0dXJuIDA7dmFyIHRodW1iPXRoaXMuJHJlZnMudGh1bWI7cmV0dXJuIE1hdGgucm91bmQoYWxwaGEqKGVsLm9mZnNldEhlaWdodC10aHVtYi5vZmZzZXRIZWlnaHQvMikvMTAwKTt9LGdldEJhY2tncm91bmQ6ZnVuY3Rpb24gZ2V0QmFja2dyb3VuZCgpe2lmKHRoaXMuY29sb3ImJnRoaXMuY29sb3IudmFsdWUpe3ZhciBfY29sb3IkdG9SZ2I9dGhpcy5jb2xvci50b1JnYigpLHI9X2NvbG9yJHRvUmdiLnIsZz1fY29sb3IkdG9SZ2IuZyxiPV9jb2xvciR0b1JnYi5iO3JldHVybidsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoJytyKycsICcrZysnLCAnK2IrJywgMCkgMCUsIHJnYmEoJytyKycsICcrZysnLCAnK2IrJywgMSkgMTAwJSknO31yZXR1cm4gbnVsbDt9LHVwZGF0ZTpmdW5jdGlvbiB1cGRhdGUoKXt0aGlzLnRodW1iTGVmdD10aGlzLmdldFRodW1iTGVmdCgpO3RoaXMudGh1bWJUb3A9dGhpcy5nZXRUaHVtYlRvcCgpO3RoaXMuYmFja2dyb3VuZD10aGlzLmdldEJhY2tncm91bmQoKTt9fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57dGh1bWJMZWZ0OjAsdGh1bWJUb3A6MCxiYWNrZ3JvdW5kOm51bGx9O30sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dmFyIF90aGlzPXRoaXM7dmFyIF8kcmVmcz10aGlzLiRyZWZzLGJhcj1fJHJlZnMuYmFyLHRodW1iPV8kcmVmcy50aHVtYjt2YXIgZHJhZ0NvbmZpZz17ZHJhZzpmdW5jdGlvbiBkcmFnKGV2ZW50KXtfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTt9LGVuZDpmdW5jdGlvbiBlbmQoZXZlbnQpe190aGlzLmhhbmRsZURyYWcoZXZlbnQpO319O2RyYWdnYWJsZShiYXIsZHJhZ0NvbmZpZyk7ZHJhZ2dhYmxlKHRodW1iLGRyYWdDb25maWcpO3RoaXMudXBkYXRlKCk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvYWxwaGEtc2xpZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjb21wb25lbnRzX2FscGhhX3NsaWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1hbHBoYV9zbGlkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvYWxwaGEtc2xpZGVyLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGFscGhhX3NsaWRlcl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KGNvbXBvbmVudHNfYWxwaGFfc2xpZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGFscGhhX3NsaWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2OGM2NmNiX3JlbmRlcixhbHBoYV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjhjNjZjYl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGFscGhhX3NsaWRlcl9hcGk7fWFscGhhX3NsaWRlcl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9hbHBoYS1zbGlkZXIudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGFscGhhX3NsaWRlcj1hbHBoYV9zbGlkZXJfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcHJlZGVmaW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNmUwMzA5MyYKdmFyIHByZWRlZmluZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ZTAzMDkzX3JlbmRlcj1mdW5jdGlvbiBwcmVkZWZpbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNmUwMzA5M19yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1wcmVkZWZpbmUifSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jb2xvci1wcmVkZWZpbmVfX2NvbG9ycyJ9LF92bS5fbChfdm0ucmdiYUNvbG9ycyxmdW5jdGlvbihpdGVtLGluZGV4KXtyZXR1cm4gX2MoImRpdiIse2tleTpfdm0uY29sb3JzW2luZGV4XSxzdGF0aWNDbGFzczoiZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvci1zZWxlY3RvciIsY2xhc3M6e3NlbGVjdGVkOml0ZW0uc2VsZWN0ZWQsImlzLWFscGhhIjppdGVtLl9hbHBoYTwxMDB9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5oYW5kbGVTZWxlY3QoaW5kZXgpO319fSxbX2MoImRpdiIse3N0eWxlOnsiYmFja2dyb3VuZC1jb2xvciI6aXRlbS52YWx1ZX19KV0pO30pLDApXSk7fTt2YXIgcHJlZGVmaW5ldnVlX3R5cGVfdGVtcGxhdGVfaWRfMDZlMDMwOTNfc3RhdGljUmVuZGVyRm5zPVtdO3ByZWRlZmluZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ZTAzMDkzX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcHJlZGVmaW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNmUwMzA5MyYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3ByZWRlZmluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcHJlZGVmaW5ldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtwcm9wczp7Y29sb3JzOnt0eXBlOkFycmF5LHJlcXVpcmVkOnRydWV9LGNvbG9yOntyZXF1aXJlZDp0cnVlfX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3JnYmFDb2xvcnM6dGhpcy5wYXJzZUNvbG9ycyh0aGlzLmNvbG9ycyx0aGlzLmNvbG9yKX07fSxtZXRob2RzOntoYW5kbGVTZWxlY3Q6ZnVuY3Rpb24gaGFuZGxlU2VsZWN0KGluZGV4KXt0aGlzLmNvbG9yLmZyb21TdHJpbmcodGhpcy5jb2xvcnNbaW5kZXhdKTt9LHBhcnNlQ29sb3JzOmZ1bmN0aW9uIHBhcnNlQ29sb3JzKGNvbG9ycyxjb2xvcil7cmV0dXJuIGNvbG9ycy5tYXAoZnVuY3Rpb24odmFsdWUpe3ZhciBjPW5ldyBzcmNfY29sb3IoKTtjLmVuYWJsZUFscGhhPXRydWU7Yy5mb3JtYXQ9J3JnYmEnO2MuZnJvbVN0cmluZyh2YWx1ZSk7Yy5zZWxlY3RlZD1jLnZhbHVlPT09Y29sb3IudmFsdWU7cmV0dXJuIGM7fSk7fX0sd2F0Y2g6eyckcGFyZW50LmN1cnJlbnRDb2xvcic6ZnVuY3Rpb24gJHBhcmVudEN1cnJlbnRDb2xvcih2YWwpe3ZhciBjb2xvcj1uZXcgc3JjX2NvbG9yKCk7Y29sb3IuZnJvbVN0cmluZyh2YWwpO3RoaXMucmdiYUNvbG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2l0ZW0uc2VsZWN0ZWQ9Y29sb3IuY29tcGFyZShpdGVtKTt9KTt9LGNvbG9yczpmdW5jdGlvbiBjb2xvcnMobmV3VmFsKXt0aGlzLnJnYmFDb2xvcnM9dGhpcy5wYXJzZUNvbG9ycyhuZXdWYWwsdGhpcy5jb2xvcik7fSxjb2xvcjpmdW5jdGlvbiBjb2xvcihuZXdWYWwpe3RoaXMucmdiYUNvbG9ycz10aGlzLnBhcnNlQ29sb3JzKHRoaXMuY29sb3JzLG5ld1ZhbCk7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3ByZWRlZmluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY29tcG9uZW50c19wcmVkZWZpbmV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189cHJlZGVmaW5ldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3ByZWRlZmluZS52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBwcmVkZWZpbmVfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChjb21wb25lbnRzX3ByZWRlZmluZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxwcmVkZWZpbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNmUwMzA5M19yZW5kZXIscHJlZGVmaW5ldnVlX3R5cGVfdGVtcGxhdGVfaWRfMDZlMDMwOTNfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBwcmVkZWZpbmVfYXBpO31wcmVkZWZpbmVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcHJlZGVmaW5lLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwcmVkZWZpbmU9cHJlZGVmaW5lX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9waWNrZXItZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBpY2tlcl9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonZWwtY29sb3ItcGlja2VyLWRyb3Bkb3duJyxtaXhpbnM6W3Z1ZV9wb3BwZXJfZGVmYXVsdC5hLGxvY2FsZV9kZWZhdWx0LmFdLGNvbXBvbmVudHM6e1N2UGFuZWw6c3ZfcGFuZWwsSHVlU2xpZGVyOmh1ZV9zbGlkZXIsQWxwaGFTbGlkZXI6YWxwaGFfc2xpZGVyLEVsSW5wdXQ6aW5wdXRfZGVmYXVsdC5hLEVsQnV0dG9uOmJ1dHRvbl9kZWZhdWx0LmEsUHJlZGVmaW5lOnByZWRlZmluZX0scHJvcHM6e2NvbG9yOntyZXF1aXJlZDp0cnVlfSxzaG93QWxwaGE6Qm9vbGVhbixwcmVkZWZpbmU6QXJyYXl9LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntjdXN0b21JbnB1dDonJ307fSxjb21wdXRlZDp7Y3VycmVudENvbG9yOmZ1bmN0aW9uIGN1cnJlbnRDb2xvcigpe3ZhciBwYXJlbnQ9dGhpcy4kcGFyZW50O3JldHVybiFwYXJlbnQudmFsdWUmJiFwYXJlbnQuc2hvd1BhbmVsQ29sb3I/Jyc6cGFyZW50LmNvbG9yLnZhbHVlO319LG1ldGhvZHM6e2NvbmZpcm1WYWx1ZTpmdW5jdGlvbiBjb25maXJtVmFsdWUoKXt0aGlzLiRlbWl0KCdwaWNrJyk7fSxoYW5kbGVDb25maXJtOmZ1bmN0aW9uIGhhbmRsZUNvbmZpcm0oKXt0aGlzLmNvbG9yLmZyb21TdHJpbmcodGhpcy5jdXN0b21JbnB1dCk7fX0sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7dGhpcy4kcGFyZW50LnBvcHBlckVsbT10aGlzLnBvcHBlckVsbT10aGlzLiRlbDt0aGlzLnJlZmVyZW5jZUVsbT10aGlzLiRwYXJlbnQuJGVsO30sd2F0Y2g6e3Nob3dQb3BwZXI6ZnVuY3Rpb24gc2hvd1BvcHBlcih2YWwpe3ZhciBfdGhpcz10aGlzO2lmKHZhbD09PXRydWUpe3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dmFyIF8kcmVmcz1fdGhpcy4kcmVmcyxzbD1fJHJlZnMuc2wsaHVlPV8kcmVmcy5odWUsYWxwaGE9XyRyZWZzLmFscGhhO3NsJiZzbC51cGRhdGUoKTtodWUmJmh1ZS51cGRhdGUoKTthbHBoYSYmYWxwaGEudXBkYXRlKCk7fSk7fX0sY3VycmVudENvbG9yOntpbW1lZGlhdGU6dHJ1ZSxoYW5kbGVyOmZ1bmN0aW9uIGhhbmRsZXIodmFsKXt0aGlzLmN1c3RvbUlucHV0PXZhbDt9fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3BpY2tlci1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY29tcG9uZW50c19waWNrZXJfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189cGlja2VyX2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3BpY2tlci1kcm9wZG93bi52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBwaWNrZXJfZHJvcGRvd25fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChjb21wb25lbnRzX3BpY2tlcl9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxwaWNrZXJfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjYwMTYyNV9yZW5kZXIscGlja2VyX2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY2MDE2MjVfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBwaWNrZXJfZHJvcGRvd25fYXBpO31waWNrZXJfZHJvcGRvd25fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcGlja2VyLWRyb3Bkb3duLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwaWNrZXJfZHJvcGRvd249cGlja2VyX2Ryb3Bkb3duX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY29sb3JfcGlja2VyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbENvbG9yUGlja2VyJyxtaXhpbnM6W2VtaXR0ZXJfZGVmYXVsdC5hXSxwcm9wczp7dmFsdWU6U3RyaW5nLHNob3dBbHBoYTpCb29sZWFuLGNvbG9yRm9ybWF0OlN0cmluZyxkaXNhYmxlZDpCb29sZWFuLHNpemU6U3RyaW5nLHBvcHBlckNsYXNzOlN0cmluZyxwcmVkZWZpbmU6QXJyYXl9LGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OicnfSxlbEZvcm1JdGVtOntkZWZhdWx0OicnfX0sZGlyZWN0aXZlczp7Q2xpY2tvdXRzaWRlOmNsaWNrb3V0c2lkZV9kZWZhdWx0LmF9LGNvbXB1dGVkOntkaXNwbGF5ZWRDb2xvcjpmdW5jdGlvbiBkaXNwbGF5ZWRDb2xvcigpe2lmKCF0aGlzLnZhbHVlJiYhdGhpcy5zaG93UGFuZWxDb2xvcil7cmV0dXJuJ3RyYW5zcGFyZW50Jzt9cmV0dXJuIHRoaXMuZGlzcGxheWVkUmdiKHRoaXMuY29sb3IsdGhpcy5zaG93QWxwaGEpO30sX2VsRm9ybUl0ZW1TaXplOmZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpe3JldHVybih0aGlzLmVsRm9ybUl0ZW18fHt9KS5lbEZvcm1JdGVtU2l6ZTt9LGNvbG9yU2l6ZTpmdW5jdGlvbiBjb2xvclNpemUoKXtyZXR1cm4gdGhpcy5zaXplfHx0aGlzLl9lbEZvcm1JdGVtU2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplO30sY29sb3JEaXNhYmxlZDpmdW5jdGlvbiBjb2xvckRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkO319LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbiB2YWx1ZSh2YWwpe2lmKCF2YWwpe3RoaXMuc2hvd1BhbmVsQ29sb3I9ZmFsc2U7fWVsc2UgaWYodmFsJiZ2YWwhPT10aGlzLmNvbG9yLnZhbHVlKXt0aGlzLmNvbG9yLmZyb21TdHJpbmcodmFsKTt9fSxjb2xvcjp7ZGVlcDp0cnVlLGhhbmRsZXI6ZnVuY3Rpb24gaGFuZGxlcigpe3RoaXMuc2hvd1BhbmVsQ29sb3I9dHJ1ZTt9fSxkaXNwbGF5ZWRDb2xvcjpmdW5jdGlvbiBkaXNwbGF5ZWRDb2xvcih2YWwpe2lmKCF0aGlzLnNob3dQaWNrZXIpcmV0dXJuO3ZhciBjdXJyZW50VmFsdWVDb2xvcj1uZXcgc3JjX2NvbG9yKHtlbmFibGVBbHBoYTp0aGlzLnNob3dBbHBoYSxmb3JtYXQ6dGhpcy5jb2xvckZvcm1hdH0pO2N1cnJlbnRWYWx1ZUNvbG9yLmZyb21TdHJpbmcodGhpcy52YWx1ZSk7dmFyIGN1cnJlbnRWYWx1ZUNvbG9yUmdiPXRoaXMuZGlzcGxheWVkUmdiKGN1cnJlbnRWYWx1ZUNvbG9yLHRoaXMuc2hvd0FscGhhKTtpZih2YWwhPT1jdXJyZW50VmFsdWVDb2xvclJnYil7dGhpcy4kZW1pdCgnYWN0aXZlLWNoYW5nZScsdmFsKTt9fX0sbWV0aG9kczp7aGFuZGxlVHJpZ2dlcjpmdW5jdGlvbiBoYW5kbGVUcmlnZ2VyKCl7aWYodGhpcy5jb2xvckRpc2FibGVkKXJldHVybjt0aGlzLnNob3dQaWNrZXI9IXRoaXMuc2hvd1BpY2tlcjt9LGNvbmZpcm1WYWx1ZTpmdW5jdGlvbiBjb25maXJtVmFsdWUoKXt2YXIgdmFsdWU9dGhpcy5jb2xvci52YWx1ZTt0aGlzLiRlbWl0KCdpbnB1dCcsdmFsdWUpO3RoaXMuJGVtaXQoJ2NoYW5nZScsdmFsdWUpO3RoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCdlbC5mb3JtLmNoYW5nZScsdmFsdWUpO3RoaXMuc2hvd1BpY2tlcj1mYWxzZTt9LGNsZWFyVmFsdWU6ZnVuY3Rpb24gY2xlYXJWYWx1ZSgpe3RoaXMuJGVtaXQoJ2lucHV0JyxudWxsKTt0aGlzLiRlbWl0KCdjaGFuZ2UnLG51bGwpO2lmKHRoaXMudmFsdWUhPT1udWxsKXt0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywnZWwuZm9ybS5jaGFuZ2UnLG51bGwpO310aGlzLnNob3dQYW5lbENvbG9yPWZhbHNlO3RoaXMuc2hvd1BpY2tlcj1mYWxzZTt0aGlzLnJlc2V0Q29sb3IoKTt9LGhpZGU6ZnVuY3Rpb24gaGlkZSgpe3RoaXMuc2hvd1BpY2tlcj1mYWxzZTt0aGlzLnJlc2V0Q29sb3IoKTt9LHJlc2V0Q29sb3I6ZnVuY3Rpb24gcmVzZXRDb2xvcigpe3ZhciBfdGhpcz10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKF8pe2lmKF90aGlzLnZhbHVlKXtfdGhpcy5jb2xvci5mcm9tU3RyaW5nKF90aGlzLnZhbHVlKTt9ZWxzZXtfdGhpcy5zaG93UGFuZWxDb2xvcj1mYWxzZTt9fSk7fSxkaXNwbGF5ZWRSZ2I6ZnVuY3Rpb24gZGlzcGxheWVkUmdiKGNvbG9yLHNob3dBbHBoYSl7aWYoIShjb2xvciBpbnN0YW5jZW9mIHNyY19jb2xvcikpe3Rocm93IEVycm9yKCdjb2xvciBzaG91bGQgYmUgaW5zdGFuY2Ugb2YgQ29sb3IgQ2xhc3MnKTt9dmFyIF9jb2xvciR0b1JnYj1jb2xvci50b1JnYigpLHI9X2NvbG9yJHRvUmdiLnIsZz1fY29sb3IkdG9SZ2IuZyxiPV9jb2xvciR0b1JnYi5iO3JldHVybiBzaG93QWxwaGE/J3JnYmEoJytyKycsICcrZysnLCAnK2IrJywgJytjb2xvci5nZXQoJ2FscGhhJykvMTAwKycpJzoncmdiKCcrcisnLCAnK2crJywgJytiKycpJzt9fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt2YXIgdmFsdWU9dGhpcy52YWx1ZTtpZih2YWx1ZSl7dGhpcy5jb2xvci5mcm9tU3RyaW5nKHZhbHVlKTt9dGhpcy5wb3BwZXJFbG09dGhpcy4kcmVmcy5kcm9wZG93bi4kZWw7fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXt2YXIgY29sb3I9bmV3IHNyY19jb2xvcih7ZW5hYmxlQWxwaGE6dGhpcy5zaG93QWxwaGEsZm9ybWF0OnRoaXMuY29sb3JGb3JtYXR9KTtyZXR1cm57Y29sb3I6Y29sb3Isc2hvd1BpY2tlcjpmYWxzZSxzaG93UGFuZWxDb2xvcjpmYWxzZX07fSxjb21wb25lbnRzOntQaWNrZXJEcm9wZG93bjpwaWNrZXJfZHJvcGRvd259fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfY29sb3JfcGlja2VyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWNvbG9yX3BpY2tlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbWFpbi52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBjb2xvcl9waWNrZXJfc3JjX21haW5fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc19jb2xvcl9waWNrZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU1YzhhZGU3X3JlbmRlcixtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTVjOGFkZTdfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBjb2xvcl9waWNrZXJfc3JjX21haW5fYXBpO31jb2xvcl9waWNrZXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL21haW4udnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNvbG9yX3BpY2tlcl9zcmNfbWFpbj1jb2xvcl9waWNrZXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9jb2xvcl9waWNrZXJfc3JjX21haW4uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoY29sb3JfcGlja2VyX3NyY19tYWluLm5hbWUsY29sb3JfcGlja2VyX3NyY19tYWluKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY29sb3JfcGlja2VyPWNvbG9yX3BpY2tlcl9zcmNfbWFpbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YzY1NGRkOCYKdmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81YzY1NGRkOF9yZW5kZXI9ZnVuY3Rpb24gbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVjNjU0ZGQ4X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRyYW5zZmVyIn0sW19jKCJ0cmFuc2Zlci1wYW5lbCIsX3ZtLl9iKHtyZWY6ImxlZnRQYW5lbCIsYXR0cnM6e2RhdGE6X3ZtLnNvdXJjZURhdGEsdGl0bGU6X3ZtLnRpdGxlc1swXXx8X3ZtLnQoImVsLnRyYW5zZmVyLnRpdGxlcy4wIiksImRlZmF1bHQtY2hlY2tlZCI6X3ZtLmxlZnREZWZhdWx0Q2hlY2tlZCxwbGFjZWhvbGRlcjpfdm0uZmlsdGVyUGxhY2Vob2xkZXJ8fF92bS50KCJlbC50cmFuc2Zlci5maWx0ZXJQbGFjZWhvbGRlciIpfSxvbjp7ImNoZWNrZWQtY2hhbmdlIjpfdm0ub25Tb3VyY2VDaGVja2VkQ2hhbmdlfX0sInRyYW5zZmVyLXBhbmVsIixfdm0uJHByb3BzLGZhbHNlKSxbX3ZtLl90KCJsZWZ0LWZvb3RlciIpXSwyKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRyYW5zZmVyX19idXR0b25zIn0sW19jKCJlbC1idXR0b24iLHtjbGFzczpbImVsLXRyYW5zZmVyX19idXR0b24iLF92bS5oYXNCdXR0b25UZXh0cz8iaXMtd2l0aC10ZXh0cyI6IiJdLGF0dHJzOnt0eXBlOiJwcmltYXJ5IixkaXNhYmxlZDpfdm0ucmlnaHRDaGVja2VkLmxlbmd0aD09PTB9LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe3JldHVybiBfdm0uYWRkVG9MZWZ0KCRldmVudCk7fX19LFtfYygiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWFycm93LWxlZnQifSksX3ZtLmJ1dHRvblRleHRzWzBdIT09dW5kZWZpbmVkP19jKCJzcGFuIixbX3ZtLl92KF92bS5fcyhfdm0uYnV0dG9uVGV4dHNbMF0pKV0pOl92bS5fZSgpXSksX2MoImVsLWJ1dHRvbiIse2NsYXNzOlsiZWwtdHJhbnNmZXJfX2J1dHRvbiIsX3ZtLmhhc0J1dHRvblRleHRzPyJpcy13aXRoLXRleHRzIjoiIl0sYXR0cnM6e3R5cGU6InByaW1hcnkiLGRpc2FibGVkOl92bS5sZWZ0Q2hlY2tlZC5sZW5ndGg9PT0wfSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtyZXR1cm4gX3ZtLmFkZFRvUmlnaHQoJGV2ZW50KTt9fX0sW192bS5idXR0b25UZXh0c1sxXSE9PXVuZGVmaW5lZD9fYygic3BhbiIsW192bS5fdihfdm0uX3MoX3ZtLmJ1dHRvblRleHRzWzFdKSldKTpfdm0uX2UoKSxfYygiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWFycm93LXJpZ2h0In0pXSldLDEpLF9jKCJ0cmFuc2Zlci1wYW5lbCIsX3ZtLl9iKHtyZWY6InJpZ2h0UGFuZWwiLGF0dHJzOntkYXRhOl92bS50YXJnZXREYXRhLHRpdGxlOl92bS50aXRsZXNbMV18fF92bS50KCJlbC50cmFuc2Zlci50aXRsZXMuMSIpLCJkZWZhdWx0LWNoZWNrZWQiOl92bS5yaWdodERlZmF1bHRDaGVja2VkLHBsYWNlaG9sZGVyOl92bS5maWx0ZXJQbGFjZWhvbGRlcnx8X3ZtLnQoImVsLnRyYW5zZmVyLmZpbHRlclBsYWNlaG9sZGVyIil9LG9uOnsiY2hlY2tlZC1jaGFuZ2UiOl92bS5vblRhcmdldENoZWNrZWRDaGFuZ2V9fSwidHJhbnNmZXItcGFuZWwiLF92bS4kcHJvcHMsZmFsc2UpLFtfdm0uX3QoInJpZ2h0LWZvb3RlciIpXSwyKV0sMSk7fTt2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVjNjU0ZGQ4X3N0YXRpY1JlbmRlckZucz1bXTttYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWM2NTRkZDhfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YzY1NGRkOCYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvdHJhbnNmZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkZGFiOGJkJgp2YXIgdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGRhYjhiZF9yZW5kZXI9ZnVuY3Rpb24gdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGRhYjhiZF9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10cmFuc2Zlci1wYW5lbCJ9LFtfYygicCIse3N0YXRpY0NsYXNzOiJlbC10cmFuc2Zlci1wYW5lbF9faGVhZGVyIn0sW19jKCJlbC1jaGVja2JveCIse2F0dHJzOntpbmRldGVybWluYXRlOl92bS5pc0luZGV0ZXJtaW5hdGV9LG9uOntjaGFuZ2U6X3ZtLmhhbmRsZUFsbENoZWNrZWRDaGFuZ2V9LG1vZGVsOnt2YWx1ZTpfdm0uYWxsQ2hlY2tlZCxjYWxsYmFjazpmdW5jdGlvbiBjYWxsYmFjaygkJHYpe192bS5hbGxDaGVja2VkPSQkdjt9LGV4cHJlc3Npb246ImFsbENoZWNrZWQifX0sW192bS5fdigiXG4gICAgICAiK192bS5fcyhfdm0udGl0bGUpKyJcbiAgICAgICIpLF9jKCJzcGFuIixbX3ZtLl92KF92bS5fcyhfdm0uY2hlY2tlZFN1bW1hcnkpKV0pXSldLDEpLF9jKCJkaXYiLHtjbGFzczpbImVsLXRyYW5zZmVyLXBhbmVsX19ib2R5Iixfdm0uaGFzRm9vdGVyPyJpcy13aXRoLWZvb3RlciI6IiJdfSxbX3ZtLmZpbHRlcmFibGU/X2MoImVsLWlucHV0Iix7c3RhdGljQ2xhc3M6ImVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXIiLGF0dHJzOntzaXplOiJzbWFsbCIscGxhY2Vob2xkZXI6X3ZtLnBsYWNlaG9sZGVyfSxuYXRpdmVPbjp7bW91c2VlbnRlcjpmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCl7X3ZtLmlucHV0SG92ZXI9dHJ1ZTt9LG1vdXNlbGVhdmU6ZnVuY3Rpb24gbW91c2VsZWF2ZSgkZXZlbnQpe192bS5pbnB1dEhvdmVyPWZhbHNlO319LG1vZGVsOnt2YWx1ZTpfdm0ucXVlcnksY2FsbGJhY2s6ZnVuY3Rpb24gY2FsbGJhY2soJCR2KXtfdm0ucXVlcnk9JCR2O30sZXhwcmVzc2lvbjoicXVlcnkifX0sW19jKCJpIix7Y2xhc3M6WyJlbC1pbnB1dF9faWNvbiIsImVsLWljb24tIitfdm0uaW5wdXRJY29uXSxhdHRyczp7c2xvdDoicHJlZml4In0sb246e2NsaWNrOl92bS5jbGVhclF1ZXJ5fSxzbG90OiJwcmVmaXgifSldKTpfdm0uX2UoKSxfYygiZWwtY2hlY2tib3gtZ3JvdXAiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTohX3ZtLmhhc05vTWF0Y2gmJl92bS5kYXRhLmxlbmd0aD4wLGV4cHJlc3Npb246IiFoYXNOb01hdGNoICYmIGRhdGEubGVuZ3RoID4gMCJ9XSxzdGF0aWNDbGFzczoiZWwtdHJhbnNmZXItcGFuZWxfX2xpc3QiLGNsYXNzOnsiaXMtZmlsdGVyYWJsZSI6X3ZtLmZpbHRlcmFibGV9LG1vZGVsOnt2YWx1ZTpfdm0uY2hlY2tlZCxjYWxsYmFjazpmdW5jdGlvbiBjYWxsYmFjaygkJHYpe192bS5jaGVja2VkPSQkdjt9LGV4cHJlc3Npb246ImNoZWNrZWQifX0sX3ZtLl9sKF92bS5maWx0ZXJlZERhdGEsZnVuY3Rpb24oaXRlbSl7cmV0dXJuIF9jKCJlbC1jaGVja2JveCIse2tleTppdGVtW192bS5rZXlQcm9wXSxzdGF0aWNDbGFzczoiZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW0iLGF0dHJzOntsYWJlbDppdGVtW192bS5rZXlQcm9wXSxkaXNhYmxlZDppdGVtW192bS5kaXNhYmxlZFByb3BdfX0sW19jKCJvcHRpb24tY29udGVudCIse2F0dHJzOntvcHRpb246aXRlbX19KV0sMSk7fSksMSksX2MoInAiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTpfdm0uaGFzTm9NYXRjaCxleHByZXNzaW9uOiJoYXNOb01hdGNoIn1dLHN0YXRpY0NsYXNzOiJlbC10cmFuc2Zlci1wYW5lbF9fZW1wdHkifSxbX3ZtLl92KF92bS5fcyhfdm0udCgiZWwudHJhbnNmZXIubm9NYXRjaCIpKSldKSxfYygicCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOl92bS5kYXRhLmxlbmd0aD09PTAmJiFfdm0uaGFzTm9NYXRjaCxleHByZXNzaW9uOiJkYXRhLmxlbmd0aCA9PT0gMCAmJiAhaGFzTm9NYXRjaCJ9XSxzdGF0aWNDbGFzczoiZWwtdHJhbnNmZXItcGFuZWxfX2VtcHR5In0sW192bS5fdihfdm0uX3MoX3ZtLnQoImVsLnRyYW5zZmVyLm5vRGF0YSIpKSldKV0sMSksX3ZtLmhhc0Zvb3Rlcj9fYygicCIse3N0YXRpY0NsYXNzOiJlbC10cmFuc2Zlci1wYW5lbF9fZm9vdGVyIn0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTpfdm0uX2UoKV0pO307dmFyIHRyYW5zZmVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRkYWI4YmRfc3RhdGljUmVuZGVyRm5zPVtdO3RyYW5zZmVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRkYWI4YmRfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy90cmFuc2Zlci1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmRkYWI4YmQmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy90cmFuc2Zlci1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e21peGluczpbbG9jYWxlX2RlZmF1bHQuYV0sbmFtZTonRWxUcmFuc2ZlclBhbmVsJyxjb21wb25lbnROYW1lOidFbFRyYW5zZmVyUGFuZWwnLGNvbXBvbmVudHM6e0VsQ2hlY2tib3hHcm91cDpjaGVja2JveF9ncm91cF9kZWZhdWx0LmEsRWxDaGVja2JveDpjaGVja2JveF9kZWZhdWx0LmEsRWxJbnB1dDppbnB1dF9kZWZhdWx0LmEsT3B0aW9uQ29udGVudDp7cHJvcHM6e29wdGlvbjpPYmplY3R9LHJlbmRlcjpmdW5jdGlvbiByZW5kZXIoaCl7dmFyIGdldFBhcmVudD1mdW5jdGlvbiBnZXRQYXJlbnQodm0pe2lmKHZtLiRvcHRpb25zLmNvbXBvbmVudE5hbWU9PT0nRWxUcmFuc2ZlclBhbmVsJyl7cmV0dXJuIHZtO31lbHNlIGlmKHZtLiRwYXJlbnQpe3JldHVybiBnZXRQYXJlbnQodm0uJHBhcmVudCk7fWVsc2V7cmV0dXJuIHZtO319O3ZhciBwYW5lbD1nZXRQYXJlbnQodGhpcyk7dmFyIHRyYW5zZmVyPXBhbmVsLiRwYXJlbnR8fHBhbmVsO3JldHVybiBwYW5lbC5yZW5kZXJDb250ZW50P3BhbmVsLnJlbmRlckNvbnRlbnQoaCx0aGlzLm9wdGlvbik6dHJhbnNmZXIuJHNjb3BlZFNsb3RzLmRlZmF1bHQ/dHJhbnNmZXIuJHNjb3BlZFNsb3RzLmRlZmF1bHQoe29wdGlvbjp0aGlzLm9wdGlvbn0pOmgoJ3NwYW4nLFt0aGlzLm9wdGlvbltwYW5lbC5sYWJlbFByb3BdfHx0aGlzLm9wdGlvbltwYW5lbC5rZXlQcm9wXV0pO319fSxwcm9wczp7ZGF0YTp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJuW107fX0scmVuZGVyQ29udGVudDpGdW5jdGlvbixwbGFjZWhvbGRlcjpTdHJpbmcsdGl0bGU6U3RyaW5nLGZpbHRlcmFibGU6Qm9vbGVhbixmb3JtYXQ6T2JqZWN0LGZpbHRlck1ldGhvZDpGdW5jdGlvbixkZWZhdWx0Q2hlY2tlZDpBcnJheSxwcm9wczpPYmplY3R9LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntjaGVja2VkOltdLGFsbENoZWNrZWQ6ZmFsc2UscXVlcnk6JycsaW5wdXRIb3ZlcjpmYWxzZSxjaGVja0NoYW5nZUJ5VXNlcjp0cnVlfTt9LHdhdGNoOntjaGVja2VkOmZ1bmN0aW9uIGNoZWNrZWQodmFsLG9sZFZhbCl7dGhpcy51cGRhdGVBbGxDaGVja2VkKCk7aWYodGhpcy5jaGVja0NoYW5nZUJ5VXNlcil7dmFyIG1vdmVkS2V5cz12YWwuY29uY2F0KG9sZFZhbCkuZmlsdGVyKGZ1bmN0aW9uKHYpe3JldHVybiB2YWwuaW5kZXhPZih2KT09PS0xfHxvbGRWYWwuaW5kZXhPZih2KT09PS0xO30pO3RoaXMuJGVtaXQoJ2NoZWNrZWQtY2hhbmdlJyx2YWwsbW92ZWRLZXlzKTt9ZWxzZXt0aGlzLiRlbWl0KCdjaGVja2VkLWNoYW5nZScsdmFsKTt0aGlzLmNoZWNrQ2hhbmdlQnlVc2VyPXRydWU7fX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7dmFyIF90aGlzPXRoaXM7dmFyIGNoZWNrZWQ9W107dmFyIGZpbHRlcmVkRGF0YUtleXM9dGhpcy5maWx0ZXJlZERhdGEubWFwKGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBpdGVtW190aGlzLmtleVByb3BdO30pO3RoaXMuY2hlY2tlZC5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2lmKGZpbHRlcmVkRGF0YUtleXMuaW5kZXhPZihpdGVtKT4tMSl7Y2hlY2tlZC5wdXNoKGl0ZW0pO319KTt0aGlzLmNoZWNrQ2hhbmdlQnlVc2VyPWZhbHNlO3RoaXMuY2hlY2tlZD1jaGVja2VkO30sY2hlY2thYmxlRGF0YTpmdW5jdGlvbiBjaGVja2FibGVEYXRhKCl7dGhpcy51cGRhdGVBbGxDaGVja2VkKCk7fSxkZWZhdWx0Q2hlY2tlZDp7aW1tZWRpYXRlOnRydWUsaGFuZGxlcjpmdW5jdGlvbiBoYW5kbGVyKHZhbCxvbGRWYWwpe3ZhciBfdGhpczI9dGhpcztpZihvbGRWYWwmJnZhbC5sZW5ndGg9PT1vbGRWYWwubGVuZ3RoJiZ2YWwuZXZlcnkoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIG9sZFZhbC5pbmRleE9mKGl0ZW0pPi0xO30pKXJldHVybjt2YXIgY2hlY2tlZD1bXTt2YXIgY2hlY2thYmxlRGF0YUtleXM9dGhpcy5jaGVja2FibGVEYXRhLm1hcChmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbVtfdGhpczIua2V5UHJvcF07fSk7dmFsLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aWYoY2hlY2thYmxlRGF0YUtleXMuaW5kZXhPZihpdGVtKT4tMSl7Y2hlY2tlZC5wdXNoKGl0ZW0pO319KTt0aGlzLmNoZWNrQ2hhbmdlQnlVc2VyPWZhbHNlO3RoaXMuY2hlY2tlZD1jaGVja2VkO319fSxjb21wdXRlZDp7ZmlsdGVyZWREYXRhOmZ1bmN0aW9uIGZpbHRlcmVkRGF0YSgpe3ZhciBfdGhpczM9dGhpcztyZXR1cm4gdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbihpdGVtKXtpZih0eXBlb2YgX3RoaXMzLmZpbHRlck1ldGhvZD09PSdmdW5jdGlvbicpe3JldHVybiBfdGhpczMuZmlsdGVyTWV0aG9kKF90aGlzMy5xdWVyeSxpdGVtKTt9ZWxzZXt2YXIgbGFiZWw9aXRlbVtfdGhpczMubGFiZWxQcm9wXXx8aXRlbVtfdGhpczMua2V5UHJvcF0udG9TdHJpbmcoKTtyZXR1cm4gbGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKF90aGlzMy5xdWVyeS50b0xvd2VyQ2FzZSgpKT4tMTt9fSk7fSxjaGVja2FibGVEYXRhOmZ1bmN0aW9uIGNoZWNrYWJsZURhdGEoKXt2YXIgX3RoaXM0PXRoaXM7cmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhLmZpbHRlcihmdW5jdGlvbihpdGVtKXtyZXR1cm4haXRlbVtfdGhpczQuZGlzYWJsZWRQcm9wXTt9KTt9LGNoZWNrZWRTdW1tYXJ5OmZ1bmN0aW9uIGNoZWNrZWRTdW1tYXJ5KCl7dmFyIGNoZWNrZWRMZW5ndGg9dGhpcy5jaGVja2VkLmxlbmd0aDt2YXIgZGF0YUxlbmd0aD10aGlzLmRhdGEubGVuZ3RoO3ZhciBfZm9ybWF0PXRoaXMuZm9ybWF0LG5vQ2hlY2tlZD1fZm9ybWF0Lm5vQ2hlY2tlZCxoYXNDaGVja2VkPV9mb3JtYXQuaGFzQ2hlY2tlZDtpZihub0NoZWNrZWQmJmhhc0NoZWNrZWQpe3JldHVybiBjaGVja2VkTGVuZ3RoPjA/aGFzQ2hlY2tlZC5yZXBsYWNlKC9cJHtjaGVja2VkfS9nLGNoZWNrZWRMZW5ndGgpLnJlcGxhY2UoL1wke3RvdGFsfS9nLGRhdGFMZW5ndGgpOm5vQ2hlY2tlZC5yZXBsYWNlKC9cJHt0b3RhbH0vZyxkYXRhTGVuZ3RoKTt9ZWxzZXtyZXR1cm4gY2hlY2tlZExlbmd0aCsnLycrZGF0YUxlbmd0aDt9fSxpc0luZGV0ZXJtaW5hdGU6ZnVuY3Rpb24gaXNJbmRldGVybWluYXRlKCl7dmFyIGNoZWNrZWRMZW5ndGg9dGhpcy5jaGVja2VkLmxlbmd0aDtyZXR1cm4gY2hlY2tlZExlbmd0aD4wJiZjaGVja2VkTGVuZ3RoPHRoaXMuY2hlY2thYmxlRGF0YS5sZW5ndGg7fSxoYXNOb01hdGNoOmZ1bmN0aW9uIGhhc05vTWF0Y2goKXtyZXR1cm4gdGhpcy5xdWVyeS5sZW5ndGg+MCYmdGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoPT09MDt9LGlucHV0SWNvbjpmdW5jdGlvbiBpbnB1dEljb24oKXtyZXR1cm4gdGhpcy5xdWVyeS5sZW5ndGg+MCYmdGhpcy5pbnB1dEhvdmVyPydjaXJjbGUtY2xvc2UnOidzZWFyY2gnO30sbGFiZWxQcm9wOmZ1bmN0aW9uIGxhYmVsUHJvcCgpe3JldHVybiB0aGlzLnByb3BzLmxhYmVsfHwnbGFiZWwnO30sa2V5UHJvcDpmdW5jdGlvbiBrZXlQcm9wKCl7cmV0dXJuIHRoaXMucHJvcHMua2V5fHwna2V5Jzt9LGRpc2FibGVkUHJvcDpmdW5jdGlvbiBkaXNhYmxlZFByb3AoKXtyZXR1cm4gdGhpcy5wcm9wcy5kaXNhYmxlZHx8J2Rpc2FibGVkJzt9LGhhc0Zvb3RlcjpmdW5jdGlvbiBoYXNGb290ZXIoKXtyZXR1cm4hIXRoaXMuJHNsb3RzLmRlZmF1bHQ7fX0sbWV0aG9kczp7dXBkYXRlQWxsQ2hlY2tlZDpmdW5jdGlvbiB1cGRhdGVBbGxDaGVja2VkKCl7dmFyIF90aGlzNT10aGlzO3ZhciBjaGVja2FibGVEYXRhS2V5cz10aGlzLmNoZWNrYWJsZURhdGEubWFwKGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBpdGVtW190aGlzNS5rZXlQcm9wXTt9KTt0aGlzLmFsbENoZWNrZWQ9Y2hlY2thYmxlRGF0YUtleXMubGVuZ3RoPjAmJmNoZWNrYWJsZURhdGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBfdGhpczUuY2hlY2tlZC5pbmRleE9mKGl0ZW0pPi0xO30pO30saGFuZGxlQWxsQ2hlY2tlZENoYW5nZTpmdW5jdGlvbiBoYW5kbGVBbGxDaGVja2VkQ2hhbmdlKHZhbHVlKXt2YXIgX3RoaXM2PXRoaXM7dGhpcy5jaGVja2VkPXZhbHVlP3RoaXMuY2hlY2thYmxlRGF0YS5tYXAoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIGl0ZW1bX3RoaXM2LmtleVByb3BdO30pOltdO30sY2xlYXJRdWVyeTpmdW5jdGlvbiBjbGVhclF1ZXJ5KCl7aWYodGhpcy5pbnB1dEljb249PT0nY2lyY2xlLWNsb3NlJyl7dGhpcy5xdWVyeT0nJzt9fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJhbnNmZXIvc3JjL3RyYW5zZmVyLXBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189dHJhbnNmZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvdHJhbnNmZXItcGFuZWwudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgdHJhbnNmZXJfcGFuZWxfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGRhYjhiZF9yZW5kZXIsdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGRhYjhiZF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHRyYW5zZmVyX3BhbmVsX2FwaTt9dHJhbnNmZXJfcGFuZWxfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90cmFuc2Zlci9zcmMvdHJhbnNmZXItcGFuZWwudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHRyYW5zZmVyX3BhbmVsPXRyYW5zZmVyX3BhbmVsX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0cmFuc2Zlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxUcmFuc2ZlcicsbWl4aW5zOltlbWl0dGVyX2RlZmF1bHQuYSxsb2NhbGVfZGVmYXVsdC5hLG1pZ3JhdGluZ19kZWZhdWx0LmFdLGNvbXBvbmVudHM6e1RyYW5zZmVyUGFuZWw6dHJhbnNmZXJfcGFuZWwsRWxCdXR0b246YnV0dG9uX2RlZmF1bHQuYX0scHJvcHM6e2RhdGE6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybltdO319LHRpdGxlczp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJuW107fX0sYnV0dG9uVGV4dHM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybltdO319LGZpbHRlclBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZyxkZWZhdWx0OicnfSxmaWx0ZXJNZXRob2Q6RnVuY3Rpb24sbGVmdERlZmF1bHRDaGVja2VkOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm5bXTt9fSxyaWdodERlZmF1bHRDaGVja2VkOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm5bXTt9fSxyZW5kZXJDb250ZW50OkZ1bmN0aW9uLHZhbHVlOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm5bXTt9fSxmb3JtYXQ6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm57fTt9fSxmaWx0ZXJhYmxlOkJvb2xlYW4scHJvcHM6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXtyZXR1cm57bGFiZWw6J2xhYmVsJyxrZXk6J2tleScsZGlzYWJsZWQ6J2Rpc2FibGVkJ307fX0sdGFyZ2V0T3JkZXI6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J29yaWdpbmFsJ319LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntsZWZ0Q2hlY2tlZDpbXSxyaWdodENoZWNrZWQ6W119O30sY29tcHV0ZWQ6e2RhdGFPYmo6ZnVuY3Rpb24gZGF0YU9iaigpe3ZhciBrZXk9dGhpcy5wcm9wcy5rZXk7cmV0dXJuIHRoaXMuZGF0YS5yZWR1Y2UoZnVuY3Rpb24obyxjdXIpe3JldHVybihvW2N1cltrZXldXT1jdXIpJiZvO30se30pO30sc291cmNlRGF0YTpmdW5jdGlvbiBzb3VyY2VEYXRhKCl7dmFyIF90aGlzPXRoaXM7cmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIF90aGlzLnZhbHVlLmluZGV4T2YoaXRlbVtfdGhpcy5wcm9wcy5rZXldKT09PS0xO30pO30sdGFyZ2V0RGF0YTpmdW5jdGlvbiB0YXJnZXREYXRhKCl7dmFyIF90aGlzMj10aGlzO2lmKHRoaXMudGFyZ2V0T3JkZXI9PT0nb3JpZ2luYWwnKXtyZXR1cm4gdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbihpdGVtKXtyZXR1cm4gX3RoaXMyLnZhbHVlLmluZGV4T2YoaXRlbVtfdGhpczIucHJvcHMua2V5XSk+LTE7fSk7fWVsc2V7cmV0dXJuIHRoaXMudmFsdWUucmVkdWNlKGZ1bmN0aW9uKGFycixjdXIpe3ZhciB2YWw9X3RoaXMyLmRhdGFPYmpbY3VyXTtpZih2YWwpe2Fyci5wdXNoKHZhbCk7fXJldHVybiBhcnI7fSxbXSk7fX0saGFzQnV0dG9uVGV4dHM6ZnVuY3Rpb24gaGFzQnV0dG9uVGV4dHMoKXtyZXR1cm4gdGhpcy5idXR0b25UZXh0cy5sZW5ndGg9PT0yO319LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbiB2YWx1ZSh2YWwpe3RoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCdlbC5mb3JtLmNoYW5nZScsdmFsKTt9fSxtZXRob2RzOntnZXRNaWdyYXRpbmdDb25maWc6ZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCl7cmV0dXJue3Byb3BzOnsnZm9vdGVyLWZvcm1hdCc6J2Zvb3Rlci1mb3JtYXQgaXMgcmVuYW1lZCB0byBmb3JtYXQuJ319O30sb25Tb3VyY2VDaGVja2VkQ2hhbmdlOmZ1bmN0aW9uIG9uU291cmNlQ2hlY2tlZENoYW5nZSh2YWwsbW92ZWRLZXlzKXt0aGlzLmxlZnRDaGVja2VkPXZhbDtpZihtb3ZlZEtleXM9PT11bmRlZmluZWQpcmV0dXJuO3RoaXMuJGVtaXQoJ2xlZnQtY2hlY2stY2hhbmdlJyx2YWwsbW92ZWRLZXlzKTt9LG9uVGFyZ2V0Q2hlY2tlZENoYW5nZTpmdW5jdGlvbiBvblRhcmdldENoZWNrZWRDaGFuZ2UodmFsLG1vdmVkS2V5cyl7dGhpcy5yaWdodENoZWNrZWQ9dmFsO2lmKG1vdmVkS2V5cz09PXVuZGVmaW5lZClyZXR1cm47dGhpcy4kZW1pdCgncmlnaHQtY2hlY2stY2hhbmdlJyx2YWwsbW92ZWRLZXlzKTt9LGFkZFRvTGVmdDpmdW5jdGlvbiBhZGRUb0xlZnQoKXt2YXIgY3VycmVudFZhbHVlPXRoaXMudmFsdWUuc2xpY2UoKTt0aGlzLnJpZ2h0Q2hlY2tlZC5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe3ZhciBpbmRleD1jdXJyZW50VmFsdWUuaW5kZXhPZihpdGVtKTtpZihpbmRleD4tMSl7Y3VycmVudFZhbHVlLnNwbGljZShpbmRleCwxKTt9fSk7dGhpcy4kZW1pdCgnaW5wdXQnLGN1cnJlbnRWYWx1ZSk7dGhpcy4kZW1pdCgnY2hhbmdlJyxjdXJyZW50VmFsdWUsJ2xlZnQnLHRoaXMucmlnaHRDaGVja2VkKTt9LGFkZFRvUmlnaHQ6ZnVuY3Rpb24gYWRkVG9SaWdodCgpe3ZhciBfdGhpczM9dGhpczt2YXIgY3VycmVudFZhbHVlPXRoaXMudmFsdWUuc2xpY2UoKTt2YXIgaXRlbXNUb0JlTW92ZWQ9W107dmFyIGtleT10aGlzLnByb3BzLmtleTt0aGlzLmRhdGEuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt2YXIgaXRlbUtleT1pdGVtW2tleV07aWYoX3RoaXMzLmxlZnRDaGVja2VkLmluZGV4T2YoaXRlbUtleSk+LTEmJl90aGlzMy52YWx1ZS5pbmRleE9mKGl0ZW1LZXkpPT09LTEpe2l0ZW1zVG9CZU1vdmVkLnB1c2goaXRlbUtleSk7fX0pO2N1cnJlbnRWYWx1ZT10aGlzLnRhcmdldE9yZGVyPT09J3Vuc2hpZnQnP2l0ZW1zVG9CZU1vdmVkLmNvbmNhdChjdXJyZW50VmFsdWUpOmN1cnJlbnRWYWx1ZS5jb25jYXQoaXRlbXNUb0JlTW92ZWQpO3RoaXMuJGVtaXQoJ2lucHV0JyxjdXJyZW50VmFsdWUpO3RoaXMuJGVtaXQoJ2NoYW5nZScsY3VycmVudFZhbHVlLCdyaWdodCcsdGhpcy5sZWZ0Q2hlY2tlZCk7fSxjbGVhclF1ZXJ5OmZ1bmN0aW9uIGNsZWFyUXVlcnkod2hpY2gpe2lmKHdoaWNoPT09J2xlZnQnKXt0aGlzLiRyZWZzLmxlZnRQYW5lbC5xdWVyeT0nJzt9ZWxzZSBpZih3aGljaD09PSdyaWdodCcpe3RoaXMuJHJlZnMucmlnaHRQYW5lbC5xdWVyeT0nJzt9fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJhbnNmZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3RyYW5zZmVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXRyYW5zZmVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJhbnNmZXIvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgdHJhbnNmZXJfc3JjX21haW5fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc190cmFuc2Zlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWM2NTRkZDhfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81YzY1NGRkOF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHRyYW5zZmVyX3NyY19tYWluX2FwaTt9dHJhbnNmZXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90cmFuc2Zlci9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdHJhbnNmZXJfc3JjX21haW49dHJhbnNmZXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmFuc2Zlci9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3RyYW5zZmVyX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHRyYW5zZmVyX3NyY19tYWluLm5hbWUsdHJhbnNmZXJfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0cmFuc2Zlcj10cmFuc2Zlcl9zcmNfbWFpbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbnRhaW5lci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJmMTgxZDQmCnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWJmMTgxZDRfcmVuZGVyPWZ1bmN0aW9uIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmYxODFkNF9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInNlY3Rpb24iLHtzdGF0aWNDbGFzczoiZWwtY29udGFpbmVyIixjbGFzczp7ImlzLXZlcnRpY2FsIjpfdm0uaXNWZXJ0aWNhbH19LFtfdm0uX3QoImRlZmF1bHQiKV0sMik7fTt2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzViZjE4MWQ0X3N0YXRpY1JlbmRlckZucz1bXTttYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWJmMTgxZDRfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbnRhaW5lci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJmMTgxZDQmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbnRhaW5lci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY29udGFpbmVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbENvbnRhaW5lcicsY29tcG9uZW50TmFtZTonRWxDb250YWluZXInLHByb3BzOntkaXJlY3Rpb246U3RyaW5nfSxjb21wdXRlZDp7aXNWZXJ0aWNhbDpmdW5jdGlvbiBpc1ZlcnRpY2FsKCl7aWYodGhpcy5kaXJlY3Rpb249PT0ndmVydGljYWwnKXtyZXR1cm4gdHJ1ZTt9ZWxzZSBpZih0aGlzLmRpcmVjdGlvbj09PSdob3Jpem9udGFsJyl7cmV0dXJuIGZhbHNlO31yZXR1cm4gdGhpcy4kc2xvdHMmJnRoaXMuJHNsb3RzLmRlZmF1bHQ/dGhpcy4kc2xvdHMuZGVmYXVsdC5zb21lKGZ1bmN0aW9uKHZub2RlKXt2YXIgdGFnPXZub2RlLmNvbXBvbmVudE9wdGlvbnMmJnZub2RlLmNvbXBvbmVudE9wdGlvbnMudGFnO3JldHVybiB0YWc9PT0nZWwtaGVhZGVyJ3x8dGFnPT09J2VsLWZvb3Rlcic7fSk6ZmFsc2U7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29udGFpbmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19jb250YWluZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189Y29udGFpbmVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29udGFpbmVyL3NyYy9tYWluLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGNvbnRhaW5lcl9zcmNfbWFpbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhY2thZ2VzX2NvbnRhaW5lcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWJmMTgxZDRfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmYxODFkNF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGNvbnRhaW5lcl9zcmNfbWFpbl9hcGk7fWNvbnRhaW5lcl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2NvbnRhaW5lci9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY29udGFpbmVyX3NyY19tYWluPWNvbnRhaW5lcl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbnRhaW5lci9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2NvbnRhaW5lcl9zcmNfbWFpbi5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChjb250YWluZXJfc3JjX21haW4ubmFtZSxjb250YWluZXJfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19jb250YWluZXI9Y29udGFpbmVyX3NyY19tYWluOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaGVhZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYjI5NmFiMiYKdmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYjI5NmFiMl9yZW5kZXI9ZnVuY3Rpb24gbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJiMjk2YWIyX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiaGVhZGVyIix7c3RhdGljQ2xhc3M6ImVsLWhlYWRlciIsc3R5bGU6e2hlaWdodDpfdm0uaGVpZ2h0fX0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTt9O3ZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMmIyOTZhYjJfc3RhdGljUmVuZGVyRm5zPVtdO21haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYjI5NmFiMl9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaGVhZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYjI5NmFiMiYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaGVhZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBoZWFkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsSGVhZGVyJyxjb21wb25lbnROYW1lOidFbEhlYWRlcicscHJvcHM6e2hlaWdodDp7dHlwZTpTdHJpbmcsZGVmYXVsdDonNjBweCd9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9oZWFkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2hlYWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1oZWFkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9oZWFkZXIvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgaGVhZGVyX3NyY19tYWluX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQocGFja2FnZXNfaGVhZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYjI5NmFiMl9yZW5kZXIsbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJiMjk2YWIyX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgaGVhZGVyX3NyY19tYWluX2FwaTt9aGVhZGVyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvaGVhZGVyL3NyYy9tYWluLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBoZWFkZXJfc3JjX21haW49aGVhZGVyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaGVhZGVyL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovaGVhZGVyX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGhlYWRlcl9zcmNfbWFpbi5uYW1lLGhlYWRlcl9zcmNfbWFpbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGhlYWRlcj1oZWFkZXJfc3JjX21haW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9hc2lkZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDM0MTFkYmYmCnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDM0MTFkYmZfcmVuZGVyPWZ1bmN0aW9uIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzQxMWRiZl9yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImFzaWRlIix7c3RhdGljQ2xhc3M6ImVsLWFzaWRlIixzdHlsZTp7d2lkdGg6X3ZtLndpZHRofX0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTt9O3ZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDM0MTFkYmZfc3RhdGljUmVuZGVyRm5zPVtdO21haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzQxMWRiZl9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXNpZGUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAzNDExZGJmJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9hc2lkZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgYXNpZGVfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsQXNpZGUnLGNvbXBvbmVudE5hbWU6J0VsQXNpZGUnLHByb3BzOnt3aWR0aDp7dHlwZTpTdHJpbmcsZGVmYXVsdDonMzAwcHgnfX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXNpZGUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2FzaWRlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWFzaWRlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXNpZGUvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgYXNpZGVfc3JjX21haW5fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc19hc2lkZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDM0MTFkYmZfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzQxMWRiZl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGFzaWRlX3NyY19tYWluX2FwaTt9YXNpZGVfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9hc2lkZS9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgYXNpZGVfc3JjX21haW49YXNpZGVfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hc2lkZS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2FzaWRlX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGFzaWRlX3NyY19tYWluLm5hbWUsYXNpZGVfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBhc2lkZT1hc2lkZV9zcmNfbWFpbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21haW4vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhM2E3NDA2Jgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhM2E3NDA2X3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMmEzYTc0MDZfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJtYWluIix7c3RhdGljQ2xhc3M6ImVsLW1haW4ifSxbX3ZtLl90KCJkZWZhdWx0IildLDIpO307dmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYTNhNzQwNl9zdGF0aWNSZW5kZXJGbnM9W107bWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhM2E3NDA2X3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tYWluL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYTNhNzQwNiYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWFpbi9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgbWFpbl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxNYWluJyxjb21wb25lbnROYW1lOidFbE1haW4nfTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21haW4vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX21haW5fc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189bWFpbl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21haW4vc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgbWFpbl9zcmNfbWFpbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhY2thZ2VzX21haW5fc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhM2E3NDA2X3JlbmRlcixtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMmEzYTc0MDZfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBtYWluX3NyY19tYWluX2FwaTt9bWFpbl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL21haW4vc3JjL21haW4udnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIG1haW5fc3JjX21haW49bWFpbl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21haW4vaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9tYWluX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KG1haW5fc3JjX21haW4ubmFtZSxtYWluX3NyY19tYWluKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfbWFpbj1tYWluX3NyY19tYWluOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZm9vdGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04MDIxMDMzOCYKdmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF84MDIxMDMzOF9yZW5kZXI9ZnVuY3Rpb24gbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgwMjEwMzM4X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZm9vdGVyIix7c3RhdGljQ2xhc3M6ImVsLWZvb3RlciIsc3R5bGU6e2hlaWdodDpfdm0uaGVpZ2h0fX0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTt9O3ZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfODAyMTAzMzhfc3RhdGljUmVuZGVyRm5zPVtdO21haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF84MDIxMDMzOF9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9vdGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04MDIxMDMzOCYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZm9vdGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBmb290ZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsRm9vdGVyJyxjb21wb25lbnROYW1lOidFbEZvb3RlcicscHJvcHM6e2hlaWdodDp7dHlwZTpTdHJpbmcsZGVmYXVsdDonNjBweCd9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb290ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2Zvb3Rlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1mb290ZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb290ZXIvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgZm9vdGVyX3NyY19tYWluX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQocGFja2FnZXNfZm9vdGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF84MDIxMDMzOF9yZW5kZXIsbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgwMjEwMzM4X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgZm9vdGVyX3NyY19tYWluX2FwaTt9Zm9vdGVyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZm9vdGVyL3NyYy9tYWluLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBmb290ZXJfc3JjX21haW49Zm9vdGVyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9vdGVyL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovZm9vdGVyX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGZvb3Rlcl9zcmNfbWFpbi5uYW1lLGZvb3Rlcl9zcmNfbWFpbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGZvb3Rlcj1mb290ZXJfc3JjX21haW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGltZWxpbmUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHRpbWVsaW5lX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFRpbWVsaW5lJyxwcm9wczp7cmV2ZXJzZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ZmFsc2V9fSxwcm92aWRlOmZ1bmN0aW9uIHByb3ZpZGUoKXtyZXR1cm57dGltZWxpbmU6dGhpc307fSxyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKCl7dmFyIGg9YXJndW1lbnRzWzBdO3ZhciByZXZlcnNlPXRoaXMucmV2ZXJzZTt2YXIgY2xhc3Nlcz17J2VsLXRpbWVsaW5lJzp0cnVlLCdpcy1yZXZlcnNlJzpyZXZlcnNlfTt2YXIgc2xvdHM9dGhpcy4kc2xvdHMuZGVmYXVsdHx8W107aWYocmV2ZXJzZSl7c2xvdHM9c2xvdHMucmV2ZXJzZSgpO31yZXR1cm4gaCgndWwnLHsnY2xhc3MnOmNsYXNzZXN9LFtzbG90c10pO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZWxpbmUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3RpbWVsaW5lX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXRpbWVsaW5lX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZWxpbmUvc3JjL21haW4udnVlCnZhciBtYWluX3JlbmRlcixtYWluX3N0YXRpY1JlbmRlckZuczsvKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIHRpbWVsaW5lX3NyY19tYWluX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQocGFja2FnZXNfdGltZWxpbmVfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sbWFpbl9yZW5kZXIsbWFpbl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHRpbWVsaW5lX3NyY19tYWluX2FwaTt9dGltZWxpbmVfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90aW1lbGluZS9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGltZWxpbmVfc3JjX21haW49dGltZWxpbmVfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90aW1lbGluZS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3RpbWVsaW5lX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHRpbWVsaW5lX3NyY19tYWluLm5hbWUsdGltZWxpbmVfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciB0aW1lbGluZT10aW1lbGluZV9zcmNfbWFpbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RpbWVsaW5lL3NyYy9pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MWE2OWU1MCYKdmFyIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF82MWE2OWU1MF9yZW5kZXI9ZnVuY3Rpb24gaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYxYTY5ZTUwX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygibGkiLHtzdGF0aWNDbGFzczoiZWwtdGltZWxpbmUtaXRlbSJ9LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWVsaW5lLWl0ZW1fX3RhaWwifSksIV92bS4kc2xvdHMuZG90P19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZWxpbmUtaXRlbV9fbm9kZSIsY2xhc3M6WyJlbC10aW1lbGluZS1pdGVtX19ub2RlLS0iKyhfdm0uc2l6ZXx8IiIpLCJlbC10aW1lbGluZS1pdGVtX19ub2RlLS0iKyhfdm0udHlwZXx8IiIpXSxzdHlsZTp7YmFja2dyb3VuZENvbG9yOl92bS5jb2xvcn19LFtfdm0uaWNvbj9fYygiaSIse3N0YXRpY0NsYXNzOiJlbC10aW1lbGluZS1pdGVtX19pY29uIixjbGFzczpfdm0uaWNvbn0pOl92bS5fZSgpXSk6X3ZtLl9lKCksX3ZtLiRzbG90cy5kb3Q/X2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lbGluZS1pdGVtX19kb3QifSxbX3ZtLl90KCJkb3QiKV0sMik6X3ZtLl9lKCksX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lbGluZS1pdGVtX193cmFwcGVyIn0sWyFfdm0uaGlkZVRpbWVzdGFtcCYmX3ZtLnBsYWNlbWVudD09PSJ0b3AiP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZWxpbmUtaXRlbV9fdGltZXN0YW1wIGlzLXRvcCJ9LFtfdm0uX3YoIlxuICAgICAgIitfdm0uX3MoX3ZtLnRpbWVzdGFtcCkrIlxuICAgICIpXSk6X3ZtLl9lKCksX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lbGluZS1pdGVtX19jb250ZW50In0sW192bS5fdCgiZGVmYXVsdCIpXSwyKSwhX3ZtLmhpZGVUaW1lc3RhbXAmJl92bS5wbGFjZW1lbnQ9PT0iYm90dG9tIj9fYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWVsaW5lLWl0ZW1fX3RpbWVzdGFtcCBpcy1ib3R0b20ifSxbX3ZtLl92KCJcbiAgICAgICIrX3ZtLl9zKF92bS50aW1lc3RhbXApKyJcbiAgICAiKV0pOl92bS5fZSgpXSldKTt9O3ZhciBpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjFhNjllNTBfc3RhdGljUmVuZGVyRm5zPVtdO2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF82MWE2OWU1MF9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZWxpbmUvc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYxYTY5ZTUwJgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90aW1lbGluZS9zcmMvaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGltZWxpbmVfc3JjX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsVGltZWxpbmVJdGVtJyxpbmplY3Q6Wyd0aW1lbGluZSddLHByb3BzOnt0aW1lc3RhbXA6U3RyaW5nLGhpZGVUaW1lc3RhbXA6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxwbGFjZW1lbnQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J2JvdHRvbSd9LHR5cGU6U3RyaW5nLGNvbG9yOlN0cmluZyxzaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0Oidub3JtYWwnfSxpY29uOlN0cmluZ319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZWxpbmUvc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3RpbWVsaW5lX3NyY19pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXRpbWVsaW5lX3NyY19pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZWxpbmUvc3JjL2l0ZW0udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgc3JjX2l0ZW1fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc190aW1lbGluZV9zcmNfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjFhNjllNTBfcmVuZGVyLGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF82MWE2OWU1MF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHNyY19pdGVtX2FwaTt9c3JjX2l0ZW1fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90aW1lbGluZS9zcmMvaXRlbS52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgdGltZWxpbmVfc3JjX2l0ZW09c3JjX2l0ZW1fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90aW1lbGluZS1pdGVtL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovdGltZWxpbmVfc3JjX2l0ZW0uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQodGltZWxpbmVfc3JjX2l0ZW0ubmFtZSx0aW1lbGluZV9zcmNfaXRlbSk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHRpbWVsaW5lX2l0ZW09dGltZWxpbmVfc3JjX2l0ZW07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9saW5rL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMWNmM2I2NSYKdmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMWNmM2I2NV9yZW5kZXI9ZnVuY3Rpb24gbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAxY2YzYjY1X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiYSIsX3ZtLl9iKHtjbGFzczpbImVsLWxpbmsiLF92bS50eXBlPyJlbC1saW5rLS0iK192bS50eXBlOiIiLF92bS5kaXNhYmxlZCYmImlzLWRpc2FibGVkIixfdm0udW5kZXJsaW5lJiYhX3ZtLmRpc2FibGVkJiYiaXMtdW5kZXJsaW5lIl0sYXR0cnM6e2hyZWY6X3ZtLmRpc2FibGVkP251bGw6X3ZtLmhyZWZ9LG9uOntjbGljazpfdm0uaGFuZGxlQ2xpY2t9fSwiYSIsX3ZtLiRhdHRycyxmYWxzZSksW192bS5pY29uP19jKCJpIix7Y2xhc3M6X3ZtLmljb259KTpfdm0uX2UoKSxfdm0uJHNsb3RzLmRlZmF1bHQ/X2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtbGluay0taW5uZXIifSxbX3ZtLl90KCJkZWZhdWx0IildLDIpOl92bS5fZSgpLF92bS4kc2xvdHMuaWNvbj9bX3ZtLiRzbG90cy5pY29uP192bS5fdCgiaWNvbiIpOl92bS5fZSgpXTpfdm0uX2UoKV0sMik7fTt2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAxY2YzYjY1X3N0YXRpY1JlbmRlckZucz1bXTttYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDFjZjNiNjVfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2xpbmsvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAxY2YzYjY1JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9saW5rL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBsaW5rX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbExpbmsnLHByb3BzOnt0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OidkZWZhdWx0J30sdW5kZXJsaW5lOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxkaXNhYmxlZDpCb29sZWFuLGhyZWY6U3RyaW5nLGljb246U3RyaW5nfSxtZXRob2RzOntoYW5kbGVDbGljazpmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCl7aWYoIXRoaXMuZGlzYWJsZWQpe2lmKCF0aGlzLmhyZWYpe3RoaXMuJGVtaXQoJ2NsaWNrJyxldmVudCk7fX19fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9saW5rL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWNrYWdlc19saW5rX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWxpbmtfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9saW5rL3NyYy9tYWluLnZ1ZQovKiBub3JtYWxpemUgY29tcG9uZW50ICovdmFyIGxpbmtfc3JjX21haW5fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc19saW5rX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMWNmM2I2NV9yZW5kZXIsbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAxY2YzYjY1X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgbGlua19zcmNfbWFpbl9hcGk7fWxpbmtfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9saW5rL3NyYy9tYWluLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBsaW5rX3NyY19tYWluPWxpbmtfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9saW5rL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovbGlua19zcmNfbWFpbi5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChsaW5rX3NyY19tYWluLm5hbWUsbGlua19zcmNfbWFpbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2xpbms9bGlua19zcmNfbWFpbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RpdmlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmYTAyYTdlJmZ1bmN0aW9uYWw9dHJ1ZSYKdmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZmEwMmE3ZV9mdW5jdGlvbmFsX3RydWVfcmVuZGVyPWZ1bmN0aW9uIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZmEwMmE3ZV9mdW5jdGlvbmFsX3RydWVfcmVuZGVyKF9oLF92bSl7dmFyIF9jPV92bS5fYztyZXR1cm4gX2MoImRpdiIsX3ZtLl9nKF92bS5fYih7Y2xhc3M6W192bS5kYXRhLnN0YXRpY0NsYXNzLCJlbC1kaXZpZGVyIiwiZWwtZGl2aWRlci0tIitfdm0ucHJvcHMuZGlyZWN0aW9uXX0sImRpdiIsX3ZtLmRhdGEuYXR0cnMsZmFsc2UpLF92bS5saXN0ZW5lcnMpLFtfdm0uc2xvdHMoKS5kZWZhdWx0JiZfdm0ucHJvcHMuZGlyZWN0aW9uIT09InZlcnRpY2FsIj9fYygiZGl2Iix7Y2xhc3M6WyJlbC1kaXZpZGVyX190ZXh0IiwiaXMtIitfdm0ucHJvcHMuY29udGVudFBvc2l0aW9uXX0sW192bS5fdCgiZGVmYXVsdCIpXSwyKTpfdm0uX2UoKV0pO307dmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZmEwMmE3ZV9mdW5jdGlvbmFsX3RydWVfc3RhdGljUmVuZGVyRm5zPVtdO21haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZmEwMmE3ZV9mdW5jdGlvbmFsX3RydWVfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RpdmlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmYTAyYTdlJmZ1bmN0aW9uYWw9dHJ1ZSYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGl2aWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZGl2aWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxEaXZpZGVyJyxwcm9wczp7ZGlyZWN0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0Oidob3Jpem9udGFsJyx2YWxpZGF0b3I6ZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCl7cmV0dXJuWydob3Jpem9udGFsJywndmVydGljYWwnXS5pbmRleE9mKHZhbCkhPT0tMTt9fSxjb250ZW50UG9zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J2NlbnRlcicsdmFsaWRhdG9yOmZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpe3JldHVyblsnbGVmdCcsJ2NlbnRlcicsJ3JpZ2h0J10uaW5kZXhPZih2YWwpIT09LTE7fX19fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RpdmlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2RpdmlkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189ZGl2aWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RpdmlkZXIvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgZGl2aWRlcl9zcmNfbWFpbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhY2thZ2VzX2RpdmlkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmYTAyYTdlX2Z1bmN0aW9uYWxfdHJ1ZV9yZW5kZXIsbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmYTAyYTdlX2Z1bmN0aW9uYWxfdHJ1ZV9zdGF0aWNSZW5kZXJGbnMsdHJ1ZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgZGl2aWRlcl9zcmNfbWFpbl9hcGk7fWRpdmlkZXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kaXZpZGVyL3NyYy9tYWluLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBkaXZpZGVyX3NyY19tYWluPWRpdmlkZXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kaXZpZGVyL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovZGl2aWRlcl9zcmNfbWFpbi5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChkaXZpZGVyX3NyY19tYWluLm5hbWUsZGl2aWRlcl9zcmNfbWFpbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGRpdmlkZXI9ZGl2aWRlcl9zcmNfbWFpbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2ltYWdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NGQ4NGE3YyYKdmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NGQ4NGE3Y19yZW5kZXI9ZnVuY3Rpb24gbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ0ZDg0YTdjX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWltYWdlIn0sW192bS5sb2FkaW5nP192bS5fdCgicGxhY2Vob2xkZXIiLFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWltYWdlX19wbGFjZWhvbGRlciJ9KV0pOl92bS5lcnJvcj9fdm0uX3QoImVycm9yIixbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1pbWFnZV9fZXJyb3IifSxbX3ZtLl92KF92bS5fcyhfdm0udCgiZWwuaW1hZ2UuZXJyb3IiKSkpXSldKTpfYygiaW1nIixfdm0uX2coX3ZtLl9iKHtzdGF0aWNDbGFzczoiZWwtaW1hZ2VfX2lubmVyIixjbGFzczp7ImVsLWltYWdlX19pbm5lci0tY2VudGVyIjpfdm0uYWxpZ25DZW50ZXIsImVsLWltYWdlX19wcmV2aWV3Ijpfdm0ucHJldmlld30sc3R5bGU6X3ZtLmltYWdlU3R5bGUsYXR0cnM6e3NyYzpfdm0uc3JjfSxvbjp7Y2xpY2s6X3ZtLmNsaWNrSGFuZGxlcn19LCJpbWciLF92bS4kYXR0cnMsZmFsc2UpLF92bS4kbGlzdGVuZXJzKSksX3ZtLnByZXZpZXc/W192bS5zaG93Vmlld2VyP19jKCJpbWFnZS12aWV3ZXIiLHthdHRyczp7InotaW5kZXgiOl92bS56SW5kZXgsImluaXRpYWwtaW5kZXgiOl92bS5pbWFnZUluZGV4LCJvbi1jbG9zZSI6X3ZtLmNsb3NlVmlld2VyLCJ1cmwtbGlzdCI6X3ZtLnByZXZpZXdTcmNMaXN0fX0pOl92bS5fZSgpXTpfdm0uX2UoKV0sMik7fTt2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ0ZDg0YTdjX3N0YXRpY1JlbmRlckZucz1bXTttYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDRkODRhN2NfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ltYWdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NGQ4NGE3YyYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pbWFnZS9zcmMvaW1hZ2Utdmlld2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZTczYjMwNyYKdmFyIGltYWdlX3ZpZXdlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVlNzNiMzA3X3JlbmRlcj1mdW5jdGlvbiBpbWFnZV92aWV3ZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZTczYjMwN19yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToidmlld2VyLWZhZGUifX0sW19jKCJkaXYiLHtyZWY6ImVsLWltYWdlLXZpZXdlcl9fd3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLWltYWdlLXZpZXdlcl9fd3JhcHBlciIsc3R5bGU6eyJ6LWluZGV4Ijpfdm0uekluZGV4fSxhdHRyczp7dGFiaW5kZXg6Ii0xIn19LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWltYWdlLXZpZXdlcl9fbWFzayJ9KSxfYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1pbWFnZS12aWV3ZXJfX2J0biBlbC1pbWFnZS12aWV3ZXJfX2Nsb3NlIixvbjp7Y2xpY2s6X3ZtLmhpZGV9fSxbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1jaXJjbGUtY2xvc2UifSldKSwhX3ZtLmlzU2luZ2xlP1tfYygic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1pbWFnZS12aWV3ZXJfX2J0biBlbC1pbWFnZS12aWV3ZXJfX3ByZXYiLGNsYXNzOnsiaXMtZGlzYWJsZWQiOiFfdm0uaW5maW5pdGUmJl92bS5pc0ZpcnN0fSxvbjp7Y2xpY2s6X3ZtLnByZXZ9fSxbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1hcnJvdy1sZWZ0In0pXSksX2MoInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtaW1hZ2Utdmlld2VyX19idG4gZWwtaW1hZ2Utdmlld2VyX19uZXh0IixjbGFzczp7ImlzLWRpc2FibGVkIjohX3ZtLmluZmluaXRlJiZfdm0uaXNMYXN0fSxvbjp7Y2xpY2s6X3ZtLm5leHR9fSxbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1hcnJvdy1yaWdodCJ9KV0pXTpfdm0uX2UoKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWltYWdlLXZpZXdlcl9fYnRuIGVsLWltYWdlLXZpZXdlcl9fYWN0aW9ucyJ9LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWltYWdlLXZpZXdlcl9fYWN0aW9uc19faW5uZXIifSxbX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi16b29tLW91dCIsb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLmhhbmRsZUFjdGlvbnMoInpvb21PdXQiKTt9fX0pLF9jKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tem9vbS1pbiIsb246e2NsaWNrOmZ1bmN0aW9uIGNsaWNrKCRldmVudCl7X3ZtLmhhbmRsZUFjdGlvbnMoInpvb21JbiIpO319fSksX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaW1hZ2Utdmlld2VyX19hY3Rpb25zX19kaXZpZGVyIn0pLF9jKCJpIix7Y2xhc3M6X3ZtLm1vZGUuaWNvbixvbjp7Y2xpY2s6X3ZtLnRvZ2dsZU1vZGV9fSksX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaW1hZ2Utdmlld2VyX19hY3Rpb25zX19kaXZpZGVyIn0pLF9jKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tcmVmcmVzaC1sZWZ0Iixvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtfdm0uaGFuZGxlQWN0aW9ucygiYW50aWNsb2NlbGlzZSIpO319fSksX2MoImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1yZWZyZXNoLXJpZ2h0Iixvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtfdm0uaGFuZGxlQWN0aW9ucygiY2xvY2VsaXNlIik7fX19KV0pXSksX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1pbWFnZS12aWV3ZXJfX2NhbnZhcyJ9LF92bS5fbChfdm0udXJsTGlzdCxmdW5jdGlvbih1cmwsaSl7cmV0dXJuIGk9PT1fdm0uaW5kZXg/X2MoImltZyIse2tleTp1cmwscmVmOiJpbWciLHJlZkluRm9yOnRydWUsc3RhdGljQ2xhc3M6ImVsLWltYWdlLXZpZXdlcl9faW1nIixzdHlsZTpfdm0uaW1nU3R5bGUsYXR0cnM6e3NyYzpfdm0uY3VycmVudEltZ30sb246e2xvYWQ6X3ZtLmhhbmRsZUltZ0xvYWQsZXJyb3I6X3ZtLmhhbmRsZUltZ0Vycm9yLG1vdXNlZG93bjpfdm0uaGFuZGxlTW91c2VEb3dufX0pOl92bS5fZSgpO30pLDApXSwyKV0pO307dmFyIGltYWdlX3ZpZXdlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVlNzNiMzA3X3N0YXRpY1JlbmRlckZucz1bXTtpbWFnZV92aWV3ZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZTczYjMwN19yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW1hZ2Uvc3JjL2ltYWdlLXZpZXdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWU3M2IzMDcmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2ltYWdlL3NyYy9pbWFnZS12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgp2YXIgaW1hZ2Vfdmlld2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZXh0ZW5kcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9YXJndW1lbnRzW2ldO2Zvcih2YXIga2V5IGluIHNvdXJjZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSxrZXkpKXt0YXJnZXRba2V5XT1zb3VyY2Vba2V5XTt9fX1yZXR1cm4gdGFyZ2V0O307Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KdmFyIE1vZGU9e0NPTlRBSU46e25hbWU6J2NvbnRhaW4nLGljb246J2VsLWljb24tZnVsbC1zY3JlZW4nfSxPUklHSU5BTDp7bmFtZTonb3JpZ2luYWwnLGljb246J2VsLWljb24tYy1zY2FsZS10by1vcmlnaW5hbCd9fTt2YXIgbW91c2V3aGVlbEV2ZW50TmFtZT1PYmplY3QodXRpbF9bImlzRmlyZWZveCJdKSgpPydET01Nb3VzZVNjcm9sbCc6J21vdXNld2hlZWwnOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgaW1hZ2Vfdmlld2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidlbEltYWdlVmlld2VyJyxwcm9wczp7dXJsTGlzdDp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJuW107fX0sekluZGV4Ont0eXBlOk51bWJlcixkZWZhdWx0OjIwMDB9LG9uU3dpdGNoOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXt9fSxvbkNsb3NlOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZnVuY3Rpb24gX2RlZmF1bHQoKXt9fSxpbml0aWFsSW5kZXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH19LGRhdGE6ZnVuY3Rpb24gZGF0YSgpe3JldHVybntpbmRleDp0aGlzLmluaXRpYWxJbmRleCxpc1Nob3c6ZmFsc2UsaW5maW5pdGU6dHJ1ZSxsb2FkaW5nOmZhbHNlLG1vZGU6TW9kZS5DT05UQUlOLHRyYW5zZm9ybTp7c2NhbGU6MSxkZWc6MCxvZmZzZXRYOjAsb2Zmc2V0WTowLGVuYWJsZVRyYW5zaXRpb246ZmFsc2V9fTt9LGNvbXB1dGVkOntpc1NpbmdsZTpmdW5jdGlvbiBpc1NpbmdsZSgpe3JldHVybiB0aGlzLnVybExpc3QubGVuZ3RoPD0xO30saXNGaXJzdDpmdW5jdGlvbiBpc0ZpcnN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT0wO30saXNMYXN0OmZ1bmN0aW9uIGlzTGFzdCgpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy51cmxMaXN0Lmxlbmd0aC0xO30sY3VycmVudEltZzpmdW5jdGlvbiBjdXJyZW50SW1nKCl7cmV0dXJuIHRoaXMudXJsTGlzdFt0aGlzLmluZGV4XTt9LGltZ1N0eWxlOmZ1bmN0aW9uIGltZ1N0eWxlKCl7dmFyIF90cmFuc2Zvcm09dGhpcy50cmFuc2Zvcm0sc2NhbGU9X3RyYW5zZm9ybS5zY2FsZSxkZWc9X3RyYW5zZm9ybS5kZWcsb2Zmc2V0WD1fdHJhbnNmb3JtLm9mZnNldFgsb2Zmc2V0WT1fdHJhbnNmb3JtLm9mZnNldFksZW5hYmxlVHJhbnNpdGlvbj1fdHJhbnNmb3JtLmVuYWJsZVRyYW5zaXRpb247dmFyIHN0eWxlPXt0cmFuc2Zvcm06J3NjYWxlKCcrc2NhbGUrJykgcm90YXRlKCcrZGVnKydkZWcpJyx0cmFuc2l0aW9uOmVuYWJsZVRyYW5zaXRpb24/J3RyYW5zZm9ybSAuM3MnOicnLCdtYXJnaW4tbGVmdCc6b2Zmc2V0WCsncHgnLCdtYXJnaW4tdG9wJzpvZmZzZXRZKydweCd9O2lmKHRoaXMubW9kZT09PU1vZGUuQ09OVEFJTil7c3R5bGUubWF4V2lkdGg9c3R5bGUubWF4SGVpZ2h0PScxMDAlJzt9cmV0dXJuIHN0eWxlO319LHdhdGNoOntpbmRleDp7aGFuZGxlcjpmdW5jdGlvbiBoYW5kbGVyKHZhbCl7dGhpcy5yZXNldCgpO3RoaXMub25Td2l0Y2godmFsKTt9fSxjdXJyZW50SW1nOmZ1bmN0aW9uIGN1cnJlbnRJbWcodmFsKXt2YXIgX3RoaXM9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbihfKXt2YXIgJGltZz1fdGhpcy4kcmVmcy5pbWdbMF07aWYoISRpbWcuY29tcGxldGUpe190aGlzLmxvYWRpbmc9dHJ1ZTt9fSk7fX0sbWV0aG9kczp7aGlkZTpmdW5jdGlvbiBoaWRlKCl7dGhpcy5kZXZpY2VTdXBwb3J0VW5pbnN0YWxsKCk7dGhpcy5vbkNsb3NlKCk7fSxkZXZpY2VTdXBwb3J0SW5zdGFsbDpmdW5jdGlvbiBkZXZpY2VTdXBwb3J0SW5zdGFsbCgpe3ZhciBfdGhpczI9dGhpczt0aGlzLl9rZXlEb3duSGFuZGxlcj1PYmplY3QodXRpbF9bInJhZlRocm90dGxlIl0pKGZ1bmN0aW9uKGUpe3ZhciBrZXlDb2RlPWUua2V5Q29kZTtzd2l0Y2goa2V5Q29kZSl7Ly8gRVNDCmNhc2UgMjc6X3RoaXMyLmhpZGUoKTticmVhazsvLyBTUEFDRQpjYXNlIDMyOl90aGlzMi50b2dnbGVNb2RlKCk7YnJlYWs7Ly8gTEVGVF9BUlJPVwpjYXNlIDM3Ol90aGlzMi5wcmV2KCk7YnJlYWs7Ly8gVVBfQVJST1cKY2FzZSAzODpfdGhpczIuaGFuZGxlQWN0aW9ucygnem9vbUluJyk7YnJlYWs7Ly8gUklHSFRfQVJST1cKY2FzZSAzOTpfdGhpczIubmV4dCgpO2JyZWFrOy8vIERPV05fQVJST1cKY2FzZSA0MDpfdGhpczIuaGFuZGxlQWN0aW9ucygnem9vbU91dCcpO2JyZWFrO319KTt0aGlzLl9tb3VzZVdoZWVsSGFuZGxlcj1PYmplY3QodXRpbF9bInJhZlRocm90dGxlIl0pKGZ1bmN0aW9uKGUpe3ZhciBkZWx0YT1lLndoZWVsRGVsdGE/ZS53aGVlbERlbHRhOi1lLmRldGFpbDtpZihkZWx0YT4wKXtfdGhpczIuaGFuZGxlQWN0aW9ucygnem9vbUluJyx7em9vbVJhdGU6MC4wMTUsZW5hYmxlVHJhbnNpdGlvbjpmYWxzZX0pO31lbHNle190aGlzMi5oYW5kbGVBY3Rpb25zKCd6b29tT3V0Jyx7em9vbVJhdGU6MC4wMTUsZW5hYmxlVHJhbnNpdGlvbjpmYWxzZX0pO319KTtPYmplY3QoZG9tX1sib24iXSkoZG9jdW1lbnQsJ2tleWRvd24nLHRoaXMuX2tleURvd25IYW5kbGVyKTtPYmplY3QoZG9tX1sib24iXSkoZG9jdW1lbnQsbW91c2V3aGVlbEV2ZW50TmFtZSx0aGlzLl9tb3VzZVdoZWVsSGFuZGxlcik7fSxkZXZpY2VTdXBwb3J0VW5pbnN0YWxsOmZ1bmN0aW9uIGRldmljZVN1cHBvcnRVbmluc3RhbGwoKXtPYmplY3QoZG9tX1sib2ZmIl0pKGRvY3VtZW50LCdrZXlkb3duJyx0aGlzLl9rZXlEb3duSGFuZGxlcik7T2JqZWN0KGRvbV9bIm9mZiJdKShkb2N1bWVudCxtb3VzZXdoZWVsRXZlbnROYW1lLHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyKTt0aGlzLl9rZXlEb3duSGFuZGxlcj1udWxsO3RoaXMuX21vdXNlV2hlZWxIYW5kbGVyPW51bGw7fSxoYW5kbGVJbWdMb2FkOmZ1bmN0aW9uIGhhbmRsZUltZ0xvYWQoZSl7dGhpcy5sb2FkaW5nPWZhbHNlO30saGFuZGxlSW1nRXJyb3I6ZnVuY3Rpb24gaGFuZGxlSW1nRXJyb3IoZSl7dGhpcy5sb2FkaW5nPWZhbHNlO2UudGFyZ2V0LmFsdD0n5Yqg6L295aSx6LSlJzt9LGhhbmRsZU1vdXNlRG93bjpmdW5jdGlvbiBoYW5kbGVNb3VzZURvd24oZSl7dmFyIF90aGlzMz10aGlzO2lmKHRoaXMubG9hZGluZ3x8ZS5idXR0b24hPT0wKXJldHVybjt2YXIgX3RyYW5zZm9ybTI9dGhpcy50cmFuc2Zvcm0sb2Zmc2V0WD1fdHJhbnNmb3JtMi5vZmZzZXRYLG9mZnNldFk9X3RyYW5zZm9ybTIub2Zmc2V0WTt2YXIgc3RhcnRYPWUucGFnZVg7dmFyIHN0YXJ0WT1lLnBhZ2VZO3RoaXMuX2RyYWdIYW5kbGVyPU9iamVjdCh1dGlsX1sicmFmVGhyb3R0bGUiXSkoZnVuY3Rpb24oZXYpe190aGlzMy50cmFuc2Zvcm0ub2Zmc2V0WD1vZmZzZXRYK2V2LnBhZ2VYLXN0YXJ0WDtfdGhpczMudHJhbnNmb3JtLm9mZnNldFk9b2Zmc2V0WStldi5wYWdlWS1zdGFydFk7fSk7T2JqZWN0KGRvbV9bIm9uIl0pKGRvY3VtZW50LCdtb3VzZW1vdmUnLHRoaXMuX2RyYWdIYW5kbGVyKTtPYmplY3QoZG9tX1sib24iXSkoZG9jdW1lbnQsJ21vdXNldXAnLGZ1bmN0aW9uKGV2KXtPYmplY3QoZG9tX1sib2ZmIl0pKGRvY3VtZW50LCdtb3VzZW1vdmUnLF90aGlzMy5fZHJhZ0hhbmRsZXIpO30pO2UucHJldmVudERlZmF1bHQoKTt9LHJlc2V0OmZ1bmN0aW9uIHJlc2V0KCl7dGhpcy50cmFuc2Zvcm09e3NjYWxlOjEsZGVnOjAsb2Zmc2V0WDowLG9mZnNldFk6MCxlbmFibGVUcmFuc2l0aW9uOmZhbHNlfTt9LHRvZ2dsZU1vZGU6ZnVuY3Rpb24gdG9nZ2xlTW9kZSgpe2lmKHRoaXMubG9hZGluZylyZXR1cm47dmFyIG1vZGVOYW1lcz1PYmplY3Qua2V5cyhNb2RlKTt2YXIgbW9kZVZhbHVlcz1PYmplY3QudmFsdWVzKE1vZGUpO3ZhciBpbmRleD1tb2RlVmFsdWVzLmluZGV4T2YodGhpcy5tb2RlKTt2YXIgbmV4dEluZGV4PShpbmRleCsxKSVtb2RlTmFtZXMubGVuZ3RoO3RoaXMubW9kZT1Nb2RlW21vZGVOYW1lc1tuZXh0SW5kZXhdXTt0aGlzLnJlc2V0KCk7fSxwcmV2OmZ1bmN0aW9uIHByZXYoKXtpZih0aGlzLmlzRmlyc3QmJiF0aGlzLmluZmluaXRlKXJldHVybjt2YXIgbGVuPXRoaXMudXJsTGlzdC5sZW5ndGg7dGhpcy5pbmRleD0odGhpcy5pbmRleC0xK2xlbiklbGVuO30sbmV4dDpmdW5jdGlvbiBuZXh0KCl7aWYodGhpcy5pc0xhc3QmJiF0aGlzLmluZmluaXRlKXJldHVybjt2YXIgbGVuPXRoaXMudXJsTGlzdC5sZW5ndGg7dGhpcy5pbmRleD0odGhpcy5pbmRleCsxKSVsZW47fSxoYW5kbGVBY3Rpb25zOmZ1bmN0aW9uIGhhbmRsZUFjdGlvbnMoYWN0aW9uKXt2YXIgb3B0aW9ucz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMV06e307aWYodGhpcy5sb2FkaW5nKXJldHVybjt2YXIgX3pvb21SYXRlJHJvdGF0ZURlZyRlPWltYWdlX3ZpZXdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2V4dGVuZHMoe3pvb21SYXRlOjAuMixyb3RhdGVEZWc6OTAsZW5hYmxlVHJhbnNpdGlvbjp0cnVlfSxvcHRpb25zKSx6b29tUmF0ZT1fem9vbVJhdGUkcm90YXRlRGVnJGUuem9vbVJhdGUscm90YXRlRGVnPV96b29tUmF0ZSRyb3RhdGVEZWckZS5yb3RhdGVEZWcsZW5hYmxlVHJhbnNpdGlvbj1fem9vbVJhdGUkcm90YXRlRGVnJGUuZW5hYmxlVHJhbnNpdGlvbjt2YXIgdHJhbnNmb3JtPXRoaXMudHJhbnNmb3JtO3N3aXRjaChhY3Rpb24pe2Nhc2Unem9vbU91dCc6aWYodHJhbnNmb3JtLnNjYWxlPjAuMil7dHJhbnNmb3JtLnNjYWxlPXBhcnNlRmxvYXQoKHRyYW5zZm9ybS5zY2FsZS16b29tUmF0ZSkudG9GaXhlZCgzKSk7fWJyZWFrO2Nhc2Unem9vbUluJzp0cmFuc2Zvcm0uc2NhbGU9cGFyc2VGbG9hdCgodHJhbnNmb3JtLnNjYWxlK3pvb21SYXRlKS50b0ZpeGVkKDMpKTticmVhaztjYXNlJ2Nsb2NlbGlzZSc6dHJhbnNmb3JtLmRlZys9cm90YXRlRGVnO2JyZWFrO2Nhc2UnYW50aWNsb2NlbGlzZSc6dHJhbnNmb3JtLmRlZy09cm90YXRlRGVnO2JyZWFrO310cmFuc2Zvcm0uZW5hYmxlVHJhbnNpdGlvbj1lbmFibGVUcmFuc2l0aW9uO319LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe3RoaXMuZGV2aWNlU3VwcG9ydEluc3RhbGwoKTsvLyBhZGQgdGFiaW5kZXggdGhlbiB3cmFwcGVyIGNhbiBiZSBmb2N1c2FibGUgdmlhIEphdmFzY3JpcHQKLy8gZm9jdXMgd3JhcHBlciBzbyBhcnJvdyBrZXkgY2FuJ3QgY2F1c2UgaW5uZXIgc2Nyb2xsIGJlaGF2aW9yIHVuZGVybmVhdGgKdGhpcy4kcmVmc1snZWwtaW1hZ2Utdmlld2VyX193cmFwcGVyJ10uZm9jdXMoKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ltYWdlL3NyYy9pbWFnZS12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19pbWFnZV92aWV3ZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189aW1hZ2Vfdmlld2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW1hZ2Uvc3JjL2ltYWdlLXZpZXdlci52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBpbWFnZV92aWV3ZXJfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfaW1hZ2Vfdmlld2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGltYWdlX3ZpZXdlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVlNzNiMzA3X3JlbmRlcixpbWFnZV92aWV3ZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZTczYjMwN19zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGltYWdlX3ZpZXdlcl9hcGk7fWltYWdlX3ZpZXdlcl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2ltYWdlL3NyYy9pbWFnZS12aWV3ZXIudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGltYWdlX3ZpZXdlcj1pbWFnZV92aWV3ZXJfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW1hZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwp2YXIgaXNTdXBwb3J0T2JqZWN0Rml0PWZ1bmN0aW9uIGlzU3VwcG9ydE9iamVjdEZpdCgpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub2JqZWN0Rml0IT09dW5kZWZpbmVkO307dmFyIE9iamVjdEZpdD17Tk9ORTonbm9uZScsQ09OVEFJTjonY29udGFpbicsQ09WRVI6J2NvdmVyJyxGSUxMOidmaWxsJyxTQ0FMRV9ET1dOOidzY2FsZS1kb3duJ307dmFyIHByZXZPdmVyZmxvdz0nJzsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGltYWdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbEltYWdlJyxtaXhpbnM6W2xvY2FsZV9kZWZhdWx0LmFdLGluaGVyaXRBdHRyczpmYWxzZSxjb21wb25lbnRzOntJbWFnZVZpZXdlcjppbWFnZV92aWV3ZXJ9LHByb3BzOntzcmM6U3RyaW5nLGZpdDpTdHJpbmcsbGF6eTpCb29sZWFuLHNjcm9sbENvbnRhaW5lcjp7fSxwcmV2aWV3U3JjTGlzdDp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uIF9kZWZhdWx0KCl7cmV0dXJuW107fX0sekluZGV4Ont0eXBlOk51bWJlcixkZWZhdWx0OjIwMDB9fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57bG9hZGluZzp0cnVlLGVycm9yOmZhbHNlLHNob3c6IXRoaXMubGF6eSxpbWFnZVdpZHRoOjAsaW1hZ2VIZWlnaHQ6MCxzaG93Vmlld2VyOmZhbHNlfTt9LGNvbXB1dGVkOntpbWFnZVN0eWxlOmZ1bmN0aW9uIGltYWdlU3R5bGUoKXt2YXIgZml0PXRoaXMuZml0O2lmKCF0aGlzLiRpc1NlcnZlciYmZml0KXtyZXR1cm4gaXNTdXBwb3J0T2JqZWN0Rml0KCk/eydvYmplY3QtZml0JzpmaXR9OnRoaXMuZ2V0SW1hZ2VTdHlsZShmaXQpO31yZXR1cm57fTt9LGFsaWduQ2VudGVyOmZ1bmN0aW9uIGFsaWduQ2VudGVyKCl7cmV0dXJuIXRoaXMuJGlzU2VydmVyJiYhaXNTdXBwb3J0T2JqZWN0Rml0KCkmJnRoaXMuZml0IT09T2JqZWN0Rml0LkZJTEw7fSxwcmV2aWV3OmZ1bmN0aW9uIHByZXZpZXcoKXt2YXIgcHJldmlld1NyY0xpc3Q9dGhpcy5wcmV2aWV3U3JjTGlzdDtyZXR1cm4gQXJyYXkuaXNBcnJheShwcmV2aWV3U3JjTGlzdCkmJnByZXZpZXdTcmNMaXN0Lmxlbmd0aD4wO30saW1hZ2VJbmRleDpmdW5jdGlvbiBpbWFnZUluZGV4KCl7dmFyIHByZXZpZXdJbmRleD0wO3ZhciBzcmNJbmRleD10aGlzLnByZXZpZXdTcmNMaXN0LmluZGV4T2YodGhpcy5zcmMpO2lmKHNyY0luZGV4Pj0wKXtwcmV2aWV3SW5kZXg9c3JjSW5kZXg7fXJldHVybiBwcmV2aWV3SW5kZXg7fX0sd2F0Y2g6e3NyYzpmdW5jdGlvbiBzcmModmFsKXt0aGlzLnNob3cmJnRoaXMubG9hZEltYWdlKCk7fSxzaG93OmZ1bmN0aW9uIHNob3codmFsKXt2YWwmJnRoaXMubG9hZEltYWdlKCk7fX0sbW91bnRlZDpmdW5jdGlvbiBtb3VudGVkKCl7aWYodGhpcy5sYXp5KXt0aGlzLmFkZExhenlMb2FkTGlzdGVuZXIoKTt9ZWxzZXt0aGlzLmxvYWRJbWFnZSgpO319LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpe3RoaXMubGF6eSYmdGhpcy5yZW1vdmVMYXp5TG9hZExpc3RlbmVyKCk7fSxtZXRob2RzOntsb2FkSW1hZ2U6ZnVuY3Rpb24gbG9hZEltYWdlKCl7dmFyIF90aGlzPXRoaXM7aWYodGhpcy4kaXNTZXJ2ZXIpcmV0dXJuOy8vIHJlc2V0IHN0YXR1cwp0aGlzLmxvYWRpbmc9dHJ1ZTt0aGlzLmVycm9yPWZhbHNlO3ZhciBpbWc9bmV3IEltYWdlKCk7aW1nLm9ubG9hZD1mdW5jdGlvbihlKXtyZXR1cm4gX3RoaXMuaGFuZGxlTG9hZChlLGltZyk7fTtpbWcub25lcnJvcj10aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcyk7Ly8gYmluZCBodG1sIGF0dHJzCi8vIHNvIGl0IGNhbiBiZWhhdmUgY29uc2lzdGVudGx5Ck9iamVjdC5rZXlzKHRoaXMuJGF0dHJzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7dmFyIHZhbHVlPV90aGlzLiRhdHRyc1trZXldO2ltZy5zZXRBdHRyaWJ1dGUoa2V5LHZhbHVlKTt9KTtpbWcuc3JjPXRoaXMuc3JjO30saGFuZGxlTG9hZDpmdW5jdGlvbiBoYW5kbGVMb2FkKGUsaW1nKXt0aGlzLmltYWdlV2lkdGg9aW1nLndpZHRoO3RoaXMuaW1hZ2VIZWlnaHQ9aW1nLmhlaWdodDt0aGlzLmxvYWRpbmc9ZmFsc2U7dGhpcy5lcnJvcj1mYWxzZTt9LGhhbmRsZUVycm9yOmZ1bmN0aW9uIGhhbmRsZUVycm9yKGUpe3RoaXMubG9hZGluZz1mYWxzZTt0aGlzLmVycm9yPXRydWU7dGhpcy4kZW1pdCgnZXJyb3InLGUpO30saGFuZGxlTGF6eUxvYWQ6ZnVuY3Rpb24gaGFuZGxlTGF6eUxvYWQoKXtpZihPYmplY3QoZG9tX1siaXNJbkNvbnRhaW5lciJdKSh0aGlzLiRlbCx0aGlzLl9zY3JvbGxDb250YWluZXIpKXt0aGlzLnNob3c9dHJ1ZTt0aGlzLnJlbW92ZUxhenlMb2FkTGlzdGVuZXIoKTt9fSxhZGRMYXp5TG9hZExpc3RlbmVyOmZ1bmN0aW9uIGFkZExhenlMb2FkTGlzdGVuZXIoKXtpZih0aGlzLiRpc1NlcnZlcilyZXR1cm47dmFyIHNjcm9sbENvbnRhaW5lcj10aGlzLnNjcm9sbENvbnRhaW5lcjt2YXIgX3Njcm9sbENvbnRhaW5lcj1udWxsO2lmKE9iamVjdCh0eXBlc19bImlzSHRtbEVsZW1lbnQiXSkoc2Nyb2xsQ29udGFpbmVyKSl7X3Njcm9sbENvbnRhaW5lcj1zY3JvbGxDb250YWluZXI7fWVsc2UgaWYoT2JqZWN0KHR5cGVzX1siaXNTdHJpbmciXSkoc2Nyb2xsQ29udGFpbmVyKSl7X3Njcm9sbENvbnRhaW5lcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNjcm9sbENvbnRhaW5lcik7fWVsc2V7X3Njcm9sbENvbnRhaW5lcj1PYmplY3QoZG9tX1siZ2V0U2Nyb2xsQ29udGFpbmVyIl0pKHRoaXMuJGVsKTt9aWYoX3Njcm9sbENvbnRhaW5lcil7dGhpcy5fc2Nyb2xsQ29udGFpbmVyPV9zY3JvbGxDb250YWluZXI7dGhpcy5fbGF6eUxvYWRIYW5kbGVyPXRocm90dGxlX2RlZmF1bHQoKSgyMDAsdGhpcy5oYW5kbGVMYXp5TG9hZCk7T2JqZWN0KGRvbV9bIm9uIl0pKF9zY3JvbGxDb250YWluZXIsJ3Njcm9sbCcsdGhpcy5fbGF6eUxvYWRIYW5kbGVyKTt0aGlzLmhhbmRsZUxhenlMb2FkKCk7fX0scmVtb3ZlTGF6eUxvYWRMaXN0ZW5lcjpmdW5jdGlvbiByZW1vdmVMYXp5TG9hZExpc3RlbmVyKCl7dmFyIF9zY3JvbGxDb250YWluZXI9dGhpcy5fc2Nyb2xsQ29udGFpbmVyLF9sYXp5TG9hZEhhbmRsZXI9dGhpcy5fbGF6eUxvYWRIYW5kbGVyO2lmKHRoaXMuJGlzU2VydmVyfHwhX3Njcm9sbENvbnRhaW5lcnx8IV9sYXp5TG9hZEhhbmRsZXIpcmV0dXJuO09iamVjdChkb21fWyJvZmYiXSkoX3Njcm9sbENvbnRhaW5lciwnc2Nyb2xsJyxfbGF6eUxvYWRIYW5kbGVyKTt0aGlzLl9zY3JvbGxDb250YWluZXI9bnVsbDt0aGlzLl9sYXp5TG9hZEhhbmRsZXI9bnVsbDt9LC8qKgogICAgICogc2ltdWxhdGUgb2JqZWN0LWZpdCBiZWhhdmlvciB0byBjb21wYXRpYmxlIHdpdGggSUUxMSBhbmQgb3RoZXIgYnJvd3NlcnMgd2hpY2ggbm90IHN1cHBvcnQgb2JqZWN0LWZpdAogICAgICovZ2V0SW1hZ2VTdHlsZTpmdW5jdGlvbiBnZXRJbWFnZVN0eWxlKGZpdCl7dmFyIGltYWdlV2lkdGg9dGhpcy5pbWFnZVdpZHRoLGltYWdlSGVpZ2h0PXRoaXMuaW1hZ2VIZWlnaHQ7dmFyIF8kZWw9dGhpcy4kZWwsY29udGFpbmVyV2lkdGg9XyRlbC5jbGllbnRXaWR0aCxjb250YWluZXJIZWlnaHQ9XyRlbC5jbGllbnRIZWlnaHQ7aWYoIWltYWdlV2lkdGh8fCFpbWFnZUhlaWdodHx8IWNvbnRhaW5lcldpZHRofHwhY29udGFpbmVySGVpZ2h0KXJldHVybnt9O3ZhciB2ZXJ0aWNhbD1pbWFnZVdpZHRoL2ltYWdlSGVpZ2h0PDE7aWYoZml0PT09T2JqZWN0Rml0LlNDQUxFX0RPV04pe3ZhciBpc1NtYWxsZXI9aW1hZ2VXaWR0aDxjb250YWluZXJXaWR0aCYmaW1hZ2VIZWlnaHQ8Y29udGFpbmVySGVpZ2h0O2ZpdD1pc1NtYWxsZXI/T2JqZWN0Rml0Lk5PTkU6T2JqZWN0Rml0LkNPTlRBSU47fXN3aXRjaChmaXQpe2Nhc2UgT2JqZWN0Rml0Lk5PTkU6cmV0dXJue3dpZHRoOidhdXRvJyxoZWlnaHQ6J2F1dG8nfTtjYXNlIE9iamVjdEZpdC5DT05UQUlOOnJldHVybiB2ZXJ0aWNhbD97d2lkdGg6J2F1dG8nfTp7aGVpZ2h0OidhdXRvJ307Y2FzZSBPYmplY3RGaXQuQ09WRVI6cmV0dXJuIHZlcnRpY2FsP3toZWlnaHQ6J2F1dG8nfTp7d2lkdGg6J2F1dG8nfTtkZWZhdWx0OnJldHVybnt9O319LGNsaWNrSGFuZGxlcjpmdW5jdGlvbiBjbGlja0hhbmRsZXIoKXsvLyBkb24ndCBzaG93IHZpZXdlciB3aGVuIHByZXZpZXcgaXMgZmFsc2UKaWYoIXRoaXMucHJldmlldyl7cmV0dXJuO30vLyBwcmV2ZW50IGJvZHkgc2Nyb2xsCnByZXZPdmVyZmxvdz1kb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93O2RvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9J2hpZGRlbic7dGhpcy5zaG93Vmlld2VyPXRydWU7fSxjbG9zZVZpZXdlcjpmdW5jdGlvbiBjbG9zZVZpZXdlcigpe2RvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9cHJldk92ZXJmbG93O3RoaXMuc2hvd1ZpZXdlcj1mYWxzZTt9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbWFnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfaW1hZ2Vfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189aW1hZ2Vfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbWFnZS9zcmMvbWFpbi52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBpbWFnZV9zcmNfbWFpbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhY2thZ2VzX2ltYWdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NGQ4NGE3Y19yZW5kZXIsbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ0ZDg0YTdjX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgaW1hZ2Vfc3JjX21haW5fYXBpO31pbWFnZV9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2ltYWdlL3NyYy9tYWluLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBpbWFnZV9zcmNfbWFpbj1pbWFnZV9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ltYWdlL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovaW1hZ2Vfc3JjX21haW4uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQoaW1hZ2Vfc3JjX21haW4ubmFtZSxpbWFnZV9zcmNfbWFpbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2ltYWdlPWltYWdlX3NyY19tYWluOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZkOTc1NmJlJgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZkOTc1NmJlX3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmQ5NzU2YmVfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY2FsZW5kYXIifSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jYWxlbmRhcl9faGVhZGVyIn0sW19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY2FsZW5kYXJfX3RpdGxlIn0sW192bS5fdigiXG4gICAgICAiK192bS5fcyhfdm0uaTE4bkRhdGUpKyJcbiAgICAiKV0pLF92bS52YWxpZGF0ZWRSYW5nZS5sZW5ndGg9PT0wP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY2FsZW5kYXJfX2J1dHRvbi1ncm91cCJ9LFtfYygiZWwtYnV0dG9uLWdyb3VwIixbX2MoImVsLWJ1dHRvbiIse2F0dHJzOnt0eXBlOiJwbGFpbiIsc2l6ZToibWluaSJ9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5zZWxlY3REYXRlKCJwcmV2LW1vbnRoIik7fX19LFtfdm0uX3YoIlxuICAgICAgICAgICIrX3ZtLl9zKF92bS50KCJlbC5kYXRlcGlja2VyLnByZXZNb250aCIpKSsiXG4gICAgICAgICIpXSksX2MoImVsLWJ1dHRvbiIse2F0dHJzOnt0eXBlOiJwbGFpbiIsc2l6ZToibWluaSJ9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5zZWxlY3REYXRlKCJ0b2RheSIpO319fSxbX3ZtLl92KCJcbiAgICAgICAgICAiK192bS5fcyhfdm0udCgiZWwuZGF0ZXBpY2tlci50b2RheSIpKSsiXG4gICAgICAgICIpXSksX2MoImVsLWJ1dHRvbiIse2F0dHJzOnt0eXBlOiJwbGFpbiIsc2l6ZToibWluaSJ9LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpe192bS5zZWxlY3REYXRlKCJuZXh0LW1vbnRoIik7fX19LFtfdm0uX3YoIlxuICAgICAgICAgICIrX3ZtLl9zKF92bS50KCJlbC5kYXRlcGlja2VyLm5leHRNb250aCIpKSsiXG4gICAgICAgICIpXSldLDEpXSwxKTpfdm0uX2UoKV0pLF92bS52YWxpZGF0ZWRSYW5nZS5sZW5ndGg9PT0wP19jKCJkaXYiLHtrZXk6Im5vLXJhbmdlIixzdGF0aWNDbGFzczoiZWwtY2FsZW5kYXJfX2JvZHkifSxbX2MoImRhdGUtdGFibGUiLHthdHRyczp7ZGF0ZTpfdm0uZGF0ZSwic2VsZWN0ZWQtZGF5Ijpfdm0ucmVhbFNlbGVjdGVkRGF5LCJmaXJzdC1kYXktb2Ytd2VlayI6X3ZtLnJlYWxGaXJzdERheU9mV2Vla30sb246e3BpY2s6X3ZtLnBpY2tEYXl9fSldLDEpOl9jKCJkaXYiLHtrZXk6Imhhcy1yYW5nZSIsc3RhdGljQ2xhc3M6ImVsLWNhbGVuZGFyX19ib2R5In0sX3ZtLl9sKF92bS52YWxpZGF0ZWRSYW5nZSxmdW5jdGlvbihyYW5nZSxpbmRleCl7cmV0dXJuIF9jKCJkYXRlLXRhYmxlIix7a2V5OmluZGV4LGF0dHJzOntkYXRlOnJhbmdlWzBdLCJzZWxlY3RlZC1kYXkiOl92bS5yZWFsU2VsZWN0ZWREYXkscmFuZ2U6cmFuZ2UsImhpZGUtaGVhZGVyIjppbmRleCE9PTAsImZpcnN0LWRheS1vZi13ZWVrIjpfdm0ucmVhbEZpcnN0RGF5T2ZXZWVrfSxvbjp7cGljazpfdm0ucGlja0RheX19KTt9KSwxKV0pO307dmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZDk3NTZiZV9zdGF0aWNSZW5kZXJGbnM9W107bWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZkOTc1NmJlX3JlbmRlci5fd2l0aFN0cmlwcGVkPXRydWU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYWxlbmRhci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmQ5NzU2YmUmCi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL3V0aWxzL2RhdGUiCnZhciBkYXRlXz1fX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTt2YXIgZGF0ZV9kZWZhdWx0PS8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZGF0ZV8pOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NhbGVuZGFyL3NyYy9kYXRlLXRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17cHJvcHM6e3NlbGVjdGVkRGF5OlN0cmluZywvLyBmb3JtYXRlZCBkYXRlIHl5eXktTU0tZGQKcmFuZ2U6e3R5cGU6QXJyYXksdmFsaWRhdG9yOmZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpe2lmKCEodmFsJiZ2YWwubGVuZ3RoKSlyZXR1cm4gdHJ1ZTt2YXIgc3RhcnQ9dmFsWzBdLGVuZD12YWxbMV07cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJ2YWxpZGF0ZVJhbmdlSW5PbmVNb250aCJdKShzdGFydCxlbmQpO319LGRhdGU6RGF0ZSxoaWRlSGVhZGVyOkJvb2xlYW4sZmlyc3REYXlPZldlZWs6TnVtYmVyfSxpbmplY3Q6WydlbENhbGVuZGFyJ10sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue1dFRUtfREFZUzpPYmplY3QoZGF0ZV91dGlsX1siZ2V0STE4blNldHRpbmdzIl0pKCkuZGF5TmFtZXN9O30sbWV0aG9kczp7dG9OZXN0ZWRBcnI6ZnVuY3Rpb24gdG9OZXN0ZWRBcnIoZGF5cyl7cmV0dXJuIE9iamVjdChkYXRlX3V0aWxfWyJyYW5nZSJdKShkYXlzLmxlbmd0aC83KS5tYXAoZnVuY3Rpb24oXyxpbmRleCl7dmFyIHN0YXJ0PWluZGV4Kjc7cmV0dXJuIGRheXMuc2xpY2Uoc3RhcnQsc3RhcnQrNyk7fSk7fSxnZXRGb3JtYXRlRGF0ZTpmdW5jdGlvbiBnZXRGb3JtYXRlRGF0ZShkYXksdHlwZSl7aWYoIWRheXx8WydwcmV2JywnY3VycmVudCcsJ25leHQnXS5pbmRleE9mKHR5cGUpPT09LTEpe3Rocm93IG5ldyBFcnJvcignaW52YWxpZCBkYXkgb3IgdHlwZScpO312YXIgcHJlZml4PXRoaXMuY3VyTW9udGhEYXRlUHJlZml4O2lmKHR5cGU9PT0ncHJldicpe3ByZWZpeD10aGlzLnByZXZNb250aERhdGVQcmVmaXg7fWVsc2UgaWYodHlwZT09PSduZXh0Jyl7cHJlZml4PXRoaXMubmV4dE1vbnRoRGF0ZVByZWZpeDt9ZGF5PSgnMDAnK2RheSkuc2xpY2UoLTIpO3JldHVybiBwcmVmaXgrJy0nK2RheTt9LGdldENlbGxDbGFzczpmdW5jdGlvbiBnZXRDZWxsQ2xhc3MoX3JlZil7dmFyIHRleHQ9X3JlZi50ZXh0LHR5cGU9X3JlZi50eXBlO3ZhciBjbGFzc2VzPVt0eXBlXTtpZih0eXBlPT09J2N1cnJlbnQnKXt2YXIgZGF0ZT10aGlzLmdldEZvcm1hdGVEYXRlKHRleHQsdHlwZSk7aWYoZGF0ZT09PXRoaXMuc2VsZWN0ZWREYXkpe2NsYXNzZXMucHVzaCgnaXMtc2VsZWN0ZWQnKTt9aWYoZGF0ZT09PXRoaXMuZm9ybWF0ZWRUb2RheSl7Y2xhc3Nlcy5wdXNoKCdpcy10b2RheScpO319cmV0dXJuIGNsYXNzZXM7fSxwaWNrRGF5OmZ1bmN0aW9uIHBpY2tEYXkoX3JlZjIpe3ZhciB0ZXh0PV9yZWYyLnRleHQsdHlwZT1fcmVmMi50eXBlO3ZhciBkYXRlPXRoaXMuZ2V0Rm9ybWF0ZURhdGUodGV4dCx0eXBlKTt0aGlzLiRlbWl0KCdwaWNrJyxkYXRlKTt9LGNlbGxSZW5kZXJQcm94eTpmdW5jdGlvbiBjZWxsUmVuZGVyUHJveHkoX3JlZjMpe3ZhciB0ZXh0PV9yZWYzLnRleHQsdHlwZT1fcmVmMy50eXBlO3ZhciBoPXRoaXMuJGNyZWF0ZUVsZW1lbnQ7dmFyIHJlbmRlcj10aGlzLmVsQ2FsZW5kYXIuJHNjb3BlZFNsb3RzLmRhdGVDZWxsO2lmKCFyZW5kZXIpcmV0dXJuIGgoJ3NwYW4nLFt0ZXh0XSk7dmFyIGRheT10aGlzLmdldEZvcm1hdGVEYXRlKHRleHQsdHlwZSk7dmFyIGRhdGU9bmV3IERhdGUoZGF5KTt2YXIgZGF0YT17aXNTZWxlY3RlZDp0aGlzLnNlbGVjdGVkRGF5PT09ZGF5LHR5cGU6dHlwZSsnLW1vbnRoJyxkYXk6ZGF5fTtyZXR1cm4gcmVuZGVyKHtkYXRlOmRhdGUsZGF0YTpkYXRhfSk7fX0sY29tcHV0ZWQ6e3ByZXZNb250aERhdGVQcmVmaXg6ZnVuY3Rpb24gcHJldk1vbnRoRGF0ZVByZWZpeCgpe3ZhciB0ZW1wPW5ldyBEYXRlKHRoaXMuZGF0ZS5nZXRUaW1lKCkpO3RlbXAuc2V0RGF0ZSgwKTtyZXR1cm4gZGF0ZV9kZWZhdWx0LmEuZm9ybWF0KHRlbXAsJ3l5eXktTU0nKTt9LGN1ck1vbnRoRGF0ZVByZWZpeDpmdW5jdGlvbiBjdXJNb250aERhdGVQcmVmaXgoKXtyZXR1cm4gZGF0ZV9kZWZhdWx0LmEuZm9ybWF0KHRoaXMuZGF0ZSwneXl5eS1NTScpO30sbmV4dE1vbnRoRGF0ZVByZWZpeDpmdW5jdGlvbiBuZXh0TW9udGhEYXRlUHJlZml4KCl7dmFyIHRlbXA9bmV3IERhdGUodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCksdGhpcy5kYXRlLmdldE1vbnRoKCkrMSwxKTtyZXR1cm4gZGF0ZV9kZWZhdWx0LmEuZm9ybWF0KHRlbXAsJ3l5eXktTU0nKTt9LGZvcm1hdGVkVG9kYXk6ZnVuY3Rpb24gZm9ybWF0ZWRUb2RheSgpe3JldHVybiB0aGlzLmVsQ2FsZW5kYXIuZm9ybWF0ZWRUb2RheTt9LGlzSW5SYW5nZTpmdW5jdGlvbiBpc0luUmFuZ2UoKXtyZXR1cm4gdGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5sZW5ndGg7fSxyb3dzOmZ1bmN0aW9uIHJvd3MoKXt2YXIgZGF5cz1bXTsvLyBpZiByYW5nZSBleGlzdHMsIHNob3VsZCByZW5kZXIgZGF5cyBpbiByYW5nZS4KaWYodGhpcy5pc0luUmFuZ2Upe3ZhciBfcmFuZ2U9dGhpcy5yYW5nZSxzdGFydD1fcmFuZ2VbMF0sZW5kPV9yYW5nZVsxXTt2YXIgY3VycmVudE1vbnRoUmFuZ2U9T2JqZWN0KGRhdGVfdXRpbF9bInJhbmdlIl0pKGVuZC5nZXREYXRlKCktc3RhcnQuZ2V0RGF0ZSgpKzEpLm1hcChmdW5jdGlvbihfLGluZGV4KXtyZXR1cm57dGV4dDpzdGFydC5nZXREYXRlKCkraW5kZXgsdHlwZTonY3VycmVudCd9O30pO3ZhciByZW1haW5pbmc9Y3VycmVudE1vbnRoUmFuZ2UubGVuZ3RoJTc7cmVtYWluaW5nPXJlbWFpbmluZz09PTA/MDo3LXJlbWFpbmluZzt2YXIgbmV4dE1vbnRoUmFuZ2U9T2JqZWN0KGRhdGVfdXRpbF9bInJhbmdlIl0pKHJlbWFpbmluZykubWFwKGZ1bmN0aW9uKF8saW5kZXgpe3JldHVybnt0ZXh0OmluZGV4KzEsdHlwZTonbmV4dCd9O30pO2RheXM9Y3VycmVudE1vbnRoUmFuZ2UuY29uY2F0KG5leHRNb250aFJhbmdlKTt9ZWxzZXt2YXIgZGF0ZT10aGlzLmRhdGU7dmFyIGZpcnN0RGF5PU9iamVjdChkYXRlX3V0aWxfWyJnZXRGaXJzdERheU9mTW9udGgiXSkoZGF0ZSk7Zmlyc3REYXk9Zmlyc3REYXk9PT0wPzc6Zmlyc3REYXk7dmFyIGZpcnN0RGF5T2ZXZWVrPXR5cGVvZiB0aGlzLmZpcnN0RGF5T2ZXZWVrPT09J251bWJlcic/dGhpcy5maXJzdERheU9mV2VlazoxO3ZhciBwcmV2TW9udGhEYXlzPU9iamVjdChkYXRlX3V0aWxfWyJnZXRQcmV2TW9udGhMYXN0RGF5cyJdKShkYXRlLGZpcnN0RGF5LWZpcnN0RGF5T2ZXZWVrKS5tYXAoZnVuY3Rpb24oZGF5KXtyZXR1cm57dGV4dDpkYXksdHlwZToncHJldid9O30pO3ZhciBjdXJyZW50TW9udGhEYXlzPU9iamVjdChkYXRlX3V0aWxfWyJnZXRNb250aERheXMiXSkoZGF0ZSkubWFwKGZ1bmN0aW9uKGRheSl7cmV0dXJue3RleHQ6ZGF5LHR5cGU6J2N1cnJlbnQnfTt9KTtkYXlzPVtdLmNvbmNhdChwcmV2TW9udGhEYXlzLGN1cnJlbnRNb250aERheXMpO3ZhciBuZXh0TW9udGhEYXlzPU9iamVjdChkYXRlX3V0aWxfWyJyYW5nZSJdKSg0Mi1kYXlzLmxlbmd0aCkubWFwKGZ1bmN0aW9uKF8saW5kZXgpe3JldHVybnt0ZXh0OmluZGV4KzEsdHlwZTonbmV4dCd9O30pO2RheXM9ZGF5cy5jb25jYXQobmV4dE1vbnRoRGF5cyk7fXJldHVybiB0aGlzLnRvTmVzdGVkQXJyKGRheXMpO30sd2Vla0RheXM6ZnVuY3Rpb24gd2Vla0RheXMoKXt2YXIgc3RhcnQ9dGhpcy5maXJzdERheU9mV2Vlazt2YXIgV0VFS19EQVlTPXRoaXMuV0VFS19EQVlTO2lmKHR5cGVvZiBzdGFydCE9PSdudW1iZXInfHxzdGFydD09PTApe3JldHVybiBXRUVLX0RBWVMuc2xpY2UoKTt9ZWxzZXtyZXR1cm4gV0VFS19EQVlTLnNsaWNlKHN0YXJ0KS5jb25jYXQoV0VFS19EQVlTLnNsaWNlKDAsc3RhcnQpKTt9fX0scmVuZGVyOmZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdGhpcz10aGlzO3ZhciBoPWFyZ3VtZW50c1swXTt2YXIgdGhlYWQ9dGhpcy5oaWRlSGVhZGVyP251bGw6aCgndGhlYWQnLFt0aGlzLndlZWtEYXlzLm1hcChmdW5jdGlvbihkYXkpe3JldHVybiBoKCd0aCcse2tleTpkYXl9LFtkYXldKTt9KV0pO3JldHVybiBoKCd0YWJsZScseydjbGFzcyc6eydlbC1jYWxlbmRhci10YWJsZSc6dHJ1ZSwnaXMtcmFuZ2UnOnRoaXMuaXNJblJhbmdlfSxhdHRyczp7Y2VsbHNwYWNpbmc6JzAnLGNlbGxwYWRkaW5nOicwJ319LFt0aGVhZCxoKCd0Ym9keScsW3RoaXMucm93cy5tYXAoZnVuY3Rpb24ocm93LGluZGV4KXtyZXR1cm4gaCgndHInLHsnY2xhc3MnOnsnZWwtY2FsZW5kYXItdGFibGVfX3Jvdyc6dHJ1ZSwnZWwtY2FsZW5kYXItdGFibGVfX3Jvdy0taGlkZS1ib3JkZXInOmluZGV4PT09MCYmX3RoaXMuaGlkZUhlYWRlcn0sa2V5OmluZGV4fSxbcm93Lm1hcChmdW5jdGlvbihjZWxsLGtleSl7cmV0dXJuIGgoJ3RkJyx7a2V5OmtleSwnY2xhc3MnOl90aGlzLmdldENlbGxDbGFzcyhjZWxsKSxvbjp7J2NsaWNrJzpfdGhpcy5waWNrRGF5LmJpbmQoX3RoaXMsY2VsbCl9fSxbaCgnZGl2Jyx7J2NsYXNzJzonZWwtY2FsZW5kYXItZGF5J30sW190aGlzLmNlbGxSZW5kZXJQcm94eShjZWxsKV0pXSk7fSldKTt9KV0pXSk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYWxlbmRhci9zcmMvZGF0ZS10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY2FsZW5kYXJfc3JjX2RhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189c3JjX2RhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYWxlbmRhci9zcmMvZGF0ZS10YWJsZS52dWUKdmFyIGRhdGVfdGFibGVfcmVuZGVyLGRhdGVfdGFibGVfc3RhdGljUmVuZGVyRm5zOy8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgc3JjX2RhdGVfdGFibGVfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChjYWxlbmRhcl9zcmNfZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxkYXRlX3RhYmxlX3JlbmRlcixkYXRlX3RhYmxlX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgc3JjX2RhdGVfdGFibGVfYXBpO31zcmNfZGF0ZV90YWJsZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2NhbGVuZGFyL3NyYy9kYXRlLXRhYmxlLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfZGF0ZV90YWJsZT1zcmNfZGF0ZV90YWJsZV9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYWxlbmRhci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciB2YWxpZFR5cGVzPVsncHJldi1tb250aCcsJ3RvZGF5JywnbmV4dC1tb250aCddO3ZhciB3ZWVrRGF5cz1bJ1N1bmRheScsJ01vbmRheScsJ1R1ZXNkYXknLCdXZWRuZXNkYXknLCdUaHVyc2RheScsJ0ZyaWRheScsJ1NhdHVyZGF5J107dmFyIG9uZURheT04NjQwMDAwMDsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNhbGVuZGFyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbENhbGVuZGFyJyxtaXhpbnM6W2xvY2FsZV9kZWZhdWx0LmFdLGNvbXBvbmVudHM6e0RhdGVUYWJsZTpzcmNfZGF0ZV90YWJsZSxFbEJ1dHRvbjpidXR0b25fZGVmYXVsdC5hLEVsQnV0dG9uR3JvdXA6YnV0dG9uX2dyb3VwX2RlZmF1bHQuYX0scHJvcHM6e3ZhbHVlOltEYXRlLFN0cmluZyxOdW1iZXJdLHJhbmdlOnt0eXBlOkFycmF5LHZhbGlkYXRvcjpmdW5jdGlvbiB2YWxpZGF0b3IocmFuZ2Upe2lmKEFycmF5LmlzQXJyYXkocmFuZ2UpKXtyZXR1cm4gcmFuZ2UubGVuZ3RoPT09MiYmcmFuZ2UuZXZlcnkoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIHR5cGVvZiBpdGVtPT09J3N0cmluZyd8fHR5cGVvZiBpdGVtPT09J251bWJlcid8fGl0ZW0gaW5zdGFuY2VvZiBEYXRlO30pO31lbHNle3JldHVybiB0cnVlO319fSxmaXJzdERheU9mV2Vlazp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfX0scHJvdmlkZTpmdW5jdGlvbiBwcm92aWRlKCl7cmV0dXJue2VsQ2FsZW5kYXI6dGhpc307fSxtZXRob2RzOntwaWNrRGF5OmZ1bmN0aW9uIHBpY2tEYXkoZGF5KXt0aGlzLnJlYWxTZWxlY3RlZERheT1kYXk7fSxzZWxlY3REYXRlOmZ1bmN0aW9uIHNlbGVjdERhdGUodHlwZSl7aWYodmFsaWRUeXBlcy5pbmRleE9mKHR5cGUpPT09LTEpe3Rocm93IG5ldyBFcnJvcignaW52YWxpZCB0eXBlICcrdHlwZSk7fXZhciBkYXk9Jyc7aWYodHlwZT09PSdwcmV2LW1vbnRoJyl7ZGF5PXRoaXMucHJldk1vbnRoRGF0ZVByZWZpeCsnLTAxJzt9ZWxzZSBpZih0eXBlPT09J25leHQtbW9udGgnKXtkYXk9dGhpcy5uZXh0TW9udGhEYXRlUHJlZml4KyctMDEnO31lbHNle2RheT10aGlzLmZvcm1hdGVkVG9kYXk7fWlmKGRheT09PXRoaXMuZm9ybWF0ZWREYXRlKXJldHVybjt0aGlzLnBpY2tEYXkoZGF5KTt9LHRvRGF0ZTpmdW5jdGlvbiB0b0RhdGUodmFsKXtpZighdmFsKXt0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdmFsJyk7fXJldHVybiB2YWwgaW5zdGFuY2VvZiBEYXRlP3ZhbDpuZXcgRGF0ZSh2YWwpO30scmFuZ2VWYWxpZGF0b3I6ZnVuY3Rpb24gcmFuZ2VWYWxpZGF0b3IoZGF0ZSxpc1N0YXJ0KXt2YXIgZmlyc3REYXlPZldlZWs9dGhpcy5yZWFsRmlyc3REYXlPZldlZWs7dmFyIGV4cGVjdGVkPWlzU3RhcnQ/Zmlyc3REYXlPZldlZWs6Zmlyc3REYXlPZldlZWs9PT0wPzY6Zmlyc3REYXlPZldlZWstMTt2YXIgbWVzc2FnZT0oaXNTdGFydD8nc3RhcnQnOidlbmQnKSsnIG9mIHJhbmdlIHNob3VsZCBiZSAnK3dlZWtEYXlzW2V4cGVjdGVkXSsnLic7aWYoZGF0ZS5nZXREYXkoKSE9PWV4cGVjdGVkKXtjb25zb2xlLndhcm4oJ1tFbGVtZW50Q2FsZW5kYXJdJyxtZXNzYWdlLCdJbnZhbGlkIHJhbmdlIHdpbGwgYmUgaWdub3JlZC4nKTtyZXR1cm4gZmFsc2U7fXJldHVybiB0cnVlO319LGNvbXB1dGVkOntwcmV2TW9udGhEYXRlUHJlZml4OmZ1bmN0aW9uIHByZXZNb250aERhdGVQcmVmaXgoKXt2YXIgdGVtcD1uZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0VGltZSgpKTt0ZW1wLnNldERhdGUoMCk7cmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0ZW1wLCd5eXl5LU1NJyk7fSxjdXJNb250aERhdGVQcmVmaXg6ZnVuY3Rpb24gY3VyTW9udGhEYXRlUHJlZml4KCl7cmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0aGlzLmRhdGUsJ3l5eXktTU0nKTt9LG5leHRNb250aERhdGVQcmVmaXg6ZnVuY3Rpb24gbmV4dE1vbnRoRGF0ZVByZWZpeCgpe3ZhciB0ZW1wPW5ldyBEYXRlKHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpLHRoaXMuZGF0ZS5nZXRNb250aCgpKzEsMSk7cmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0ZW1wLCd5eXl5LU1NJyk7fSxmb3JtYXRlZERhdGU6ZnVuY3Rpb24gZm9ybWF0ZWREYXRlKCl7cmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0aGlzLmRhdGUsJ3l5eXktTU0tZGQnKTt9LGkxOG5EYXRlOmZ1bmN0aW9uIGkxOG5EYXRlKCl7dmFyIHllYXI9dGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7dmFyIG1vbnRoPXRoaXMuZGF0ZS5nZXRNb250aCgpKzE7cmV0dXJuIHllYXIrJyAnK3RoaXMudCgnZWwuZGF0ZXBpY2tlci55ZWFyJykrJyAnK3RoaXMudCgnZWwuZGF0ZXBpY2tlci5tb250aCcrbW9udGgpO30sZm9ybWF0ZWRUb2RheTpmdW5jdGlvbiBmb3JtYXRlZFRvZGF5KCl7cmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0aGlzLm5vdywneXl5eS1NTS1kZCcpO30scmVhbFNlbGVjdGVkRGF5OntnZXQ6ZnVuY3Rpb24gZ2V0KCl7aWYoIXRoaXMudmFsdWUpcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXk7cmV0dXJuIHRoaXMuZm9ybWF0ZWREYXRlO30sc2V0OmZ1bmN0aW9uIHNldCh2YWwpe3RoaXMuc2VsZWN0ZWREYXk9dmFsO3ZhciBkYXRlPW5ldyBEYXRlKHZhbCk7dGhpcy4kZW1pdCgnaW5wdXQnLGRhdGUpO319LGRhdGU6ZnVuY3Rpb24gZGF0ZSgpe2lmKCF0aGlzLnZhbHVlKXtpZih0aGlzLnJlYWxTZWxlY3RlZERheSl7dmFyIGQ9dGhpcy5zZWxlY3RlZERheS5zcGxpdCgnLScpO3JldHVybiBuZXcgRGF0ZShkWzBdLGRbMV0tMSxkWzJdKTt9ZWxzZSBpZih0aGlzLnZhbGlkYXRlZFJhbmdlLmxlbmd0aCl7cmV0dXJuIHRoaXMudmFsaWRhdGVkUmFuZ2VbMF1bMF07fXJldHVybiB0aGlzLm5vdzt9ZWxzZXtyZXR1cm4gdGhpcy50b0RhdGUodGhpcy52YWx1ZSk7fX0sLy8gaWYgcmFuZ2UgaXMgdmFsaWQsIHdlIGdldCBhIHR3by1kaWdpdCBhcnJheQp2YWxpZGF0ZWRSYW5nZTpmdW5jdGlvbiB2YWxpZGF0ZWRSYW5nZSgpe3ZhciBfdGhpcz10aGlzO3ZhciByYW5nZT10aGlzLnJhbmdlO2lmKCFyYW5nZSlyZXR1cm5bXTtyYW5nZT1yYW5nZS5yZWR1Y2UoZnVuY3Rpb24ocHJldix2YWwsaW5kZXgpe3ZhciBkYXRlPV90aGlzLnRvRGF0ZSh2YWwpO2lmKF90aGlzLnJhbmdlVmFsaWRhdG9yKGRhdGUsaW5kZXg9PT0wKSl7cHJldj1wcmV2LmNvbmNhdChkYXRlKTt9cmV0dXJuIHByZXY7fSxbXSk7aWYocmFuZ2UubGVuZ3RoPT09Mil7dmFyIF9yYW5nZT1yYW5nZSxzdGFydD1fcmFuZ2VbMF0sZW5kPV9yYW5nZVsxXTtpZihzdGFydD5lbmQpe2NvbnNvbGUud2FybignW0VsZW1lbnRDYWxlbmRhcl1lbmQgdGltZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHN0YXJ0IHRpbWUnKTtyZXR1cm5bXTt9Ly8gc3RhcnQgdGltZSBhbmQgZW5kIHRpbWUgaW4gb25lIG1vbnRoCmlmKE9iamVjdChkYXRlX3V0aWxfWyJ2YWxpZGF0ZVJhbmdlSW5PbmVNb250aCJdKShzdGFydCxlbmQpKXtyZXR1cm5bW3N0YXJ0LGVuZF1dO312YXIgZGF0YT1bXTt2YXIgc3RhcnREYXk9bmV3IERhdGUoc3RhcnQuZ2V0RnVsbFllYXIoKSxzdGFydC5nZXRNb250aCgpKzEsMSk7dmFyIGxhc3REYXk9dGhpcy50b0RhdGUoc3RhcnREYXkuZ2V0VGltZSgpLW9uZURheSk7aWYoIU9iamVjdChkYXRlX3V0aWxfWyJ2YWxpZGF0ZVJhbmdlSW5PbmVNb250aCJdKShzdGFydERheSxlbmQpKXtjb25zb2xlLndhcm4oJ1tFbGVtZW50Q2FsZW5kYXJdc3RhcnQgdGltZSBhbmQgZW5kIHRpbWUgaW50ZXJ2YWwgbXVzdCBub3QgZXhjZWVkIHR3byBtb250aHMnKTtyZXR1cm5bXTt9Ly8g56ys5LiA5Liq5pyI55qE5pe26Ze06IyD5Zu0CmRhdGEucHVzaChbc3RhcnQsbGFzdERheV0pOy8vIOS4i+S4gOaciOeahOaXtumXtOiMg+WbtO+8jOmcgOimgeiuoeeul+S4gOS4i+ivpeaciOeahOesrOS4gOS4quWRqOi1t+Wni+aXpQp2YXIgZmlyc3REYXlPZldlZWs9dGhpcy5yZWFsRmlyc3REYXlPZldlZWs7dmFyIG5leHRNb250Rmlyc3REYXk9c3RhcnREYXkuZ2V0RGF5KCk7dmFyIGludGVydmFsPTA7aWYobmV4dE1vbnRGaXJzdERheSE9PWZpcnN0RGF5T2ZXZWVrKXtpZihmaXJzdERheU9mV2Vlaz09PTApe2ludGVydmFsPTctbmV4dE1vbnRGaXJzdERheTt9ZWxzZXtpbnRlcnZhbD1maXJzdERheU9mV2Vlay1uZXh0TW9udEZpcnN0RGF5O2ludGVydmFsPWludGVydmFsPjA/aW50ZXJ2YWw6NytpbnRlcnZhbDt9fXN0YXJ0RGF5PXRoaXMudG9EYXRlKHN0YXJ0RGF5LmdldFRpbWUoKStpbnRlcnZhbCpvbmVEYXkpO2lmKHN0YXJ0RGF5LmdldERhdGUoKTxlbmQuZ2V0RGF0ZSgpKXtkYXRhLnB1c2goW3N0YXJ0RGF5LGVuZF0pO31yZXR1cm4gZGF0YTt9cmV0dXJuW107fSxyZWFsRmlyc3REYXlPZldlZWs6ZnVuY3Rpb24gcmVhbEZpcnN0RGF5T2ZXZWVrKCl7aWYodGhpcy5maXJzdERheU9mV2VlazwxfHx0aGlzLmZpcnN0RGF5T2ZXZWVrPjYpe3JldHVybiAwO31yZXR1cm4gTWF0aC5mbG9vcih0aGlzLmZpcnN0RGF5T2ZXZWVrKTt9fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57c2VsZWN0ZWREYXk6Jycsbm93Om5ldyBEYXRlKCl9O319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2NhbGVuZGFyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWNhbGVuZGFyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgY2FsZW5kYXJfc3JjX21haW5fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc19jYWxlbmRhcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmQ5NzU2YmVfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZDk3NTZiZV9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGNhbGVuZGFyX3NyY19tYWluX2FwaTt9Y2FsZW5kYXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jYWxlbmRhci9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY2FsZW5kYXJfc3JjX21haW49Y2FsZW5kYXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYWxlbmRhci9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2NhbGVuZGFyX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGNhbGVuZGFyX3NyY19tYWluLm5hbWUsY2FsZW5kYXJfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjYWxlbmRhcj1jYWxlbmRhcl9zcmNfbWFpbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI1N2RkNGE5Jgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI1N2RkNGE5X3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMjU3ZGQ0YTlfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLWZhZGUtaW4ifX0sW192bS52aXNpYmxlP19jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtYmFja3RvcCIsc3R5bGU6e3JpZ2h0Ol92bS5zdHlsZVJpZ2h0LGJvdHRvbTpfdm0uc3R5bGVCb3R0b219LG9uOntjbGljazpmdW5jdGlvbiBjbGljaygkZXZlbnQpeyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm4gX3ZtLmhhbmRsZUNsaWNrKCRldmVudCk7fX19LFtfdm0uX3QoImRlZmF1bHQiLFtfYygiZWwtaWNvbiIse2F0dHJzOntuYW1lOiJjYXJldC10b3AifX0pXSldLDIpOl92bS5fZSgpXSk7fTt2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI1N2RkNGE5X3N0YXRpY1JlbmRlckZucz1bXTttYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMjU3ZGQ0YTlfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI1N2RkNGE5JgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9iYWNrdG9wL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KdmFyIGN1YmljPWZ1bmN0aW9uIGN1YmljKHZhbHVlKXtyZXR1cm4gTWF0aC5wb3codmFsdWUsMyk7fTt2YXIgZWFzZUluT3V0Q3ViaWM9ZnVuY3Rpb24gZWFzZUluT3V0Q3ViaWModmFsdWUpe3JldHVybiB2YWx1ZTwwLjU/Y3ViaWModmFsdWUqMikvMjoxLWN1YmljKCgxLXZhbHVlKSoyKS8yO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBiYWNrdG9wX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbEJhY2t0b3AnLHByb3BzOnt2aXNpYmlsaXR5SGVpZ2h0Ont0eXBlOk51bWJlcixkZWZhdWx0OjIwMH0sdGFyZ2V0OltTdHJpbmddLHJpZ2h0Ont0eXBlOk51bWJlcixkZWZhdWx0OjQwfSxib3R0b206e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NDB9fSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57ZWw6bnVsbCxjb250YWluZXI6bnVsbCx2aXNpYmxlOmZhbHNlfTt9LGNvbXB1dGVkOntzdHlsZUJvdHRvbTpmdW5jdGlvbiBzdHlsZUJvdHRvbSgpe3JldHVybiB0aGlzLmJvdHRvbSsncHgnO30sc3R5bGVSaWdodDpmdW5jdGlvbiBzdHlsZVJpZ2h0KCl7cmV0dXJuIHRoaXMucmlnaHQrJ3B4Jzt9fSxtb3VudGVkOmZ1bmN0aW9uIG1vdW50ZWQoKXt0aGlzLmluaXQoKTt0aGlzLnRocm90dGxlZFNjcm9sbEhhbmRsZXI9dGhyb3R0bGVfZGVmYXVsdCgpKDMwMCx0aGlzLm9uU2Nyb2xsKTt0aGlzLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLHRoaXMudGhyb3R0bGVkU2Nyb2xsSGFuZGxlcik7fSxtZXRob2RzOntpbml0OmZ1bmN0aW9uIGluaXQoKXt0aGlzLmNvbnRhaW5lcj1kb2N1bWVudDt0aGlzLmVsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtpZih0aGlzLnRhcmdldCl7dGhpcy5lbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMudGFyZ2V0KTtpZighdGhpcy5lbCl7dGhyb3cgbmV3IEVycm9yKCd0YXJnZXQgaXMgbm90IGV4aXN0ZWQ6ICcrdGhpcy50YXJnZXQpO310aGlzLmNvbnRhaW5lcj10aGlzLmVsO319LG9uU2Nyb2xsOmZ1bmN0aW9uIG9uU2Nyb2xsKCl7dmFyIHNjcm9sbFRvcD10aGlzLmVsLnNjcm9sbFRvcDt0aGlzLnZpc2libGU9c2Nyb2xsVG9wPj10aGlzLnZpc2liaWxpdHlIZWlnaHQ7fSxoYW5kbGVDbGljazpmdW5jdGlvbiBoYW5kbGVDbGljayhlKXt0aGlzLnNjcm9sbFRvVG9wKCk7dGhpcy4kZW1pdCgnY2xpY2snLGUpO30sc2Nyb2xsVG9Ub3A6ZnVuY3Rpb24gc2Nyb2xsVG9Ub3AoKXt2YXIgZWw9dGhpcy5lbDt2YXIgYmVnaW5UaW1lPURhdGUubm93KCk7dmFyIGJlZ2luVmFsdWU9ZWwuc2Nyb2xsVG9wO3ZhciByQUY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oZnVuYyl7cmV0dXJuIHNldFRpbWVvdXQoZnVuYywxNik7fTt2YXIgZnJhbWVGdW5jPWZ1bmN0aW9uIGZyYW1lRnVuYygpe3ZhciBwcm9ncmVzcz0oRGF0ZS5ub3coKS1iZWdpblRpbWUpLzUwMDtpZihwcm9ncmVzczwxKXtlbC5zY3JvbGxUb3A9YmVnaW5WYWx1ZSooMS1lYXNlSW5PdXRDdWJpYyhwcm9ncmVzcykpO3JBRihmcmFtZUZ1bmMpO31lbHNle2VsLnNjcm9sbFRvcD0wO319O3JBRihmcmFtZUZ1bmMpO319LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpe3RoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsdGhpcy50aHJvdHRsZWRTY3JvbGxIYW5kbGVyKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2JhY2t0b3Bfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189YmFja3RvcF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgYmFja3RvcF9zcmNfbWFpbl9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHBhY2thZ2VzX2JhY2t0b3Bfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI1N2RkNGE5X3JlbmRlcixtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMjU3ZGQ0YTlfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBiYWNrdG9wX3NyY19tYWluX2FwaTt9YmFja3RvcF9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGJhY2t0b3Bfc3JjX21haW49YmFja3RvcF9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhY2t0b3AvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9iYWNrdG9wX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGJhY2t0b3Bfc3JjX21haW4ubmFtZSxiYWNrdG9wX3NyY19tYWluKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgYmFja3RvcD1iYWNrdG9wX3NyY19tYWluOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5maW5pdGUtc2Nyb2xsL3NyYy9tYWluLmpzCnZhciBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHk9ZnVuY3Rpb24gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQscHJvcGVydHkpe2lmKGVsZW1lbnQ9PT13aW5kb3cpe2VsZW1lbnQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O31pZihlbGVtZW50Lm5vZGVUeXBlIT09MSl7cmV0dXJuW107fS8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlCnZhciBjc3M9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCxudWxsKTtyZXR1cm4gcHJvcGVydHk/Y3NzW3Byb3BlcnR5XTpjc3M7fTt2YXIgZW50cmllcz1mdW5jdGlvbiBlbnRyaWVzKG9iail7cmV0dXJuIE9iamVjdC5rZXlzKG9ianx8e30pLm1hcChmdW5jdGlvbihrZXkpe3JldHVybltrZXksb2JqW2tleV1dO30pO307dmFyIGdldFBvc2l0aW9uU2l6ZT1mdW5jdGlvbiBnZXRQb3NpdGlvblNpemUoZWwscHJvcCl7cmV0dXJuIGVsPT09d2luZG93fHxlbD09PWRvY3VtZW50P2RvY3VtZW50LmRvY3VtZW50RWxlbWVudFtwcm9wXTplbFtwcm9wXTt9O3ZhciBnZXRPZmZzZXRIZWlnaHQ9ZnVuY3Rpb24gZ2V0T2Zmc2V0SGVpZ2h0KGVsKXtyZXR1cm4gZ2V0UG9zaXRpb25TaXplKGVsLCdvZmZzZXRIZWlnaHQnKTt9O3ZhciBnZXRDbGllbnRIZWlnaHQ9ZnVuY3Rpb24gZ2V0Q2xpZW50SGVpZ2h0KGVsKXtyZXR1cm4gZ2V0UG9zaXRpb25TaXplKGVsLCdjbGllbnRIZWlnaHQnKTt9O3ZhciBzY29wZT0nRWxJbmZpbml0ZVNjcm9sbCc7dmFyIGF0dHJpYnV0ZXM9e2RlbGF5Ont0eXBlOk51bWJlcixkZWZhdWx0OjIwMH0sZGlzdGFuY2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxpbW1lZGlhdGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9fTt2YXIgbWFpbl9nZXRTY3JvbGxPcHRpb25zPWZ1bmN0aW9uIGdldFNjcm9sbE9wdGlvbnMoZWwsdm0pe2lmKCFPYmplY3QodHlwZXNfWyJpc0h0bWxFbGVtZW50Il0pKGVsKSlyZXR1cm57fTtyZXR1cm4gZW50cmllcyhhdHRyaWJ1dGVzKS5yZWR1Y2UoZnVuY3Rpb24obWFwLF9yZWYpe3ZhciBrZXk9X3JlZlswXSxvcHRpb249X3JlZlsxXTt2YXIgdHlwZT1vcHRpb24udHlwZSxkZWZhdWx0VmFsdWU9b3B0aW9uLmRlZmF1bHQ7dmFyIHZhbHVlPWVsLmdldEF0dHJpYnV0ZSgnaW5maW5pdGUtc2Nyb2xsLScra2V5KTt2YWx1ZT1PYmplY3QodHlwZXNfWyJpc1VuZGVmaW5lZCJdKSh2bVt2YWx1ZV0pP3ZhbHVlOnZtW3ZhbHVlXTtzd2l0Y2godHlwZSl7Y2FzZSBOdW1iZXI6dmFsdWU9TnVtYmVyKHZhbHVlKTt2YWx1ZT1OdW1iZXIuaXNOYU4odmFsdWUpP2RlZmF1bHRWYWx1ZTp2YWx1ZTticmVhaztjYXNlIEJvb2xlYW46dmFsdWU9T2JqZWN0KHR5cGVzX1siaXNEZWZpbmVkIl0pKHZhbHVlKT92YWx1ZT09PSdmYWxzZSc/ZmFsc2U6Qm9vbGVhbih2YWx1ZSk6ZGVmYXVsdFZhbHVlO2JyZWFrO2RlZmF1bHQ6dmFsdWU9dHlwZSh2YWx1ZSk7fW1hcFtrZXldPXZhbHVlO3JldHVybiBtYXA7fSx7fSk7fTt2YXIgZ2V0RWxlbWVudFRvcD1mdW5jdGlvbiBnZXRFbGVtZW50VG9wKGVsKXtyZXR1cm4gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO307dmFyIG1haW5faGFuZGxlU2Nyb2xsPWZ1bmN0aW9uIGhhbmRsZVNjcm9sbChjYil7dmFyIF9zY29wZT10aGlzW3Njb3BlXSxlbD1fc2NvcGUuZWwsdm09X3Njb3BlLnZtLGNvbnRhaW5lcj1fc2NvcGUuY29udGFpbmVyLG9ic2VydmVyPV9zY29wZS5vYnNlcnZlcjt2YXIgX2dldFNjcm9sbE9wdGlvbnM9bWFpbl9nZXRTY3JvbGxPcHRpb25zKGVsLHZtKSxkaXN0YW5jZT1fZ2V0U2Nyb2xsT3B0aW9ucy5kaXN0YW5jZSxkaXNhYmxlZD1fZ2V0U2Nyb2xsT3B0aW9ucy5kaXNhYmxlZDtpZihkaXNhYmxlZClyZXR1cm47dmFyIGNvbnRhaW5lckluZm89Y29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFjb250YWluZXJJbmZvLndpZHRoJiYhY29udGFpbmVySW5mby5oZWlnaHQpcmV0dXJuO3ZhciBzaG91bGRUcmlnZ2VyPWZhbHNlO2lmKGNvbnRhaW5lcj09PWVsKXsvLyBiZSBhd2FyZSBvZiBkaWZmZXJlbmNlIGJldHdlZW4gY2xpZW50SGVpZ2h0ICYgb2Zmc2V0SGVpZ2h0ICYgd2luZG93LmdldENvbXB1dGVkU3R5bGUoKS5oZWlnaHQKdmFyIHNjcm9sbEJvdHRvbT1jb250YWluZXIuc2Nyb2xsVG9wK2dldENsaWVudEhlaWdodChjb250YWluZXIpO3Nob3VsZFRyaWdnZXI9Y29udGFpbmVyLnNjcm9sbEhlaWdodC1zY3JvbGxCb3R0b208PWRpc3RhbmNlO31lbHNle3ZhciBoZWlnaHRCZWxvd1RvcD1nZXRPZmZzZXRIZWlnaHQoZWwpK2dldEVsZW1lbnRUb3AoZWwpLWdldEVsZW1lbnRUb3AoY29udGFpbmVyKTt2YXIgb2Zmc2V0SGVpZ2h0PWdldE9mZnNldEhlaWdodChjb250YWluZXIpO3ZhciBib3JkZXJCb3R0b209TnVtYmVyLnBhcnNlRmxvYXQoZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGNvbnRhaW5lciwnYm9yZGVyQm90dG9tV2lkdGgnKSk7c2hvdWxkVHJpZ2dlcj1oZWlnaHRCZWxvd1RvcC1vZmZzZXRIZWlnaHQrYm9yZGVyQm90dG9tPD1kaXN0YW5jZTt9aWYoc2hvdWxkVHJpZ2dlciYmT2JqZWN0KHR5cGVzX1siaXNGdW5jdGlvbiJdKShjYikpe2NiLmNhbGwodm0pO31lbHNlIGlmKG9ic2VydmVyKXtvYnNlcnZlci5kaXNjb25uZWN0KCk7dGhpc1tzY29wZV0ub2JzZXJ2ZXI9bnVsbDt9fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGluZmluaXRlX3Njcm9sbF9zcmNfbWFpbj17bmFtZTonSW5maW5pdGVTY3JvbGwnLGluc2VydGVkOmZ1bmN0aW9uIGluc2VydGVkKGVsLGJpbmRpbmcsdm5vZGUpe3ZhciBjYj1iaW5kaW5nLnZhbHVlO3ZhciB2bT12bm9kZS5jb250ZXh0Oy8vIG9ubHkgaW5jbHVkZSB2ZXJ0aWNhbCBzY3JvbGwKdmFyIGNvbnRhaW5lcj1PYmplY3QoZG9tX1siZ2V0U2Nyb2xsQ29udGFpbmVyIl0pKGVsLHRydWUpO3ZhciBfZ2V0U2Nyb2xsT3B0aW9uczI9bWFpbl9nZXRTY3JvbGxPcHRpb25zKGVsLHZtKSxkZWxheT1fZ2V0U2Nyb2xsT3B0aW9uczIuZGVsYXksaW1tZWRpYXRlPV9nZXRTY3JvbGxPcHRpb25zMi5pbW1lZGlhdGU7dmFyIG9uU2Nyb2xsPWRlYm91bmNlX2RlZmF1bHQoKShkZWxheSxtYWluX2hhbmRsZVNjcm9sbC5iaW5kKGVsLGNiKSk7ZWxbc2NvcGVdPXtlbDplbCx2bTp2bSxjb250YWluZXI6Y29udGFpbmVyLG9uU2Nyb2xsOm9uU2Nyb2xsfTtpZihjb250YWluZXIpe2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLG9uU2Nyb2xsKTtpZihpbW1lZGlhdGUpe3ZhciBvYnNlcnZlcj1lbFtzY29wZV0ub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIob25TY3JvbGwpO29ic2VydmVyLm9ic2VydmUoY29udGFpbmVyLHtjaGlsZExpc3Q6dHJ1ZSxzdWJ0cmVlOnRydWV9KTtvblNjcm9sbCgpO319fSx1bmJpbmQ6ZnVuY3Rpb24gdW5iaW5kKGVsKXt2YXIgX2VsJHNjb3BlPWVsW3Njb3BlXSxjb250YWluZXI9X2VsJHNjb3BlLmNvbnRhaW5lcixvblNjcm9sbD1fZWwkc2NvcGUub25TY3JvbGw7aWYoY29udGFpbmVyKXtjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJyxvblNjcm9sbCk7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5maW5pdGUtc2Nyb2xsL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovaW5maW5pdGVfc2Nyb2xsX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuZGlyZWN0aXZlKGluZmluaXRlX3Njcm9sbF9zcmNfbWFpbi5uYW1lLGluZmluaXRlX3Njcm9sbF9zcmNfbWFpbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGluZmluaXRlX3Njcm9sbD1pbmZpbml0ZV9zY3JvbGxfc3JjX21haW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wYWdlLWhlYWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTA3MDk1NGMmCnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTA3MDk1NGNfcmVuZGVyPWZ1bmN0aW9uIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81MDcwOTU0Y19yZW5kZXIoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wYWdlLWhlYWRlciJ9LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBhZ2UtaGVhZGVyX19sZWZ0Iixvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtfdm0uJGVtaXQoImJhY2siKTt9fX0sW19jKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tYmFjayJ9KSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBhZ2UtaGVhZGVyX190aXRsZSJ9LFtfdm0uX3QoInRpdGxlIixbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pXSwyKV0pLF9jKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGFnZS1oZWFkZXJfX2NvbnRlbnQifSxbX3ZtLl90KCJjb250ZW50IixbX3ZtLl92KF92bS5fcyhfdm0uY29udGVudCkpXSldLDIpXSk7fTt2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUwNzA5NTRjX3N0YXRpY1JlbmRlckZucz1bXTttYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTA3MDk1NGNfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BhZ2UtaGVhZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MDcwOTU0YyYKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcGFnZS1oZWFkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhZ2VfaGVhZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFBhZ2VIZWFkZXInLHByb3BzOnt0aXRsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpmdW5jdGlvbiBfZGVmYXVsdCgpe3JldHVybiBPYmplY3QobGliX2xvY2FsZV9bInQiXSkoJ2VsLnBhZ2VIZWFkZXIudGl0bGUnKTt9fSxjb250ZW50OlN0cmluZ319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcGFnZS1oZWFkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX3BhZ2VfaGVhZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXBhZ2VfaGVhZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcGFnZS1oZWFkZXIvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgcGFnZV9oZWFkZXJfc3JjX21haW5fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc19wYWdlX2hlYWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTA3MDk1NGNfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81MDcwOTU0Y19zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHBhZ2VfaGVhZGVyX3NyY19tYWluX2FwaTt9cGFnZV9oZWFkZXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9wYWdlLWhlYWRlci9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFnZV9oZWFkZXJfc3JjX21haW49cGFnZV9oZWFkZXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdlLWhlYWRlci9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3BhZ2VfaGVhZGVyX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KHBhZ2VfaGVhZGVyX3NyY19tYWluLm5hbWUscGFnZV9oZWFkZXJfc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwYWdlX2hlYWRlcj1wYWdlX2hlYWRlcl9zcmNfbWFpbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzQ5MzIzNDYmCnZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0OTMyMzQ2X3JlbmRlcj1mdW5jdGlvbiBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0OTMyMzQ2X3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZGl2Iix7Y2xhc3M6WyJlbC1jYXNjYWRlci1wYW5lbCIsX3ZtLmJvcmRlciYmImlzLWJvcmRlcmVkIl0sb246e2tleWRvd246X3ZtLmhhbmRsZUtleURvd259fSxfdm0uX2woX3ZtLm1lbnVzLGZ1bmN0aW9uKG1lbnUsaW5kZXgpe3JldHVybiBfYygiY2FzY2FkZXItbWVudSIse2tleTppbmRleCxyZWY6Im1lbnUiLHJlZkluRm9yOnRydWUsYXR0cnM6e2luZGV4OmluZGV4LG5vZGVzOm1lbnV9fSk7fSksMSk7fTt2YXIgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDkzMjM0Nl9zdGF0aWNSZW5kZXJGbnM9W107Y2FzY2FkZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDkzMjM0Nl9yZW5kZXIuX3dpdGhTdHJpcHBlZD10cnVlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLXBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDkzMjM0NiYKLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvcmFkaW8iCnZhciByYWRpb189X193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7dmFyIHJhZGlvX2RlZmF1bHQ9LyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyYWRpb18pOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1ub2RlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKdmFyIHN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNhc2NhZGVyX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e2luamVjdDpbJ3BhbmVsJ10sY29tcG9uZW50czp7RWxDaGVja2JveDpjaGVja2JveF9kZWZhdWx0LmEsRWxSYWRpbzpyYWRpb19kZWZhdWx0LmF9LHByb3BzOntub2RlOntyZXF1aXJlZDp0cnVlfSxub2RlSWQ6U3RyaW5nfSxjb21wdXRlZDp7Y29uZmlnOmZ1bmN0aW9uIGNvbmZpZygpe3JldHVybiB0aGlzLnBhbmVsLmNvbmZpZzt9LGlzTGVhZjpmdW5jdGlvbiBpc0xlYWYoKXtyZXR1cm4gdGhpcy5ub2RlLmlzTGVhZjt9LGlzRGlzYWJsZWQ6ZnVuY3Rpb24gaXNEaXNhYmxlZCgpe3JldHVybiB0aGlzLm5vZGUuaXNEaXNhYmxlZDt9LGNoZWNrZWRWYWx1ZTpmdW5jdGlvbiBjaGVja2VkVmFsdWUoKXtyZXR1cm4gdGhpcy5wYW5lbC5jaGVja2VkVmFsdWU7fSxpc0NoZWNrZWQ6ZnVuY3Rpb24gaXNDaGVja2VkKCl7cmV0dXJuIHRoaXMubm9kZS5pc1NhbWVOb2RlKHRoaXMuY2hlY2tlZFZhbHVlKTt9LGluQWN0aXZlUGF0aDpmdW5jdGlvbiBpbkFjdGl2ZVBhdGgoKXtyZXR1cm4gdGhpcy5pc0luUGF0aCh0aGlzLnBhbmVsLmFjdGl2ZVBhdGgpO30saW5DaGVja2VkUGF0aDpmdW5jdGlvbiBpbkNoZWNrZWRQYXRoKCl7dmFyIF90aGlzPXRoaXM7aWYoIXRoaXMuY29uZmlnLmNoZWNrU3RyaWN0bHkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLnBhbmVsLmNoZWNrZWROb2RlUGF0aHMuc29tZShmdW5jdGlvbihjaGVja2VkUGF0aCl7cmV0dXJuIF90aGlzLmlzSW5QYXRoKGNoZWNrZWRQYXRoKTt9KTt9LHZhbHVlOmZ1bmN0aW9uIHZhbHVlKCl7cmV0dXJuIHRoaXMubm9kZS5nZXRWYWx1ZUJ5T3B0aW9uKCk7fX0sbWV0aG9kczp7aGFuZGxlRXhwYW5kOmZ1bmN0aW9uIGhhbmRsZUV4cGFuZCgpe3ZhciBfdGhpczI9dGhpczt2YXIgcGFuZWw9dGhpcy5wYW5lbCxub2RlPXRoaXMubm9kZSxpc0Rpc2FibGVkPXRoaXMuaXNEaXNhYmxlZCxjb25maWc9dGhpcy5jb25maWc7dmFyIG11bHRpcGxlPWNvbmZpZy5tdWx0aXBsZSxjaGVja1N0cmljdGx5PWNvbmZpZy5jaGVja1N0cmljdGx5O2lmKCFjaGVja1N0cmljdGx5JiZpc0Rpc2FibGVkfHxub2RlLmxvYWRpbmcpcmV0dXJuO2lmKGNvbmZpZy5sYXp5JiYhbm9kZS5sb2FkZWQpe3BhbmVsLmxhenlMb2FkKG5vZGUsZnVuY3Rpb24oKXsvLyBkbyBub3QgdXNlIGNhY2hlZCBsZWFmIHZhbHVlIGhlcmUsIGludm9rZSB0aGlzLmlzTGVhZiB0byBnZXQgbmV3IHZhbHVlLgp2YXIgaXNMZWFmPV90aGlzMi5pc0xlYWY7aWYoIWlzTGVhZilfdGhpczIuaGFuZGxlRXhwYW5kKCk7aWYobXVsdGlwbGUpey8vIGlmIGxlYWYgc3luYyBjaGVja2VkIHN0YXRlLCBlbHNlIGNsZWFyIGNoZWNrZWQgc3RhdGUKdmFyIGNoZWNrZWQ9aXNMZWFmP25vZGUuY2hlY2tlZDpmYWxzZTtfdGhpczIuaGFuZGxlTXVsdGlDaGVja0NoYW5nZShjaGVja2VkKTt9fSk7fWVsc2V7cGFuZWwuaGFuZGxlRXhwYW5kKG5vZGUpO319LGhhbmRsZUNoZWNrQ2hhbmdlOmZ1bmN0aW9uIGhhbmRsZUNoZWNrQ2hhbmdlKCl7dmFyIHBhbmVsPXRoaXMucGFuZWwsdmFsdWU9dGhpcy52YWx1ZSxub2RlPXRoaXMubm9kZTtwYW5lbC5oYW5kbGVDaGVja0NoYW5nZSh2YWx1ZSk7cGFuZWwuaGFuZGxlRXhwYW5kKG5vZGUpO30saGFuZGxlTXVsdGlDaGVja0NoYW5nZTpmdW5jdGlvbiBoYW5kbGVNdWx0aUNoZWNrQ2hhbmdlKGNoZWNrZWQpe3RoaXMubm9kZS5kb0NoZWNrKGNoZWNrZWQpO3RoaXMucGFuZWwuY2FsY3VsYXRlTXVsdGlDaGVja2VkVmFsdWUoKTt9LGlzSW5QYXRoOmZ1bmN0aW9uIGlzSW5QYXRoKHBhdGhOb2Rlcyl7dmFyIG5vZGU9dGhpcy5ub2RlO3ZhciBzZWxlY3RlZFBhdGhOb2RlPXBhdGhOb2Rlc1tub2RlLmxldmVsLTFdfHx7fTtyZXR1cm4gc2VsZWN0ZWRQYXRoTm9kZS51aWQ9PT1ub2RlLnVpZDt9LHJlbmRlclByZWZpeDpmdW5jdGlvbiByZW5kZXJQcmVmaXgoaCl7dmFyIGlzTGVhZj10aGlzLmlzTGVhZixpc0NoZWNrZWQ9dGhpcy5pc0NoZWNrZWQsY29uZmlnPXRoaXMuY29uZmlnO3ZhciBjaGVja1N0cmljdGx5PWNvbmZpZy5jaGVja1N0cmljdGx5LG11bHRpcGxlPWNvbmZpZy5tdWx0aXBsZTtpZihtdWx0aXBsZSl7cmV0dXJuIHRoaXMucmVuZGVyQ2hlY2tib3goaCk7fWVsc2UgaWYoY2hlY2tTdHJpY3RseSl7cmV0dXJuIHRoaXMucmVuZGVyUmFkaW8oaCk7fWVsc2UgaWYoaXNMZWFmJiZpc0NoZWNrZWQpe3JldHVybiB0aGlzLnJlbmRlckNoZWNrSWNvbihoKTt9cmV0dXJuIG51bGw7fSxyZW5kZXJQb3N0Zml4OmZ1bmN0aW9uIHJlbmRlclBvc3RmaXgoaCl7dmFyIG5vZGU9dGhpcy5ub2RlLGlzTGVhZj10aGlzLmlzTGVhZjtpZihub2RlLmxvYWRpbmcpe3JldHVybiB0aGlzLnJlbmRlckxvYWRpbmdJY29uKGgpO31lbHNlIGlmKCFpc0xlYWYpe3JldHVybiB0aGlzLnJlbmRlckV4cGFuZEljb24oaCk7fXJldHVybiBudWxsO30scmVuZGVyQ2hlY2tib3g6ZnVuY3Rpb24gcmVuZGVyQ2hlY2tib3goaCl7dmFyIG5vZGU9dGhpcy5ub2RlLGNvbmZpZz10aGlzLmNvbmZpZyxpc0Rpc2FibGVkPXRoaXMuaXNEaXNhYmxlZDt2YXIgZXZlbnRzPXtvbjp7Y2hhbmdlOnRoaXMuaGFuZGxlTXVsdGlDaGVja0NoYW5nZX0sbmF0aXZlT246e319O2lmKGNvbmZpZy5jaGVja1N0cmljdGx5KXsvLyB3aGVuIGV2ZXJ5IG5vZGUgaXMgc2VsZWN0YWJsZSwgY2xpY2sgZXZlbnQgc2hvdWxkIG5vdCB0cmlnZ2VyIGV4cGFuZCBldmVudC4KZXZlbnRzLm5hdGl2ZU9uLmNsaWNrPXN0b3BQcm9wYWdhdGlvbjt9cmV0dXJuIGgoJ2VsLWNoZWNrYm94JyxleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW3thdHRyczp7dmFsdWU6bm9kZS5jaGVja2VkLGluZGV0ZXJtaW5hdGU6bm9kZS5pbmRldGVybWluYXRlLGRpc2FibGVkOmlzRGlzYWJsZWR9fSxldmVudHNdKSk7fSxyZW5kZXJSYWRpbzpmdW5jdGlvbiByZW5kZXJSYWRpbyhoKXt2YXIgY2hlY2tlZFZhbHVlPXRoaXMuY2hlY2tlZFZhbHVlLHZhbHVlPXRoaXMudmFsdWUsaXNEaXNhYmxlZD10aGlzLmlzRGlzYWJsZWQ7Ly8gdG8ga2VlcCBzYW1lIHJlZmVyZW5jZSBpZiB2YWx1ZSBjYXVzZSByYWRpbydzIGNoZWNrZWQgc3RhdGUgaXMgY2FsY3VsYXRlZCBieSByZWZlcmVuY2UgY29tcGFyaXNpb247CmlmKE9iamVjdCh1dGlsX1siaXNFcXVhbCJdKSh2YWx1ZSxjaGVja2VkVmFsdWUpKXt2YWx1ZT1jaGVja2VkVmFsdWU7fXJldHVybiBoKCdlbC1yYWRpbycse2F0dHJzOnt2YWx1ZTpjaGVja2VkVmFsdWUsbGFiZWw6dmFsdWUsZGlzYWJsZWQ6aXNEaXNhYmxlZH0sb246eydjaGFuZ2UnOnRoaXMuaGFuZGxlQ2hlY2tDaGFuZ2V9LG5hdGl2ZU9uOnsnY2xpY2snOnN0b3BQcm9wYWdhdGlvbn19LFtoKCdzcGFuJyldKTt9LHJlbmRlckNoZWNrSWNvbjpmdW5jdGlvbiByZW5kZXJDaGVja0ljb24oaCl7cmV0dXJuIGgoJ2knLHsnY2xhc3MnOidlbC1pY29uLWNoZWNrIGVsLWNhc2NhZGVyLW5vZGVfX3ByZWZpeCd9KTt9LHJlbmRlckxvYWRpbmdJY29uOmZ1bmN0aW9uIHJlbmRlckxvYWRpbmdJY29uKGgpe3JldHVybiBoKCdpJyx7J2NsYXNzJzonZWwtaWNvbi1sb2FkaW5nIGVsLWNhc2NhZGVyLW5vZGVfX3Bvc3RmaXgnfSk7fSxyZW5kZXJFeHBhbmRJY29uOmZ1bmN0aW9uIHJlbmRlckV4cGFuZEljb24oaCl7cmV0dXJuIGgoJ2knLHsnY2xhc3MnOidlbC1pY29uLWFycm93LXJpZ2h0IGVsLWNhc2NhZGVyLW5vZGVfX3Bvc3RmaXgnfSk7fSxyZW5kZXJDb250ZW50OmZ1bmN0aW9uIHJlbmRlckNvbnRlbnQoaCl7dmFyIHBhbmVsPXRoaXMucGFuZWwsbm9kZT10aGlzLm5vZGU7dmFyIHJlbmRlcj1wYW5lbC5yZW5kZXJMYWJlbEZuO3ZhciB2bm9kZT1yZW5kZXI/cmVuZGVyKHtub2RlOm5vZGUsZGF0YTpub2RlLmRhdGF9KTpudWxsO3JldHVybiBoKCdzcGFuJyx7J2NsYXNzJzonZWwtY2FzY2FkZXItbm9kZV9fbGFiZWwnfSxbdm5vZGV8fG5vZGUubGFiZWxdKTt9fSxyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKGgpe3ZhciBfdGhpczM9dGhpczt2YXIgaW5BY3RpdmVQYXRoPXRoaXMuaW5BY3RpdmVQYXRoLGluQ2hlY2tlZFBhdGg9dGhpcy5pbkNoZWNrZWRQYXRoLGlzQ2hlY2tlZD10aGlzLmlzQ2hlY2tlZCxpc0xlYWY9dGhpcy5pc0xlYWYsaXNEaXNhYmxlZD10aGlzLmlzRGlzYWJsZWQsY29uZmlnPXRoaXMuY29uZmlnLG5vZGVJZD10aGlzLm5vZGVJZDt2YXIgZXhwYW5kVHJpZ2dlcj1jb25maWcuZXhwYW5kVHJpZ2dlcixjaGVja1N0cmljdGx5PWNvbmZpZy5jaGVja1N0cmljdGx5LG11bHRpcGxlPWNvbmZpZy5tdWx0aXBsZTt2YXIgZGlzYWJsZWQ9IWNoZWNrU3RyaWN0bHkmJmlzRGlzYWJsZWQ7dmFyIGV2ZW50cz17b246e319O2lmKGV4cGFuZFRyaWdnZXI9PT0nY2xpY2snKXtldmVudHMub24uY2xpY2s9dGhpcy5oYW5kbGVFeHBhbmQ7fWVsc2V7ZXZlbnRzLm9uLm1vdXNlZW50ZXI9ZnVuY3Rpb24oZSl7X3RoaXMzLmhhbmRsZUV4cGFuZCgpO190aGlzMy4kZW1pdCgnZXhwYW5kJyxlKTt9O2V2ZW50cy5vbi5mb2N1cz1mdW5jdGlvbihlKXtfdGhpczMuaGFuZGxlRXhwYW5kKCk7X3RoaXMzLiRlbWl0KCdleHBhbmQnLGUpO307fWlmKGlzTGVhZiYmIWlzRGlzYWJsZWQmJiFjaGVja1N0cmljdGx5JiYhbXVsdGlwbGUpe2V2ZW50cy5vbi5jbGljaz10aGlzLmhhbmRsZUNoZWNrQ2hhbmdlO31yZXR1cm4gaCgnbGknLGV4dGVybmFsX2JhYmVsX2hlbHBlcl92dWVfanN4X21lcmdlX3Byb3BzX2RlZmF1bHQoKShbe2F0dHJzOntyb2xlOidtZW51aXRlbScsaWQ6bm9kZUlkLCdhcmlhLWV4cGFuZGVkJzppbkFjdGl2ZVBhdGgsdGFiaW5kZXg6ZGlzYWJsZWQ/bnVsbDotMX0sJ2NsYXNzJzp7J2VsLWNhc2NhZGVyLW5vZGUnOnRydWUsJ2lzLXNlbGVjdGFibGUnOmNoZWNrU3RyaWN0bHksJ2luLWFjdGl2ZS1wYXRoJzppbkFjdGl2ZVBhdGgsJ2luLWNoZWNrZWQtcGF0aCc6aW5DaGVja2VkUGF0aCwnaXMtYWN0aXZlJzppc0NoZWNrZWQsJ2lzLWRpc2FibGVkJzpkaXNhYmxlZH19LGV2ZW50c10pLFt0aGlzLnJlbmRlclByZWZpeChoKSx0aGlzLnJlbmRlckNvbnRlbnQoaCksdGhpcy5yZW5kZXJQb3N0Zml4KGgpXSk7fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbm9kZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgc3JjX2Nhc2NhZGVyX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189Y2FzY2FkZXJfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1ub2RlLnZ1ZQp2YXIgY2FzY2FkZXJfbm9kZV9yZW5kZXIsY2FzY2FkZXJfbm9kZV9zdGF0aWNSZW5kZXJGbnM7Lyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBjYXNjYWRlcl9ub2RlX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQoc3JjX2Nhc2NhZGVyX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sY2FzY2FkZXJfbm9kZV9yZW5kZXIsY2FzY2FkZXJfbm9kZV9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGNhc2NhZGVyX25vZGVfYXBpO31jYXNjYWRlcl9ub2RlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW5vZGUudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNhc2NhZGVyX25vZGU9Y2FzY2FkZXJfbm9kZV9jb21wb25lbnQuZXhwb3J0czsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY2FzY2FkZXJfbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz17bmFtZTonRWxDYXNjYWRlck1lbnUnLG1peGluczpbbG9jYWxlX2RlZmF1bHQuYV0saW5qZWN0OlsncGFuZWwnXSxjb21wb25lbnRzOntFbFNjcm9sbGJhcjpzY3JvbGxiYXJfZGVmYXVsdC5hLENhc2NhZGVyTm9kZTpjYXNjYWRlcl9ub2RlfSxwcm9wczp7bm9kZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6dHJ1ZX0saW5kZXg6TnVtYmVyfSxkYXRhOmZ1bmN0aW9uIGRhdGEoKXtyZXR1cm57YWN0aXZlTm9kZTpudWxsLGhvdmVyVGltZXI6bnVsbCxpZDpPYmplY3QodXRpbF9bImdlbmVyYXRlSWQiXSkoKX07fSxjb21wdXRlZDp7aXNFbXB0eTpmdW5jdGlvbiBpc0VtcHR5KCl7cmV0dXJuIXRoaXMubm9kZXMubGVuZ3RoO30sbWVudUlkOmZ1bmN0aW9uIG1lbnVJZCgpe3JldHVybidjYXNjYWRlci1tZW51LScrdGhpcy5pZCsnLScrdGhpcy5pbmRleDt9fSxtZXRob2RzOntoYW5kbGVFeHBhbmQ6ZnVuY3Rpb24gaGFuZGxlRXhwYW5kKGUpe3RoaXMuYWN0aXZlTm9kZT1lLnRhcmdldDt9LGhhbmRsZU1vdXNlTW92ZTpmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZSl7dmFyIGFjdGl2ZU5vZGU9dGhpcy5hY3RpdmVOb2RlLGhvdmVyVGltZXI9dGhpcy5ob3ZlclRpbWVyO3ZhciBob3ZlclpvbmU9dGhpcy4kcmVmcy5ob3ZlclpvbmU7aWYoIWFjdGl2ZU5vZGV8fCFob3ZlclpvbmUpcmV0dXJuO2lmKGFjdGl2ZU5vZGUuY29udGFpbnMoZS50YXJnZXQpKXtjbGVhclRpbWVvdXQoaG92ZXJUaW1lcik7dmFyIF8kZWwkZ2V0Qm91bmRpbmdDbGllbj10aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsZWZ0PV8kZWwkZ2V0Qm91bmRpbmdDbGllbi5sZWZ0O3ZhciBzdGFydFg9ZS5jbGllbnRYLWxlZnQ7dmFyIF8kZWw9dGhpcy4kZWwsb2Zmc2V0V2lkdGg9XyRlbC5vZmZzZXRXaWR0aCxvZmZzZXRIZWlnaHQ9XyRlbC5vZmZzZXRIZWlnaHQ7dmFyIHRvcD1hY3RpdmVOb2RlLm9mZnNldFRvcDt2YXIgYm90dG9tPXRvcCthY3RpdmVOb2RlLm9mZnNldEhlaWdodDtob3ZlclpvbmUuaW5uZXJIVE1MPSdcbiAgICAgICAgICA8cGF0aCBzdHlsZT0icG9pbnRlci1ldmVudHM6IGF1dG87IiBmaWxsPSJ0cmFuc3BhcmVudCIgZD0iTScrc3RhcnRYKycgJyt0b3ArJyBMJytvZmZzZXRXaWR0aCsnIDAgVicrdG9wKycgWiIgLz5cbiAgICAgICAgICA8cGF0aCBzdHlsZT0icG9pbnRlci1ldmVudHM6IGF1dG87IiBmaWxsPSJ0cmFuc3BhcmVudCIgZD0iTScrc3RhcnRYKycgJytib3R0b20rJyBMJytvZmZzZXRXaWR0aCsnICcrb2Zmc2V0SGVpZ2h0KycgVicrYm90dG9tKycgWiIgLz5cbiAgICAgICAgJzt9ZWxzZSBpZighaG92ZXJUaW1lcil7dGhpcy5ob3ZlclRpbWVyPXNldFRpbWVvdXQodGhpcy5jbGVhckhvdmVyWm9uZSx0aGlzLnBhbmVsLmNvbmZpZy5ob3ZlclRocmVzaG9sZCk7fX0sY2xlYXJIb3ZlclpvbmU6ZnVuY3Rpb24gY2xlYXJIb3ZlclpvbmUoKXt2YXIgaG92ZXJab25lPXRoaXMuJHJlZnMuaG92ZXJab25lO2lmKCFob3ZlclpvbmUpcmV0dXJuO2hvdmVyWm9uZS5pbm5lckhUTUw9Jyc7fSxyZW5kZXJFbXB0eVRleHQ6ZnVuY3Rpb24gcmVuZGVyRW1wdHlUZXh0KGgpe3JldHVybiBoKCdkaXYnLHsnY2xhc3MnOidlbC1jYXNjYWRlci1tZW51X19lbXB0eS10ZXh0J30sW3RoaXMudCgnZWwuY2FzY2FkZXIubm9EYXRhJyldKTt9LHJlbmRlck5vZGVMaXN0OmZ1bmN0aW9uIHJlbmRlck5vZGVMaXN0KGgpe3ZhciBtZW51SWQ9dGhpcy5tZW51SWQ7dmFyIGlzSG92ZXJNZW51PXRoaXMucGFuZWwuaXNIb3Zlck1lbnU7dmFyIGV2ZW50cz17b246e319O2lmKGlzSG92ZXJNZW51KXtldmVudHMub24uZXhwYW5kPXRoaXMuaGFuZGxlRXhwYW5kO312YXIgbm9kZXM9dGhpcy5ub2Rlcy5tYXAoZnVuY3Rpb24obm9kZSxpbmRleCl7dmFyIGhhc0NoaWxkcmVuPW5vZGUuaGFzQ2hpbGRyZW47cmV0dXJuIGgoJ2Nhc2NhZGVyLW5vZGUnLGV4dGVybmFsX2JhYmVsX2hlbHBlcl92dWVfanN4X21lcmdlX3Byb3BzX2RlZmF1bHQoKShbe2tleTpub2RlLnVpZCxhdHRyczp7bm9kZTpub2RlLCdub2RlLWlkJzptZW51SWQrJy0nK2luZGV4LCdhcmlhLWhhc3BvcHVwJzpoYXNDaGlsZHJlbiwnYXJpYS1vd25zJzpoYXNDaGlsZHJlbj9tZW51SWQ6bnVsbH19LGV2ZW50c10pKTt9KTtyZXR1cm5bXS5jb25jYXQobm9kZXMsW2lzSG92ZXJNZW51P2goJ3N2Zycse3JlZjonaG92ZXJab25lJywnY2xhc3MnOidlbC1jYXNjYWRlci1tZW51X19ob3Zlci16b25lJ30pOm51bGxdKTt9fSxyZW5kZXI6ZnVuY3Rpb24gcmVuZGVyKGgpe3ZhciBpc0VtcHR5PXRoaXMuaXNFbXB0eSxtZW51SWQ9dGhpcy5tZW51SWQ7dmFyIGV2ZW50cz17bmF0aXZlT246e319Oy8vIG9wdGltaXplIGhvdmVyIHRvIGV4cGFuZCBleHBlcmllbmNlICgjODAxMCkKaWYodGhpcy5wYW5lbC5pc0hvdmVyTWVudSl7ZXZlbnRzLm5hdGl2ZU9uLm1vdXNlbW92ZT10aGlzLmhhbmRsZU1vdXNlTW92ZTsvLyBldmVudHMubmF0aXZlT24ubW91c2VsZWF2ZSA9IHRoaXMuY2xlYXJIb3ZlclpvbmU7Cn1yZXR1cm4gaCgnZWwtc2Nyb2xsYmFyJyxleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW3thdHRyczp7dGFnOid1bCcscm9sZTonbWVudScsaWQ6bWVudUlkLCd3cmFwLWNsYXNzJzonZWwtY2FzY2FkZXItbWVudV9fd3JhcCcsJ3ZpZXctY2xhc3MnOnsnZWwtY2FzY2FkZXItbWVudV9fbGlzdCc6dHJ1ZSwnaXMtZW1wdHknOmlzRW1wdHl9fSwnY2xhc3MnOidlbC1jYXNjYWRlci1tZW51J30sZXZlbnRzXSksW2lzRW1wdHk/dGhpcy5yZW5kZXJFbXB0eVRleHQoaCk6dGhpcy5yZW5kZXJOb2RlTGlzdChoKV0pO319Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW1lbnUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19jYXNjYWRlcl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWNhc2NhZGVyX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbWVudS52dWUKdmFyIGNhc2NhZGVyX21lbnVfcmVuZGVyLGNhc2NhZGVyX21lbnVfc3RhdGljUmVuZGVyRm5zOy8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgY2FzY2FkZXJfbWVudV9jb21wb25lbnQ9bm9ybWFsaXplQ29tcG9uZW50KHNyY19jYXNjYWRlcl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLGNhc2NhZGVyX21lbnVfcmVuZGVyLGNhc2NhZGVyX21lbnVfc3RhdGljUmVuZGVyRm5zLGZhbHNlLG51bGwsbnVsbCxudWxsKTsvKiBob3QgcmVsb2FkICovaWYoZmFsc2Upe3ZhciBjYXNjYWRlcl9tZW51X2FwaTt9Y2FzY2FkZXJfbWVudV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1tZW51LnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBjYXNjYWRlcl9tZW51PWNhc2NhZGVyX21lbnVfY29tcG9uZW50LmV4cG9ydHM7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvbm9kZS5qcwp2YXIgbm9kZV9jcmVhdGVDbGFzcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fGZhbHNlO2Rlc2NyaXB0b3IuY29uZmlndXJhYmxlPXRydWU7aWYoInZhbHVlImluIGRlc2NyaXB0b3IpZGVzY3JpcHRvci53cml0YWJsZT10cnVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsZGVzY3JpcHRvci5rZXksZGVzY3JpcHRvcik7fX1yZXR1cm4gZnVuY3Rpb24oQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQcm9wcyl7aWYocHJvdG9Qcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSxwcm90b1Byb3BzKTtpZihzdGF0aWNQcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLHN0YXRpY1Byb3BzKTtyZXR1cm4gQ29uc3RydWN0b3I7fTt9KCk7ZnVuY3Rpb24gc3JjX25vZGVfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3Rvcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpO319dmFyIHVpZD0wO3ZhciBzcmNfbm9kZV9Ob2RlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTm9kZShkYXRhLGNvbmZpZyxwYXJlbnROb2RlKXtzcmNfbm9kZV9jbGFzc0NhbGxDaGVjayh0aGlzLE5vZGUpO3RoaXMuZGF0YT1kYXRhO3RoaXMuY29uZmlnPWNvbmZpZzt0aGlzLnBhcmVudD1wYXJlbnROb2RlfHxudWxsO3RoaXMubGV2ZWw9IXRoaXMucGFyZW50PzE6dGhpcy5wYXJlbnQubGV2ZWwrMTt0aGlzLnVpZD11aWQrKzt0aGlzLmluaXRTdGF0ZSgpO3RoaXMuaW5pdENoaWxkcmVuKCk7fU5vZGUucHJvdG90eXBlLmluaXRTdGF0ZT1mdW5jdGlvbiBpbml0U3RhdGUoKXt2YXIgX2NvbmZpZz10aGlzLmNvbmZpZyx2YWx1ZUtleT1fY29uZmlnLnZhbHVlLGxhYmVsS2V5PV9jb25maWcubGFiZWw7dGhpcy52YWx1ZT10aGlzLmRhdGFbdmFsdWVLZXldO3RoaXMubGFiZWw9dGhpcy5kYXRhW2xhYmVsS2V5XTt0aGlzLnBhdGhOb2Rlcz10aGlzLmNhbGN1bGF0ZVBhdGhOb2RlcygpO3RoaXMucGF0aD10aGlzLnBhdGhOb2Rlcy5tYXAoZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUudmFsdWU7fSk7dGhpcy5wYXRoTGFiZWxzPXRoaXMucGF0aE5vZGVzLm1hcChmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5sYWJlbDt9KTsvLyBsYXp5IGxvYWQKdGhpcy5sb2FkaW5nPWZhbHNlO3RoaXMubG9hZGVkPWZhbHNlO307Tm9kZS5wcm90b3R5cGUuaW5pdENoaWxkcmVuPWZ1bmN0aW9uIGluaXRDaGlsZHJlbigpe3ZhciBfdGhpcz10aGlzO3ZhciBjb25maWc9dGhpcy5jb25maWc7dmFyIGNoaWxkcmVuS2V5PWNvbmZpZy5jaGlsZHJlbjt2YXIgY2hpbGRyZW5EYXRhPXRoaXMuZGF0YVtjaGlsZHJlbktleV07dGhpcy5oYXNDaGlsZHJlbj1BcnJheS5pc0FycmF5KGNoaWxkcmVuRGF0YSk7dGhpcy5jaGlsZHJlbj0oY2hpbGRyZW5EYXRhfHxbXSkubWFwKGZ1bmN0aW9uKGNoaWxkKXtyZXR1cm4gbmV3IE5vZGUoY2hpbGQsY29uZmlnLF90aGlzKTt9KTt9O05vZGUucHJvdG90eXBlLmNhbGN1bGF0ZVBhdGhOb2Rlcz1mdW5jdGlvbiBjYWxjdWxhdGVQYXRoTm9kZXMoKXt2YXIgbm9kZXM9W3RoaXNdO3ZhciBwYXJlbnQ9dGhpcy5wYXJlbnQ7d2hpbGUocGFyZW50KXtub2Rlcy51bnNoaWZ0KHBhcmVudCk7cGFyZW50PXBhcmVudC5wYXJlbnQ7fXJldHVybiBub2Rlczt9O05vZGUucHJvdG90eXBlLmdldFBhdGg9ZnVuY3Rpb24gZ2V0UGF0aCgpe3JldHVybiB0aGlzLnBhdGg7fTtOb2RlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbiBnZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlO307Tm9kZS5wcm90b3R5cGUuZ2V0VmFsdWVCeU9wdGlvbj1mdW5jdGlvbiBnZXRWYWx1ZUJ5T3B0aW9uKCl7cmV0dXJuIHRoaXMuY29uZmlnLmVtaXRQYXRoP3RoaXMuZ2V0UGF0aCgpOnRoaXMuZ2V0VmFsdWUoKTt9O05vZGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24gZ2V0VGV4dChhbGxMZXZlbHMsc2VwYXJhdG9yKXtyZXR1cm4gYWxsTGV2ZWxzP3RoaXMucGF0aExhYmVscy5qb2luKHNlcGFyYXRvcik6dGhpcy5sYWJlbDt9O05vZGUucHJvdG90eXBlLmlzU2FtZU5vZGU9ZnVuY3Rpb24gaXNTYW1lTm9kZShjaGVja2VkVmFsdWUpe3ZhciB2YWx1ZT10aGlzLmdldFZhbHVlQnlPcHRpb24oKTtyZXR1cm4gdGhpcy5jb25maWcubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoY2hlY2tlZFZhbHVlKT9jaGVja2VkVmFsdWUuc29tZShmdW5jdGlvbih2YWwpe3JldHVybiBPYmplY3QodXRpbF9bImlzRXF1YWwiXSkodmFsLHZhbHVlKTt9KTpPYmplY3QodXRpbF9bImlzRXF1YWwiXSkoY2hlY2tlZFZhbHVlLHZhbHVlKTt9O05vZGUucHJvdG90eXBlLmJyb2FkY2FzdD1mdW5jdGlvbiBicm9hZGNhc3QoZXZlbnQpe2Zvcih2YXIgX2xlbj1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9QXJyYXkoX2xlbj4xP19sZW4tMTowKSxfa2V5PTE7X2tleTxfbGVuO19rZXkrKyl7YXJnc1tfa2V5LTFdPWFyZ3VtZW50c1tfa2V5XTt9dmFyIGhhbmRsZXJOYW1lPSdvblBhcmVudCcrT2JqZWN0KHV0aWxfWyJjYXBpdGFsaXplIl0pKGV2ZW50KTt0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpe2lmKGNoaWxkKXsvLyBib3R0b20gdXAKY2hpbGQuYnJvYWRjYXN0LmFwcGx5KGNoaWxkLFtldmVudF0uY29uY2F0KGFyZ3MpKTtjaGlsZFtoYW5kbGVyTmFtZV0mJmNoaWxkW2hhbmRsZXJOYW1lXS5hcHBseShjaGlsZCxhcmdzKTt9fSk7fTtOb2RlLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uIGVtaXQoZXZlbnQpe3ZhciBwYXJlbnQ9dGhpcy5wYXJlbnQ7dmFyIGhhbmRsZXJOYW1lPSdvbkNoaWxkJytPYmplY3QodXRpbF9bImNhcGl0YWxpemUiXSkoZXZlbnQpO2lmKHBhcmVudCl7Zm9yKHZhciBfbGVuMj1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9QXJyYXkoX2xlbjI+MT9fbGVuMi0xOjApLF9rZXkyPTE7X2tleTI8X2xlbjI7X2tleTIrKyl7YXJnc1tfa2V5Mi0xXT1hcmd1bWVudHNbX2tleTJdO31wYXJlbnRbaGFuZGxlck5hbWVdJiZwYXJlbnRbaGFuZGxlck5hbWVdLmFwcGx5KHBhcmVudCxhcmdzKTtwYXJlbnQuZW1pdC5hcHBseShwYXJlbnQsW2V2ZW50XS5jb25jYXQoYXJncykpO319O05vZGUucHJvdG90eXBlLm9uUGFyZW50Q2hlY2s9ZnVuY3Rpb24gb25QYXJlbnRDaGVjayhjaGVja2VkKXtpZighdGhpcy5pc0Rpc2FibGVkKXt0aGlzLnNldENoZWNrU3RhdGUoY2hlY2tlZCk7fX07Tm9kZS5wcm90b3R5cGUub25DaGlsZENoZWNrPWZ1bmN0aW9uIG9uQ2hpbGRDaGVjaygpe3ZhciBjaGlsZHJlbj10aGlzLmNoaWxkcmVuO3ZhciB2YWxpZENoaWxkcmVuPWNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihjaGlsZCl7cmV0dXJuIWNoaWxkLmlzRGlzYWJsZWQ7fSk7dmFyIGNoZWNrZWQ9dmFsaWRDaGlsZHJlbi5sZW5ndGg/dmFsaWRDaGlsZHJlbi5ldmVyeShmdW5jdGlvbihjaGlsZCl7cmV0dXJuIGNoaWxkLmNoZWNrZWQ7fSk6ZmFsc2U7dGhpcy5zZXRDaGVja1N0YXRlKGNoZWNrZWQpO307Tm9kZS5wcm90b3R5cGUuc2V0Q2hlY2tTdGF0ZT1mdW5jdGlvbiBzZXRDaGVja1N0YXRlKGNoZWNrZWQpe3ZhciB0b3RhbE51bT10aGlzLmNoaWxkcmVuLmxlbmd0aDt2YXIgY2hlY2tlZE51bT10aGlzLmNoaWxkcmVuLnJlZHVjZShmdW5jdGlvbihjLHApe3ZhciBudW09cC5jaGVja2VkPzE6cC5pbmRldGVybWluYXRlPzAuNTowO3JldHVybiBjK251bTt9LDApO3RoaXMuY2hlY2tlZD1jaGVja2VkO3RoaXMuaW5kZXRlcm1pbmF0ZT1jaGVja2VkTnVtIT09dG90YWxOdW0mJmNoZWNrZWROdW0+MDt9O05vZGUucHJvdG90eXBlLnN5bmNDaGVja1N0YXRlPWZ1bmN0aW9uIHN5bmNDaGVja1N0YXRlKGNoZWNrZWRWYWx1ZSl7dmFyIHZhbHVlPXRoaXMuZ2V0VmFsdWVCeU9wdGlvbigpO3ZhciBjaGVja2VkPXRoaXMuaXNTYW1lTm9kZShjaGVja2VkVmFsdWUsdmFsdWUpO3RoaXMuZG9DaGVjayhjaGVja2VkKTt9O05vZGUucHJvdG90eXBlLmRvQ2hlY2s9ZnVuY3Rpb24gZG9DaGVjayhjaGVja2VkKXtpZih0aGlzLmNoZWNrZWQhPT1jaGVja2VkKXtpZih0aGlzLmNvbmZpZy5jaGVja1N0cmljdGx5KXt0aGlzLmNoZWNrZWQ9Y2hlY2tlZDt9ZWxzZXsvLyBib3R0b20gdXAgdG8gdW5pZnkgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBpbmRldGVybWluYXRlIHN0YXRlCnRoaXMuYnJvYWRjYXN0KCdjaGVjaycsY2hlY2tlZCk7dGhpcy5zZXRDaGVja1N0YXRlKGNoZWNrZWQpO3RoaXMuZW1pdCgnY2hlY2snKTt9fX07bm9kZV9jcmVhdGVDbGFzcyhOb2RlLFt7a2V5Oidpc0Rpc2FibGVkJyxnZXQ6ZnVuY3Rpb24gZ2V0KCl7dmFyIGRhdGE9dGhpcy5kYXRhLHBhcmVudD10aGlzLnBhcmVudCxjb25maWc9dGhpcy5jb25maWc7dmFyIGRpc2FibGVkS2V5PWNvbmZpZy5kaXNhYmxlZDt2YXIgY2hlY2tTdHJpY3RseT1jb25maWcuY2hlY2tTdHJpY3RseTtyZXR1cm4gZGF0YVtkaXNhYmxlZEtleV18fCFjaGVja1N0cmljdGx5JiZwYXJlbnQmJnBhcmVudC5pc0Rpc2FibGVkO319LHtrZXk6J2lzTGVhZicsZ2V0OmZ1bmN0aW9uIGdldCgpe3ZhciBkYXRhPXRoaXMuZGF0YSxsb2FkZWQ9dGhpcy5sb2FkZWQsaGFzQ2hpbGRyZW49dGhpcy5oYXNDaGlsZHJlbixjaGlsZHJlbj10aGlzLmNoaWxkcmVuO3ZhciBfY29uZmlnMj10aGlzLmNvbmZpZyxsYXp5PV9jb25maWcyLmxhenksbGVhZktleT1fY29uZmlnMi5sZWFmO2lmKGxhenkpe3ZhciBpc0xlYWY9T2JqZWN0KHNoYXJlZF9bImlzRGVmIl0pKGRhdGFbbGVhZktleV0pP2RhdGFbbGVhZktleV06bG9hZGVkPyFjaGlsZHJlbi5sZW5ndGg6ZmFsc2U7dGhpcy5oYXNDaGlsZHJlbj0haXNMZWFmO3JldHVybiBpc0xlYWY7fXJldHVybiFoYXNDaGlsZHJlbjt9fV0pO3JldHVybiBOb2RlO30oKTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHNyY19ub2RlPXNyY19ub2RlX05vZGU7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvc3RvcmUuanMKZnVuY3Rpb24gc3RvcmVfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3Rvcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpO319dmFyIGZsYXROb2Rlcz1mdW5jdGlvbiBmbGF0Tm9kZXMoZGF0YSxsZWFmT25seSl7cmV0dXJuIGRhdGEucmVkdWNlKGZ1bmN0aW9uKHJlcyxub2RlKXtpZihub2RlLmlzTGVhZil7cmVzLnB1c2gobm9kZSk7fWVsc2V7IWxlYWZPbmx5JiZyZXMucHVzaChub2RlKTtyZXM9cmVzLmNvbmNhdChmbGF0Tm9kZXMobm9kZS5jaGlsZHJlbixsZWFmT25seSkpO31yZXR1cm4gcmVzO30sW10pO307dmFyIHN0b3JlX1N0b3JlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gU3RvcmUoZGF0YSxjb25maWcpe3N0b3JlX2NsYXNzQ2FsbENoZWNrKHRoaXMsU3RvcmUpO3RoaXMuY29uZmlnPWNvbmZpZzt0aGlzLmluaXROb2RlcyhkYXRhKTt9U3RvcmUucHJvdG90eXBlLmluaXROb2Rlcz1mdW5jdGlvbiBpbml0Tm9kZXMoZGF0YSl7dmFyIF90aGlzPXRoaXM7ZGF0YT1PYmplY3QodXRpbF9bImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheSJdKShkYXRhKTt0aGlzLm5vZGVzPWRhdGEubWFwKGZ1bmN0aW9uKG5vZGVEYXRhKXtyZXR1cm4gbmV3IHNyY19ub2RlKG5vZGVEYXRhLF90aGlzLmNvbmZpZyk7fSk7dGhpcy5mbGF0dGVkTm9kZXM9dGhpcy5nZXRGbGF0dGVkTm9kZXMoZmFsc2UsZmFsc2UpO3RoaXMubGVhZk5vZGVzPXRoaXMuZ2V0RmxhdHRlZE5vZGVzKHRydWUsZmFsc2UpO307U3RvcmUucHJvdG90eXBlLmFwcGVuZE5vZGU9ZnVuY3Rpb24gYXBwZW5kTm9kZShub2RlRGF0YSxwYXJlbnROb2RlKXt2YXIgbm9kZT1uZXcgc3JjX25vZGUobm9kZURhdGEsdGhpcy5jb25maWcscGFyZW50Tm9kZSk7dmFyIGNoaWxkcmVuPXBhcmVudE5vZGU/cGFyZW50Tm9kZS5jaGlsZHJlbjp0aGlzLm5vZGVzO2NoaWxkcmVuLnB1c2gobm9kZSk7fTtTdG9yZS5wcm90b3R5cGUuYXBwZW5kTm9kZXM9ZnVuY3Rpb24gYXBwZW5kTm9kZXMobm9kZURhdGFMaXN0LHBhcmVudE5vZGUpe3ZhciBfdGhpczI9dGhpcztub2RlRGF0YUxpc3Q9T2JqZWN0KHV0aWxfWyJjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXkiXSkobm9kZURhdGFMaXN0KTtub2RlRGF0YUxpc3QuZm9yRWFjaChmdW5jdGlvbihub2RlRGF0YSl7cmV0dXJuIF90aGlzMi5hcHBlbmROb2RlKG5vZGVEYXRhLHBhcmVudE5vZGUpO30pO307U3RvcmUucHJvdG90eXBlLmdldE5vZGVzPWZ1bmN0aW9uIGdldE5vZGVzKCl7cmV0dXJuIHRoaXMubm9kZXM7fTtTdG9yZS5wcm90b3R5cGUuZ2V0RmxhdHRlZE5vZGVzPWZ1bmN0aW9uIGdldEZsYXR0ZWROb2RlcyhsZWFmT25seSl7dmFyIGNhY2hlZD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMV06dHJ1ZTt2YXIgY2FjaGVkTm9kZXM9bGVhZk9ubHk/dGhpcy5sZWFmTm9kZXM6dGhpcy5mbGF0dGVkTm9kZXM7cmV0dXJuIGNhY2hlZD9jYWNoZWROb2RlczpmbGF0Tm9kZXModGhpcy5ub2RlcyxsZWFmT25seSk7fTtTdG9yZS5wcm90b3R5cGUuZ2V0Tm9kZUJ5VmFsdWU9ZnVuY3Rpb24gZ2V0Tm9kZUJ5VmFsdWUodmFsdWUpe2lmKHZhbHVlKXt2YXIgbm9kZXM9dGhpcy5nZXRGbGF0dGVkTm9kZXMoZmFsc2UsIXRoaXMuY29uZmlnLmxhenkpLmZpbHRlcihmdW5jdGlvbihub2RlKXtyZXR1cm4gT2JqZWN0KHV0aWxfWyJ2YWx1ZUVxdWFscyJdKShub2RlLnBhdGgsdmFsdWUpfHxub2RlLnZhbHVlPT09dmFsdWU7fSk7cmV0dXJuIG5vZGVzJiZub2Rlcy5sZW5ndGg/bm9kZXNbMF06bnVsbDt9cmV0dXJuIG51bGw7fTtyZXR1cm4gU3RvcmU7fSgpOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgY2FzY2FkZXJfcGFuZWxfc3JjX3N0b3JlPXN0b3JlX1N0b3JlOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCnZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2V4dGVuZHM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odGFyZ2V0KXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgc291cmNlPWFyZ3VtZW50c1tpXTtmb3IodmFyIGtleSBpbiBzb3VyY2Upe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2Usa2V5KSl7dGFyZ2V0W2tleV09c291cmNlW2tleV07fX19cmV0dXJuIHRhcmdldDt9Oy8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0tleUNvZGU9YXJpYV91dGlsc19kZWZhdWx0LmEua2V5czt2YXIgRGVmYXVsdFByb3BzPXtleHBhbmRUcmlnZ2VyOidjbGljaycsLy8gb3IgaG92ZXIKbXVsdGlwbGU6ZmFsc2UsY2hlY2tTdHJpY3RseTpmYWxzZSwvLyB3aGV0aGVyIGFsbCBub2RlcyBjYW4gYmUgc2VsZWN0ZWQKZW1pdFBhdGg6dHJ1ZSwvLyB3ZXRoZXIgdG8gZW1pdCBhbiBhcnJheSBvZiBhbGwgbGV2ZWxzIHZhbHVlIGluIHdoaWNoIG5vZGUgaXMgbG9jYXRlZApsYXp5OmZhbHNlLGxhenlMb2FkOnV0aWxfWyJub29wIl0sdmFsdWU6J3ZhbHVlJyxsYWJlbDonbGFiZWwnLGNoaWxkcmVuOidjaGlsZHJlbicsbGVhZjonbGVhZicsZGlzYWJsZWQ6J2Rpc2FibGVkJyxob3ZlclRocmVzaG9sZDo1MDB9O3ZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2lzTGVhZj1mdW5jdGlvbiBpc0xlYWYoZWwpe3JldHVybiFlbC5nZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycpO307dmFyIGdldFNpYmxpbmc9ZnVuY3Rpb24gZ2V0U2libGluZyhlbCxkaXN0YW5jZSl7dmFyIHBhcmVudE5vZGU9ZWwucGFyZW50Tm9kZTtpZihwYXJlbnROb2RlKXt2YXIgc2libGluZ3M9cGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtY2FzY2FkZXItbm9kZVt0YWJpbmRleD0iLTEiXScpO3ZhciBpbmRleD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHNpYmxpbmdzLGVsKTtyZXR1cm4gc2libGluZ3NbaW5kZXgrZGlzdGFuY2VdfHxudWxsO31yZXR1cm4gbnVsbDt9O3ZhciBnZXRNZW51SW5kZXg9ZnVuY3Rpb24gZ2V0TWVudUluZGV4KGVsLGRpc3RhbmNlKXtpZighZWwpcmV0dXJuO3ZhciBwaWVjZXM9ZWwuaWQuc3BsaXQoJy0nKTtyZXR1cm4gTnVtYmVyKHBpZWNlc1twaWVjZXMubGVuZ3RoLTJdKTt9O3ZhciBmb2N1c05vZGU9ZnVuY3Rpb24gZm9jdXNOb2RlKGVsKXtpZighZWwpcmV0dXJuO2VsLmZvY3VzKCk7IWNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfaXNMZWFmKGVsKSYmZWwuY2xpY2soKTt9O3ZhciBjaGVja05vZGU9ZnVuY3Rpb24gY2hlY2tOb2RlKGVsKXtpZighZWwpcmV0dXJuO3ZhciBpbnB1dD1lbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO2lmKGlucHV0KXtpbnB1dC5jbGljaygpO31lbHNlIGlmKGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfaXNMZWFmKGVsKSl7ZWwuY2xpY2soKTt9fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbENhc2NhZGVyUGFuZWwnLGNvbXBvbmVudHM6e0Nhc2NhZGVyTWVudTpjYXNjYWRlcl9tZW51fSxwcm9wczp7dmFsdWU6e30sb3B0aW9uczpBcnJheSxwcm9wczpPYmplY3QsYm9yZGVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxyZW5kZXJMYWJlbDpGdW5jdGlvbn0scHJvdmlkZTpmdW5jdGlvbiBwcm92aWRlKCl7cmV0dXJue3BhbmVsOnRoaXN9O30sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2NoZWNrZWRWYWx1ZTpudWxsLGNoZWNrZWROb2RlUGF0aHM6W10sc3RvcmU6W10sbWVudXM6W10sYWN0aXZlUGF0aDpbXSxsb2FkQ291bnQ6MH07fSxjb21wdXRlZDp7Y29uZmlnOmZ1bmN0aW9uIGNvbmZpZygpe3JldHVybiBtZXJnZV9kZWZhdWx0KCkoY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19leHRlbmRzKHt9LERlZmF1bHRQcm9wcyksdGhpcy5wcm9wc3x8e30pO30sbXVsdGlwbGU6ZnVuY3Rpb24gbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5jb25maWcubXVsdGlwbGU7fSxjaGVja1N0cmljdGx5OmZ1bmN0aW9uIGNoZWNrU3RyaWN0bHkoKXtyZXR1cm4gdGhpcy5jb25maWcuY2hlY2tTdHJpY3RseTt9LGxlYWZPbmx5OmZ1bmN0aW9uIGxlYWZPbmx5KCl7cmV0dXJuIXRoaXMuY2hlY2tTdHJpY3RseTt9LGlzSG92ZXJNZW51OmZ1bmN0aW9uIGlzSG92ZXJNZW51KCl7cmV0dXJuIHRoaXMuY29uZmlnLmV4cGFuZFRyaWdnZXI9PT0naG92ZXInO30scmVuZGVyTGFiZWxGbjpmdW5jdGlvbiByZW5kZXJMYWJlbEZuKCl7cmV0dXJuIHRoaXMucmVuZGVyTGFiZWx8fHRoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHQ7fX0sd2F0Y2g6e29wdGlvbnM6e2hhbmRsZXI6ZnVuY3Rpb24gaGFuZGxlcigpe3RoaXMuaW5pdFN0b3JlKCk7fSxpbW1lZGlhdGU6dHJ1ZSxkZWVwOnRydWV9LHZhbHVlOmZ1bmN0aW9uIHZhbHVlKCl7dGhpcy5zeW5jQ2hlY2tlZFZhbHVlKCk7dGhpcy5jaGVja1N0cmljdGx5JiZ0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKTt9LGNoZWNrZWRWYWx1ZTpmdW5jdGlvbiBjaGVja2VkVmFsdWUodmFsKXtpZighT2JqZWN0KHV0aWxfWyJpc0VxdWFsIl0pKHZhbCx0aGlzLnZhbHVlKSl7dGhpcy5jaGVja1N0cmljdGx5JiZ0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKTt0aGlzLiRlbWl0KCdpbnB1dCcsdmFsKTt0aGlzLiRlbWl0KCdjaGFuZ2UnLHZhbCk7fX19LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe2lmKCFPYmplY3QodXRpbF9bImlzRW1wdHkiXSkodGhpcy52YWx1ZSkpe3RoaXMuc3luY0NoZWNrZWRWYWx1ZSgpO319LG1ldGhvZHM6e2luaXRTdG9yZTpmdW5jdGlvbiBpbml0U3RvcmUoKXt2YXIgY29uZmlnPXRoaXMuY29uZmlnLG9wdGlvbnM9dGhpcy5vcHRpb25zO2lmKGNvbmZpZy5sYXp5JiZPYmplY3QodXRpbF9bImlzRW1wdHkiXSkob3B0aW9ucykpe3RoaXMubGF6eUxvYWQoKTt9ZWxzZXt0aGlzLnN0b3JlPW5ldyBjYXNjYWRlcl9wYW5lbF9zcmNfc3RvcmUob3B0aW9ucyxjb25maWcpO3RoaXMubWVudXM9W3RoaXMuc3RvcmUuZ2V0Tm9kZXMoKV07dGhpcy5zeW5jTWVudVN0YXRlKCk7fX0sc3luY0NoZWNrZWRWYWx1ZTpmdW5jdGlvbiBzeW5jQ2hlY2tlZFZhbHVlKCl7dmFyIHZhbHVlPXRoaXMudmFsdWUsY2hlY2tlZFZhbHVlPXRoaXMuY2hlY2tlZFZhbHVlO2lmKCFPYmplY3QodXRpbF9bImlzRXF1YWwiXSkodmFsdWUsY2hlY2tlZFZhbHVlKSl7dGhpcy5jaGVja2VkVmFsdWU9dmFsdWU7dGhpcy5zeW5jTWVudVN0YXRlKCk7fX0sc3luY01lbnVTdGF0ZTpmdW5jdGlvbiBzeW5jTWVudVN0YXRlKCl7dmFyIG11bHRpcGxlPXRoaXMubXVsdGlwbGUsY2hlY2tTdHJpY3RseT10aGlzLmNoZWNrU3RyaWN0bHk7dGhpcy5zeW5jQWN0aXZlUGF0aCgpO211bHRpcGxlJiZ0aGlzLnN5bmNNdWx0aUNoZWNrU3RhdGUoKTtjaGVja1N0cmljdGx5JiZ0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKTt0aGlzLiRuZXh0VGljayh0aGlzLnNjcm9sbEludG9WaWV3KTt9LHN5bmNNdWx0aUNoZWNrU3RhdGU6ZnVuY3Rpb24gc3luY011bHRpQ2hlY2tTdGF0ZSgpe3ZhciBfdGhpcz10aGlzO3ZhciBub2Rlcz10aGlzLmdldEZsYXR0ZWROb2Rlcyh0aGlzLmxlYWZPbmx5KTtub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe25vZGUuc3luY0NoZWNrU3RhdGUoX3RoaXMuY2hlY2tlZFZhbHVlKTt9KTt9LHN5bmNBY3RpdmVQYXRoOmZ1bmN0aW9uIHN5bmNBY3RpdmVQYXRoKCl7dmFyIF90aGlzMj10aGlzO3ZhciBzdG9yZT10aGlzLnN0b3JlLG11bHRpcGxlPXRoaXMubXVsdGlwbGUsYWN0aXZlUGF0aD10aGlzLmFjdGl2ZVBhdGgsY2hlY2tlZFZhbHVlPXRoaXMuY2hlY2tlZFZhbHVlO2lmKCFPYmplY3QodXRpbF9bImlzRW1wdHkiXSkoYWN0aXZlUGF0aCkpe3ZhciBub2Rlcz1hY3RpdmVQYXRoLm1hcChmdW5jdGlvbihub2RlKXtyZXR1cm4gX3RoaXMyLmdldE5vZGVCeVZhbHVlKG5vZGUuZ2V0VmFsdWUoKSk7fSk7dGhpcy5leHBhbmROb2Rlcyhub2Rlcyk7fWVsc2UgaWYoIU9iamVjdCh1dGlsX1siaXNFbXB0eSJdKShjaGVja2VkVmFsdWUpKXt2YXIgdmFsdWU9bXVsdGlwbGU/Y2hlY2tlZFZhbHVlWzBdOmNoZWNrZWRWYWx1ZTt2YXIgY2hlY2tlZE5vZGU9dGhpcy5nZXROb2RlQnlWYWx1ZSh2YWx1ZSl8fHt9O3ZhciBfbm9kZXM9KGNoZWNrZWROb2RlLnBhdGhOb2Rlc3x8W10pLnNsaWNlKDAsLTEpO3RoaXMuZXhwYW5kTm9kZXMoX25vZGVzKTt9ZWxzZXt0aGlzLmFjdGl2ZVBhdGg9W107dGhpcy5tZW51cz1bc3RvcmUuZ2V0Tm9kZXMoKV07fX0sZXhwYW5kTm9kZXM6ZnVuY3Rpb24gZXhwYW5kTm9kZXMobm9kZXMpe3ZhciBfdGhpczM9dGhpcztub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe3JldHVybiBfdGhpczMuaGFuZGxlRXhwYW5kKG5vZGUsdHJ1ZS8qIHNpbGVudCAqLyk7fSk7fSxjYWxjdWxhdGVDaGVja2VkTm9kZVBhdGhzOmZ1bmN0aW9uIGNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKXt2YXIgX3RoaXM0PXRoaXM7dmFyIGNoZWNrZWRWYWx1ZT10aGlzLmNoZWNrZWRWYWx1ZSxtdWx0aXBsZT10aGlzLm11bHRpcGxlO3ZhciBjaGVja2VkVmFsdWVzPW11bHRpcGxlP09iamVjdCh1dGlsX1siY29lcmNlVHJ1dGh5VmFsdWVUb0FycmF5Il0pKGNoZWNrZWRWYWx1ZSk6W2NoZWNrZWRWYWx1ZV07dGhpcy5jaGVja2VkTm9kZVBhdGhzPWNoZWNrZWRWYWx1ZXMubWFwKGZ1bmN0aW9uKHYpe3ZhciBjaGVja2VkTm9kZT1fdGhpczQuZ2V0Tm9kZUJ5VmFsdWUodik7cmV0dXJuIGNoZWNrZWROb2RlP2NoZWNrZWROb2RlLnBhdGhOb2RlczpbXTt9KTt9LGhhbmRsZUtleURvd246ZnVuY3Rpb24gaGFuZGxlS2V5RG93bihlKXt2YXIgdGFyZ2V0PWUudGFyZ2V0LGtleUNvZGU9ZS5rZXlDb2RlO3N3aXRjaChrZXlDb2RlKXtjYXNlIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfS2V5Q29kZS51cDp2YXIgcHJldj1nZXRTaWJsaW5nKHRhcmdldCwtMSk7Zm9jdXNOb2RlKHByZXYpO2JyZWFrO2Nhc2UgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19LZXlDb2RlLmRvd246dmFyIG5leHQ9Z2V0U2libGluZyh0YXJnZXQsMSk7Zm9jdXNOb2RlKG5leHQpO2JyZWFrO2Nhc2UgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19LZXlDb2RlLmxlZnQ6dmFyIHByZU1lbnU9dGhpcy4kcmVmcy5tZW51W2dldE1lbnVJbmRleCh0YXJnZXQpLTFdO2lmKHByZU1lbnUpe3ZhciBleHBhbmRlZE5vZGU9cHJlTWVudS4kZWwucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyLW5vZGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdJyk7Zm9jdXNOb2RlKGV4cGFuZGVkTm9kZSk7fWJyZWFrO2Nhc2UgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19LZXlDb2RlLnJpZ2h0OnZhciBuZXh0TWVudT10aGlzLiRyZWZzLm1lbnVbZ2V0TWVudUluZGV4KHRhcmdldCkrMV07aWYobmV4dE1lbnUpe3ZhciBmaXJzdE5vZGU9bmV4dE1lbnUuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1ub2RlW3RhYmluZGV4PSItMSJdJyk7Zm9jdXNOb2RlKGZpcnN0Tm9kZSk7fWJyZWFrO2Nhc2UgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19LZXlDb2RlLmVudGVyOmNoZWNrTm9kZSh0YXJnZXQpO2JyZWFrO2Nhc2UgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19LZXlDb2RlLmVzYzpjYXNlIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfS2V5Q29kZS50YWI6dGhpcy4kZW1pdCgnY2xvc2UnKTticmVhaztkZWZhdWx0OnJldHVybjt9fSxoYW5kbGVFeHBhbmQ6ZnVuY3Rpb24gaGFuZGxlRXhwYW5kKG5vZGUsc2lsZW50KXt2YXIgYWN0aXZlUGF0aD10aGlzLmFjdGl2ZVBhdGg7dmFyIGxldmVsPW5vZGUubGV2ZWw7dmFyIHBhdGg9YWN0aXZlUGF0aC5zbGljZSgwLGxldmVsLTEpO3ZhciBtZW51cz10aGlzLm1lbnVzLnNsaWNlKDAsbGV2ZWwpO2lmKCFub2RlLmlzTGVhZil7cGF0aC5wdXNoKG5vZGUpO21lbnVzLnB1c2gobm9kZS5jaGlsZHJlbik7fXRoaXMuYWN0aXZlUGF0aD1wYXRoO3RoaXMubWVudXM9bWVudXM7aWYoIXNpbGVudCl7dmFyIHBhdGhWYWx1ZXM9cGF0aC5tYXAoZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUuZ2V0VmFsdWUoKTt9KTt2YXIgYWN0aXZlUGF0aFZhbHVlcz1hY3RpdmVQYXRoLm1hcChmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5nZXRWYWx1ZSgpO30pO2lmKCFPYmplY3QodXRpbF9bInZhbHVlRXF1YWxzIl0pKHBhdGhWYWx1ZXMsYWN0aXZlUGF0aFZhbHVlcykpe3RoaXMuJGVtaXQoJ2FjdGl2ZS1pdGVtLWNoYW5nZScscGF0aFZhbHVlcyk7Ly8gRGVwcmVjYXRlZAp0aGlzLiRlbWl0KCdleHBhbmQtY2hhbmdlJyxwYXRoVmFsdWVzKTt9fX0saGFuZGxlQ2hlY2tDaGFuZ2U6ZnVuY3Rpb24gaGFuZGxlQ2hlY2tDaGFuZ2UodmFsdWUpe3RoaXMuY2hlY2tlZFZhbHVlPXZhbHVlO30sbGF6eUxvYWQ6ZnVuY3Rpb24gbGF6eUxvYWQobm9kZSxvbkZ1bGxmaWxlZCl7dmFyIF90aGlzNT10aGlzO3ZhciBjb25maWc9dGhpcy5jb25maWc7aWYoIW5vZGUpe25vZGU9bm9kZXx8e3Jvb3Q6dHJ1ZSxsZXZlbDowfTt0aGlzLnN0b3JlPW5ldyBjYXNjYWRlcl9wYW5lbF9zcmNfc3RvcmUoW10sY29uZmlnKTt0aGlzLm1lbnVzPVt0aGlzLnN0b3JlLmdldE5vZGVzKCldO31ub2RlLmxvYWRpbmc9dHJ1ZTt2YXIgcmVzb2x2ZT1mdW5jdGlvbiByZXNvbHZlKGRhdGFMaXN0KXt2YXIgcGFyZW50PW5vZGUucm9vdD9udWxsOm5vZGU7ZGF0YUxpc3QmJmRhdGFMaXN0Lmxlbmd0aCYmX3RoaXM1LnN0b3JlLmFwcGVuZE5vZGVzKGRhdGFMaXN0LHBhcmVudCk7bm9kZS5sb2FkaW5nPWZhbHNlO25vZGUubG9hZGVkPXRydWU7Ly8gZGlzcG9zZSBkZWZhdWx0IHZhbHVlIG9uIGxhenkgbG9hZCBtb2RlCmlmKEFycmF5LmlzQXJyYXkoX3RoaXM1LmNoZWNrZWRWYWx1ZSkpe3ZhciBub2RlVmFsdWU9X3RoaXM1LmNoZWNrZWRWYWx1ZVtfdGhpczUubG9hZENvdW50KytdO3ZhciB2YWx1ZUtleT1fdGhpczUuY29uZmlnLnZhbHVlO3ZhciBsZWFmS2V5PV90aGlzNS5jb25maWcubGVhZjtpZihBcnJheS5pc0FycmF5KGRhdGFMaXN0KSYmZGF0YUxpc3QuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBpdGVtW3ZhbHVlS2V5XT09PW5vZGVWYWx1ZTt9KS5sZW5ndGg+MCl7dmFyIGNoZWNrZWROb2RlPV90aGlzNS5zdG9yZS5nZXROb2RlQnlWYWx1ZShub2RlVmFsdWUpO2lmKCFjaGVja2VkTm9kZS5kYXRhW2xlYWZLZXldKXtfdGhpczUubGF6eUxvYWQoY2hlY2tlZE5vZGUsZnVuY3Rpb24oKXtfdGhpczUuaGFuZGxlRXhwYW5kKGNoZWNrZWROb2RlKTt9KTt9aWYoX3RoaXM1LmxvYWRDb3VudD09PV90aGlzNS5jaGVja2VkVmFsdWUubGVuZ3RoKXtfdGhpczUuJHBhcmVudC5jb21wdXRlUHJlc2VudFRleHQoKTt9fX1vbkZ1bGxmaWxlZCYmb25GdWxsZmlsZWQoZGF0YUxpc3QpO307Y29uZmlnLmxhenlMb2FkKG5vZGUscmVzb2x2ZSk7fSwvKioKICAgICAqIHB1YmxpYyBtZXRob2RzCiAgICAqL2NhbGN1bGF0ZU11bHRpQ2hlY2tlZFZhbHVlOmZ1bmN0aW9uIGNhbGN1bGF0ZU11bHRpQ2hlY2tlZFZhbHVlKCl7dGhpcy5jaGVja2VkVmFsdWU9dGhpcy5nZXRDaGVja2VkTm9kZXModGhpcy5sZWFmT25seSkubWFwKGZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlLmdldFZhbHVlQnlPcHRpb24oKTt9KTt9LHNjcm9sbEludG9WaWV3OmZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KCl7aWYodGhpcy4kaXNTZXJ2ZXIpcmV0dXJuO3ZhciBtZW51cz10aGlzLiRyZWZzLm1lbnV8fFtdO21lbnVzLmZvckVhY2goZnVuY3Rpb24obWVudSl7dmFyIG1lbnVFbGVtZW50PW1lbnUuJGVsO2lmKG1lbnVFbGVtZW50KXt2YXIgY29udGFpbmVyPW1lbnVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lbC1zY3JvbGxiYXJfX3dyYXAnKTt2YXIgYWN0aXZlTm9kZT1tZW51RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXItbm9kZS5pcy1hY3RpdmUnKXx8bWVudUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyLW5vZGUuaW4tYWN0aXZlLXBhdGgnKTtzY3JvbGxfaW50b192aWV3X2RlZmF1bHQoKShjb250YWluZXIsYWN0aXZlTm9kZSk7fX0pO30sZ2V0Tm9kZUJ5VmFsdWU6ZnVuY3Rpb24gZ2V0Tm9kZUJ5VmFsdWUodmFsKXtyZXR1cm4gdGhpcy5zdG9yZS5nZXROb2RlQnlWYWx1ZSh2YWwpO30sZ2V0RmxhdHRlZE5vZGVzOmZ1bmN0aW9uIGdldEZsYXR0ZWROb2RlcyhsZWFmT25seSl7dmFyIGNhY2hlZD0hdGhpcy5jb25maWcubGF6eTtyZXR1cm4gdGhpcy5zdG9yZS5nZXRGbGF0dGVkTm9kZXMobGVhZk9ubHksY2FjaGVkKTt9LGdldENoZWNrZWROb2RlczpmdW5jdGlvbiBnZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpe3ZhciBjaGVja2VkVmFsdWU9dGhpcy5jaGVja2VkVmFsdWUsbXVsdGlwbGU9dGhpcy5tdWx0aXBsZTtpZihtdWx0aXBsZSl7dmFyIG5vZGVzPXRoaXMuZ2V0RmxhdHRlZE5vZGVzKGxlYWZPbmx5KTtyZXR1cm4gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlLmNoZWNrZWQ7fSk7fWVsc2V7cmV0dXJuIE9iamVjdCh1dGlsX1siaXNFbXB0eSJdKShjaGVja2VkVmFsdWUpP1tdOlt0aGlzLmdldE5vZGVCeVZhbHVlKGNoZWNrZWRWYWx1ZSldO319LGNsZWFyQ2hlY2tlZE5vZGVzOmZ1bmN0aW9uIGNsZWFyQ2hlY2tlZE5vZGVzKCl7dmFyIGNvbmZpZz10aGlzLmNvbmZpZyxsZWFmT25seT10aGlzLmxlYWZPbmx5O3ZhciBtdWx0aXBsZT1jb25maWcubXVsdGlwbGUsZW1pdFBhdGg9Y29uZmlnLmVtaXRQYXRoO2lmKG11bHRpcGxlKXt0aGlzLmdldENoZWNrZWROb2RlcyhsZWFmT25seSkuZmlsdGVyKGZ1bmN0aW9uKG5vZGUpe3JldHVybiFub2RlLmlzRGlzYWJsZWQ7fSkuZm9yRWFjaChmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5kb0NoZWNrKGZhbHNlKTt9KTt0aGlzLmNhbGN1bGF0ZU11bHRpQ2hlY2tlZFZhbHVlKCk7fWVsc2V7dGhpcy5jaGVja2VkVmFsdWU9ZW1pdFBhdGg/W106bnVsbDt9fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLXBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189Y2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgY2FzY2FkZXJfcGFuZWxfY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChzcmNfY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDkzMjM0Nl9yZW5kZXIsY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDkzMjM0Nl9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIGNhc2NhZGVyX3BhbmVsX2FwaTt9Y2FzY2FkZXJfcGFuZWxfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlIjsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGNhc2NhZGVyX3BhbmVsPWNhc2NhZGVyX3BhbmVsX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvaW5kZXguanMKLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9jYXNjYWRlcl9wYW5lbC5pbnN0YWxsPWZ1bmN0aW9uKFZ1ZSl7VnVlLmNvbXBvbmVudChjYXNjYWRlcl9wYW5lbC5uYW1lLGNhc2NhZGVyX3BhbmVsKTt9Oy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfY2FzY2FkZXJfcGFuZWw9Y2FzY2FkZXJfcGFuZWw7Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYXZhdGFyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBhdmF0YXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc189e25hbWU6J0VsQXZhdGFyJyxwcm9wczp7c2l6ZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sdmFsaWRhdG9yOmZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpe2lmKHR5cGVvZiB2YWw9PT0nc3RyaW5nJyl7cmV0dXJuWydsYXJnZScsJ21lZGl1bScsJ3NtYWxsJ10uaW5jbHVkZXModmFsKTt9cmV0dXJuIHR5cGVvZiB2YWw9PT0nbnVtYmVyJzt9fSxzaGFwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDonY2lyY2xlJyx2YWxpZGF0b3I6ZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCl7cmV0dXJuWydjaXJjbGUnLCdzcXVhcmUnXS5pbmNsdWRlcyh2YWwpO319LGljb246U3RyaW5nLHNyYzpTdHJpbmcsYWx0OlN0cmluZyxzcmNTZXQ6U3RyaW5nLGVycm9yOkZ1bmN0aW9uLGZpdDp7dHlwZTpTdHJpbmcsZGVmYXVsdDonY292ZXInfX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2lzSW1hZ2VFeGlzdDp0cnVlfTt9LGNvbXB1dGVkOnthdmF0YXJDbGFzczpmdW5jdGlvbiBhdmF0YXJDbGFzcygpe3ZhciBzaXplPXRoaXMuc2l6ZSxpY29uPXRoaXMuaWNvbixzaGFwZT10aGlzLnNoYXBlO3ZhciBjbGFzc0xpc3Q9WydlbC1hdmF0YXInXTtpZihzaXplJiZ0eXBlb2Ygc2l6ZT09PSdzdHJpbmcnKXtjbGFzc0xpc3QucHVzaCgnZWwtYXZhdGFyLS0nK3NpemUpO31pZihpY29uKXtjbGFzc0xpc3QucHVzaCgnZWwtYXZhdGFyLS1pY29uJyk7fWlmKHNoYXBlKXtjbGFzc0xpc3QucHVzaCgnZWwtYXZhdGFyLS0nK3NoYXBlKTt9cmV0dXJuIGNsYXNzTGlzdC5qb2luKCcgJyk7fX0sbWV0aG9kczp7aGFuZGxlRXJyb3I6ZnVuY3Rpb24gaGFuZGxlRXJyb3IoKXt2YXIgZXJyb3I9dGhpcy5lcnJvcjt2YXIgZXJyb3JGbGFnPWVycm9yP2Vycm9yKCk6dW5kZWZpbmVkO2lmKGVycm9yRmxhZyE9PWZhbHNlKXt0aGlzLmlzSW1hZ2VFeGlzdD1mYWxzZTt9fSxyZW5kZXJBdmF0YXI6ZnVuY3Rpb24gcmVuZGVyQXZhdGFyKCl7dmFyIGg9dGhpcy4kY3JlYXRlRWxlbWVudDt2YXIgaWNvbj10aGlzLmljb24sc3JjPXRoaXMuc3JjLGFsdD10aGlzLmFsdCxpc0ltYWdlRXhpc3Q9dGhpcy5pc0ltYWdlRXhpc3Qsc3JjU2V0PXRoaXMuc3JjU2V0LGZpdD10aGlzLmZpdDtpZihpc0ltYWdlRXhpc3QmJnNyYyl7cmV0dXJuIGgoJ2ltZycse2F0dHJzOntzcmM6c3JjLGFsdDphbHQsc3JjU2V0OnNyY1NldH0sb246eydlcnJvcic6dGhpcy5oYW5kbGVFcnJvcn0sc3R5bGU6eydvYmplY3QtZml0JzpmaXR9fSk7fWlmKGljb24pe3JldHVybiBoKCdpJyx7J2NsYXNzJzppY29ufSk7fXJldHVybiB0aGlzLiRzbG90cy5kZWZhdWx0O319LHJlbmRlcjpmdW5jdGlvbiByZW5kZXIoKXt2YXIgaD1hcmd1bWVudHNbMF07dmFyIGF2YXRhckNsYXNzPXRoaXMuYXZhdGFyQ2xhc3Msc2l6ZT10aGlzLnNpemU7dmFyIHNpemVTdHlsZT10eXBlb2Ygc2l6ZT09PSdudW1iZXInP3toZWlnaHQ6c2l6ZSsncHgnLHdpZHRoOnNpemUrJ3B4JyxsaW5lSGVpZ2h0OnNpemUrJ3B4J306e307cmV0dXJuIGgoJ3NwYW4nLHsnY2xhc3MnOmF2YXRhckNsYXNzLHN0eWxlOnNpemVTdHlsZX0sW3RoaXMucmVuZGVyQXZhdGFyKCldKTt9fTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F2YXRhci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfYXZhdGFyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPWF2YXRhcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F2YXRhci9zcmMvbWFpbi52dWUKdmFyIHNyY19tYWluX3JlbmRlcixzcmNfbWFpbl9zdGF0aWNSZW5kZXJGbnM7Lyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBhdmF0YXJfc3JjX21haW5fY29tcG9uZW50PW5vcm1hbGl6ZUNvbXBvbmVudChwYWNrYWdlc19hdmF0YXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sc3JjX21haW5fcmVuZGVyLHNyY19tYWluX3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgYXZhdGFyX3NyY19tYWluX2FwaTt9YXZhdGFyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYXZhdGFyL3NyYy9tYWluLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBhdmF0YXJfc3JjX21haW49YXZhdGFyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXZhdGFyL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovYXZhdGFyX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGF2YXRhcl9zcmNfbWFpbi5uYW1lLGF2YXRhcl9zcmNfbWFpbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGF2YXRhcj1hdmF0YXJfc3JjX21haW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kcmF3ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWE0ODg1MjY0Jgp2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2E0ODg1MjY0X3JlbmRlcj1mdW5jdGlvbiBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYTQ4ODUyNjRfcmVuZGVyKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLWRyYXdlci1mYWRlIn0sb246eyJhZnRlci1lbnRlciI6X3ZtLmFmdGVyRW50ZXIsImFmdGVyLWxlYXZlIjpfdm0uYWZ0ZXJMZWF2ZX19LFtfYygiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6X3ZtLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtZHJhd2VyX193cmFwcGVyIixhdHRyczp7dGFiaW5kZXg6Ii0xIn19LFtfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWRyYXdlcl9fY29udGFpbmVyIixjbGFzczpfdm0udmlzaWJsZSYmImVsLWRyYXdlcl9fb3BlbiIsYXR0cnM6e3JvbGU6ImRvY3VtZW50Iix0YWJpbmRleDoiLTEifSxvbjp7Y2xpY2s6ZnVuY3Rpb24gY2xpY2soJGV2ZW50KXtpZigkZXZlbnQudGFyZ2V0IT09JGV2ZW50LmN1cnJlbnRUYXJnZXQpe3JldHVybiBudWxsO31yZXR1cm4gX3ZtLmhhbmRsZVdyYXBwZXJDbGljaygkZXZlbnQpO319fSxbX2MoImRpdiIse3JlZjoiZHJhd2VyIixzdGF0aWNDbGFzczoiZWwtZHJhd2VyIixjbGFzczpbX3ZtLmRpcmVjdGlvbixfdm0uY3VzdG9tQ2xhc3NdLHN0eWxlOl92bS5pc0hvcml6b250YWw/IndpZHRoOiAiK192bS5zaXplOiJoZWlnaHQ6ICIrX3ZtLnNpemUsYXR0cnM6eyJhcmlhLW1vZGFsIjoidHJ1ZSIsImFyaWEtbGFiZWxsZWRieSI6ImVsLWRyYXdlcl9fdGl0bGUiLCJhcmlhLWxhYmVsIjpfdm0udGl0bGUscm9sZToiZGlhbG9nIix0YWJpbmRleDoiLTEifX0sW192bS53aXRoSGVhZGVyP19jKCJoZWFkZXIiLHtzdGF0aWNDbGFzczoiZWwtZHJhd2VyX19oZWFkZXIiLGF0dHJzOntpZDoiZWwtZHJhd2VyX190aXRsZSJ9fSxbX3ZtLl90KCJ0aXRsZSIsW19jKCJzcGFuIix7YXR0cnM6e3JvbGU6ImhlYWRpbmciLHRhYmluZGV4OiIwIix0aXRsZTpfdm0udGl0bGV9fSxbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pXSksX3ZtLnNob3dDbG9zZT9fYygiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLWRyYXdlcl9fY2xvc2UtYnRuIixhdHRyczp7ImFyaWEtbGFiZWwiOiJjbG9zZSAiKyhfdm0udGl0bGV8fCJkcmF3ZXIiKSx0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6X3ZtLmNsb3NlRHJhd2VyfX0sW19jKCJpIix7c3RhdGljQ2xhc3M6ImVsLWRpYWxvZ19fY2xvc2UgZWwtaWNvbiBlbC1pY29uLWNsb3NlIn0pXSk6X3ZtLl9lKCldLDIpOl92bS5fZSgpLF92bS5yZW5kZXJlZD9fYygic2VjdGlvbiIse3N0YXRpY0NsYXNzOiJlbC1kcmF3ZXJfX2JvZHkifSxbX3ZtLl90KCJkZWZhdWx0IildLDIpOl92bS5fZSgpXSldKV0pXSk7fTt2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2E0ODg1MjY0X3N0YXRpY1JlbmRlckZucz1bXTttYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYTQ4ODUyNjRfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RyYXdlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YTQ4ODUyNjQmCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RyYXdlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgZHJhd2VyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbERyYXdlcicsbWl4aW5zOltwb3B1cF9kZWZhdWx0LmEsZW1pdHRlcl9kZWZhdWx0LmFdLHByb3BzOnthcHBlbmRUb0JvZHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxiZWZvcmVDbG9zZTp7dHlwZTpGdW5jdGlvbn0sY3VzdG9tQ2xhc3M6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Jyd9LGNsb3NlT25QcmVzc0VzY2FwZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sZGVzdHJveU9uQ2xvc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OmZhbHNlfSxtb2RhbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sZGlyZWN0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OidydGwnLHZhbGlkYXRvcjpmdW5jdGlvbiB2YWxpZGF0b3IodmFsKXtyZXR1cm5bJ2x0cicsJ3J0bCcsJ3R0YicsJ2J0dCddLmluZGV4T2YodmFsKSE9PS0xO319LG1vZGFsQXBwZW5kVG9Cb2R5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDp0cnVlfSxzaG93Q2xvc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnRydWV9LHNpemU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6JzMwJSd9LHRpdGxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OicnfSx2aXNpYmxlOnt0eXBlOkJvb2xlYW59LHdyYXBwZXJDbG9zYWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX0sd2l0aEhlYWRlcjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6dHJ1ZX19LGNvbXB1dGVkOntpc0hvcml6b250YWw6ZnVuY3Rpb24gaXNIb3Jpem9udGFsKCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uPT09J3J0bCd8fHRoaXMuZGlyZWN0aW9uPT09J2x0cic7fX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue2Nsb3NlZDpmYWxzZSxwcmV2QWN0aXZlRWxlbWVudDpudWxsfTt9LHdhdGNoOnt2aXNpYmxlOmZ1bmN0aW9uIHZpc2libGUodmFsKXt2YXIgX3RoaXM9dGhpcztpZih2YWwpe3RoaXMuY2xvc2VkPWZhbHNlO3RoaXMuJGVtaXQoJ29wZW4nKTtpZih0aGlzLmFwcGVuZFRvQm9keSl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCk7fXRoaXMucHJldkFjdGl2ZUVsZW1lbnQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2FyaWFfdXRpbHNfZGVmYXVsdC5hLmZvY3VzRmlyc3REZXNjZW5kYW50KF90aGlzLiRyZWZzLmRyYXdlcik7fSk7fWVsc2V7aWYoIXRoaXMuY2xvc2VkKXRoaXMuJGVtaXQoJ2Nsb3NlJyk7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpZihfdGhpcy5wcmV2QWN0aXZlRWxlbWVudCl7X3RoaXMucHJldkFjdGl2ZUVsZW1lbnQuZm9jdXMoKTt9fSk7fX19LG1ldGhvZHM6e2FmdGVyRW50ZXI6ZnVuY3Rpb24gYWZ0ZXJFbnRlcigpe3RoaXMuJGVtaXQoJ29wZW5lZCcpO30sYWZ0ZXJMZWF2ZTpmdW5jdGlvbiBhZnRlckxlYXZlKCl7dGhpcy4kZW1pdCgnY2xvc2VkJyk7fSxoaWRlOmZ1bmN0aW9uIGhpZGUoY2FuY2VsKXtpZihjYW5jZWwhPT1mYWxzZSl7dGhpcy4kZW1pdCgndXBkYXRlOnZpc2libGUnLGZhbHNlKTt0aGlzLiRlbWl0KCdjbG9zZScpO2lmKHRoaXMuZGVzdHJveU9uQ2xvc2U9PT10cnVlKXt0aGlzLnJlbmRlcmVkPWZhbHNlO310aGlzLmNsb3NlZD10cnVlO319LGhhbmRsZVdyYXBwZXJDbGljazpmdW5jdGlvbiBoYW5kbGVXcmFwcGVyQ2xpY2soKXtpZih0aGlzLndyYXBwZXJDbG9zYWJsZSl7dGhpcy5jbG9zZURyYXdlcigpO319LGNsb3NlRHJhd2VyOmZ1bmN0aW9uIGNsb3NlRHJhd2VyKCl7aWYodHlwZW9mIHRoaXMuYmVmb3JlQ2xvc2U9PT0nZnVuY3Rpb24nKXt0aGlzLmJlZm9yZUNsb3NlKHRoaXMuaGlkZSk7fWVsc2V7dGhpcy5oaWRlKCk7fX0saGFuZGxlQ2xvc2U6ZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKXsvLyBUaGlzIG1ldGhvZCBoZXJlIHdpbGwgYmUgY2FsbGVkIGJ5IFBvcHVwTWFuZ2VyLCB3aGVuIHRoZSBgY2xvc2VPblByZXNzRXNjYXBlYCB3YXMgc2V0IHRvIHRydWUKLy8gcHJlc3NpbmcgYEVTQ2Agd2lsbCBjYWxsIHRoaXMgbWV0aG9kLCBhbmQgYWxzbyBjbG9zZSB0aGUgZHJhd2VyLgovLyBUaGlzIG1ldGhvZCBhbHNvIGNhbGxzIGBiZWZvcmVDbG9zZWAgaWYgdGhlcmUgd2FzIG9uZS4KdGhpcy5jbG9zZURyYXdlcigpO319LG1vdW50ZWQ6ZnVuY3Rpb24gbW91bnRlZCgpe2lmKHRoaXMudmlzaWJsZSl7dGhpcy5yZW5kZXJlZD10cnVlO3RoaXMub3BlbigpO319LGRlc3Ryb3llZDpmdW5jdGlvbiBkZXN0cm95ZWQoKXsvLyBpZiBhcHBlbmRUb0JvZHkgaXMgdHJ1ZSwgcmVtb3ZlIERPTSBub2RlIGFmdGVyIGRlc3Ryb3kKaWYodGhpcy5hcHBlbmRUb0JvZHkmJnRoaXMuJGVsJiZ0aGlzLiRlbC5wYXJlbnROb2RlKXt0aGlzLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJGVsKTt9fX07Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcmF3ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgovKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIHBhY2thZ2VzX2RyYXdlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1kcmF3ZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc187Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcmF3ZXIvc3JjL21haW4udnVlCi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi92YXIgZHJhd2VyX3NyY19tYWluX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQocGFja2FnZXNfZHJhd2VyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF9hNDg4NTI2NF9yZW5kZXIsbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2E0ODg1MjY0X3N0YXRpY1JlbmRlckZucyxmYWxzZSxudWxsLG51bGwsbnVsbCk7LyogaG90IHJlbG9hZCAqL2lmKGZhbHNlKXt2YXIgZHJhd2VyX3NyY19tYWluX2FwaTt9ZHJhd2VyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZHJhd2VyL3NyYy9tYWluLnZ1ZSI7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBkcmF3ZXJfc3JjX21haW49ZHJhd2VyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJhd2VyL2luZGV4LmpzCi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovZHJhd2VyX3NyY19tYWluLmluc3RhbGw9ZnVuY3Rpb24oVnVlKXtWdWUuY29tcG9uZW50KGRyYXdlcl9zcmNfbWFpbi5uYW1lLGRyYXdlcl9zcmNfbWFpbik7fTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovdmFyIGRyYXdlcj1kcmF3ZXJfc3JjX21haW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wb3Bjb25maXJtL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDhkZTczMCYKdmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNDhkZTczMF9yZW5kZXI9ZnVuY3Rpb24gbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA0OGRlNzMwX3JlbmRlcigpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO3JldHVybiBfYygiZWwtcG9wb3ZlciIsX3ZtLl9iKHthdHRyczp7dHJpZ2dlcjoiY2xpY2sifSxtb2RlbDp7dmFsdWU6X3ZtLnZpc2libGUsY2FsbGJhY2s6ZnVuY3Rpb24gY2FsbGJhY2soJCR2KXtfdm0udmlzaWJsZT0kJHY7fSxleHByZXNzaW9uOiJ2aXNpYmxlIn19LCJlbC1wb3BvdmVyIixfdm0uJGF0dHJzLGZhbHNlKSxbX2MoImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wb3Bjb25maXJtIn0sW19jKCJwIix7c3RhdGljQ2xhc3M6ImVsLXBvcGNvbmZpcm1fX21haW4ifSxbIV92bS5oaWRlSWNvbj9fYygiaSIse3N0YXRpY0NsYXNzOiJlbC1wb3Bjb25maXJtX19pY29uIixjbGFzczpfdm0uaWNvbixzdHlsZTp7Y29sb3I6X3ZtLmljb25Db2xvcn19KTpfdm0uX2UoKSxfdm0uX3YoIlxuICAgICAgIitfdm0uX3MoX3ZtLnRpdGxlKSsiXG4gICAgIildKSxfYygiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBvcGNvbmZpcm1fX2FjdGlvbiJ9LFtfYygiZWwtYnV0dG9uIix7YXR0cnM6e3NpemU6Im1pbmkiLHR5cGU6X3ZtLmNhbmNlbEJ1dHRvblR5cGV9LG9uOntjbGljazpfdm0uY2FuY2VsfX0sW192bS5fdigiXG4gICAgICAgICIrX3ZtLl9zKF92bS5jYW5jZWxCdXR0b25UZXh0KSsiXG4gICAgICAiKV0pLF9jKCJlbC1idXR0b24iLHthdHRyczp7c2l6ZToibWluaSIsdHlwZTpfdm0uY29uZmlybUJ1dHRvblR5cGV9LG9uOntjbGljazpfdm0uY29uZmlybX19LFtfdm0uX3YoIlxuICAgICAgICAiK192bS5fcyhfdm0uY29uZmlybUJ1dHRvblRleHQpKyJcbiAgICAgICIpXSldLDEpXSksX3ZtLl90KCJyZWZlcmVuY2UiLG51bGwse3Nsb3Q6InJlZmVyZW5jZSJ9KV0sMik7fTt2YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA0OGRlNzMwX3N0YXRpY1JlbmRlckZucz1bXTttYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDQ4ZGU3MzBfcmVuZGVyLl93aXRoU3RyaXBwZWQ9dHJ1ZTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcGNvbmZpcm0vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA0OGRlNzMwJgovLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJlbGVtZW50LXVpL2xpYi9wb3BvdmVyIgp2YXIgcG9wb3Zlcl89X193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7dmFyIHBvcG92ZXJfZGVmYXVsdD0vKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHBvcG92ZXJfKTsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wb3Bjb25maXJtL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwb3Bjb25maXJtX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfPXtuYW1lOidFbFBvcGNvbmZpcm0nLHByb3BzOnt0aXRsZTp7dHlwZTpTdHJpbmd9LGNvbmZpcm1CdXR0b25UZXh0Ont0eXBlOlN0cmluZyxkZWZhdWx0Ok9iamVjdChsaWJfbG9jYWxlX1sidCJdKSgnZWwucG9wY29uZmlybS5jb25maXJtQnV0dG9uVGV4dCcpfSxjYW5jZWxCdXR0b25UZXh0Ont0eXBlOlN0cmluZyxkZWZhdWx0Ok9iamVjdChsaWJfbG9jYWxlX1sidCJdKSgnZWwucG9wY29uZmlybS5jYW5jZWxCdXR0b25UZXh0Jyl9LGNvbmZpcm1CdXR0b25UeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OidwcmltYXJ5J30sY2FuY2VsQnV0dG9uVHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDondGV4dCd9LGljb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6J2VsLWljb24tcXVlc3Rpb24nfSxpY29uQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6JyNmOTAnfSxoaWRlSWNvbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ZmFsc2V9fSxjb21wb25lbnRzOntFbFBvcG92ZXI6cG9wb3Zlcl9kZWZhdWx0LmEsRWxCdXR0b246YnV0dG9uX2RlZmF1bHQuYX0sZGF0YTpmdW5jdGlvbiBkYXRhKCl7cmV0dXJue3Zpc2libGU6ZmFsc2V9O30sbWV0aG9kczp7Y29uZmlybTpmdW5jdGlvbiBjb25maXJtKCl7dGhpcy52aXNpYmxlPWZhbHNlO3RoaXMuJGVtaXQoJ2NvbmZpcm0nKTt9LGNhbmNlbDpmdW5jdGlvbiBjYW5jZWwoKXt0aGlzLnZpc2libGU9ZmFsc2U7dGhpcy4kZW1pdCgnY2FuY2VsJyk7fX19Oy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wY29uZmlybS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmCi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcGFja2FnZXNfcG9wY29uZmlybV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXz1wb3Bjb25maXJtX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wY29uZmlybS9zcmMvbWFpbi52dWUKLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL3ZhciBwb3Bjb25maXJtX3NyY19tYWluX2NvbXBvbmVudD1ub3JtYWxpemVDb21wb25lbnQocGFja2FnZXNfcG9wY29uZmlybV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDQ4ZGU3MzBfcmVuZGVyLG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNDhkZTczMF9zdGF0aWNSZW5kZXJGbnMsZmFsc2UsbnVsbCxudWxsLG51bGwpOy8qIGhvdCByZWxvYWQgKi9pZihmYWxzZSl7dmFyIHBvcGNvbmZpcm1fc3JjX21haW5fYXBpO31wb3Bjb25maXJtX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvcG9wY29uZmlybS9zcmMvbWFpbi52dWUiOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi92YXIgcG9wY29uZmlybV9zcmNfbWFpbj1wb3Bjb25maXJtX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wY29uZmlybS9pbmRleC5qcwovKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3BvcGNvbmZpcm1fc3JjX21haW4uaW5zdGFsbD1mdW5jdGlvbihWdWUpe1Z1ZS5jb21wb25lbnQocG9wY29uZmlybV9zcmNfbWFpbi5uYW1lLHBvcGNvbmZpcm1fc3JjX21haW4pO307LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBwb3Bjb25maXJtPXBvcGNvbmZpcm1fc3JjX21haW47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvaW5kZXguanMKLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgJy4vYnVpbGQvYmluL2J1aWxkLWVudHJ5LmpzJyAqL3ZhciBjb21wb25lbnRzPVtwYWNrYWdlc19wYWdpbmF0aW9uLGRpYWxvZyxwYWNrYWdlc19hdXRvY29tcGxldGUscGFja2FnZXNfZHJvcGRvd24scGFja2FnZXNfZHJvcGRvd25fbWVudSxwYWNrYWdlc19kcm9wZG93bl9pdGVtLHBhY2thZ2VzX21lbnUscGFja2FnZXNfc3VibWVudSxwYWNrYWdlc19tZW51X2l0ZW0scGFja2FnZXNfbWVudV9pdGVtX2dyb3VwLHBhY2thZ2VzX2lucHV0LHBhY2thZ2VzX2lucHV0X251bWJlcixwYWNrYWdlc19yYWRpbyxwYWNrYWdlc19yYWRpb19ncm91cCxwYWNrYWdlc19yYWRpb19idXR0b24scGFja2FnZXNfY2hlY2tib3gscGFja2FnZXNfY2hlY2tib3hfYnV0dG9uLHBhY2thZ2VzX2NoZWNrYm94X2dyb3VwLHBhY2thZ2VzX3N3aXRjaCxwYWNrYWdlc19zZWxlY3QscGFja2FnZXNfb3B0aW9uLHBhY2thZ2VzX29wdGlvbl9ncm91cCxwYWNrYWdlc19idXR0b24scGFja2FnZXNfYnV0dG9uX2dyb3VwLHBhY2thZ2VzX3RhYmxlLHBhY2thZ2VzX3RhYmxlX2NvbHVtbixwYWNrYWdlc19kYXRlX3BpY2tlcixwYWNrYWdlc190aW1lX3NlbGVjdCxwYWNrYWdlc190aW1lX3BpY2tlcixwb3BvdmVyLHBhY2thZ2VzX3Rvb2x0aXAscGFja2FnZXNfYnJlYWRjcnVtYixwYWNrYWdlc19icmVhZGNydW1iX2l0ZW0scGFja2FnZXNfZm9ybSxwYWNrYWdlc19mb3JtX2l0ZW0scGFja2FnZXNfdGFicyxwYWNrYWdlc190YWJfcGFuZSxwYWNrYWdlc190YWcscGFja2FnZXNfdHJlZSxwYWNrYWdlc19hbGVydCxzbGlkZXIscGFja2FnZXNfaWNvbixwYWNrYWdlc19yb3cscGFja2FnZXNfY29sLHBhY2thZ2VzX3VwbG9hZCxwYWNrYWdlc19wcm9ncmVzcyxwYWNrYWdlc19zcGlubmVyLGJhZGdlLGNhcmQscmF0ZSxwYWNrYWdlc19zdGVwcyxwYWNrYWdlc19zdGVwLGNhcm91c2VsLHNjcm9sbGJhcixjYXJvdXNlbF9pdGVtLHBhY2thZ2VzX2NvbGxhcHNlLHBhY2thZ2VzX2NvbGxhcHNlX2l0ZW0scGFja2FnZXNfY2FzY2FkZXIsY29sb3JfcGlja2VyLHRyYW5zZmVyLHBhY2thZ2VzX2NvbnRhaW5lcixoZWFkZXIsYXNpZGUscGFja2FnZXNfbWFpbixmb290ZXIsdGltZWxpbmUsdGltZWxpbmVfaXRlbSxwYWNrYWdlc19saW5rLGRpdmlkZXIscGFja2FnZXNfaW1hZ2UsY2FsZW5kYXIsYmFja3RvcCxwYWdlX2hlYWRlcixwYWNrYWdlc19jYXNjYWRlcl9wYW5lbCxhdmF0YXIsZHJhd2VyLHBvcGNvbmZpcm0sY29sbGFwc2VfdHJhbnNpdGlvbl9kZWZhdWx0LmFdO3ZhciBzcmNfaW5zdGFsbD1mdW5jdGlvbiBpbnN0YWxsKFZ1ZSl7dmFyIG9wdHM9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzFdOnt9O2xpYl9sb2NhbGVfZGVmYXVsdC5hLnVzZShvcHRzLmxvY2FsZSk7bGliX2xvY2FsZV9kZWZhdWx0LmEuaTE4bihvcHRzLmkxOG4pO2NvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbihjb21wb25lbnQpe1Z1ZS5jb21wb25lbnQoY29tcG9uZW50Lm5hbWUsY29tcG9uZW50KTt9KTtWdWUudXNlKGluZmluaXRlX3Njcm9sbCk7VnVlLnVzZShwYWNrYWdlc19sb2FkaW5nLmRpcmVjdGl2ZSk7VnVlLnByb3RvdHlwZS4kRUxFTUVOVD17c2l6ZTpvcHRzLnNpemV8fCcnLHpJbmRleDpvcHRzLnpJbmRleHx8MjAwMH07VnVlLnByb3RvdHlwZS4kbG9hZGluZz1wYWNrYWdlc19sb2FkaW5nLnNlcnZpY2U7VnVlLnByb3RvdHlwZS4kbXNnYm94PW1lc3NhZ2VfYm94O1Z1ZS5wcm90b3R5cGUuJGFsZXJ0PW1lc3NhZ2VfYm94LmFsZXJ0O1Z1ZS5wcm90b3R5cGUuJGNvbmZpcm09bWVzc2FnZV9ib3guY29uZmlybTtWdWUucHJvdG90eXBlLiRwcm9tcHQ9bWVzc2FnZV9ib3gucHJvbXB0O1Z1ZS5wcm90b3R5cGUuJG5vdGlmeT1ub3RpZmljYXRpb247VnVlLnByb3RvdHlwZS4kbWVzc2FnZT1wYWNrYWdlc19tZXNzYWdlO307LyogaXN0YW5idWwgaWdub3JlIGlmICovaWYodHlwZW9mIHdpbmRvdyE9PSd1bmRlZmluZWQnJiZ3aW5kb3cuVnVlKXtzcmNfaW5zdGFsbCh3aW5kb3cuVnVlKTt9LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqL3ZhciBzcmNfMD1fX3dlYnBhY2tfZXhwb3J0c19fWyJkZWZhdWx0Il09e3ZlcnNpb246JzIuMTQuMCcsbG9jYWxlOmxpYl9sb2NhbGVfZGVmYXVsdC5hLnVzZSxpMThuOmxpYl9sb2NhbGVfZGVmYXVsdC5hLmkxOG4saW5zdGFsbDpzcmNfaW5zdGFsbCxDb2xsYXBzZVRyYW5zaXRpb246Y29sbGFwc2VfdHJhbnNpdGlvbl9kZWZhdWx0LmEsTG9hZGluZzpwYWNrYWdlc19sb2FkaW5nLFBhZ2luYXRpb246cGFja2FnZXNfcGFnaW5hdGlvbixEaWFsb2c6ZGlhbG9nLEF1dG9jb21wbGV0ZTpwYWNrYWdlc19hdXRvY29tcGxldGUsRHJvcGRvd246cGFja2FnZXNfZHJvcGRvd24sRHJvcGRvd25NZW51OnBhY2thZ2VzX2Ryb3Bkb3duX21lbnUsRHJvcGRvd25JdGVtOnBhY2thZ2VzX2Ryb3Bkb3duX2l0ZW0sTWVudTpwYWNrYWdlc19tZW51LFN1Ym1lbnU6cGFja2FnZXNfc3VibWVudSxNZW51SXRlbTpwYWNrYWdlc19tZW51X2l0ZW0sTWVudUl0ZW1Hcm91cDpwYWNrYWdlc19tZW51X2l0ZW1fZ3JvdXAsSW5wdXQ6cGFja2FnZXNfaW5wdXQsSW5wdXROdW1iZXI6cGFja2FnZXNfaW5wdXRfbnVtYmVyLFJhZGlvOnBhY2thZ2VzX3JhZGlvLFJhZGlvR3JvdXA6cGFja2FnZXNfcmFkaW9fZ3JvdXAsUmFkaW9CdXR0b246cGFja2FnZXNfcmFkaW9fYnV0dG9uLENoZWNrYm94OnBhY2thZ2VzX2NoZWNrYm94LENoZWNrYm94QnV0dG9uOnBhY2thZ2VzX2NoZWNrYm94X2J1dHRvbixDaGVja2JveEdyb3VwOnBhY2thZ2VzX2NoZWNrYm94X2dyb3VwLFN3aXRjaDpwYWNrYWdlc19zd2l0Y2gsU2VsZWN0OnBhY2thZ2VzX3NlbGVjdCxPcHRpb246cGFja2FnZXNfb3B0aW9uLE9wdGlvbkdyb3VwOnBhY2thZ2VzX29wdGlvbl9ncm91cCxCdXR0b246cGFja2FnZXNfYnV0dG9uLEJ1dHRvbkdyb3VwOnBhY2thZ2VzX2J1dHRvbl9ncm91cCxUYWJsZTpwYWNrYWdlc190YWJsZSxUYWJsZUNvbHVtbjpwYWNrYWdlc190YWJsZV9jb2x1bW4sRGF0ZVBpY2tlcjpwYWNrYWdlc19kYXRlX3BpY2tlcixUaW1lU2VsZWN0OnBhY2thZ2VzX3RpbWVfc2VsZWN0LFRpbWVQaWNrZXI6cGFja2FnZXNfdGltZV9waWNrZXIsUG9wb3Zlcjpwb3BvdmVyLFRvb2x0aXA6cGFja2FnZXNfdG9vbHRpcCxNZXNzYWdlQm94Om1lc3NhZ2VfYm94LEJyZWFkY3J1bWI6cGFja2FnZXNfYnJlYWRjcnVtYixCcmVhZGNydW1iSXRlbTpwYWNrYWdlc19icmVhZGNydW1iX2l0ZW0sRm9ybTpwYWNrYWdlc19mb3JtLEZvcm1JdGVtOnBhY2thZ2VzX2Zvcm1faXRlbSxUYWJzOnBhY2thZ2VzX3RhYnMsVGFiUGFuZTpwYWNrYWdlc190YWJfcGFuZSxUYWc6cGFja2FnZXNfdGFnLFRyZWU6cGFja2FnZXNfdHJlZSxBbGVydDpwYWNrYWdlc19hbGVydCxOb3RpZmljYXRpb246bm90aWZpY2F0aW9uLFNsaWRlcjpzbGlkZXIsSWNvbjpwYWNrYWdlc19pY29uLFJvdzpwYWNrYWdlc19yb3csQ29sOnBhY2thZ2VzX2NvbCxVcGxvYWQ6cGFja2FnZXNfdXBsb2FkLFByb2dyZXNzOnBhY2thZ2VzX3Byb2dyZXNzLFNwaW5uZXI6cGFja2FnZXNfc3Bpbm5lcixNZXNzYWdlOnBhY2thZ2VzX21lc3NhZ2UsQmFkZ2U6YmFkZ2UsQ2FyZDpjYXJkLFJhdGU6cmF0ZSxTdGVwczpwYWNrYWdlc19zdGVwcyxTdGVwOnBhY2thZ2VzX3N0ZXAsQ2Fyb3VzZWw6Y2Fyb3VzZWwsU2Nyb2xsYmFyOnNjcm9sbGJhcixDYXJvdXNlbEl0ZW06Y2Fyb3VzZWxfaXRlbSxDb2xsYXBzZTpwYWNrYWdlc19jb2xsYXBzZSxDb2xsYXBzZUl0ZW06cGFja2FnZXNfY29sbGFwc2VfaXRlbSxDYXNjYWRlcjpwYWNrYWdlc19jYXNjYWRlcixDb2xvclBpY2tlcjpjb2xvcl9waWNrZXIsVHJhbnNmZXI6dHJhbnNmZXIsQ29udGFpbmVyOnBhY2thZ2VzX2NvbnRhaW5lcixIZWFkZXI6aGVhZGVyLEFzaWRlOmFzaWRlLE1haW46cGFja2FnZXNfbWFpbixGb290ZXI6Zm9vdGVyLFRpbWVsaW5lOnRpbWVsaW5lLFRpbWVsaW5lSXRlbTp0aW1lbGluZV9pdGVtLExpbms6cGFja2FnZXNfbGluayxEaXZpZGVyOmRpdmlkZXIsSW1hZ2U6cGFja2FnZXNfaW1hZ2UsQ2FsZW5kYXI6Y2FsZW5kYXIsQmFja3RvcDpiYWNrdG9wLEluZmluaXRlU2Nyb2xsOmluZmluaXRlX3Njcm9sbCxQYWdlSGVhZGVyOnBhZ2VfaGVhZGVyLENhc2NhZGVyUGFuZWw6cGFja2FnZXNfY2FzY2FkZXJfcGFuZWwsQXZhdGFyOmF2YXRhcixEcmF3ZXI6ZHJhd2VyLFBvcGNvbmZpcm06cG9wY29uZmlybX07LyoqKi99LyoqKioqKi9dKVsiZGVmYXVsdCJdOw=="},{"version":3,"sources":["/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/element-ui/lib/element-ui.common.js"],"names":["module","exports","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","require","__webpack_exports__","pagervue_type_template_id_7274f267_render","_vm","_h","$createElement","_c","_self","staticClass","on","click","onPagerClick","pageCount","class","active","currentPage","disabled","_v","_e","showPrevMore","quickprevIconClass","mouseenter","$event","onMouseenter","mouseleave","_l","pagers","pager","_s","showNextMore","quicknextIconClass","staticRenderFns","_withStripped","pagervue_type_script_lang_js_","props","Number","pagerCount","Boolean","watch","val","methods","event","target","tagName","newPage","textContent","pagerCountOffset","className","indexOf","isNaN","$emit","direction","computed","halfPagerCount","array","startPage","push","_i","offset","Math","floor","_i2","_i3","data","current","src_pagervue_type_script_lang_js_","normalizeComponent","scriptExports","render","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","options","_compiled","functional","_scopeId","hook","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","renderWithStyleInjection","h","existing","beforeCreate","concat","component","api","__file","select_","select_default","option_","option_default","input_","input_default","locale_","locale_default","util_","pagination","pageSize","type","default","small","total","validator","layout","pageSizes","Array","_default","popperClass","String","prevText","nextText","background","hideOnSinglePage","internalCurrentPage","internalPageSize","lastEmittedPage","userChangePageSize","internalPageCount","template","TEMPLATE_MAP","prev","jumper","attrs","handleCurrentChange","next","sizes","slot","$slots","components","split","map","item","trim","rightWrapper","haveRightWrapper","children","forEach","compo","unshift","Prev","$parent","Next","Sizes","mixins","a","immediate","handler","newVal","oldVal","isArray","_this","size","handleChange","label","ElSelect","ElOption","parseInt","Jumper","ElInput","userInput","$parentInternalCurrentPage","handleKeyup","_ref","keyCode","handleInput","getValidCurrentPage","emitChange","min","max","nativeOn","Total","Pager","havePageCount","resetValue","undefined","_this2","$nextTick","ceil","oldPage","install","Vue","packages_pagination","componentvue_type_template_id_60140e62_render","afterEnter","afterLeave","directives","rawName","visible","expression","currentTarget","handleWrapperClick","ref","fullscreen","center","customClass","style","role","title","_t","showClose","handleClose","rendered","footer","componentvue_type_template_id_60140e62_staticRenderFns","popup_","popup_default","migrating_","migrating_default","emitter_","emitter_default","componentvue_type_script_lang_js_","modal","modalAppendToBody","appendToBody","lockScroll","closeOnClickModal","closeOnPressEscape","width","top","beforeClose","Function","destroyOnClose","closed","$el","addEventListener","updatePopper","$refs","dialog","scrollTop","document","body","appendChild","removeEventListener","marginTop","getMigratingConfig","hide","cancel","broadcast","mounted","open","destroyed","parentNode","removeChild","src_componentvue_type_script_lang_js_","component_component","component_api","src_component","autocompletevue_type_template_id_152f2ee6_render","close","suggestionVisible","id","_b","input","change","focus","handleFocus","blur","handleBlur","clear","handleClear","keydown","_k","preventDefault","highlight","highlightedIndex","handleKeyEnter","$props","$attrs","prepend","append","prefix","suffix","popperOptions","popperAppendToBody","placement","suggestions","index","highlighted","select","valueKey","autocompletevue_type_template_id_152f2ee6_staticRenderFns","debounce_","debounce_default","clickoutside_","clickoutside_default","autocomplete_suggestionsvue_type_template_id_cd10dcf0_render","doDestroy","showPopper","hideLoading","loading","dropdownWidth","tag","autocomplete_suggestionsvue_type_template_id_cd10dcf0_staticRenderFns","vue_popper_","vue_popper_default","scrollbar_","scrollbar_default","autocomplete_suggestionsvue_type_script_lang_js_","ElScrollbar","componentName","gpuAcceleration","dispatch","updated","_","popperJS","popperElm","referenceElm","textarea","referenceList","querySelector","setAttribute","created","$on","inputWidth","src_autocomplete_suggestionsvue_type_script_lang_js_","autocomplete_suggestions_component","autocomplete_suggestions_api","autocomplete_suggestions","focus_","focus_default","autocompletevue_type_script_lang_js_","inheritAttrs","ElAutocompleteSuggestions","Clickoutside","placeholder","clearable","maxlength","minlength","autofocus","fetchSuggestions","triggerOnFocus","customItem","selectWhenUnmatched","prefixIcon","suffixIcon","debounce","highlightFirstItem","activated","suggestionDisabled","isValidData","length","$input","getInput","offsetWidth","getData","queryString","console","error","debouncedGetData","e","_this3","suggestion","suggestionList","querySelectorAll","highlightItem","offsetTop","scrollHeight","clientHeight","_this4","beforeDestroy","$destroy","src_autocompletevue_type_script_lang_js_","autocomplete_component","autocomplete_api","autocomplete","packages_autocomplete","button_","button_default","button_group_","button_group_default","dropdownvue_type_script_lang_js_","ElButton","ElButtonGroup","provide","dropdown","trigger","splitButton","hideOnClick","visibleArrow","showTimeout","hideTimeout","tabindex","timeout","triggerElm","menuItems","menuItemsArray","dropdownElm","focusing","listId","dropdownSize","$ELEMENT","handleMenuItemClick","selfDefine","replace","show","clearTimeout","setTimeout","removeTabindex","resetTabindex","handleClick","handleTriggerKeyDown","ev","stopPropagation","handleItemKeyDown","currentIndex","nextIndex","triggerElmFocus","ele","initAria","getAttribute","initEvent","elm","command","instance","initDomOperation","slice","handleMainButtonClick","src_dropdownvue_type_script_lang_js_","dropdown_render","dropdown_staticRenderFns","dropdown_component","dropdown_api","packages_dropdown","dropdown_menuvue_type_template_id_0da6b714_render","dropdown_menuvue_type_template_id_0da6b714_staticRenderFns","dropdown_menuvue_type_script_lang_js_","arrowOffset","inject","currentPlacement","src_dropdown_menuvue_type_script_lang_js_","dropdown_menu_component","dropdown_menu_api","dropdown_menu","packages_dropdown_menu","dropdown_itemvue_type_template_id_6359102a_render","divided","icon","dropdown_itemvue_type_template_id_6359102a_staticRenderFns","dropdown_itemvue_type_script_lang_js_","src_dropdown_itemvue_type_script_lang_js_","dropdown_item_component","dropdown_item_api","dropdown_item","packages_dropdown_item","aria","Utils","focusFirstDescendant","element","childNodes","child","attemptFocus","focusLastDescendant","isFocusable","IgnoreUtilFocusChanges","activeElement","tabIndex","nodeName","href","rel","triggerEvent","eventName","test","evt","createEvent","_len","arguments","opts","_key","apply","dispatchEvent","fireEvent","keys","tab","enter","space","left","up","right","down","esc","aria_utils","SubMenu","domNode","subMenuItems","subIndex","init","addListeners","gotoSubIndex","idx","el","prevDef","aria_submenu","MenuItem","submenu","menuChild","aria_menuitem","Menu","menuChildren","filter","nodeType","aria_menubar","dom_","menuvue_type_script_lang_js_","collapse","backgroundColor","collapseTransition","rootMenu","createElement","beforeEnter","opacity","beforeLeave","dataset","oldOverflow","overflow","scrollWidth","clientWidth","leave","defaultActive","defaultOpeneds","uniqueOpened","router","menuTrigger","textColor","activeTextColor","activeIndex","openedMenus","items","submenus","hoverBackground","mixColor","isMenuPopup","updateActiveIndex","initOpenedMenu","getColorChannels","color","splice","join","red","green","blue","percent","_getColorChannels","round","addItem","$set","removeItem","addSubmenu","removeSubmenu","openMenu","indexPath","closeMenu","handleSubmenuClick","isOpened","handleItemClick","oldActiveIndex","hasIndex","routeToItem","activeItem","onError","route","$router","toString","$watch","src_menuvue_type_script_lang_js_","menu_render","menu_staticRenderFns","menu_component","menu_api","src_menu","packages_menu","collapse_transition_","collapse_transition_default","menu_mixin","path","parentMenu","paddingStyle","padding","paddingLeft","poperMixins","transformOrigin","boundariesPadding","deactivated","submenuvue_type_script_lang_js_","ElCollapseTransition","required","mouseInChild","opened","isFirstLevel","menuTransitionName","isActive","titleStyle","borderBottomColor","handleCollapseToggle","initPopper","handleMouseenter","window","relatedTarget","MouseEvent","handleMouseleave","deepDispatch","handleTitleMouseenter","handleTitleMouseleave","updatePlacement","menu","_this5","popupMenu","inlineMenu","submenuTitleIcon","src_submenuvue_type_script_lang_js_","submenu_render","submenu_staticRenderFns","submenu_component","submenu_api","packages_submenu","menu_itemvue_type_template_id_2a5dbfea_render","itemStyle","onMouseEnter","onMouseLeave","effect","staticStyle","position","height","display","menu_itemvue_type_template_id_2a5dbfea_staticRenderFns","tooltip_","tooltip_default","menu_itemvue_type_script_lang_js_","ElTooltip","isNested","src_menu_itemvue_type_script_lang_js_","menu_item_component","menu_item_api","menu_item","packages_menu_item","menu_item_groupvue_type_template_id_543b7bdc_render","levelPadding","menu_item_groupvue_type_template_id_543b7bdc_staticRenderFns","menu_item_groupvue_type_script_lang_js_","src_menu_item_groupvue_type_script_lang_js_","menu_item_group_component","menu_item_group_api","menu_item_group","packages_menu_item_group","inputvue_type_template_id_343dd774_render","inputSize","inputDisabled","inputExceed","showPassword","hovering","passwordVisible","readonly","autoComplete","compositionstart","handleCompositionStart","compositionupdate","handleCompositionUpdate","compositionend","handleCompositionEnd","getSuffixVisible","showClear","showPwdVisible","isWordLimitVisible","mousedown","handlePasswordVisible","textLength","upperLimit","validateState","validateIcon","textareaStyle","inputvue_type_template_id_343dd774_staticRenderFns","hiddenTextarea","HIDDEN_STYLE","CONTEXT_STYLE","calculateNodeStyling","targetElement","getComputedStyle","boxSizing","getPropertyValue","paddingSize","parseFloat","borderSize","contextStyle","calcTextareaHeight","minRows","maxRows","_calculateNodeStyling","result","singleRowHeight","minHeight","maxHeight","merge_","merge_default","shared_","inputvue_type_script_lang_js_","elForm","elFormItem","textareaCalcStyle","focused","isComposing","resize","form","autosize","validateEvent","showWordLimit","_elFormItemSize","elFormItemSize","needStatusIcon","statusIcon","validating","success","nativeInputValue","resizeTextarea","setNativeInputValue","updateIconOffset","events","$isServer","text","lastCharacter","calcIconOffset","place","elList","pendantMap","pendant","transform","removeAttribute","src_inputvue_type_script_lang_js_","input_component","input_api","src_input","packages_input","input_numbervue_type_template_id_42f8cf66_render","inputNumberSize","inputNumberDisabled","controls","controlsAtRight","dragstart","decrease","minDisabled","increase","maxDisabled","displayValue","handleInputChange","input_numbervue_type_template_id_42f8cf66_staticRenderFns","repeat_click","binding","vnode","interval","startTime","Date","now","clearInterval","button","setInterval","input_numbervue_type_script_lang_js_","repeatClick","step","stepStrictly","Infinity","controlsPosition","precision","currentValue","stepPrecision","getPrecision","precisionFactor","pow","toPrecision","_decrease","_increase","numPrecision","warn","toFixed","num","valueString","dotPosition","setCurrentValue","innerInput","src_input_numbervue_type_script_lang_js_","input_number_component","input_number_api","input_number","packages_input_number","radiovue_type_template_id_69cd6268_render","border","radioSize","isDisabled","model","domProps","checked","_q","radiovue_type_template_id_69cd6268_staticRenderFns","radiovue_type_script_lang_js_","isGroup","_radioGroup","set","radio","temRadioSize","radioGroupSize","src_radiovue_type_script_lang_js_","radio_component","radio_api","src_radio","packages_radio","radio_groupvue_type_template_id_818a704c_render","_elTag","handleKeydown","radio_groupvue_type_template_id_818a704c_staticRenderFns","freeze","LEFT","UP","RIGHT","DOWN","radio_groupvue_type_script_lang_js_","fill","radios","firstLabel","some","roleRadios","_value","src_radio_groupvue_type_script_lang_js_","radio_group_component","radio_group_api","radio_group","packages_radio_group","radio_buttonvue_type_template_id_18a77a32_render","activeStyle","radio_buttonvue_type_template_id_18a77a32_staticRenderFns","radio_buttonvue_type_script_lang_js_","borderColor","boxShadow","src_radio_buttonvue_type_script_lang_js_","radio_button_component","radio_button_api","radio_button","packages_radio_button","checkboxvue_type_template_id_d0387074_render","checkboxSize","isChecked","indeterminate","trueLabel","falseLabel","$$a","$$el","$$c","$$v","$$i","checkboxvue_type_template_id_d0387074_staticRenderFns","checkboxvue_type_script_lang_js_","selfModel","isLimitExceeded","store","_checkboxGroup","isLimitDisabled","temCheckboxSize","checkboxGroupSize","addToStore","src_checkboxvue_type_script_lang_js_","checkbox_component","checkbox_api","src_checkbox","packages_checkbox","checkbox_buttonvue_type_template_id_478e906e_render","checkbox_buttonvue_type_template_id_478e906e_staticRenderFns","checkbox_buttonvue_type_script_lang_js_","_checkboxGroup2","src_checkbox_buttonvue_type_script_lang_js_","checkbox_button_component","checkbox_button_api","checkbox_button","packages_checkbox_button","checkbox_groupvue_type_template_id_7289a290_render","checkbox_groupvue_type_template_id_7289a290_staticRenderFns","checkbox_groupvue_type_script_lang_js_","src_checkbox_groupvue_type_script_lang_js_","checkbox_group_component","checkbox_group_api","checkbox_group","packages_checkbox_group","componentvue_type_template_id_2dcd8fbb_render","switchDisabled","switchValue","activeValue","inactiveValue","inactiveIconClass","inactiveText","coreWidth","activeIconClass","activeText","componentvue_type_template_id_2dcd8fbb_staticRenderFns","switch_src_componentvue_type_script_lang_js_","activeColor","inactiveColor","setBackgroundColor","newColor","core","packages_switch_src_componentvue_type_script_lang_js_","src_component_component","src_component_api","switch_src_component","packages_switch","selectvue_type_template_id_0e4aade6_render","selectSize","toggleMenu","multiple","collapseTags","selected","closable","selectDisabled","collapseTagSize","hit","hitState","deleteTag","currentLabel","resetInputHeight","getValueKey","filterable","query","inputLength","softFocus","keyup","managePlaceholder","resetInputState","navigateOptions","selectOption","deletePrevTag","handleComposition","composing","debouncedQueryChange","currentPlaceholder","debouncedOnInputChange","paste","inputHovering","selectedLabel","callback","iconClass","handleClearClick","handleMenuEnter","emptyText","allowCreate","filteredOptionsCount","showNewOption","empty","selectvue_type_template_id_0e4aade6_staticRenderFns","select_dropdownvue_type_template_id_06828748_render","minWidth","select_dropdownvue_type_template_id_06828748_staticRenderFns","select_dropdownvue_type_script_lang_js_","$parentInputWidth","getBoundingClientRect","reference","destroyPopper","src_select_dropdownvue_type_script_lang_js_","select_dropdown_component","select_dropdown_api","select_dropdown","optionvue_type_template_id_7a44c642_render","itemSelected","groupDisabled","limitReached","hover","hoverItem","selectOptionClick","optionvue_type_template_id_7a44c642_staticRenderFns","_typeof","iterator","obj","constructor","optionvue_type_script_lang_js_","isObject","toLowerCase","isEqual","contains","multipleLimit","remote","_select","b","arr","handleGroupDisabled","hoverIndex","queryChange","RegExp","cachedOptions","optionsCount","_select2","selectedOptions","selectedIndex","onOptionDestroy","src_optionvue_type_script_lang_js_","option_component","option_api","src_option","tag_","tag_default","resize_event_","lib_locale_","lib_locale_default","scroll_into_view_","scroll_into_view_default","navigation_mixin","hoverOption","optionsAllDisabled","option","every","scrollToOption","selectvue_type_script_lang_js_","hasValue","criteria","loadingText","noMatchText","noDataText","hasExistingOption","ElSelectMenu","ElTag","automaticDropdown","remoteMethod","filterMethod","defaultFirstOption","reserveKeyword","createdLabel","createdSelected","initialInputHeight","cachedPlaceHolder","previousQuery","menuVisibleOnFocus","isOnComposition","isSilentBlur","handleQueryChange","setSelected","resetHoverIndex","inputs","checkDefaultFirstOption","_this6","popper","scrollbar","handleScroll","_this7","getOption","isNull","isUndefined","cachedOption","newOption","_this8","_this9","deleteSelected","toggleLastOptionHitState","pop","_this10","inputChildNodes","tags","sizeInMap","_this11","handleOptionSelect","byClick","_this12","optionIndex","getValueIndex","setSoftFocus","onInputChange","resetInputWidth","handleResize","hasCreated","_this13","_this14","sizeMap","medium","mini","src_selectvue_type_script_lang_js_","select_component","select_api","src_select","packages_select","packages_option","option_groupvue_type_template_id_6685e5de_render","option_groupvue_type_template_id_6685e5de_staticRenderFns","option_groupvue_type_script_lang_js_","$children","src_option_groupvue_type_script_lang_js_","option_group_component","option_group_api","option_group","packages_option_group","buttonvue_type_template_id_ca859fb4_render","buttonSize","buttonDisabled","plain","circle","nativeType","buttonvue_type_template_id_ca859fb4_staticRenderFns","buttonvue_type_script_lang_js_","src_buttonvue_type_script_lang_js_","button_component","button_api","src_button","packages_button","button_groupvue_type_template_id_3d8661d0_render","button_groupvue_type_template_id_3d8661d0_staticRenderFns","button_groupvue_type_script_lang_js_","src_button_groupvue_type_script_lang_js_","button_group_component","button_group_api","button_group","packages_button_group","tablevue_type_template_id_493fe34e_render","fit","stripe","isHidden","scrollX","scrollY","states","isComplex","tableSize","handleMouseLeave","showHeader","handleHeaderFooterMousewheel","bodyWidth","defaultSort","scrollPosition","bodyHeight","rowClassName","rowStyle","highlightCurrentRow","emptyBlockStyle","showSummary","sumText","summaryMethod","fixedColumns","handleFixedMousewheel","fixedWidth","fixedHeight","fixed","headerHeight","fixedBodyHeight","appendHeight","rightFixedColumns","rightFixedWidth","gutterWidth","resizeProxyVisible","tablevue_type_template_id_493fe34e_staticRenderFns","checkbox_","checkbox_default","external_throttle_debounce_","external_normalize_wheel_","external_normalize_wheel_default","isFirefox","navigator","userAgent","mousewheel_mousewheel","mousewheel","normalized","directives_mousewheel","external_vue_","external_vue_default","util_typeof","getCell","cell","toUpperCase","util_isObject","util_orderBy","orderBy","sortKey","reverse","sortMethod","sortBy","getKey","by","$value","compare","len","sort","order","getColumnById","table","columnId","column","columns","getColumnByKey","columnKey","getColumnByCell","matches","match","getRowIdentity","row","rowKey","Error","getKeysMap","arrayMap","hasOwn","mergeOptions","defaults","config","parseWidth","parseMinWidth","parseHeight","compose","funcs","arg","reduce","toggleRowStatus","statusArr","changed","included","addRow","removeRow","walkTreeNode","root","cb","childrenKey","lazyKey","isNil","_walker","level","expand","defaultExpandAll","expandRows","updateExpandRows","_states","_states$data","expandRowsMap","rowId","rowInfo","toggleRowExpansion","expanded","scheduleLayout","setExpandRowKeys","rowKeys","assertRowKey","_states2","keysMap","cur","info","isRowExpanded","_states3","_states3$expandRows","expandMap","_currentRowKey","currentRow","setCurrentRowKey","setCurrentRowByKey","restoreCurrentRowKey","updateCurrentRow","oldCurrentRow","updateCurrentRowData","currentRowKey","_extends","assign","source","tree","expandRowKeys","treeData","indent","lazy","lazyTreeNodeMap","lazyColumnIdentifier","childrenColumnName","normalizedData","normalize","normalizedLazyNode","res","parentId","updateTreeData","nested","newTreeData","oldTreeData","rootLazyRowKeys","getExpanded","oldValue","newValue","_ref$loaded","loaded","_ref$loading","lazyKeys","lazyNodeChildren","_ref2","_ref2$loaded","_ref2$loading","updateTableScrollY","updateTreeExpandKeys","toggleTreeExpansion","_states4","oldExpanded","loadOrToggle","_states5","loadData","treeNode","load","_states6","watcher_sortData","sortData","sortingColumn","sortable","sortProp","sortOrder","doFlattenColumns","watcher","extend","_columns","originColumns","leafColumns","fixedLeafColumns","rightFixedLeafColumns","leafColumnsLength","fixedLeafColumnsLength","rightFixedLeafColumnsLength","isAllSelected","selection","reserveSelection","selectOnIndeterminate","selectable","filters","filteredData","hoverRow","updateColumns","notFixedColumns","needUpdateColumns","debouncedUpdateLayout","isSelected","_states$selection","clearSelection","oldSelection","cleanSelection","deleted","selectedMap","dataMap","newSelection","toggleRowSelection","_toggleAllSelection","selectionChanged","updateSelectionByRowKey","updateAllSelected","selectedCount","j","isRowSelectable","updateFilters","values","col","updateSort","prop","execFilter","_data","execSort","execQuery","ignore","clearFilter","columnKeys","_table$$refs","tableHeader","fixedTableHeader","rightFixedTableHeader","panels","filterPanels","find","filteredValue","commit","silent","multi","clearSort","setExpandRowKeysAdapter","toggleRowExpansionAdapter","hasExpandColumn","mutations","setData","dataInstanceChanged","insertColumn","$ready","removeColumn","changeSortCondition","ingore","filterChange","newFilters","toggleAllSelection","rowSelectedChanged","setHoverRow","setCurrentRow","args","nextTick","updateScrollY","src_store","createStore","initialState","mapStates","mapper","fn","scrollbar_width_","scrollbar_width_default","_classCallCheck","Constructor","TypeError","table_layout_TableLayout","TableLayout","observers","tableHeight","footerHeight","viewportHeight","bodyWrapper","prevScrollY","offsetHeight","setHeight","updateElsHeight","setMaxHeight","getFlattenColumns","flattenColumns","isColumnGroup","headerWrapper","appendWrapper","footerWrapper","headerTrElm","noneHeader","headerDisplayNone","noData","notifyObservers","headerChild","parentElement","updateColumnsWidth","bodyMinWidth","flexColumns","realWidth","scrollYWidth","totalFlexWidth","allColumnsWidth","flexWidthPerPixel","noneFirstWidth","flexWidth","resizeState","addObserver","observer","removeObserver","onColumnsChange","onScrollableChange","table_layout","layout_observer","tableLayout","__updated__","cols","columnsMap","ths","_j","th","table_body_typeof","table_body_extends","table_body","ElCheckbox","cellspacing","cellpadding","acc","wrappedRowRender","tooltipEffect","content","tooltipContent","treeIndent","leftFixedLeafCount","rightFixedLeafCount","columnsCount","leftFixedCount","rightFixedCount","firstDefaultColumnIndex","storeStatesHoverRow","raf","requestAnimationFrame","rows","oldRow","newRow","activateTooltip","tooltip","handleShowPopper","getKeyOfRow","isColumnHidden","getSpan","rowIndex","columnIndex","rowspan","colspan","spanMethod","getRowStyle","getRowClass","classes","getCellStyle","cellStyle","getCellClass","align","cellClassName","getColspanRealWidth","widthArr","_ref3","handleCellMouseEnter","hoverState","cellChild","range","createRange","setStart","setEnd","rangeWidth","innerText","setExpectedState","handleCellMouseLeave","handleClosePopper","oldHoverState","handleMouseEnter","handleContextMenu","handleEvent","handleDoubleClick","rowRender","$index","treeRowData","columnsHidden","rowClasses","displayStyle","dblclick","contextmenu","cellIndex","_getSpan","columnData","noLazyChildren","renderCell","_renderProxy","_store$states","renderExpanded","tr","tmp","traverse","node","innerTreeRowData","childKey","_nodes","nodes","filter_panelvue_type_template_id_7f2c919f_render","handleOutsideClick","handleConfirm","handleReset","filterValue","handleSelect","filter_panelvue_type_template_id_7f2c919f_staticRenderFns","dropdowns","src_dropdown","checkbox_group_","checkbox_group_default","filter_panelvue_type_script_lang_js_","ElCheckboxGroup","confirmFilter","filterMultiple","filterOpened","_popper","zIndex","nextZIndex","src_filter_panelvue_type_script_lang_js_","filter_panel_component","filter_panel_api","filter_panel","table_header_extends","getAllColumns","convertToRows","maxLevel","colSpan","subColumn","allColumns","rowSpan","table_header","columnRows","hasGutter","getHeaderRowStyle","getHeaderRowClass","mousemove","handleMouseMove","handleMouseOut","handleMouseDown","handleHeaderClick","handleHeaderContextMenu","getHeaderCellStyle","getHeaderCellClass","labelClassName","renderHeader","handleSortClick","handleFilterClick","_defaultSort","isCellHidden","start","after","headerRowStyle","headerRowClassName","headerCellStyle","headerAlign","headerCellClassName","filterPanel","filterPlacement","$mount","draggingColumn","dragging","tableEl","tableLeft","columnEl","columnRect","minLeft","dragState","startMouseLeft","clientX","startLeft","startColumnLeft","resizeProxy","onselectstart","ondragstart","deltaLeft","proxyLeft","handleMouseUp","_dragState","finalLeft","columnWidth","cursor","resizable","rect","bodyStyle","pageX","toggleOrder","sortOrders","givenOrder","table_footer_extends","table_footer","sums","precisions","notNumber","decimal","curr","getRowClasses","before","tablevue_type_script_lang_js_extends","tableIdSeed","tablevue_type_script_lang_js_","Mousewheel","treeProps","hasChildren","TableHeader","TableFooter","TableBody","abs","spinY","currentScrollTop","pixelY","scrollLeft","pixelX","syncPostion","_bodyWrapper","_$refs","fixedBodyWrapper","rightFixedBodyWrapper","maxScrollLeftPosition","bindEvents","passive","resizeListener","unbindEvents","shouldUpdateLayout","_resizeState","oldWidth","oldHeight","shouldUpdateHeight","doLayout","_layout","_layout2","_layout2$headerHeight","_layout2$footerHeight","bottom","tableData","tableId","_treeProps","_treeProps$hasChildre","_treeProps$children","src_tablevue_type_script_lang_js_","table_component","table_api","src_table","packages_table","cellStarts","cellForced","_ref4","_ref5","_ref6","defaultRenderCell","_ref7","v","formatter","treeCellPrefix","_ref8","expandClasses","iconClasses","table_column_extends","columnIdSeed","table_column","showTooltipWhenOverflow","showOverflowTooltip","isSubColumn","owner","columnOrTableParent","realMinWidth","realAlign","realHeaderAlign","getPropsData","getColumnElIndex","setColumnWidth","setColumnForcedProps","setColumnRenders","scope","$scopedSlots","header","originRenderCell","registerNormalWatchers","aliases","allAliases","columnConfig","registerComplexWatchers","basicProps","sortProps","selectProps","filterProps","chains","hiddenColumns","packages_table_column","pickervue_type_template_id_79ae069f_render","ranged","editable","pickerDisabled","pickerSize","firstInputId","triggerClass","haveTrigger","clearIcon","handleClickIcon","pickerVisible","handleRangeClick","startPlaceholder","handleStartInput","handleStartChange","rangeSeparator","endPlaceholder","handleEndInput","handleEndChange","secondInputId","pickervue_type_template_id_79ae069f_staticRenderFns","date_util_","NewPopper","DEFAULT_FORMATS","date","month","datetime","time","week","timerange","daterange","monthrange","datetimerange","year","HAVE_TRIGGER_TYPES","pickervue_type_script_lang_js_DATE_FORMATTER","DATE_FORMATTER","format","getTime","pickervue_type_script_lang_js_DATE_PARSER","DATE_PARSER","RANGE_FORMATTER","end","RANGE_PARSER","separator","range1","range2","TYPE_VALUE_RESOLVER_MAP","parser","getMonth","trueDate","setHours","setDate","getDate","getDay","number","dates","PLACEMENT_MAP","parseAsFormatAndType","customFormat","formatAsFormatAndType","valueEquals","dateEquals","aIsDate","bIsDate","aIsArray","bIsArray","isString","pickervue_type_script_lang_js_validator","pickervue_type_script_lang_js_","valueFormat","defaultValue","defaultTime","pickerOptions","unlinkPanels","valueOnOpen","unwatchPickerOptions","showPicker","hidePicker","parsedValue","picker","refInput","valueIsEmpty","selectionMode","showTrigger","formattedValue","valueIsDateObject","handleFieldReset","parseValue","isParsed","formatToValue","isFormattable","parseString","formatToString","isValidValue","emitInput","initialValue","resetView","mountPicker","adjustSpinners","panel","showTime","arrowControl","timeArrowControl","updateOptions","selectableRange","ranges","deep","pos","setSelectionRange","unmountPicker","$off","formatted","src_pickervue_type_script_lang_js_","picker_component","picker_api","datevue_type_template_id_2440d4ea_render","handleEnter","handleLeave","sidebar","shortcuts","shortcut","handleShortcutClick","visibleDate","userInputDate","handleVisibleDateChange","handleTimePickClose","visibleTime","timePickerVisible","userInputTime","handleVisibleTimeChange","pick","handleTimePick","proxyTimePickerDataProperties","currentView","prevYear","prevMonth","showYearPicker","yearLabel","showMonthPicker","nextYear","nextMonth","firstDayOfWeek","disabledDate","handleDatePick","handleYearPick","handleMonthPick","footerVisible","changeToNow","confirm","datevue_type_template_id_2440d4ea_staticRenderFns","timevue_type_template_id_3d939089_render","showSeconds","useArrow","amPmMode","handleCancel","timevue_type_template_id_3d939089_staticRenderFns","time_spinnervue_type_template_id_1facadeb_render","noresize","emitSelectRange","adjustCurrentSpinner","hoursList","hour","hours","amPm","minutesList","enabled","minutes","second","seconds","arrowHourList","arrowMinuteList","minute","arrowSecondList","time_spinnervue_type_template_id_1facadeb_staticRenderFns","time_spinnervue_type_script_lang_js_","getHours","getMinutes","getSeconds","currentScrollbar","bindScrollEvent","scrollDown","modifyDateField","adjustSpinner","bindFuntion","wrap","onscroll","scrollBarHeight","typeItemHeight","shouldShowAmPm","isCapital","basic_time_spinnervue_type_script_lang_js_","time_spinner_component","time_spinner_api","time_spinner","timevue_type_script_lang_js_","TimeSpinner","spinner","needInitAdjust","selectionRange","first","mapping","changeSelectionRange","_step","list","panel_timevue_type_script_lang_js_","time_component","time_api","panel_time","year_tablevue_type_template_id_c86ab5e0_render","handleYearTableClick","startYear","year_tablevue_type_template_id_c86ab5e0_staticRenderFns","year_tablevue_type_script_lang_js_datesInYear","datesInYear","numOfDays","firstDay","year_tablevue_type_script_lang_js_","getFullYear","today","basic_year_tablevue_type_script_lang_js_","year_table_component","year_table_api","year_table","month_tablevue_type_template_id_654d4f42_render","handleMonthTableClick","months","month_tablevue_type_template_id_654d4f42_staticRenderFns","month_tablevue_type_script_lang_js_datesInMonth","datesInMonth","clearDate","getMonthTimestamp","NaN","month_tablevue_type_script_lang_js_","minDate","maxDate","rangeState","endDate","selecting","rangeStateEndDate","markRange","tableRows","lastRow","lastColumn","cellMatchesDate","inRange","getMonthOfCell","k","newDate","selectedDate","_loop","isToday","cellDate","basic_month_tablevue_type_script_lang_js_","month_table_component","month_table_api","month_table","date_tablevue_type_template_id_5d1f3341_render","showWeekNumber","WEEKS","isWeekActive","getCellClasses","date_tablevue_type_template_id_5d1f3341_staticRenderFns","_WEEKS","date_tablevue_type_script_lang_js_getDateTimestamp","getDateTimestamp","date_tablevue_type_script_lang_js_removeFromArray","removeFromArray","pred","date_tablevue_type_script_lang_js_","offsetDay","startDate","day","dateCountOfMonth","dateCountOfLastMonth","count","numberOfDaysFromPreviousMonth","getDateOfCell","offsetFromStart","setMonth","setFullYear","dayOffset","weekDate","_cell","weekNumber","basic_date_tablevue_type_script_lang_js_","date_table_component","date_table_api","date_table","datevue_type_script_lang_js_","inputElm","pickerWidth","getDefaultValue","timepicker","timeFormat","_date","_selectableRange","emit","onClick","checkDateWithinRange","handleKeyControl","monthDate","dateFormat","TimePicker","YearTable","MonthTable","DateTable","yearTranslation","panel_datevue_type_script_lang_js_","date_component","date_api","panel_date","date_rangevue_type_template_id_2652849a_render","minVisibleDate","handleDateInput","handleDateChange","handleMinTimeClose","minVisibleTime","minTimePickerVisible","handleTimeInput","handleTimeChange","handleMinTimePick","minTimePicker","maxVisibleDate","handleMaxTimeClose","maxVisibleTime","maxTimePickerVisible","handleMaxTimePick","maxTimePicker","leftPrevYear","leftPrevMonth","enableYearArrow","leftNextYear","enableMonthArrow","leftNextMonth","leftLabel","leftDate","changerange","handleChangeRange","handleRangePick","rightPrevYear","rightPrevMonth","rightNextYear","rightNextMonth","rightLabel","rightDate","btnDisabled","date_rangevue_type_template_id_2652849a_staticRenderFns","date_rangevue_type_script_lang_js_calcDefaultValue","calcDefaultValue","date_rangevue_type_script_lang_js_","leftYear","leftMonth","leftMonthDate","rightYear","rightMonth","rightMonthDate","dateUserInput","timeUserInput","yearOffset","minDateYear","minDateMonth","maxDateYear","maxDateMonth","_calcDefaultValue","onPick","panel_date_rangevue_type_script_lang_js_","date_range_component","date_range_api","date_range","month_rangevue_type_template_id_f2645fb8_render","month_rangevue_type_template_id_f2645fb8_staticRenderFns","month_rangevue_type_script_lang_js_calcDefaultValue","month_rangevue_type_script_lang_js_","panel_month_rangevue_type_script_lang_js_","month_range_component","month_range_api","month_range","date_picker_getPanel","getPanel","date_picker","_type","packages_date_picker","time_selectvue_type_template_id_51ab9320_render","time_selectvue_type_template_id_51ab9320_staticRenderFns","parseTime","compareTime","time1","time2","value1","value2","minutes1","minutes2","formatTime","nextTime","timeValue","stepValue","time_selectvue_type_script_lang_js_","selector","hasDefault","minTime","maxTime","panel_time_selectvue_type_script_lang_js_","time_select_component","time_select_api","time_select","picker_time_select","packages_time_select","time_rangevue_type_template_id_fb28660e_render","handleMinChange","setMinSelectionRange","handleMaxChange","setMaxSelectionRange","time_rangevue_type_template_id_fb28660e_staticRenderFns","MIN_TIME","MAX_TIME","time_rangevue_type_script_lang_js_minTimeOfDay","minTimeOfDay","time_rangevue_type_script_lang_js_maxTimeOfDay","maxTimeOfDay","advanceTime","amount","time_rangevue_type_script_lang_js_","minSpinner","maxSpinner","minSelectableRange","maxSelectableRange","half","panel_time_rangevue_type_script_lang_js_","time_range_component","time_range_api","time_range","time_picker","isRange","_isRange","packages_time_picker","mainvue_type_template_id_52060272_render","transition","handleAfterEnter","handleAfterLeave","tooltipId","mainvue_type_template_id_52060272_staticRenderFns","mainvue_type_script_lang_js_","openDelay","closeDelay","__vue__","doToggle","handleDocumentClick","doShow","doClose","cleanup","_timer","src_mainvue_type_script_lang_js_","main_component","main_api","main","getReference","directive","inserted","popover","src_main","manual","enterable","hideAfter","timeoutPending","popperVM","debounceClose","firstElement","getFirstElement","addTooltipClass","componentInstance","removeFocusing","expectedState","slots","packages_tooltip","mainvue_type_template_id_6b29b012_render","handleAction","distinguishCancelAndClose","message","dangerouslyUseHTMLString","innerHTML","showInput","inputType","inputPlaceholder","handleInputEnter","inputValue","visibility","editorErrorMessage","showCancelButton","cancelButtonClasses","cancelButtonLoading","roundButton","cancelButtonText","showConfirmButton","confirmButtonClasses","confirmButtonLoading","confirmButtonText","mainvue_type_template_id_6b29b012_staticRenderFns","aria_dialog_","aria_dialog_default","messageBox","typeMap","warning","message_box_src_mainvue_type_script_lang_js_","closeOnHashChange","confirmButtonClass","cancelButtonClass","getSafeClose","currentId","uid","_closing","onClose","closeDialog","restoreBodyStyle","doAfterClose","action","$type","validate","inputPattern","inputErrorMessage","getInputElement","inputValidator","validateResult","getFirstFocus","btn","inputRefs","focusAfterClosed","confirmButtonDisabled","packages_message_box_src_mainvue_type_script_lang_js_","src_main_component","src_main_api","message_box_src_main","vdom_","main_typeof","main_defaults","modalFade","confirmButtonPosition","confirmButtonHighlight","cancelButtonHighlight","MessageBoxConstructor","currentMsg","main_instance","msgQueue","defaultCallback","resolve","reject","initInstance","main_showNextMsg","showNextMsg","closeTimer","shift","oldCb","main_MessageBox","MessageBox","Promise","setDefaults","alert","prompt","packages_message_box_src_main","message_box","breadcrumbvue_type_template_id_4b464c06_render","breadcrumbvue_type_template_id_4b464c06_staticRenderFns","breadcrumbvue_type_script_lang_js_","separatorClass","elBreadcrumb","src_breadcrumbvue_type_script_lang_js_","breadcrumb_component","breadcrumb_api","breadcrumb","packages_breadcrumb","breadcrumb_itemvue_type_template_id_fcf9eaac_render","to","breadcrumb_itemvue_type_template_id_fcf9eaac_staticRenderFns","breadcrumb_itemvue_type_script_lang_js_","link","src_breadcrumb_itemvue_type_script_lang_js_","breadcrumb_item_component","breadcrumb_item_api","breadcrumb_item","packages_breadcrumb_item","formvue_type_template_id_a1b5ff34_render","labelPosition","inline","formvue_type_template_id_a1b5ff34_staticRenderFns","formvue_type_script_lang_js_","rules","labelWidth","labelSuffix","inlineMessage","showMessage","validateOnRuleChange","hideRequiredAsterisk","fields","field","removeValidateEvents","addValidateEvents","autoLabelWidth","potentialLabelWidthArr","resetFields","resetField","clearValidate","promise","valid","invalidFields","validateField","getLabelWidthIndex","registerLabelWidth","deregisterLabelWidth","src_formvue_type_script_lang_js_","form_component","form_api","src_form","packages_form","form_itemvue_type_template_id_b6f3db6c_render","isRequired","sizeClass","labelStyle","for","labelFor","contentStyle","validateMessage","form_itemvue_type_template_id_b6f3db6c_staticRenderFns","external_async_validator_","external_async_validator_default","label_wrapvue_type_script_lang_js_","isAutoWidth","updateAll","marginLeft","computedWidth","getLabelWidth","firstElementChild","updateLabelWidth","updateComputedLabelWidth","src_label_wrapvue_type_script_lang_js_","label_wrap_render","label_wrap_staticRenderFns","label_wrap_component","label_wrap_api","label_wrap","form_itemvue_type_script_lang_js_","validateStatus","LabelWrap","ret","computedLabelWidth","parentName","fieldValue","getRules","rule","_formSize","validateDisabled","getFilteredRule","descriptor","firstFields","errors","formRules","selfRules","requiredRule","onFieldBlur","onFieldChange","src_form_itemvue_type_script_lang_js_","form_item_component","form_item_api","form_item","packages_form_item","tab_barvue_type_template_id_2031f33a_render","rootTabs","tabPosition","barStyle","tab_barvue_type_template_id_2031f33a_staticRenderFns","tab_barvue_type_script_lang_js_","tabs","tabSize","sizeName","sizeDir","firstUpperCase","str","L","paneName","tabStyles","paddingRight","msTransform","webkitTransform","src_tab_barvue_type_script_lang_js_","tab_bar_component","tab_bar_api","tab_bar","noop","tab_navvue_type_script_lang_js_firstUpperCase","tab_navvue_type_script_lang_js_","TabBar","panes","currentName","onTabClick","onTabRemove","stretch","scrollable","navOffset","isFocus","focusable","navStyle","dir","scrollPrev","containerSize","navScroll","currentOffset","newOffset","scrollNext","navSize","nav","scrollToActiveTab","activeTab","isHorizontal","activeTabBounding","navScrollBounding","maxOffset","update","_currentOffset","changeTab","tabList","setFocus","removeFocus","visibilityChangeHandler","visibilityState","windowBlurHandler","windowFocusHandler","scrollBtn","pane","tabName","isClosable","btnClose","tabLabelContent","refInFor","src_tab_navvue_type_script_lang_js_","tab_nav_render","tab_nav_staticRenderFns","tab_nav_component","tab_nav_api","tab_nav","tabsvue_type_script_lang_js_","TabNav","activeName","addable","setCurrentName","calcPaneInstances","isForceUpdate","paneSlots","componentOptions","Ctor","panesChanged","handleTabClick","handleTabRemove","handleTabAdd","changeCurrentName","then","newButton","navData","src_tabsvue_type_script_lang_js_","tabs_render","tabs_staticRenderFns","tabs_component","tabs_api","packages_tabs","tab_panevue_type_template_id_9145a070_render","tab_panevue_type_template_id_9145a070_staticRenderFns","tab_panevue_type_script_lang_js_","labelContent","src_tab_panevue_type_script_lang_js_","tab_pane_component","tab_pane_api","tab_pane","packages_tab_pane","tagvue_type_script_lang_js_","disableTransitions","tagSize","tagEl","src_tagvue_type_script_lang_js_","tag_render","tag_staticRenderFns","tag_component","tag_api","packages_tag","treevue_type_template_id_547575a6_render","highlightCurrent","draggingNode","allowDrop","dropType","getNodeKey","renderAfterExpand","showCheckbox","renderContent","handleNodeExpand","isEmpty","showDropIndicator","treevue_type_template_id_547575a6_staticRenderFns","NODE_KEY","markNodeData","configurable","writable","util_getNodeKey","findNearestComponent","_createClass","defineProperties","protoProps","staticProps","node_classCallCheck","getChildState","all","none","allWithoutDisable","reInitChecked","_getChildState","checkStrictly","getPropertyFromData","dataProp","nodeIdSeed","node_Node","Node","isCurrent","registerNode","isLeaf","isLeafByUser","defaultExpandedKeys","autoExpandParent","currentNodeKey","currentNode","_initDefaultCheckedNode","updateLeafState","insertChild","walk","remove","batch","getChildren","insertBefore","insertAfter","dataIndex","deregisterNode","removeChildByData","targetNode","expandParent","done","shouldLoadData","setChecked","doCreateChildren","defaultProps","recursion","passValue","checkDescendants","_getChildState2","handleDescendants","isCheck","_getChildState3","_all","forceInit","updateChildren","newData","oldData","newDataMap","newNodes","isNodeExists","nodeKey","model_node","tree_store_typeof","tree_store_classCallCheck","tree_store_TreeStore","TreeStore","nodesMap","loadFn","_initDefaultCheckedNodes","filterNodeMethod","allHidden","instanceChanged","getNode","refData","refNode","parentData","defaultCheckedKeys","checkedKey","setDefaultCheckedKey","getCheckedNodes","leafOnly","includeHalfChecked","checkedNodes","getCheckedKeys","getHalfCheckedNodes","getHalfCheckedKeys","_getAllNodes","allNodes","_child","_setCheckedKeys","checkedKeys","cache","setCheckedNodes","setCheckedKeys","setDefaultExpandedKeys","getCurrentNode","setCurrentNode","prevCurrentNode","setUserCurrentNode","currNode","setCurrentNodeKey","tree_store","tree_nodevue_type_template_id_3ba3ef0e_render","this$1","draggable","handleDragStart","dragover","handleDragOver","dragend","handleDragEnd","drop","handleDrop","handleExpandIconClick","handleCheckChange","childNodeRendered","handleChildNodeExpand","tree_nodevue_type_template_id_3ba3ef0e_staticRenderFns","tree_nodevue_type_script_lang_js_","NodeContent","oldChecked","oldIndeterminate","nodeIndeterminate","handleSelectChange","nodeChecked","nodeExpanded","expandOnClickNode","checkOnClickNode","_events","halfCheckedNodes","halfCheckedKeys","nodeData","isTree","accordion","src_tree_nodevue_type_script_lang_js_","tree_node_component","tree_node_api","tree_node","treevue_type_script_lang_js_","ElTreeNode","treeItems","checkboxItems","dropNode","allowDrag","treeItemArray","checkbox","getNodePath","getCurrentKey","setCurrentKey","updateKeyChildren","initTabIndex","checkedItem","currentItem","hasInput","dataTransfer","effectAllowed","oldDropNode","dropPrev","dropInner","dropNext","userAllowDropInner","dropEffect","nextSibling","previousSibling","targetPosition","treePosition","prevPercent","nextPercent","indicatorTop","distance","clientY","iconPosition","dropIndicator","draggingNodeCopy","src_treevue_type_script_lang_js_","tree_component","tree_api","src_tree","packages_tree","mainvue_type_template_id_6e53341b_render","typeClass","showIcon","isBigIcon","isBoldTitle","description","closeText","mainvue_type_template_id_6e53341b_staticRenderFns","TYPE_CLASSES_MAP","alert_src_mainvue_type_script_lang_js_","packages_alert_src_mainvue_type_script_lang_js_","alert_src_main_component","alert_src_main_api","alert_src_main","packages_alert","mainvue_type_template_id_43dbc3d8_render","horizontalClass","positionStyle","clearTimer","startTimer","mainvue_type_template_id_43dbc3d8_staticRenderFns","mainvue_type_script_lang_js_typeMap","notification_src_mainvue_type_script_lang_js_","duration","verticalOffset","timer","verticalProperty","destroyElement","packages_notification_src_mainvue_type_script_lang_js_","notification_src_main_component","notification_src_main_api","notification_src_main","NotificationConstructor","src_main_instance","instances","seed","main_Notification","Notification","userOnClose","dom","removedHeight","closeAll","packages_notification_src_main","notification","mainvue_type_template_id_32708644_render","vertical","sliderDisabled","showInputControls","firstValue","runwayStyle","onSliderClick","tooltipClass","secondValue","stops","showStops","getStopStyle","markList","mark","mainvue_type_template_id_32708644_staticRenderFns","input_number_","input_number_default","buttonvue_type_template_id_e72d2ad2_render","wrapperStyle","onButtonDown","touchstart","onLeftKeyDown","onRightKeyDown","showTooltip","formatValue","buttonvue_type_template_id_e72d2ad2_staticRenderFns","slider_src_buttonvue_type_script_lang_js_","isClick","startX","currentX","startY","currentY","startPosition","newPosition","currentPosition","enableFormat","formatTooltip","displayTooltip","hideTooltip","onDragStart","onDragging","onDragEnd","setPosition","touches","resetSize","diff","sliderSize","lengthPerStep","steps","packages_slider_src_buttonvue_type_script_lang_js_","src_button_component","src_button_api","slider_src_button","marker","slider_src_mainvue_type_script_lang_js_","marks","ElInputNumber","SliderButton","SliderMarker","setValues","minValue","maxValue","valueChanged","targetValue","button1","sliderOffsetBottom","slider","sliderOffsetLeft","stopCount","stepWidth","marksKeys","point","barSize","barStart","valuetext","packages_slider_src_mainvue_type_script_lang_js_","slider_src_main_component","slider_src_main_api","slider_src_main","loadingvue_type_template_id_eee0a7ac_render","viewBox","cx","cy","loadingvue_type_template_id_eee0a7ac_staticRenderFns","loadingvue_type_script_lang_js_","setText","src_loadingvue_type_script_lang_js_","loading_component","loading_api","after_leave_","after_leave_default","Mask","loadingDirective","toggleLoading","modifiers","originalPosition","originalOverflow","maskStyle","mask","insertDom","scroll","documentElement","hiding","domVisible","lock","domInserted","textExr","spinnerExr","backgroundExr","customClassExr","vm","unbind","src_directive","LoadingConstructor","src_defaults","fullscreenLoading","src_addStyle","addStyle","src_Loading","Loading","src","packages_loading","use","$loading","service","iconvue_type_template_id_cb3fe7f4_render","iconvue_type_template_id_cb3fe7f4_staticRenderFns","iconvue_type_script_lang_js_","src_iconvue_type_script_lang_js_","icon_component","icon_api","packages_icon","src_row","gutter","justify","marginRight","packages_row","col_typeof","span","pull","xs","sm","md","lg","xl","classList","packages_col","upload_listvue_type_template_id_173fedf5_render","listType","files","file","status","url","alt","percentage","parsePercentage","handlePreview","upload_listvue_type_template_id_173fedf5_staticRenderFns","progress_","progress_default","upload_listvue_type_script_lang_js_","ElProgress","src_upload_listvue_type_script_lang_js_","upload_list_component","upload_list_api","upload_list","external_babel_helper_vue_jsx_merge_props_","external_babel_helper_vue_jsx_merge_props_default","getError","xhr","msg","response","responseText","err","method","getBody","JSON","parse","upload","XMLHttpRequest","onprogress","progress","onProgress","formData","FormData","filename","onerror","onload","onSuccess","withCredentials","headers","setRequestHeader","send","upload_draggervue_type_template_id_7ebbf219_render","onDrop","onDragover","dragleave","upload_draggervue_type_template_id_7ebbf219_staticRenderFns","upload_draggervue_type_script_lang_js_","uploader","accept","extension","baseType","acceptedType","src_upload_draggervue_type_script_lang_js_","upload_dragger_component","upload_dragger_api","upload_dragger","uploadvue_type_script_lang_js_","UploadDragger","onStart","beforeUpload","drag","onPreview","onRemove","fileList","autoUpload","httpRequest","limit","onExceed","mouseover","reqs","isImage","uploadFiles","postFiles","rawFile","post","processedFile","fileType","File","abort","req","src_uploadvue_type_script_lang_js_","upload_render","upload_staticRenderFns","upload_component","upload_api","src_upload","srcvue_type_script_lang_js_noop","srcvue_type_script_lang_js_","UploadList","Upload","dragger","showFileList","beforeRemove","onChange","dragOver","draging","tempIndex","uploadDisabled","raw","URL","createObjectURL","handleStart","handleProgress","getFile","handleSuccess","handleError","handleRemove","doRemove","clearFiles","submit","revokeObjectURL","uploadList","uploadData","uploadComponent","tip","upload_srcvue_type_script_lang_js_","src_render","src_staticRenderFns","upload_src_component","src_api","upload_src","packages_upload","progressvue_type_template_id_229ee406_render","showText","textInside","strokeWidth","trailPathStyle","trackPath","stroke","relativeStrokeWidth","circlePathStyle","strokeLinecap","fontSize","progressTextSize","progressvue_type_template_id_229ee406_staticRenderFns","progressvue_type_script_lang_js_","getCurrentColor","radius","isDashboard","perimeter","PI","rate","strokeDashoffset","strokeDasharray","getLevelColor","colorArray","getColorArray","seriesColor","src_progressvue_type_script_lang_js_","progress_component","progress_api","packages_progress","spinnervue_type_template_id_697b8538_render","strokeColor","spinnervue_type_template_id_697b8538_staticRenderFns","spinnervue_type_script_lang_js_","src_spinnervue_type_script_lang_js_","spinner_component","spinner_api","packages_spinner","mainvue_type_template_id_455b9f60_render","mainvue_type_template_id_455b9f60_staticRenderFns","src_mainvue_type_script_lang_js_typeMap","message_src_mainvue_type_script_lang_js_","packages_message_src_mainvue_type_script_lang_js_","message_src_main_component","message_src_main_api","message_src_main","MessageConstructor","message_src_main_instance","main_instances","main_seed","main_Message","Message","packages_message_src_main","packages_message","mainvue_type_template_id_7ccb6598_render","hidden","isDot","mainvue_type_template_id_7ccb6598_staticRenderFns","badge_src_mainvue_type_script_lang_js_","packages_badge_src_mainvue_type_script_lang_js_","badge_src_main_component","badge_src_main_api","badge_src_main","badge","mainvue_type_template_id_59a4a40f_render","shadow","mainvue_type_template_id_59a4a40f_staticRenderFns","card_src_mainvue_type_script_lang_js_","packages_card_src_mainvue_type_script_lang_js_","card_src_main_component","card_src_main_api","card_src_main","card","mainvue_type_template_id_ada57782_render","handleKey","rateDisabled","resetCurrentValue","selectValue","getIconStyle","showDecimalIcon","decimalIconClass","decimalStyle","showScore","mainvue_type_template_id_ada57782_staticRenderFns","types_","rate_src_mainvue_type_script_lang_js_","pointerAtLeftHalf","lowThreshold","highThreshold","colors","voidColor","disabledVoidColor","voidIconClass","disabledVoidIconClass","allowHalf","texts","scoreTemplate","valueDecimal","classMap","excluded","getValueFromMap","voidClass","activeClass","colorMap","threshold","matchedKeys","matchedValue","showWhenDisabled","showWhenAllowHalf","offsetX","packages_rate_src_mainvue_type_script_lang_js_","rate_src_main_component","rate_src_main_api","rate_src_main","stepsvue_type_template_id_3c6b6dc0_render","simple","stepsvue_type_template_id_3c6b6dc0_staticRenderFns","stepsvue_type_script_lang_js_","alignCenter","finishStatus","processStatus","stepOffset","_steps","src_stepsvue_type_script_lang_js_","steps_component","steps_api","packages_steps","stepvue_type_template_id_f414a87a_render","isSimple","isLast","isCenter","isVertical","currentStatus","lineStyle","stepvue_type_template_id_f414a87a_staticRenderFns","stepvue_type_script_lang_js_","internalStatus","prevStatus","prevStep","stepsCount","flexBasis","maxWidth","updateStatus","prevChild","calcProgress","transitionDelay","borderWidth","unwatch","src_stepvue_type_script_lang_js_","step_component","step_api","packages_step","mainvue_type_template_id_5d5d1482_render","carouselClasses","arrowDisplay","arrow","loop","handleButtonEnter","handleButtonLeave","throttledArrowClick","indicatorPosition","indicatorsClasses","throttledIndicatorHover","handleIndicatorClick","hasLabel","mainvue_type_template_id_5d5d1482_staticRenderFns","throttle_","throttle_default","carousel_src_mainvue_type_script_lang_js_","initialIndex","autoplay","indicator","containerWidth","setActiveItem","resetItemPosition","pauseTimer","itemInStage","inStage","updateItems","oldIndex","translateItem","playSlides","filteredItems","handleIndicatorHover","packages_carousel_src_mainvue_type_script_lang_js_","carousel_src_main_component","carousel_src_main_api","carousel_src_main","carousel","BAR_MAP","scrollSize","axis","client","horizontal","renderThumbStyle","move","bar","translate","src_bar","clickTrackHandler","clickThumbHandler","ctrlKey","startDrag","thumbHalf","thumb","thumbPositionPercentage","stopImmediatePropagation","cursorDown","mouseMoveDocumentHandler","mouseUpDocumentHandler","prevPage","thumbClickPosition","scrollbar_src_main","Bar","native","wrapStyle","wrapClass","viewClass","viewStyle","sizeWidth","sizeHeight","moveX","moveY","gutterWith","gutterStyle","marginBottom","view","heightPercentage","widthPercentage","itemvue_type_template_id_1801ae19_render","ready","animating","itemvue_type_template_id_1801ae19_staticRenderFns","CARD_SCALE","itemvue_type_script_lang_js_","scale","processIndex","calcCardTranslate","parentWidth","calcTranslate","parentType","parentDirection","translateType","src_itemvue_type_script_lang_js_","item_component","item_api","src_item","carousel_item","collapsevue_type_template_id_461d57f4_render","collapsevue_type_template_id_461d57f4_staticRenderFns","collapsevue_type_script_lang_js_","activeNames","setActiveNames","src_collapsevue_type_script_lang_js_","collapse_component","collapse_api","packages_collapse","collapse_itemvue_type_template_id_2d05faac_render","handleEnterClick","collapse_itemvue_type_template_id_2d05faac_staticRenderFns","collapse_itemvue_type_script_lang_js_","contentWrapStyle","contentHeight","_uid","src_collapse_itemvue_type_script_lang_js_","collapse_item_component","collapse_item_api","collapse_item","packages_collapse_item","cascadervue_type_template_id_032537a6_render","toggleDropDownVisible","realSize","inputHover","handleKeyDown","dropDownVisible","presentText","clearBtnVisible","presentTags","handleDelete","$forceUpdate","handleDropdownLeave","filtering","handleExpandChange","checkedValue","handleSuggestionKeyDown","handleSuggestionClick","cascadervue_type_template_id_032537a6_staticRenderFns","cascader_panel_","cascader_panel_default","aria_utils_","aria_utils_default","KeyCode","MigratingProps","expandTrigger","newProp","changeOnSelect","hoverThreshold","PopperMixin","InputSizeMap","cascadervue_type_script_lang_js_","ElCascaderPanel","showAllLevels","beforeFilter","inputInitialHeight","pressDeleteCount","oldProp","_MigratingProps$oldPr","computePresentContent","_config","updateStyle","filterHandler","getSuggestions","scrollIntoView","focusFirstNode","clearCheckedNodes","suggestionPanel","firstNode","firstMenu","computePresentTags","computePresentText","getNodeByValue","getText","genTag","rest","restCount","keyword","includes","getFlattedNodes","getValueByOption","previousElementSibling","nextElementSibling","lastIndex","lastTag","doCheck","calculateMultiCheckedValue","inputInner","suggestionPanelEl","src_cascadervue_type_script_lang_js_","cascader_component","cascader_api","cascader","packages_cascader","mainvue_type_template_id_55c8ade7_render","colorDisabled","colorSize","handleTrigger","showAlpha","displayedColor","showPanelColor","predefine","confirmValue","clearValue","mainvue_type_template_id_55c8ade7_staticRenderFns","color_typeof","color_classCallCheck","hsv2hsl","hue","sat","isOnePointZero","isPercentage","bound01","processPercent","INT_HEX_MAP","toHex","g","hexOne","high","low","HEX_INT_MAP","A","B","C","D","E","F","parseHexChannel","hex","hsl2hsv","light","smin","lmin","sv","rgb2hsv","hsv2rgb","f","q","mod","Color","_hue","_saturation","_alpha","enableAlpha","doOnChange","toRgb","fromString","fromHSV","parts","_hsl2hsv","_parts","_parts2","_rgb2hsv","substring","_rgb2hsv2","_h2","_s2","_v2","hsl","_hsv2rgb","_hsl","_hsv2rgb2","_r","_g","src_color","picker_dropdownvue_type_template_id_06601625_render","float","customInput","picker_dropdownvue_type_template_id_06601625_staticRenderFns","sv_panelvue_type_template_id_d8583596_render","cursorTop","cursorLeft","sv_panelvue_type_template_id_d8583596_staticRenderFns","isDragging","moveFn","upFn","sv_panelvue_type_script_lang_js_","colorValue","saturation","handleDrag","components_sv_panelvue_type_script_lang_js_","sv_panel_component","sv_panel_api","sv_panel","hue_slidervue_type_template_id_5cdc43b1_render","thumbLeft","thumbTop","hue_slidervue_type_template_id_5cdc43b1_staticRenderFns","hue_slidervue_type_script_lang_js_","hueValue","getThumbLeft","getThumbTop","dragConfig","components_hue_slidervue_type_script_lang_js_","hue_slider_component","hue_slider_api","hue_slider","alpha_slidervue_type_template_id_068c66cb_render","alpha_slidervue_type_template_id_068c66cb_staticRenderFns","alpha_slidervue_type_script_lang_js_","color_alpha","alpha","getBackground","_color$toRgb","components_alpha_slidervue_type_script_lang_js_","alpha_slider_component","alpha_slider_api","alpha_slider","predefinevue_type_template_id_06e03093_render","rgbaColors","predefinevue_type_template_id_06e03093_staticRenderFns","predefinevue_type_script_lang_js_","parseColors","$parentCurrentColor","components_predefinevue_type_script_lang_js_","predefine_component","predefine_api","picker_dropdownvue_type_script_lang_js_","SvPanel","HueSlider","AlphaSlider","Predefine","currentColor","sl","components_picker_dropdownvue_type_script_lang_js_","picker_dropdown_component","picker_dropdown_api","picker_dropdown","color_picker_src_mainvue_type_script_lang_js_","colorFormat","displayedRgb","currentValueColor","currentValueColorRgb","resetColor","PickerDropdown","packages_color_picker_src_mainvue_type_script_lang_js_","color_picker_src_main_component","color_picker_src_main_api","color_picker_src_main","color_picker","mainvue_type_template_id_5c654dd8_render","sourceData","titles","leftDefaultChecked","filterPlaceholder","onSourceCheckedChange","hasButtonTexts","rightChecked","addToLeft","buttonTexts","leftChecked","addToRight","targetData","rightDefaultChecked","onTargetCheckedChange","mainvue_type_template_id_5c654dd8_staticRenderFns","transfer_panelvue_type_template_id_2ddab8bd_render","isIndeterminate","handleAllCheckedChange","allChecked","checkedSummary","hasFooter","inputIcon","clearQuery","hasNoMatch","keyProp","disabledProp","transfer_panelvue_type_template_id_2ddab8bd_staticRenderFns","transfer_panelvue_type_script_lang_js_","OptionContent","getParent","transfer","labelProp","defaultChecked","checkChangeByUser","updateAllChecked","movedKeys","filteredDataKeys","checkableData","checkableDataKeys","checkedLength","dataLength","_format","noChecked","hasChecked","src_transfer_panelvue_type_script_lang_js_","transfer_panel_component","transfer_panel_api","transfer_panel","transfer_src_mainvue_type_script_lang_js_","TransferPanel","targetOrder","dataObj","itemsToBeMoved","itemKey","which","leftPanel","rightPanel","packages_transfer_src_mainvue_type_script_lang_js_","transfer_src_main_component","transfer_src_main_api","transfer_src_main","mainvue_type_template_id_5bf181d4_render","mainvue_type_template_id_5bf181d4_staticRenderFns","container_src_mainvue_type_script_lang_js_","packages_container_src_mainvue_type_script_lang_js_","container_src_main_component","container_src_main_api","container_src_main","packages_container","mainvue_type_template_id_2b296ab2_render","mainvue_type_template_id_2b296ab2_staticRenderFns","header_src_mainvue_type_script_lang_js_","packages_header_src_mainvue_type_script_lang_js_","header_src_main_component","header_src_main_api","header_src_main","mainvue_type_template_id_03411dbf_render","mainvue_type_template_id_03411dbf_staticRenderFns","aside_src_mainvue_type_script_lang_js_","packages_aside_src_mainvue_type_script_lang_js_","aside_src_main_component","aside_src_main_api","aside_src_main","aside","mainvue_type_template_id_2a3a7406_render","mainvue_type_template_id_2a3a7406_staticRenderFns","main_src_mainvue_type_script_lang_js_","packages_main_src_mainvue_type_script_lang_js_","main_src_main_component","main_src_main_api","main_src_main","packages_main","mainvue_type_template_id_80210338_render","mainvue_type_template_id_80210338_staticRenderFns","footer_src_mainvue_type_script_lang_js_","packages_footer_src_mainvue_type_script_lang_js_","footer_src_main_component","footer_src_main_api","footer_src_main","timeline_src_mainvue_type_script_lang_js_","timeline","packages_timeline_src_mainvue_type_script_lang_js_","main_render","main_staticRenderFns","timeline_src_main_component","timeline_src_main_api","timeline_src_main","itemvue_type_template_id_61a69e50_render","dot","hideTimestamp","timestamp","itemvue_type_template_id_61a69e50_staticRenderFns","timeline_src_itemvue_type_script_lang_js_","packages_timeline_src_itemvue_type_script_lang_js_","src_item_component","src_item_api","timeline_src_item","timeline_item","mainvue_type_template_id_01cf3b65_render","underline","mainvue_type_template_id_01cf3b65_staticRenderFns","link_src_mainvue_type_script_lang_js_","packages_link_src_mainvue_type_script_lang_js_","link_src_main_component","link_src_main_api","link_src_main","packages_link","mainvue_type_template_id_7fa02a7e_functional_true_render","listeners","contentPosition","mainvue_type_template_id_7fa02a7e_functional_true_staticRenderFns","divider_src_mainvue_type_script_lang_js_","packages_divider_src_mainvue_type_script_lang_js_","divider_src_main_component","divider_src_main_api","divider_src_main","divider","mainvue_type_template_id_44d84a7c_render","preview","imageStyle","clickHandler","$listeners","showViewer","imageIndex","closeViewer","previewSrcList","mainvue_type_template_id_44d84a7c_staticRenderFns","image_viewervue_type_template_id_5e73b307_render","isSingle","infinite","isFirst","handleActions","toggleMode","urlList","imgStyle","currentImg","handleImgLoad","handleImgError","image_viewervue_type_template_id_5e73b307_staticRenderFns","image_viewervue_type_script_lang_js_extends","Mode","CONTAIN","ORIGINAL","mousewheelEventName","image_viewervue_type_script_lang_js_","onSwitch","isShow","deg","offsetY","enableTransition","_transform","reset","$img","img","complete","deviceSupportUninstall","deviceSupportInstall","_keyDownHandler","_mouseWheelHandler","delta","wheelDelta","detail","zoomRate","_transform2","pageY","_dragHandler","modeNames","modeValues","_zoomRate$rotateDeg$e","rotateDeg","src_image_viewervue_type_script_lang_js_","image_viewer_component","image_viewer_api","image_viewer","isSupportObjectFit","objectFit","ObjectFit","NONE","COVER","FILL","SCALE_DOWN","prevOverflow","image_src_mainvue_type_script_lang_js_","ImageViewer","scrollContainer","imageWidth","imageHeight","getImageStyle","previewIndex","srcIndex","loadImage","addLazyLoadListener","removeLazyLoadListener","Image","handleLoad","handleLazyLoad","_scrollContainer","_lazyLoadHandler","_$el","containerHeight","isSmaller","packages_image_src_mainvue_type_script_lang_js_","image_src_main_component","image_src_main_api","image_src_main","packages_image","mainvue_type_template_id_6d9756be_render","i18nDate","validatedRange","selectDate","realSelectedDay","realFirstDayOfWeek","pickDay","mainvue_type_template_id_6d9756be_staticRenderFns","date_","date_default","src_date_tablevue_type_script_lang_js_","selectedDay","hideHeader","WEEK_DAYS","dayNames","toNestedArr","days","getFormateDate","curMonthDatePrefix","prevMonthDatePrefix","nextMonthDatePrefix","formatedToday","cellRenderProxy","elCalendar","dateCell","temp","isInRange","_range","currentMonthRange","remaining","nextMonthRange","prevMonthDays","currentMonthDays","nextMonthDays","weekDays","thead","calendar_src_date_tablevue_type_script_lang_js_","date_table_render","date_table_staticRenderFns","src_date_table_component","src_date_table_api","src_date_table","validTypes","oneDay","calendar_src_mainvue_type_script_lang_js_","formatedDate","toDate","rangeValidator","isStart","expected","startDay","lastDay","nextMontFirstDay","packages_calendar_src_mainvue_type_script_lang_js_","calendar_src_main_component","calendar_src_main_api","calendar_src_main","calendar","mainvue_type_template_id_257dd4a9_render","styleRight","styleBottom","mainvue_type_template_id_257dd4a9_staticRenderFns","cubic","easeInOutCubic","backtop_src_mainvue_type_script_lang_js_","visibilityHeight","container","throttledScrollHandler","onScroll","scrollToTop","beginTime","beginValue","rAF","func","frameFunc","packages_backtop_src_mainvue_type_script_lang_js_","backtop_src_main_component","backtop_src_main_api","backtop_src_main","backtop","getStyleComputedProperty","css","entries","getPositionSize","getOffsetHeight","getClientHeight","attributes","delay","main_getScrollOptions","getScrollOptions","getElementTop","main_handleScroll","_scope","_getScrollOptions","containerInfo","shouldTrigger","scrollBottom","heightBelowTop","borderBottom","disconnect","infinite_scroll_src_main","_getScrollOptions2","MutationObserver","observe","childList","subtree","_el$scope","infinite_scroll","mainvue_type_template_id_5070954c_render","mainvue_type_template_id_5070954c_staticRenderFns","page_header_src_mainvue_type_script_lang_js_","packages_page_header_src_mainvue_type_script_lang_js_","page_header_src_main_component","page_header_src_main_api","page_header_src_main","page_header","cascader_panelvue_type_template_id_34932346_render","menus","cascader_panelvue_type_template_id_34932346_staticRenderFns","radio_","radio_default","cascader_nodevue_type_script_lang_js_","ElRadio","nodeId","isSameNode","inActivePath","isInPath","activePath","inCheckedPath","checkedNodePaths","checkedPath","handleExpand","lazyLoad","handleMultiCheckChange","pathNodes","selectedPathNode","renderPrefix","renderCheckbox","renderRadio","renderCheckIcon","renderPostfix","renderLoadingIcon","renderExpandIcon","renderLabelFn","src_cascader_nodevue_type_script_lang_js_","cascader_node_render","cascader_node_staticRenderFns","cascader_node_component","cascader_node_api","cascader_node","cascader_menuvue_type_script_lang_js_","CascaderNode","activeNode","hoverTimer","menuId","hoverZone","_$el$getBoundingClien","clearHoverZone","renderEmptyText","renderNodeList","isHoverMenu","src_cascader_menuvue_type_script_lang_js_","cascader_menu_render","cascader_menu_staticRenderFns","cascader_menu_component","cascader_menu_api","cascader_menu","node_createClass","src_node_classCallCheck","src_node_Node","initState","initChildren","labelKey","calculatePathNodes","pathLabels","childrenData","getPath","getValue","emitPath","allLevels","handlerName","_len2","_key2","onParentCheck","setCheckState","onChildCheck","validChildren","totalNum","checkedNum","syncCheckState","disabledKey","_config2","leafKey","leaf","src_node","store_classCallCheck","flatNodes","store_Store","Store","initNodes","flattedNodes","leafNodes","appendNode","appendNodes","nodeDataList","getNodes","cached","cachedNodes","cascader_panel_src_store","cascader_panelvue_type_script_lang_js_extends","cascader_panelvue_type_script_lang_js_KeyCode","DefaultProps","cascader_panelvue_type_script_lang_js_isLeaf","getSibling","siblings","getMenuIndex","pieces","focusNode","checkNode","cascader_panelvue_type_script_lang_js_","CascaderMenu","renderLabel","loadCount","initStore","syncCheckedValue","calculateCheckedNodePaths","syncMenuState","syncActivePath","syncMultiCheckState","expandNodes","checkedNode","checkedValues","preMenu","expandedNode","nextMenu","pathValues","activePathValues","onFullfiled","dataList","nodeValue","menuElement","src_cascader_panelvue_type_script_lang_js_","cascader_panel_component","cascader_panel_api","cascader_panel","packages_cascader_panel","avatar_src_mainvue_type_script_lang_js_","shape","srcSet","isImageExist","avatarClass","errorFlag","renderAvatar","sizeStyle","lineHeight","packages_avatar_src_mainvue_type_script_lang_js_","src_main_render","src_main_staticRenderFns","avatar_src_main_component","avatar_src_main_api","avatar_src_main","avatar","mainvue_type_template_id_a4885264_render","withHeader","closeDrawer","mainvue_type_template_id_a4885264_staticRenderFns","drawer_src_mainvue_type_script_lang_js_","wrapperClosable","prevActiveElement","drawer","packages_drawer_src_mainvue_type_script_lang_js_","drawer_src_main_component","drawer_src_main_api","drawer_src_main","mainvue_type_template_id_048de730_render","hideIcon","iconColor","cancelButtonType","confirmButtonType","mainvue_type_template_id_048de730_staticRenderFns","popover_","popover_default","popconfirm_src_mainvue_type_script_lang_js_","ElPopover","packages_popconfirm_src_mainvue_type_script_lang_js_","popconfirm_src_main_component","popconfirm_src_main_api","popconfirm_src_main","popconfirm","src_install","locale","i18n","$msgbox","$alert","$confirm","$prompt","$notify","$message","src_0","version","CollapseTransition","Pagination","Dialog","Autocomplete","Dropdown","DropdownMenu","DropdownItem","Submenu","MenuItemGroup","Input","InputNumber","Radio","RadioGroup","RadioButton","Checkbox","CheckboxButton","CheckboxGroup","Switch","Select","Option","OptionGroup","Button","ButtonGroup","Table","TableColumn","DatePicker","TimeSelect","Popover","Tooltip","Breadcrumb","BreadcrumbItem","Form","FormItem","Tabs","TabPane","Tag","Tree","Alert","Slider","Icon","Row","Col","Progress","Spinner","Badge","Card","Rate","Steps","Step","Carousel","Scrollbar","CarouselItem","Collapse","CollapseItem","Cascader","ColorPicker","Transfer","Container","Header","Aside","Main","Footer","Timeline","TimelineItem","Link","Divider","Calendar","Backtop","InfiniteScroll","PageHeader","CascaderPanel","Avatar","Drawer","Popconfirm"],"mappings":"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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA,4BAA6B,GAAIquB,CAAAA,6BAA6B,CAAI,CAChE7tB,IAAI,CAAE,SAD0D,CAGhEmV,aAAa,CAAE,SAHiD,CAKhE5J,MAAM,CAAE,CAACkE,eAAe,CAACjE,CAAjB,CAAoB+D,iBAAiB,CAAC/D,CAAtC,CALwD,CAOhEiL,YAAY,CAAE,KAPkD,CAShE0G,MAAM,CAAE,CACN2Q,MAAM,CAAE,CACNnlB,OAAO,CAAE,EADH,CADF,CAINolB,UAAU,CAAE,CACVplB,OAAO,CAAE,EADC,CAJN,CATwD,CAkBhEjD,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLsoB,iBAAiB,CAAE,EADd,CAELhD,QAAQ,CAAE,KAFL,CAGLiD,OAAO,CAAE,KAHJ,CAILC,WAAW,CAAE,KAJR,CAKLjD,eAAe,CAAE,KALZ,CAAP,CAOD,CA1B+D,CA6BhEpnB,KAAK,CAAE,CACLnD,KAAK,CAAE,CAAC0I,MAAD,CAAStF,MAAT,CADF,CAELiI,IAAI,CAAE3C,MAFD,CAGL+kB,MAAM,CAAE/kB,MAHH,CAILglB,IAAI,CAAEhlB,MAJD,CAKLzG,QAAQ,CAAEqB,OALL,CAMLknB,QAAQ,CAAElnB,OANL,CAOL0E,IAAI,CAAE,CACJA,IAAI,CAAEU,MADF,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AauR,MAArC,CAA6C,CAC3C,KAAK6nB,UAAL,CAAkB,CAAlB,CACD,CACF,CALD,IAKO,IAAI36B,SAAS,GAAK,MAAlB,CAA0B,CAC/B,KAAK26B,UAAL,GACA,GAAI,KAAKA,UAAL,CAAkB,CAAtB,CAAyB,CACvB,KAAKA,UAAL,CAAkB,KAAKp5B,OAAL,CAAauR,MAAb,CAAsB,CAAxC,CACD,CACF,CACD,GAAIopB,CAAAA,MAAM,CAAG,KAAK36B,OAAL,CAAa,KAAKo5B,UAAlB,CAAb,CACA,GAAIuB,MAAM,CAACr+B,QAAP,GAAoB,IAApB,EAA4Bq+B,MAAM,CAAC5C,aAAP,GAAyB,IAArD,EAA6D,CAAC4C,MAAM,CAAC7yB,OAAzE,CAAkF,CAChF,KAAK8tB,eAAL,CAAqBn3B,SAArB,EACD,CACD,KAAK0I,SAAL,CAAe,UAAY,CACzB,MAAOD,CAAAA,MAAM,CAAC2zB,cAAP,CAAsB3zB,MAAM,CAACuzB,WAA7B,CAAP,CACD,CAFD,EAGD,CACF,CA7BM,CA/B0C,CAAxB,CA+D7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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wD,CACtD6S,OAAO,CAACt5C,IAAR,CAAa,WAAb,EACD,CACD,GAAI,CAACymC,MAAM,CAAC7gC,QAAZ,CAAsB,CACpB0zC,OAAO,CAACt5C,IAAR,CAAa,SAAb,EACD,CACD,MAAOs5C,CAAAA,OAAP,CACD,CA7BM,CA7HsC,CAApB,CA6J7B;AACA,GAAIoJ,CAAAA,oCAAoC,CAAG1nD,MAAM,CAACgwC,MAAP,EAAiB,SAAU9rC,MAAV,CAAkB,CAAE,IAAK,GAAI3E,CAAAA,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG+f,SAAS,CAAC7H,MAA9B,CAAsClY,CAAC,EAAvC,CAA2C,CAAE,GAAI0wC,CAAAA,MAAM,CAAG3wB,SAAS,CAAC/f,CAAD,CAAtB,CAA2B,IAAK,GAAIsB,CAAAA,GAAT,GAAgBovC,CAAAA,MAAhB,CAAwB,CAAE,GAAIjwC,MAAM,CAACoB,SAAP,CAAiBC,cAAjB,CAAgC5B,IAAhC,CAAqCwwC,MAArC,CAA6CpvC,GAA7C,CAAJ,CAAuD,CAAEqD,MAAM,CAACrD,GAAD,CAAN,CAAcovC,MAAM,CAACpvC,GAAD,CAApB,CAA4B,CAAE,CAAE,CAAC,MAAOqD,CAAAA,MAAP,CAAgB,CAA5R,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAeA,GAAIyjD,CAAAA,WAAW,CAAG,CAAlB,CAEA,4BAA6B,GAAIC,CAAAA,6BAA6B,CAAI,CAChE/nD,IAAI,CAAE,SAD0D,CAGhEuL,MAAM,CAAE,CAACjD,cAAc,CAACkD,CAAhB,CAAmB+D,iBAAiB,CAAC/D,CAArC,CAHwD,CAKhEyC,UAAU,CAAE,CACV+5C,UAAU,CAAE5d,qBADF,CALoD,CAShEvmC,KAAK,CAAE,CACL6B,IAAI,CAAE,CACJgD,IAAI,CAAEO,KADF,CAEJN,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,EAAP,CACD,CAJG,CADD,CAQL6C,IAAI,CAAE3C,MARD,CAUL6G,KAAK,CAAE,CAAC7G,MAAD,CAAStF,MAAT,CAVF,CAYLulB,MAAM,CAAE,CAACjgB,MAAD,CAAStF,MAAT,CAZH,CAcL2pB,SAAS,CAAE,CAACrkB,MAAD,CAAStF,MAAT,CAdN,CAgBLwjC,GAAG,CAAE,CACH5+B,IAAI,CAAE1E,OADH,CAEH2E,OAAO,CAAE,IAFN,CAhBA,CAqBL4+B,MAAM,CAAEvjC,OArBH,CAuBLsvB,MAAM,CAAEtvB,OAvBH,CAyB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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA,GAAIy/D,CAAAA,kDAAkD,CAAG,QAASC,CAAAA,gBAAT,CAA0BtR,YAA1B,CAAwC,CAC/F,GAAI9oD,KAAK,CAAC4C,OAAN,CAAckmD,YAAd,CAAJ,CAAiC,CAC/B,MAAO,CAAC,GAAI3gC,CAAAA,IAAJ,CAAS2gC,YAAY,CAAC,CAAD,CAArB,CAAD,CAA4B,GAAI3gC,CAAAA,IAAJ,CAAS2gC,YAAY,CAAC,CAAD,CAArB,CAA5B,CAAP,CACD,CAFD,IAEO,IAAIA,YAAJ,CAAkB,CACvB,MAAO,CAAC,GAAI3gC,CAAAA,IAAJ,CAAS2gC,YAAT,CAAD,CAAyB5xD,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,GAAIz9B,CAAAA,IAAJ,CAAS2gC,YAAT,CAA/B,CAAuD,CAAvD,CAAzB,CAAP,CACD,CAFM,IAEA,CACL,MAAO,CAAC,GAAI3gC,CAAAA,IAAJ,EAAD,CAAajxB,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,GAAIz9B,CAAAA,IAAJ,EAA/B,CAA2C,CAA3C,CAAb,CAAP,CACD,CACF,CARD,CAUA,4BAA6B,GAAIkyC,CAAAA,kCAAkC,CAAI,CACrE/3D,MAAM,CAAE,CAACjD,cAAc,CAACkD,CAAhB,CAD6D,CAGrEyC,UAAU,CAAE,CAAE0I,YAAY,CAAEvC,oBAAoB,CAAC5I,CAArC,CAHyD,CAKrEzG,QAAQ,CAAE,CACRm+D,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,MAAO,EAAE,KAAKhH,OAAL,EAAgB,KAAKC,OAArB,EAAgC,CAAC,KAAKG,SAAtC,EAAmD,KAAKhJ,YAAL,CAAkB,CAAC,KAAK4I,OAAN,CAAe,KAAKC,OAApB,CAAlB,CAArD,CAAP,CACD,CAHO,CAIRoG,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAKC,QAAL,CAActH,WAAd,GAA8B,GAA9B,CAAoC,KAAKv6D,CAAL,CAAO,oBAAP,CAApC,CAAmE,GAAnE,CAAyE,KAAKA,CAAL,CAAO,uBAAyB,KAAK6hE,QAAL,CAAc/R,QAAd,GAA2B,CAApD,CAAP,CAAhF,CACD,CANO,CAORuS,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,MAAO,MAAKC,SAAL,CAAe/H,WAAf,GAA+B,GAA/B,CAAqC,KAAKv6D,CAAL,CAAO,oBAAP,CAArC,CAAoE,GAApE,CAA0E,KAAKA,CAAL,CAAO,uBAAyB,KAAKsiE,SAAL,CAAexS,QAAf,GAA4B,CAArD,CAAP,CAAjF,CACD,CATO,CAUR8S,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAKf,QAAL,CAActH,WAAd,EAAP,CACD,CAZO,CAaRsI,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAKhB,QAAL,CAAc/R,QAAd,EAAP,CACD,CAfO,CAgBRgT,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,MAAO,MAAKjB,QAAL,CAAc3R,OAAd,EAAP,CACD,CAlBO,CAmBR6S,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAKT,SAAL,CAAe/H,WAAf,EAAP,CACD,CArBO,CAsBRyI,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,MAAO,MAAKV,SAAL,CAAexS,QAAf,EAAP,CACD,CAxBO,CAyBRmT,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,MAAO,MAAKX,SAAL,CAAepS,OAAf,EAAP,CACD,CA3BO,CA4BRoQ,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,GAAI,KAAK4C,aAAL,CAAmB92D,GAAnB,GAA2B,IAA/B,CAAqC,MAAO,MAAK82D,aAAL,CAAmB92D,GAA1B,CACrC,GAAI,KAAKmvD,OAAT,CAAkB,MAAO/7D,CAAAA,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKqN,OAAtC,CAA+C,KAAKoE,UAApD,CAAP,CAClB,MAAO,EAAP,CACD,CAhCO,CAiCRqB,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,GAAI,KAAKkC,aAAL,CAAmB72D,GAAnB,GAA2B,IAA/B,CAAqC,MAAO,MAAK62D,aAAL,CAAmB72D,GAA1B,CACrC,GAAI,KAAKmvD,OAAL,EAAgB,KAAKD,OAAzB,CAAkC,MAAO/7D,CAAAA,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKsN,OAAL,EAAgB,KAAKD,OAAtD,CAA+D,KAAKoE,UAApE,CAAP,CAClC,MAAO,EAAP,CACD,CArCO,CAsCRe,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,GAAI,KAAKyC,aAAL,CAAmB/2D,GAAnB,GAA2B,IAA/B,CAAqC,MAAO,MAAK+2D,aAAL,CAAmB/2D,GAA1B,CACrC,GAAI,KAAKmvD,OAAT,CAAkB,MAAO/7D,CAAAA,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKqN,OAAtC,CAA+C,KAAK4D,UAApD,CAAP,CAClB,MAAO,EAAP,CACD,CA1CO,CA2CR+B,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,GAAI,KAAKiC,aAAL,CAAmB92D,GAAnB,GAA2B,IAA/B,CAAqC,MAAO,MAAK82D,aAAL,CAAmB92D,GAA1B,CACrC,GAAI,KAAKmvD,OAAL,EAAgB,KAAKD,OAAzB,CAAkC,MAAO/7D,CAAAA,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKsN,OAAL,EAAgB,KAAKD,OAAtD,CAA+D,KAAK4D,UAApE,CAAP,CAClC,MAAO,EAAP,CACD,CA/CO,CAgDRA,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAI,KAAKjQ,MAAT,CAAiB,CACf,MAAO1vD,CAAAA,MAAM,CAAC0uD,UAAU,CAAC,mBAAD,CAAX,CAAN,CAAwC,KAAKgB,MAA7C,CAAP,CACD,CAFD,IAEO,CACL,MAAO,UAAP,CACD,CACF,CAtDO,CAuDRyQ,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAI,KAAKzQ,MAAT,CAAiB,CACf,MAAO1vD,CAAAA,MAAM,CAAC0uD,UAAU,CAAC,mBAAD,CAAX,CAAN,CAAwC,KAAKgB,MAA7C,CAAP,CACD,CAFD,IAEO,CACL,MAAO,YAAP,CACD,CACF,CA7DO,CA8DRwS,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,GAAIhM,CAAAA,SAAS,CAAG,CAAC,KAAKmN,SAAL,CAAiB,CAAlB,EAAuB,EAAvC,CACA,GAAIO,CAAAA,UAAU,CAAG,KAAKP,SAAL,CAAiB,CAAjB,EAAsB,EAAtB,CAA2B,CAA3B,CAA+B,CAAhD,CACA,MAAO,MAAKtR,YAAL,EAAqB,GAAI9gC,CAAAA,IAAJ,CAAS,KAAKmyC,QAAL,CAAgBQ,UAAzB,CAAqC1N,SAArC,EAAkD,GAAIjlC,CAAAA,IAAJ,CAAS,KAAKsyC,SAAd,CAAyB,KAAKC,UAA9B,CAA9E,CACD,CAlEO,CAmERxB,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,MAAO,MAAKjQ,YAAL,EAAqB,KAAKwR,SAAL,CAAiB,EAAjB,CAAsB,KAAKC,UAA3B,EAAyC,KAAKJ,QAAL,CAAgB,EAAhB,CAAqB,KAAKC,SAA1B,CAAsC,CAA/E,GAAqF,EAAjH,CACD,CArEO,CAL2D,CA6ErE99D,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLyD,WAAW,CAAE,EADR,CAELzI,KAAK,CAAE,EAFF,CAGLqxD,YAAY,CAAE,IAHT,CAILC,WAAW,CAAE,IAJR,CAKLkK,OAAO,CAAE,EALJ,CAMLC,OAAO,CAAE,EANJ,CAOLqG,QAAQ,CAAE,GAAIpxC,CAAAA,IAAJ,EAPL,CAQL6xC,SAAS,CAAE9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,GAAIz9B,CAAAA,IAAJ,EAAhC,CARN,CASLgrC,UAAU,CAAE,CACVC,OAAO,CAAE,IADC,CAEVC,SAAS,CAAE,KAFD,CAGVlwB,GAAG,CAAE,IAHK,CAIVR,MAAM,CAAE,IAJE,CATP,CAeLioB,QAAQ,CAAE,KAfL,CAgBLmB,SAAS,CAAE,EAhBN,CAiBL7mD,OAAO,CAAE,EAjBJ,CAkBLooD,YAAY,CAAE,EAlBT,CAmBLzX,aAAa,CAAE,EAnBV,CAoBLwX,cAAc,CAAE,CApBX,CAqBLgL,oBAAoB,CAAE,KArBjB,CAsBLQ,oBAAoB,CAAE,KAtBjB,CAuBLjS,MAAM,CAAE,EAvBH,CAwBLiE,YAAY,CAAE,KAxBT,CAyBL5B,YAAY,CAAE,KAzBT,CA0BL2R,aAAa,CAAE,CACb92D,GAAG,CAAE,IADQ,CAEbC,GAAG,CAAE,IAFQ,CA1BV,CA8BL82D,aAAa,CAAE,CACb/2D,GAAG,CAAE,IADQ,CAEbC,GAAG,CAAE,IAFQ,CA9BV,CAAP,CAmCD,CAjHoE,CAoHrE/I,KAAK,CAAE,CACLi4D,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBh4D,GAAjB,CAAsB,CAC7B,GAAI4H,CAAAA,KAAK,CAAG,IAAZ,CAEA,KAAK+3D,aAAL,CAAmB92D,GAAnB,CAAyB,IAAzB,CACA,KAAK+2D,aAAL,CAAmB/2D,GAAnB,CAAyB,IAAzB,CACA,KAAKS,SAAL,CAAe,UAAY,CACzB,GAAI1B,KAAK,CAAC4E,KAAN,CAAYsxD,aAAZ,EAA6Bl2D,KAAK,CAACqwD,OAAnC,EAA8CrwD,KAAK,CAACqwD,OAAN,CAAgBrwD,KAAK,CAACowD,OAAxE,CAAiF,CAC/E,GAAIrM,CAAAA,MAAM,CAAG,UAAb,CACA/jD,KAAK,CAAC4E,KAAN,CAAYsxD,aAAZ,CAA0B/N,eAA1B,CAA4C,CAAC,CAAC9zD,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC1uD,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC/iD,KAAK,CAACowD,OAAvC,CAAgDrM,MAAhD,CAAhC,CAAyFA,MAAzF,CAAD,CAAmG1vD,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,UAAhC,CAA4CgB,MAA5C,CAAnG,CAAD,CAA5C,CACD,CACF,CALD,EAMA,GAAI3rD,GAAG,EAAI,KAAKwM,KAAL,CAAWgxD,aAAtB,CAAqC,CACnC,KAAKhxD,KAAL,CAAWgxD,aAAX,CAAyB1S,IAAzB,CAAgC9qD,GAAhC,CACA,KAAKwM,KAAL,CAAWgxD,aAAX,CAAyBhhE,KAAzB,CAAiCwD,GAAjC,CACD,CACF,CAhBI,CAiBLi4D,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBj4D,GAAjB,CAAsB,CAC7B,KAAK2/D,aAAL,CAAmB72D,GAAnB,CAAyB,IAAzB,CACA,KAAK82D,aAAL,CAAmB92D,GAAnB,CAAyB,IAAzB,CACA,GAAI9I,GAAG,EAAI,KAAKwM,KAAL,CAAWsxD,aAAtB,CAAqC,CACnC,KAAKtxD,KAAL,CAAWsxD,aAAX,CAAyBhT,IAAzB,CAAgC9qD,GAAhC,CACA,KAAKwM,KAAL,CAAWsxD,aAAX,CAAyBthE,KAAzB,CAAiCwD,GAAjC,CACD,CACF,CAxBI,CAyBLo9D,oBAAoB,CAAE,QAASA,CAAAA,oBAAT,CAA8Bp9D,GAA9B,CAAmC,CACvD,GAAIqJ,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAIrJ,GAAJ,CAAS,CACP,KAAKsJ,SAAL,CAAe,UAAY,CACzBD,MAAM,CAACmD,KAAP,CAAagxD,aAAb,CAA2B1S,IAA3B,CAAkCzhD,MAAM,CAAC2uD,OAAzC,CACA3uD,MAAM,CAACmD,KAAP,CAAagxD,aAAb,CAA2BhhE,KAA3B,CAAmC6M,MAAM,CAAC2uD,OAA1C,CACA3uD,MAAM,CAACmD,KAAP,CAAagxD,aAAb,CAA2B/N,cAA3B,GACD,CAJD,EAKD,CACF,CAnCI,CAoCLmO,oBAAoB,CAAE,QAASA,CAAAA,oBAAT,CAA8B59D,GAA9B,CAAmC,CACvD,GAAIoU,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAIpU,GAAJ,CAAS,CACP,KAAKsJ,SAAL,CAAe,UAAY,CACzB8K,MAAM,CAAC5H,KAAP,CAAasxD,aAAb,CAA2BhT,IAA3B,CAAkC12C,MAAM,CAAC6jD,OAAzC,CACA7jD,MAAM,CAAC5H,KAAP,CAAasxD,aAAb,CAA2BthE,KAA3B,CAAmC4X,MAAM,CAAC6jD,OAA1C,CACA7jD,MAAM,CAAC5H,KAAP,CAAasxD,aAAb,CAA2BrO,cAA3B,GACD,CAJD,EAKD,CACF,CA9CI,CA+CLjzD,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAeiL,MAAf,CAAuB,CAC5B,GAAI,CAACA,MAAL,CAAa,CACX,KAAKuwD,OAAL,CAAe,IAAf,CACA,KAAKC,OAAL,CAAe,IAAf,CACD,CAHD,IAGO,IAAIlzD,KAAK,CAAC4C,OAAN,CAAcF,MAAd,CAAJ,CAA2B,CAChC,KAAKuwD,OAAL,CAAe/7D,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6BljD,MAAM,CAAC,CAAD,CAAnC,EAA0C,GAAIylB,CAAAA,IAAJ,CAASzlB,MAAM,CAAC,CAAD,CAAf,CAA1C,CAAgE,IAA/E,CACA,KAAKwwD,OAAL,CAAeh8D,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6BljD,MAAM,CAAC,CAAD,CAAnC,EAA0C,GAAIylB,CAAAA,IAAJ,CAASzlB,MAAM,CAAC,CAAD,CAAf,CAA1C,CAAgE,IAA/E,CACA,GAAI,KAAKuwD,OAAT,CAAkB,CAChB,KAAKsG,QAAL,CAAgB,KAAKtG,OAArB,CACA,GAAI,KAAKhK,YAAL,EAAqB,KAAKiK,OAA9B,CAAuC,CACrC,GAAI6H,CAAAA,WAAW,CAAG,KAAK9H,OAAL,CAAahB,WAAb,EAAlB,CACA,GAAI+I,CAAAA,YAAY,CAAG,KAAK/H,OAAL,CAAazL,QAAb,EAAnB,CACA,GAAIyT,CAAAA,WAAW,CAAG,KAAK/H,OAAL,CAAajB,WAAb,EAAlB,CACA,GAAIiJ,CAAAA,YAAY,CAAG,KAAKhI,OAAL,CAAa1L,QAAb,EAAnB,CACA,KAAKwS,SAAL,CAAiBe,WAAW,GAAKE,WAAhB,EAA+BD,YAAY,GAAKE,YAAhD,CAA+DhkE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAKsN,OAArC,CAA/D,CAA+G,KAAKA,OAArI,CACD,CAND,IAMO,CACL,KAAK8G,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAjB,CACD,CACF,CAXD,IAWO,CACL,KAAKA,QAAL,CAAgBY,kDAAkD,CAAC,KAAKrR,YAAN,CAAlD,CAAsE,CAAtE,CAAhB,CACA,KAAKkR,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAjB,CACD,CACF,CACF,CAtEI,CAuELzQ,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsB7tD,GAAtB,CAA2B,CACvC,GAAI,CAAC+E,KAAK,CAAC4C,OAAN,CAAc,KAAKnL,KAAnB,CAAL,CAAgC,CAC9B,GAAI0jE,CAAAA,iBAAiB,CAAGhB,kDAAkD,CAACl/D,GAAD,CAA1E,CACIic,IAAI,CAAGikD,iBAAiB,CAAC,CAAD,CAD5B,CAEI/jD,KAAK,CAAG+jD,iBAAiB,CAAC,CAAD,CAF7B,CAIA,KAAK5B,QAAL,CAAgBriD,IAAhB,CACA,KAAK8iD,SAAL,CAAiB/+D,GAAG,EAAIA,GAAG,CAAC,CAAD,CAAV,EAAiB,KAAKguD,YAAtB,CAAqC7xC,KAArC,CAA6ClgB,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAA9D,CACD,CACF,CAhFI,CApH8D,CAuMrEr+D,OAAO,CAAE,CACPwO,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAKupD,OAAL,CAAe,IAAf,CACA,KAAKC,OAAL,CAAe,IAAf,CACA,KAAKqG,QAAL,CAAgBY,kDAAkD,CAAC,KAAKrR,YAAN,CAAlD,CAAsE,CAAtE,CAAhB,CACA,KAAKkR,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAjB,CACA,KAAK39D,KAAL,CAAW,MAAX,CAAmB,IAAnB,EACD,CAPM,CAQP69D,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2Bx+D,GAA3B,CAAgC,CACjD,KAAKg4D,OAAL,CAAeh4D,GAAG,CAACg4D,OAAnB,CACA,KAAKC,OAAL,CAAej4D,GAAG,CAACi4D,OAAnB,CACA,KAAKC,UAAL,CAAkBl4D,GAAG,CAACk4D,UAAtB,CACD,CAZM,CAaP8E,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBxgE,KAAzB,CAAgCgI,IAAhC,CAAsC,CACrD,KAAKm7D,aAAL,CAAmBn7D,IAAnB,EAA2BhI,KAA3B,CACA,GAAIA,KAAK,CAACkX,MAAN,GAAiB,KAAK0oD,UAAL,CAAgB1oD,MAArC,CAA6C,OAC7C,GAAI26C,CAAAA,WAAW,CAAGpyD,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgCnuD,KAAhC,CAAuC,KAAK4/D,UAA5C,CAAlB,CAEA,GAAI/N,WAAJ,CAAiB,CACf,GAAI,MAAO,MAAKgE,YAAZ,GAA6B,UAA7B,EAA2C,KAAKA,YAAL,CAAkB,GAAInlC,CAAAA,IAAJ,CAASmhC,WAAT,CAAlB,CAA/C,CAAyF,CACvF,OACD,CACD,GAAI7pD,IAAI,GAAK,KAAb,CAAoB,CAClB,KAAKwzD,OAAL,CAAe/7D,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKqN,OAAL,EAAgB,GAAI9qC,CAAAA,IAAJ,EAAjD,CAA6DmhC,WAAW,CAAC2I,WAAZ,EAA7D,CAAwF3I,WAAW,CAAC9B,QAAZ,EAAxF,CAAgH8B,WAAW,CAAC1B,OAAZ,EAAhH,CAAf,CACA,KAAK2R,QAAL,CAAgB,GAAIpxC,CAAAA,IAAJ,CAASmhC,WAAT,CAAhB,CACA,GAAI,CAAC,KAAKL,YAAV,CAAwB,CACtB,KAAK+Q,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAjB,CACD,CACF,CAND,IAMO,CACL,KAAKrG,OAAL,CAAeh8D,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKsN,OAAL,EAAgB,GAAI/qC,CAAAA,IAAJ,EAAjD,CAA6DmhC,WAAW,CAAC2I,WAAZ,EAA7D,CAAwF3I,WAAW,CAAC9B,QAAZ,EAAxF,CAAgH8B,WAAW,CAAC1B,OAAZ,EAAhH,CAAf,CACA,KAAKoS,SAAL,CAAiB,GAAI7xC,CAAAA,IAAJ,CAASmhC,WAAT,CAAjB,CACA,GAAI,CAAC,KAAKL,YAAV,CAAwB,CACtB,KAAKsQ,QAAL,CAAgBriE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC0D,WAAhC,CAAhB,CACD,CACF,CACF,CACF,CApCM,CAqCP4O,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,CAA0BzgE,KAA1B,CAAiCgI,IAAjC,CAAuC,CACvD,GAAI6pD,CAAAA,WAAW,CAAGpyD,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgCnuD,KAAhC,CAAuC,KAAK4/D,UAA5C,CAAlB,CACA,GAAI/N,WAAJ,CAAiB,CACf,GAAI7pD,IAAI,GAAK,KAAb,CAAoB,CAClB,KAAKwzD,OAAL,CAAe/7D,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKqN,OAAtC,CAA+C3J,WAAW,CAAC2I,WAAZ,EAA/C,CAA0E3I,WAAW,CAAC9B,QAAZ,EAA1E,CAAkG8B,WAAW,CAAC1B,OAAZ,EAAlG,CAAf,CACA,GAAI,KAAKqL,OAAL,CAAe,KAAKC,OAAxB,CAAiC,CAC/B,KAAKA,OAAL,CAAe,KAAKD,OAApB,CACD,CACF,CALD,IAKO,CACL,KAAKC,OAAL,CAAeh8D,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKsN,OAAtC,CAA+C5J,WAAW,CAAC2I,WAAZ,EAA/C,CAA0E3I,WAAW,CAAC9B,QAAZ,EAA1E,CAAkG8B,WAAW,CAAC1B,OAAZ,EAAlG,CAAf,CACA,GAAI,KAAKsL,OAAL,CAAe,KAAKD,OAAxB,CAAiC,CAC/B,KAAKA,OAAL,CAAe,KAAKC,OAApB,CACD,CACF,CACF,CACF,CApDM,CAqDPoF,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyB7gE,KAAzB,CAAgCgI,IAAhC,CAAsC,CACrD,GAAIoQ,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAKgrD,aAAL,CAAmBp7D,IAAnB,EAA2BhI,KAA3B,CACA,GAAIA,KAAK,CAACkX,MAAN,GAAiB,KAAKkoD,UAAL,CAAgBloD,MAArC,CAA6C,OAC7C,GAAI26C,CAAAA,WAAW,CAAGpyD,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgCnuD,KAAhC,CAAuC,KAAKo/D,UAA5C,CAAlB,CAEA,GAAIvN,WAAJ,CAAiB,CACf,GAAI7pD,IAAI,GAAK,KAAb,CAAoB,CAClB,KAAKwzD,OAAL,CAAe/7D,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKqN,OAAtC,CAA+C3J,WAAW,CAACiG,QAAZ,EAA/C,CAAuEjG,WAAW,CAACkG,UAAZ,EAAvE,CAAiGlG,WAAW,CAACmG,UAAZ,EAAjG,CAAf,CACA,KAAKlrD,SAAL,CAAe,SAAU+H,CAAV,CAAa,CAC1B,MAAOuD,CAAAA,MAAM,CAACpI,KAAP,CAAagxD,aAAb,CAA2B/N,cAA3B,EAAP,CACD,CAFD,EAGD,CALD,IAKO,CACL,KAAKwI,OAAL,CAAeh8D,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKsN,OAAtC,CAA+C5J,WAAW,CAACiG,QAAZ,EAA/C,CAAuEjG,WAAW,CAACkG,UAAZ,EAAvE,CAAiGlG,WAAW,CAACmG,UAAZ,EAAjG,CAAf,CACA,KAAKlrD,SAAL,CAAe,SAAU+H,CAAV,CAAa,CAC1B,MAAOuD,CAAAA,MAAM,CAACpI,KAAP,CAAasxD,aAAb,CAA2BrO,cAA3B,EAAP,CACD,CAFD,EAGD,CACF,CACF,CAzEM,CA0EP6N,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,CAA0B9gE,KAA1B,CAAiCgI,IAAjC,CAAuC,CACvD,GAAI6pD,CAAAA,WAAW,CAAGpyD,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgCnuD,KAAhC,CAAuC,KAAKo/D,UAA5C,CAAlB,CACA,GAAIvN,WAAJ,CAAiB,CACf,GAAI7pD,IAAI,GAAK,KAAb,CAAoB,CAClB,KAAKwzD,OAAL,CAAe/7D,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKqN,OAAtC,CAA+C3J,WAAW,CAACiG,QAAZ,EAA/C,CAAuEjG,WAAW,CAACkG,UAAZ,EAAvE,CAAiGlG,WAAW,CAACmG,UAAZ,EAAjG,CAAf,CACA,GAAI,KAAKwD,OAAL,CAAe,KAAKC,OAAxB,CAAiC,CAC/B,KAAKA,OAAL,CAAe,KAAKD,OAApB,CACD,CACD,KAAKxrD,KAAL,CAAWgxD,aAAX,CAAyBhhE,KAAzB,CAAiC,KAAKw7D,OAAtC,CACA,KAAKoF,oBAAL,CAA4B,KAA5B,CACD,CAPD,IAOO,CACL,KAAKnF,OAAL,CAAeh8D,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKsN,OAAtC,CAA+C5J,WAAW,CAACiG,QAAZ,EAA/C,CAAuEjG,WAAW,CAACkG,UAAZ,EAAvE,CAAiGlG,WAAW,CAACmG,UAAZ,EAAjG,CAAf,CACA,GAAI,KAAKyD,OAAL,CAAe,KAAKD,OAAxB,CAAiC,CAC/B,KAAKA,OAAL,CAAe,KAAKC,OAApB,CACD,CACD,KAAKzrD,KAAL,CAAWsxD,aAAX,CAAyBthE,KAAzB,CAAiC,KAAKw7D,OAAtC,CACA,KAAK4F,oBAAL,CAA4B,KAA5B,CACD,CACF,CACF,CA7FM,CA8FPa,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBz+D,GAAzB,CAA8B,CAC7C,GAAIkkB,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAIpW,CAAAA,KAAK,CAAGyN,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,IAAhF,CAEA,GAAIuyC,CAAAA,WAAW,CAAG,KAAKA,WAAL,EAAoB,EAAtC,CACA,GAAIkK,CAAAA,OAAO,CAAG/7D,MAAM,CAAC0uD,UAAU,CAAC,sBAAD,CAAX,CAAN,CAA2C3qD,GAAG,CAACg4D,OAA/C,CAAwDlK,WAAW,CAAC,CAAD,CAAnE,CAAd,CACA,GAAImK,CAAAA,OAAO,CAAGh8D,MAAM,CAAC0uD,UAAU,CAAC,sBAAD,CAAX,CAAN,CAA2C3qD,GAAG,CAACi4D,OAA/C,CAAwDnK,WAAW,CAAC,CAAD,CAAnE,CAAd,CAEA,GAAI,KAAKmK,OAAL,GAAiBA,OAAjB,EAA4B,KAAKD,OAAL,GAAiBA,OAAjD,CAA0D,CACxD,OACD,CACD,KAAKmI,MAAL,EAAe,KAAKA,MAAL,CAAYngE,GAAZ,CAAf,CACA,KAAKi4D,OAAL,CAAeA,OAAf,CACA,KAAKD,OAAL,CAAeA,OAAf,CAEA;AACA9gD,UAAU,CAAC,UAAY,CACrBgN,MAAM,CAAC+zC,OAAP,CAAiBA,OAAjB,CACA/zC,MAAM,CAAC8zC,OAAP,CAAiBA,OAAjB,CACD,CAHS,CAGP,EAHO,CAAV,CAIA,GAAI,CAAClqD,KAAD,EAAU,KAAK6hD,QAAnB,CAA6B,OAC7B,KAAKhS,aAAL,GACD,CArHM,CAsHPqT,mBAAmB,CAAE,QAASA,CAAAA,mBAAT,CAA6BD,QAA7B,CAAuC,CAC1D,GAAIA,QAAQ,CAACiL,OAAb,CAAsB,CACpBjL,QAAQ,CAACiL,OAAT,CAAiB,IAAjB,EACD,CACF,CA1HM,CA2HPuB,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2B/gE,KAA3B,CAAkCyN,OAAlC,CAA2C6rD,KAA3C,CAAkD,CACnE,KAAKkC,OAAL,CAAe,KAAKA,OAAL,EAAgB,GAAI9qC,CAAAA,IAAJ,EAA/B,CACA,GAAI1wB,KAAJ,CAAW,CACT,KAAKw7D,OAAL,CAAe/7D,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKqN,OAAtC,CAA+Cx7D,KAAK,CAAC83D,QAAN,EAA/C,CAAiE93D,KAAK,CAAC+3D,UAAN,EAAjE,CAAqF/3D,KAAK,CAACg4D,UAAN,EAArF,CAAf,CACD,CAED,GAAI,CAACsB,KAAL,CAAY,CACV,KAAKsH,oBAAL,CAA4BnzD,OAA5B,CACD,CAED,GAAI,CAAC,KAAKguD,OAAN,EAAiB,KAAKA,OAAL,EAAgB,KAAKA,OAAL,CAAarM,OAAb,GAAyB,KAAKoM,OAAL,CAAapM,OAAb,EAA9D,CAAsF,CACpF,KAAKqM,OAAL,CAAe,GAAI/qC,CAAAA,IAAJ,CAAS,KAAK8qC,OAAd,CAAf,CACD,CACF,CAxIM,CAyIPkF,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,EAA8B,CAChD,KAAKE,oBAAL,CAA4B,KAA5B,CACD,CA3IM,CA4IPS,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2BrhE,KAA3B,CAAkCyN,OAAlC,CAA2C6rD,KAA3C,CAAkD,CACnE,GAAI,KAAKmC,OAAL,EAAgBz7D,KAApB,CAA2B,CACzB,KAAKy7D,OAAL,CAAeh8D,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC,KAAKsN,OAAtC,CAA+Cz7D,KAAK,CAAC83D,QAAN,EAA/C,CAAiE93D,KAAK,CAAC+3D,UAAN,EAAjE,CAAqF/3D,KAAK,CAACg4D,UAAN,EAArF,CAAf,CACD,CAED,GAAI,CAACsB,KAAL,CAAY,CACV,KAAK8H,oBAAL,CAA4B3zD,OAA5B,CACD,CAED,GAAI,KAAKguD,OAAL,EAAgB,KAAKD,OAArB,EAAgC,KAAKA,OAAL,CAAapM,OAAb,GAAyB,KAAKqM,OAAL,CAAarM,OAAb,EAA7D,CAAqF,CACnF,KAAKoM,OAAL,CAAe,GAAI9qC,CAAAA,IAAJ,CAAS,KAAK+qC,OAAd,CAAf,CACD,CACF,CAxJM,CAyJPyF,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,EAA8B,CAChD,KAAKE,oBAAL,CAA4B,KAA5B,CACD,CA3JM,CA8JP;AACAG,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,KAAKO,QAAL,CAAgBriE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAK2T,QAApC,CAAhB,CACA,GAAI,CAAC,KAAKtQ,YAAV,CAAwB,CACtB,KAAK+Q,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAjB,CACD,CACF,CApKM,CAqKPN,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,KAAKM,QAAL,CAAgBriE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAhB,CACA,GAAI,CAAC,KAAKtQ,YAAV,CAAwB,CACtB,KAAK+Q,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAjB,CACD,CACF,CA1KM,CA2KPM,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI,CAAC,KAAK5Q,YAAV,CAAwB,CACtB,KAAKsQ,QAAL,CAAgBriE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAK2T,QAApC,CAAhB,CACA,KAAKS,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAjB,CACD,CAHD,IAGO,CACL,KAAKS,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAKoU,SAApC,CAAjB,CACD,CACF,CAlLM,CAmLPF,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,GAAI,CAAC,KAAK7Q,YAAV,CAAwB,CACtB,KAAKsQ,QAAL,CAAgBriE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAhB,CACA,KAAKS,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAjB,CACD,CAHD,IAGO,CACL,KAAKS,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAKoU,SAArC,CAAjB,CACD,CACF,CA1LM,CA6LP;AACAb,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,KAAKI,QAAL,CAAgBriE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAK2T,QAApC,CAAhB,CACD,CAhMM,CAiMPF,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,KAAKE,QAAL,CAAgBriE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAK2T,QAArC,CAAhB,CACD,CAnMM,CAoMPI,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,KAAKK,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAKoU,SAApC,CAAjB,CACD,CAtMM,CAuMPJ,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,KAAKI,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,KAAKoU,SAArC,CAAjB,CACD,CAzMM,CA0MPphB,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI1zC,CAAAA,OAAO,CAAGsR,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAAlF,CAEA,GAAI,KAAK6zC,YAAL,CAAkB,CAAC,KAAK4I,OAAN,CAAe,KAAKC,OAApB,CAAlB,CAAJ,CAAqD,CACnD,KAAKt3D,KAAL,CAAW,MAAX,CAAmB,CAAC,KAAKq3D,OAAN,CAAe,KAAKC,OAApB,CAAnB,CAAiDhuD,OAAjD,EACD,CACF,CAhNM,CAiNPmlD,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsB5yD,KAAtB,CAA6B,CACzC,MAAOuI,CAAAA,KAAK,CAAC4C,OAAN,CAAcnL,KAAd,GAAwBA,KAAxB,EAAiCA,KAAK,CAAC,CAAD,CAAtC,EAA6CA,KAAK,CAAC,CAAD,CAAlD,EAAyDP,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6BnuD,KAAK,CAAC,CAAD,CAAlC,CAAzD,EAAmGP,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6BnuD,KAAK,CAAC,CAAD,CAAlC,CAAnG,EAA6IA,KAAK,CAAC,CAAD,CAAL,CAASovD,OAAT,IAAsBpvD,KAAK,CAAC,CAAD,CAAL,CAASovD,OAAT,EAAnK,GAA0L,MAAO,MAAKyG,YAAZ,GAA6B,UAA7B,CAA0C,CAAC,KAAKA,YAAL,CAAkB71D,KAAK,CAAC,CAAD,CAAvB,CAAD,EAAgC,CAAC,KAAK61D,YAAL,CAAkB71D,KAAK,CAAC,CAAD,CAAvB,CAA3E,CAAyG,IAAnS,CAAP,CACD,CAnNM,CAoNP+yD,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B;AACA;AACA;AACA,GAAI,KAAKyI,OAAL,EAAgB,KAAKC,OAAL,EAAgB,IAApC,CAA0C,KAAKC,UAAL,CAAgBE,SAAhB,CAA4B,KAA5B,CAC1C,KAAKJ,OAAL,CAAe,KAAKx7D,KAAL,EAAcP,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6B,KAAKnuD,KAAL,CAAW,CAAX,CAA7B,CAAd,CAA4D,GAAI0wB,CAAAA,IAAJ,CAAS,KAAK1wB,KAAL,CAAW,CAAX,CAAT,CAA5D,CAAsF,IAArG,CACA,KAAKy7D,OAAL,CAAe,KAAKz7D,KAAL,EAAcP,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6B,KAAKnuD,KAAL,CAAW,CAAX,CAA7B,CAAd,CAA4D,GAAI0wB,CAAAA,IAAJ,CAAS,KAAK1wB,KAAL,CAAW,CAAX,CAAT,CAA5D,CAAsF,IAArG,CACD,CA3NM,CAvM4D,CAqarE8J,UAAU,CAAE,CAAE+1D,UAAU,CAAE/F,UAAd,CAA0BkG,SAAS,CAAElB,UAArC,CAAiDlzD,OAAO,CAAElE,aAAa,CAACoD,CAAxE,CAA2EmO,QAAQ,CAAEJ,cAAc,CAAC/N,CAApG,CArayD,CAA1C,CAua7B;AACC,4BAA6B,GAAI84D,CAAAA,wCAAwC,CAAIhB,kCAAhD,CAC9B;AAMA,yBAEA,GAAIiB,CAAAA,oBAAoB,CAAG1+D,kBAAkB,CAC3Cy+D,wCAD2C,CAE3CtD,8CAF2C,CAG3CmC,uDAH2C,CAI3C,KAJ2C,CAK3C,IAL2C,CAM3C,IAN2C,CAO3C,IAP2C,CAA7C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIqB,CAAAA,cAAJ,CAAqB,CAClCD,oBAAoB,CAACl+D,OAArB,CAA6ByB,MAA7B,CAAsC,+CAAtC,CACA,4BAA6B,GAAI28D,CAAAA,UAAU,CAAIF,oBAAoB,CAACllE,OAAvC,CAC7B;AACA,GAAIqlE,CAAAA,+CAA+C,CAAG,QAAlDA,CAAAA,+CAAkD,EAAW,CAC/D,GAAI5iE,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,YADO,CAEP,CACEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,gBAAR,CADT,CAEEoC,EAAE,CAAE,CACF,cAAe,oBAASa,MAAT,CAAiB,CAC9BnB,GAAG,CAAC+C,KAAJ,CAAU,WAAV,EACD,CAHC,CAFN,CAFO,CAUP,CACE5C,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACqM,OAHb,CAIEC,UAAU,CAAE,SAJd,CADU,CADd,CASEjM,WAAW,CAAE,gDATf,CAUEK,KAAK,CAAE,CACL,CACE,cAAeV,GAAG,CAACyI,MAAJ,CAAWwqD,OAAX,EAAsBjzD,GAAG,CAACkzD,SAD3C,CADK,CAILlzD,GAAG,CAACqH,WAJC,CAVT,CAFA,CAmBA,CACElH,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,+BAAf,CAFA,CAGA,CACEL,GAAG,CAACgN,EAAJ,CAAO,SAAP,CADF,CAEEhN,GAAG,CAACkzD,SAAJ,CACI/yD,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,0BAAf,CAFA,CAGAL,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAACkzD,SAAX,CAAsB,SAASC,QAAT,CAAmBj0D,GAAnB,CAAwB,CAC5C,MAAOiB,CAAAA,EAAE,CACP,QADO,CAEP,CACEjB,GAAG,CAAEA,GADP,CAEEmB,WAAW,CAAE,2BAFf,CAGE+H,KAAK,CAAE,CAAExB,IAAI,CAAE,QAAR,CAHT,CAIEtG,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACozD,mBAAJ,CAAwBD,QAAxB,EACD,CAHC,CAJN,CAFO,CAYP,CAACnzD,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAO0xD,QAAQ,CAAC7lC,IAAhB,CAAP,CAAD,CAZO,CAAT,CAcD,CAfD,CAHA,CAmBA,CAnBA,CADN,CAsBIttB,GAAG,CAACe,EAAJ,EAxBN,CAyBEZ,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,uBAAf,CAAR,CAAkD,CAClDF,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CACT,gEAFJ,CAFA,CAMA,CACEF,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,8BAAf,CAAR,CAAyD,CACzDF,EAAE,CAAC,QAAD,CAAW,CACXE,WAAW,CACT,gDAFS,CAGX+H,KAAK,CAAE,CAAExB,IAAI,CAAE,QAAR,CAHI,CAIXtG,EAAE,CAAE,CAAEC,KAAK,CAAEP,GAAG,CAACmgE,YAAb,CAJO,CAAX,CADuD,CAOzDngE,GAAG,CAACowD,YAAJ,CACIjwD,EAAE,CAAC,QAAD,CAAW,CACXE,WAAW,CACT,iDAFS,CAGXK,KAAK,CAAE,CAAE,cAAe,CAACV,GAAG,CAACqgE,eAAtB,CAHI,CAIXj4D,KAAK,CAAE,CACLxB,IAAI,CAAE,QADD,CAEL/F,QAAQ,CAAE,CAACb,GAAG,CAACqgE,eAFV,CAJI,CAQX//D,EAAE,CAAE,CAAEC,KAAK,CAAEP,GAAG,CAACsgE,YAAb,CARO,CAAX,CADN,CAWItgE,GAAG,CAACe,EAAJ,EAlBqD,CAmBzDZ,EAAE,CAAC,KAAD,CAAQ,CAACH,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACygE,SAAX,CAAP,CAAD,CAAR,CAnBuD,CAAzD,CADJ,CAsBEtgE,EAAE,CAAC,aAAD,CAAgB,CAChBiI,KAAK,CAAE,CACL,iBAAkB,OADb,CAEL8kD,IAAI,CAAEltD,GAAG,CAAC0gE,QAFL,CAGL,gBAAiB1gE,GAAG,CAACiwD,YAHhB,CAIL,WAAYjwD,GAAG,CAACo6D,OAJX,CAKL,WAAYp6D,GAAG,CAACq6D,OALX,CAML,cAAer6D,GAAG,CAACs6D,UANd,CAOL,gBAAiBt6D,GAAG,CAACy0D,YAPhB,CADS,CAUhBn0D,EAAE,CAAE,CACFqgE,WAAW,CAAE3gE,GAAG,CAAC4gE,iBADf,CAEF/M,IAAI,CAAE7zD,GAAG,CAAC6gE,eAFR,CAVY,CAAhB,CAtBJ,CANA,CA4CA,CA5CA,CADgD,CA+ClD1gE,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CACT,iEAFJ,CAFA,CAMA,CACEF,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,8BAAf,CAAR,CAAyD,CACzDL,GAAG,CAACowD,YAAJ,CACIjwD,EAAE,CAAC,QAAD,CAAW,CACXE,WAAW,CACT,gDAFS,CAGXK,KAAK,CAAE,CAAE,cAAe,CAACV,GAAG,CAACqgE,eAAtB,CAHI,CAIXj4D,KAAK,CAAE,CACLxB,IAAI,CAAE,QADD,CAEL/F,QAAQ,CAAE,CAACb,GAAG,CAACqgE,eAFV,CAJI,CAQX//D,EAAE,CAAE,CAAEC,KAAK,CAAEP,GAAG,CAAC8gE,aAAb,CARO,CAAX,CADN,CAWI9gE,GAAG,CAACe,EAAJ,EAZqD,CAazDZ,EAAE,CAAC,QAAD,CAAW,CACXE,WAAW,CACT,iDAFS,CAGX+H,KAAK,CAAE,CAAExB,IAAI,CAAE,QAAR,CAHI,CAIXtG,EAAE,CAAE,CAAEC,KAAK,CAAEP,GAAG,CAACghE,aAAb,CAJO,CAAX,CAbuD,CAmBzD7gE,EAAE,CAAC,KAAD,CAAQ,CAACH,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACkhE,UAAX,CAAP,CAAD,CAAR,CAnBuD,CAAzD,CADJ,CAsBE/gE,EAAE,CAAC,aAAD,CAAgB,CAChBiI,KAAK,CAAE,CACL,iBAAkB,OADb,CAEL8kD,IAAI,CAAEltD,GAAG,CAACmhE,SAFL,CAGL,gBAAiBnhE,GAAG,CAACiwD,YAHhB,CAIL,WAAYjwD,GAAG,CAACo6D,OAJX,CAKL,WAAYp6D,GAAG,CAACq6D,OALX,CAML,cAAer6D,GAAG,CAACs6D,UANd,CAOL,gBAAiBt6D,GAAG,CAACy0D,YAPhB,CADS,CAUhBn0D,EAAE,CAAE,CACFqgE,WAAW,CAAE3gE,GAAG,CAAC4gE,iBADf,CAEF/M,IAAI,CAAE7zD,GAAG,CAAC6gE,eAFR,CAVY,CAAhB,CAtBJ,CANA,CA4CA,CA5CA,CA/CgD,CAAlD,CAzBJ,CAHA,CA2HA,CA3HA,CADJ,CAnBA,CADJ,CAVO,CAAT,CAgKD,CApKD,CAqKA,GAAIgC,CAAAA,wDAAwD,CAAG,EAA/D,CACAD,+CAA+C,CAAC/gE,aAAhD,CAAgE,IAAhE,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA,GAAIihE,CAAAA,mDAAmD,CAAG,QAASvB,CAAAA,gBAAT,CAA0BtR,YAA1B,CAAwC,CAChG,GAAI9oD,KAAK,CAAC4C,OAAN,CAAckmD,YAAd,CAAJ,CAAiC,CAC/B,MAAO,CAAC,GAAI3gC,CAAAA,IAAJ,CAAS2gC,YAAY,CAAC,CAAD,CAArB,CAAD,CAA4B,GAAI3gC,CAAAA,IAAJ,CAAS2gC,YAAY,CAAC,CAAD,CAArB,CAA5B,CAAP,CACD,CAFD,IAEO,IAAIA,YAAJ,CAAkB,CACvB,MAAO,CAAC,GAAI3gC,CAAAA,IAAJ,CAAS2gC,YAAT,CAAD,CAAyB5xD,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,GAAIz9B,CAAAA,IAAJ,CAAS2gC,YAAT,CAAhC,CAAzB,CAAP,CACD,CAFM,IAEA,CACL,MAAO,CAAC,GAAI3gC,CAAAA,IAAJ,EAAD,CAAajxB,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,GAAIz9B,CAAAA,IAAJ,EAAhC,CAAb,CAAP,CACD,CACF,CARD,CASA,4BAA6B,GAAIyzC,CAAAA,mCAAmC,CAAI,CACtEt5D,MAAM,CAAE,CAACjD,cAAc,CAACkD,CAAhB,CAD8D,CAGtEyC,UAAU,CAAE,CAAE0I,YAAY,CAAEvC,oBAAoB,CAAC5I,CAArC,CAH0D,CAKtEzG,QAAQ,CAAE,CACRm+D,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,MAAO,EAAE,KAAKhH,OAAL,EAAgB,KAAKC,OAArB,EAAgC,CAAC,KAAKG,SAAtC,EAAmD,KAAKhJ,YAAL,CAAkB,CAAC,KAAK4I,OAAN,CAAe,KAAKC,OAApB,CAAlB,CAArD,CAAP,CACD,CAHO,CAIRoG,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAKC,QAAL,CAActH,WAAd,GAA8B,GAA9B,CAAoC,KAAKv6D,CAAL,CAAO,oBAAP,CAA3C,CACD,CANO,CAORqiE,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,MAAO,MAAKC,SAAL,CAAe/H,WAAf,GAA+B,GAA/B,CAAqC,KAAKv6D,CAAL,CAAO,oBAAP,CAA5C,CACD,CATO,CAUR4iE,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAKf,QAAL,CAActH,WAAd,EAAP,CACD,CAZO,CAaRwI,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAKT,SAAL,CAAe/H,WAAf,KAAiC,KAAKsH,QAAL,CAActH,WAAd,EAAjC,CAA+D,KAAKsH,QAAL,CAActH,WAAd,GAA8B,CAA7F,CAAiG,KAAK+H,SAAL,CAAe/H,WAAf,EAAxG,CACD,CAfO,CAgBRiH,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,MAAO,MAAKjQ,YAAL,EAAqB,KAAKwR,SAAL,CAAiB,KAAKH,QAAL,CAAgB,CAA7D,CACD,CAlBO,CAL4D,CA0BtE79D,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLyD,WAAW,CAAE,EADR,CAELzI,KAAK,CAAE,EAFF,CAGLqxD,YAAY,CAAE,IAHT,CAILC,WAAW,CAAE,IAJR,CAKLkK,OAAO,CAAE,EALJ,CAMLC,OAAO,CAAE,EANJ,CAOLqG,QAAQ,CAAE,GAAIpxC,CAAAA,IAAJ,EAPL,CAQL6xC,SAAS,CAAE9iE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,GAAIz9B,CAAAA,IAAJ,EAA/B,CARN,CASLgrC,UAAU,CAAE,CACVC,OAAO,CAAE,IADC,CAEVC,SAAS,CAAE,KAFD,CAGVlwB,GAAG,CAAE,IAHK,CAIVR,MAAM,CAAE,IAJE,CATP,CAeLopB,SAAS,CAAE,EAfN,CAgBL7mD,OAAO,CAAE,EAhBJ,CAiBLooD,YAAY,CAAE,EAjBT,CAkBL1G,MAAM,CAAE,EAlBH,CAmBLiE,YAAY,CAAE,KAnBT,CAoBL5B,YAAY,CAAE,KApBT,CAAP,CAsBD,CAjDqE,CAoDtEjuD,KAAK,CAAE,CACLvD,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAeiL,MAAf,CAAuB,CAC5B,GAAI,CAACA,MAAL,CAAa,CACX,KAAKuwD,OAAL,CAAe,IAAf,CACA,KAAKC,OAAL,CAAe,IAAf,CACD,CAHD,IAGO,IAAIlzD,KAAK,CAAC4C,OAAN,CAAcF,MAAd,CAAJ,CAA2B,CAChC,KAAKuwD,OAAL,CAAe/7D,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6BljD,MAAM,CAAC,CAAD,CAAnC,EAA0C,GAAIylB,CAAAA,IAAJ,CAASzlB,MAAM,CAAC,CAAD,CAAf,CAA1C,CAAgE,IAA/E,CACA,KAAKwwD,OAAL,CAAeh8D,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6BljD,MAAM,CAAC,CAAD,CAAnC,EAA0C,GAAIylB,CAAAA,IAAJ,CAASzlB,MAAM,CAAC,CAAD,CAAf,CAA1C,CAAgE,IAA/E,CACA,GAAI,KAAKuwD,OAAT,CAAkB,CAChB,KAAKsG,QAAL,CAAgB,KAAKtG,OAArB,CACA,GAAI,KAAKhK,YAAL,EAAqB,KAAKiK,OAA9B,CAAuC,CACrC,GAAI6H,CAAAA,WAAW,CAAG,KAAK9H,OAAL,CAAahB,WAAb,EAAlB,CACA,GAAIgJ,CAAAA,WAAW,CAAG,KAAK/H,OAAL,CAAajB,WAAb,EAAlB,CACA,KAAK+H,SAAL,CAAiBe,WAAW,GAAKE,WAAhB,CAA8B/jE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAKsN,OAApC,CAA9B,CAA6E,KAAKA,OAAnG,CACD,CAJD,IAIO,CACL,KAAK8G,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAK2T,QAApC,CAAjB,CACD,CACF,CATD,IASO,CACL,KAAKA,QAAL,CAAgBoC,mDAAmD,CAAC,KAAK7S,YAAN,CAAnD,CAAuE,CAAvE,CAAhB,CACA,KAAKkR,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAK2T,QAApC,CAAjB,CACD,CACF,CACF,CAtBI,CAuBLzQ,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsB7tD,GAAtB,CAA2B,CACvC,GAAI,CAAC+E,KAAK,CAAC4C,OAAN,CAAc,KAAKnL,KAAnB,CAAL,CAAgC,CAC9B,GAAI0jE,CAAAA,iBAAiB,CAAGQ,mDAAmD,CAAC1gE,GAAD,CAA3E,CACIic,IAAI,CAAGikD,iBAAiB,CAAC,CAAD,CAD5B,CAEI/jD,KAAK,CAAG+jD,iBAAiB,CAAC,CAAD,CAF7B,CAIA,KAAK5B,QAAL,CAAgBriD,IAAhB,CACA,KAAK8iD,SAAL,CAAiB/+D,GAAG,EAAIA,GAAG,CAAC,CAAD,CAAV,EAAiBic,IAAI,CAAC+6C,WAAL,KAAuB76C,KAAK,CAAC66C,WAAN,EAAxC,EAA+D,KAAKhJ,YAApE,CAAmF7xC,KAAnF,CAA2FlgB,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAK2T,QAApC,CAA5G,CACD,CACF,CAhCI,CApD+D,CAuFtEr+D,OAAO,CAAE,CACPwO,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAKupD,OAAL,CAAe,IAAf,CACA,KAAKC,OAAL,CAAe,IAAf,CACA,KAAKqG,QAAL,CAAgBoC,mDAAmD,CAAC,KAAK7S,YAAN,CAAnD,CAAuE,CAAvE,CAAhB,CACA,KAAKkR,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAK2T,QAApC,CAAjB,CACA,KAAK39D,KAAL,CAAW,MAAX,CAAmB,IAAnB,EACD,CAPM,CAQP69D,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2Bx+D,GAA3B,CAAgC,CACjD,KAAKg4D,OAAL,CAAeh4D,GAAG,CAACg4D,OAAnB,CACA,KAAKC,OAAL,CAAej4D,GAAG,CAACi4D,OAAnB,CACA,KAAKC,UAAL,CAAkBl4D,GAAG,CAACk4D,UAAtB,CACD,CAZM,CAaPuG,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBz+D,GAAzB,CAA8B,CAC7C,GAAI4H,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAIkG,CAAAA,KAAK,CAAGyN,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,IAAhF,CAEA,GAAIuyC,CAAAA,WAAW,CAAG,KAAKA,WAAL,EAAoB,EAAtC,CACA,GAAIkK,CAAAA,OAAO,CAAG/7D,MAAM,CAAC0uD,UAAU,CAAC,sBAAD,CAAX,CAAN,CAA2C3qD,GAAG,CAACg4D,OAA/C,CAAwDlK,WAAW,CAAC,CAAD,CAAnE,CAAd,CACA,GAAImK,CAAAA,OAAO,CAAGh8D,MAAM,CAAC0uD,UAAU,CAAC,sBAAD,CAAX,CAAN,CAA2C3qD,GAAG,CAACi4D,OAA/C,CAAwDnK,WAAW,CAAC,CAAD,CAAnE,CAAd,CACA,GAAI,KAAKmK,OAAL,GAAiBA,OAAjB,EAA4B,KAAKD,OAAL,GAAiBA,OAAjD,CAA0D,CACxD,OACD,CACD,KAAKmI,MAAL,EAAe,KAAKA,MAAL,CAAYngE,GAAZ,CAAf,CACA,KAAKi4D,OAAL,CAAeA,OAAf,CACA,KAAKD,OAAL,CAAeA,OAAf,CAEA;AACA9gD,UAAU,CAAC,UAAY,CACrBtP,KAAK,CAACqwD,OAAN,CAAgBA,OAAhB,CACArwD,KAAK,CAACowD,OAAN,CAAgBA,OAAhB,CACD,CAHS,CAGP,EAHO,CAAV,CAIA,GAAI,CAAClqD,KAAL,CAAY,OACZ,KAAK6vC,aAAL,GACD,CAnCM,CAoCPqT,mBAAmB,CAAE,QAASA,CAAAA,mBAAT,CAA6BD,QAA7B,CAAuC,CAC1D,GAAIA,QAAQ,CAACiL,OAAb,CAAsB,CACpBjL,QAAQ,CAACiL,OAAT,CAAiB,IAAjB,EACD,CACF,CAxCM,CA2CP;AACA+B,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,KAAKO,QAAL,CAAgBriE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAK2T,QAApC,CAAhB,CACA,GAAI,CAAC,KAAKtQ,YAAV,CAAwB,CACtB,KAAK+Q,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAKoU,SAApC,CAAjB,CACD,CACF,CAjDM,CAkDPH,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI,CAAC,KAAK5Q,YAAV,CAAwB,CACtB,KAAKsQ,QAAL,CAAgBriE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAK2T,QAApC,CAAhB,CACD,CACD,KAAKS,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAKoU,SAApC,CAAjB,CACD,CAvDM,CA0DP;AACAb,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,KAAKI,QAAL,CAAgBriE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAK2T,QAApC,CAAhB,CACD,CA7DM,CA8DPI,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,KAAKK,SAAL,CAAiB9iE,MAAM,CAAC0uD,UAAU,CAAC,UAAD,CAAX,CAAN,CAA+B,KAAKoU,SAApC,CAAjB,CACD,CAhEM,CAiEPphB,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI1zC,CAAAA,OAAO,CAAGsR,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAAlF,CAEA,GAAI,KAAK6zC,YAAL,CAAkB,CAAC,KAAK4I,OAAN,CAAe,KAAKC,OAApB,CAAlB,CAAJ,CAAqD,CACnD,KAAKt3D,KAAL,CAAW,MAAX,CAAmB,CAAC,KAAKq3D,OAAN,CAAe,KAAKC,OAApB,CAAnB,CAAiDhuD,OAAjD,EACD,CACF,CAvEM,CAwEPmlD,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsB5yD,KAAtB,CAA6B,CACzC,MAAOuI,CAAAA,KAAK,CAAC4C,OAAN,CAAcnL,KAAd,GAAwBA,KAAxB,EAAiCA,KAAK,CAAC,CAAD,CAAtC,EAA6CA,KAAK,CAAC,CAAD,CAAlD,EAAyDP,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6BnuD,KAAK,CAAC,CAAD,CAAlC,CAAzD,EAAmGP,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6BnuD,KAAK,CAAC,CAAD,CAAlC,CAAnG,EAA6IA,KAAK,CAAC,CAAD,CAAL,CAASovD,OAAT,IAAsBpvD,KAAK,CAAC,CAAD,CAAL,CAASovD,OAAT,EAAnK,GAA0L,MAAO,MAAKyG,YAAZ,GAA6B,UAA7B,CAA0C,CAAC,KAAKA,YAAL,CAAkB71D,KAAK,CAAC,CAAD,CAAvB,CAAD,EAAgC,CAAC,KAAK61D,YAAL,CAAkB71D,KAAK,CAAC,CAAD,CAAvB,CAA3E,CAAyG,IAAnS,CAAP,CACD,CA1EM,CA2EP+yD,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B;AACA;AACA;AACA,KAAKyI,OAAL,CAAe,KAAKx7D,KAAL,EAAcP,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6B,KAAKnuD,KAAL,CAAW,CAAX,CAA7B,CAAd,CAA4D,GAAI0wB,CAAAA,IAAJ,CAAS,KAAK1wB,KAAL,CAAW,CAAX,CAAT,CAA5D,CAAsF,IAArG,CACA,KAAKy7D,OAAL,CAAe,KAAKz7D,KAAL,EAAcP,MAAM,CAAC0uD,UAAU,CAAC,QAAD,CAAX,CAAN,CAA6B,KAAKnuD,KAAL,CAAW,CAAX,CAA7B,CAAd,CAA4D,GAAI0wB,CAAAA,IAAJ,CAAS,KAAK1wB,KAAL,CAAW,CAAX,CAAT,CAA5D,CAAsF,IAArG,CACD,CAjFM,CAvF6D,CA2KtE8J,UAAU,CAAE,CAAEi2D,UAAU,CAAEjD,WAAd,CAA2BlxD,OAAO,CAAElE,aAAa,CAACoD,CAAlD,CAAqDmO,QAAQ,CAAEJ,cAAc,CAAC/N,CAA9E,CA3K0D,CAA3C,CA6K7B;AACC,4BAA6B,GAAIs5D,CAAAA,yCAAyC,CAAID,mCAAjD,CAC9B;AAMA,yBAEA,GAAIE,CAAAA,qBAAqB,CAAGl/D,kBAAkB,CAC5Ci/D,yCAD4C,CAE5CJ,+CAF4C,CAG5CC,wDAH4C,CAI5C,KAJ4C,CAK5C,IAL4C,CAM5C,IAN4C,CAO5C,IAP4C,CAA9C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIK,CAAAA,eAAJ,CAAsB,CACnCD,qBAAqB,CAAC1+D,OAAtB,CAA8ByB,MAA9B,CAAuC,gDAAvC,CACA,4BAA6B,GAAIm9D,CAAAA,WAAW,CAAIF,qBAAqB,CAAC1lE,OAAzC,CAC7B;AAMA,GAAI6lE,CAAAA,oBAAoB,CAAG,QAASC,CAAAA,QAAT,CAAkBz8D,IAAlB,CAAwB,CACjD,GAAIA,IAAI,GAAK,WAAT,EAAwBA,IAAI,GAAK,eAArC,CAAsD,CACpD,MAAO+7D,CAAAA,UAAP,CACD,CAFD,IAEO,IAAI/7D,IAAI,GAAK,YAAb,CAA2B,CAChC,MAAOu8D,CAAAA,WAAP,CACD,CACD,MAAOlE,CAAAA,UAAP,CACD,CAPD,CASA,4BAA6B,GAAIqE,CAAAA,WAAW,CAAI,CAC9C75D,MAAM,CAAE,CAACinD,MAAD,CADsC,CAG9CxyD,IAAI,CAAE,cAHwC,CAK9C6D,KAAK,CAAE,CACL6E,IAAI,CAAE,CACJA,IAAI,CAAEU,MADF,CAEJT,OAAO,CAAE,MAFL,CADD,CAKLorD,gBAAgB,CAAE/vD,OALb,CALuC,CAa9CC,KAAK,CAAE,CACLyE,IAAI,CAAE,QAASA,CAAAA,IAAT,CAAc28D,KAAd,CAAqB,CACzB,GAAI,KAAK7S,MAAT,CAAiB,CACf,KAAK8B,aAAL,GACA,KAAKV,KAAL,CAAasR,oBAAoB,CAACG,KAAD,CAAjC,CACA,KAAK3R,WAAL,GACD,CAJD,IAIO,CACL,KAAKE,KAAL,CAAasR,oBAAoB,CAACG,KAAD,CAAjC,CACD,CACF,CATI,CAbuC,CAyB9CtvD,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAK69C,KAAL,CAAasR,oBAAoB,CAAC,KAAKx8D,IAAN,CAAjC,CACD,CA3B6C,CAAnB,CA6B7B;AAGA,0BACA08D,WAAW,CAACz3D,OAAZ,CAAsB,QAASA,CAAAA,OAAT,CAAiBC,GAAjB,CAAsB,CAC1CA,GAAG,CAAChG,SAAJ,CAAcw9D,WAAW,CAACplE,IAA1B,CAAgColE,WAAhC,EACD,CAFD,CAIA,4BAA6B,GAAIE,CAAAA,oBAAoB,CAAIF,WAA5B,CAC7B;AACA,GAAIG,CAAAA,+CAA+C,CAAG,QAAlDA,CAAAA,+CAAkD,EAAW,CAC/D,GAAIzjE,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,YADO,CAEP,CACEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,gBAAR,CADT,CAEEoC,EAAE,CAAE,CACF,eAAgBN,GAAG,CAACi7B,eADlB,CAEF,cAAe,oBAAS95B,MAAT,CAAiB,CAC9BnB,GAAG,CAAC+C,KAAJ,CAAU,WAAV,EACD,CAJC,CAFN,CAFO,CAWP,CACE5C,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACqM,OAHb,CAIEC,UAAU,CAAE,SAJd,CADU,CADd,CASEG,GAAG,CAAE,QATP,CAUEpM,WAAW,CAAE,uCAVf,CAWEK,KAAK,CAAEV,GAAG,CAACqH,WAXb,CAYEwF,KAAK,CAAE,CAAEsB,KAAK,CAAEnO,GAAG,CAACmO,KAAJ,CAAY,IAArB,CAZT,CAFA,CAgBA,CACEhO,EAAE,CACA,cADA,CAEA,CACEiI,KAAK,CAAE,CAAEotD,QAAQ,CAAE,EAAZ,CAAgB,aAAc,0BAA9B,CADT,CAFA,CAKAx1D,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAACwhB,KAAX,CAAkB,SAAS3Y,IAAT,CAAe,CAC/B,MAAO1I,CAAAA,EAAE,CACP,KADO,CAEP,CACEjB,GAAG,CAAE2J,IAAI,CAACjK,KADZ,CAEEyB,WAAW,CAAE,kBAFf,CAGEK,KAAK,CAAE,CACLw4B,QAAQ,CAAEl5B,GAAG,CAACpB,KAAJ,GAAciK,IAAI,CAACjK,KADxB,CAELiC,QAAQ,CAAEgI,IAAI,CAAChI,QAFV,CAGLgG,OAAO,CAAEgC,IAAI,CAACjK,KAAL,GAAeoB,GAAG,CAACiwD,YAHvB,CAHT,CAQE7nD,KAAK,CAAE,CAAEvH,QAAQ,CAAEgI,IAAI,CAAChI,QAAjB,CART,CASEP,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACyZ,WAAJ,CAAgB5Q,IAAhB,EACD,CAHC,CATN,CAFO,CAiBP,CAAC7I,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOoH,IAAI,CAACjK,KAAZ,CAAP,CAAD,CAjBO,CAAT,CAmBD,CApBD,CALA,CA0BA,CA1BA,CADJ,CAhBA,CA8CA,CA9CA,CADJ,CAXO,CAAT,CA8DD,CAlED,CAmEA,GAAI8kE,CAAAA,wDAAwD,CAAG,EAA/D,CACAD,+CAA+C,CAAC5hE,aAAhD,CAAgE,IAAhE,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA,GAAI8hE,CAAAA,SAAS,CAAG,QAASA,CAAAA,SAAT,CAAmBtW,IAAnB,CAAyB,CACvC,GAAIvZ,CAAAA,MAAM,CAAG,CAACuZ,IAAI,EAAI,EAAT,EAAa1kD,KAAb,CAAmB,GAAnB,CAAb,CACA,GAAImrC,MAAM,CAACh+B,MAAP,EAAiB,CAArB,CAAwB,CACtB,GAAI+/C,CAAAA,KAAK,CAAGvrD,QAAQ,CAACwpC,MAAM,CAAC,CAAD,CAAP,CAAY,EAAZ,CAApB,CACA,GAAImiB,CAAAA,OAAO,CAAG3rD,QAAQ,CAACwpC,MAAM,CAAC,CAAD,CAAP,CAAY,EAAZ,CAAtB,CAEA,MAAO,CACL+hB,KAAK,CAAEA,KADF,CAELI,OAAO,CAAEA,OAFJ,CAAP,CAID,CACD,0BACA,MAAO,KAAP,CACD,CAbD,CAeA,GAAI2N,CAAAA,WAAW,CAAG,QAASA,CAAAA,WAAT,CAAqBC,KAArB,CAA4BC,KAA5B,CAAmC,CACnD,GAAIC,CAAAA,MAAM,CAAGJ,SAAS,CAACE,KAAD,CAAtB,CACA,GAAIG,CAAAA,MAAM,CAAGL,SAAS,CAACG,KAAD,CAAtB,CAEA,GAAIG,CAAAA,QAAQ,CAAGF,MAAM,CAAC9N,OAAP,CAAiB8N,MAAM,CAAClO,KAAP,CAAe,EAA/C,CACA,GAAIqO,CAAAA,QAAQ,CAAGF,MAAM,CAAC/N,OAAP,CAAiB+N,MAAM,CAACnO,KAAP,CAAe,EAA/C,CAEA,GAAIoO,QAAQ,GAAKC,QAAjB,CAA2B,CACzB,MAAO,EAAP,CACD,CAED,MAAOD,CAAAA,QAAQ,CAAGC,QAAX,CAAsB,CAAtB,CAA0B,CAAC,CAAlC,CACD,CAZD,CAcA,GAAIC,CAAAA,UAAU,CAAG,QAASA,CAAAA,UAAT,CAAoB9W,IAApB,CAA0B,CACzC,MAAO,CAACA,IAAI,CAACwI,KAAL,CAAa,EAAb,CAAkB,IAAMxI,IAAI,CAACwI,KAA7B,CAAqCxI,IAAI,CAACwI,KAA3C,EAAoD,GAApD,EAA2DxI,IAAI,CAAC4I,OAAL,CAAe,EAAf,CAAoB,IAAM5I,IAAI,CAAC4I,OAA/B,CAAyC5I,IAAI,CAAC4I,OAAzG,CAAP,CACD,CAFD,CAIA,GAAImO,CAAAA,QAAQ,CAAG,QAASA,CAAAA,QAAT,CAAkB/W,IAAlB,CAAwBx9B,IAAxB,CAA8B,CAC3C,GAAIw0C,CAAAA,SAAS,CAAGV,SAAS,CAACtW,IAAD,CAAzB,CACA,GAAIiX,CAAAA,SAAS,CAAGX,SAAS,CAAC9zC,IAAD,CAAzB,CAEA,GAAIvnB,CAAAA,IAAI,CAAG,CACTutD,KAAK,CAAEwO,SAAS,CAACxO,KADR,CAETI,OAAO,CAAEoO,SAAS,CAACpO,OAFV,CAAX,CAKA3tD,IAAI,CAAC2tD,OAAL,EAAgBqO,SAAS,CAACrO,OAA1B,CACA3tD,IAAI,CAACutD,KAAL,EAAcyO,SAAS,CAACzO,KAAxB,CAEAvtD,IAAI,CAACutD,KAAL,EAAcryD,IAAI,CAACC,KAAL,CAAW6E,IAAI,CAAC2tD,OAAL,CAAe,EAA1B,CAAd,CACA3tD,IAAI,CAAC2tD,OAAL,CAAe3tD,IAAI,CAAC2tD,OAAL,CAAe,EAA9B,CAEA,MAAOkO,CAAAA,UAAU,CAAC77D,IAAD,CAAjB,CACD,CAhBD,CAkBA,4BAA6B,GAAIi8D,CAAAA,mCAAmC,CAAI,CACtE77D,UAAU,CAAE,CAAE0K,WAAW,CAAEF,iBAAiB,CAACxJ,CAAjC,CAD0D,CAGtEvH,KAAK,CAAE,CACLvD,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAewD,GAAf,CAAoB,CACzB,GAAI4H,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI,CAAC5H,GAAL,CAAU,OACV,KAAKsJ,SAAL,CAAe,UAAY,CACzB,MAAO1B,CAAAA,KAAK,CAACo1B,cAAN,EAAP,CACD,CAFD,EAGD,CARI,CAH+D,CActE/8B,OAAO,CAAE,CACPoX,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqB5Q,IAArB,CAA2B,CACtC,GAAI,CAACA,IAAI,CAAChI,QAAV,CAAoB,CAClB,KAAKkC,KAAL,CAAW,MAAX,CAAmB8F,IAAI,CAACjK,KAAxB,EACD,CACF,CALM,CAMPiS,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAK9N,KAAL,CAAW,MAAX,CAAmB,IAAnB,EACD,CARM,CASPq8B,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,GAAIolC,CAAAA,QAAQ,CAAG7mD,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,WAAnF,CAEA,GAAI0I,CAAAA,IAAI,CAAG,KAAKzX,KAAL,CAAWqyB,MAAX,CAAkBltB,aAAlB,CAAgC,2BAAhC,CAAX,CACA+qB,wBAAwB,GAAGzY,IAAH,CAASA,IAAI,CAACtS,aAAL,CAAmBywD,QAAnB,CAAT,CAAxB,CACD,CAdM,CAePvpC,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,GAAIxvB,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAIytB,CAAAA,QAAQ,CAAG,KAAK1X,KAAL,CAAW5Y,GAAX,CAAe,SAAUC,IAAV,CAAgB,CAC5C,MAAOA,CAAAA,IAAI,CAACjK,KAAZ,CACD,CAFc,EAEZiE,OAFY,CAEJ,KAAKjE,KAFD,IAEY,CAAC,CAF5B,CAGA,GAAI6lE,CAAAA,UAAU,CAAG,KAAKjjD,KAAL,CAAW5Y,GAAX,CAAe,SAAUC,IAAV,CAAgB,CAC9C,MAAOA,CAAAA,IAAI,CAACjK,KAAZ,CACD,CAFgB,EAEdiE,OAFc,CAEN,KAAKotD,YAFC,IAEiB,CAAC,CAFnC,CAGA,GAAI/wB,CAAAA,MAAM,CAAGhG,QAAQ,EAAI,WAAZ,EAA2BurC,UAAU,EAAI,UAAzC,EAAuD,kCAApE,CACA,KAAK/4D,SAAL,CAAe,UAAY,CACzB,MAAOD,CAAAA,MAAM,CAAC2zB,cAAP,CAAsBF,MAAtB,CAAP,CACD,CAFD,EAGD,CA5BM,CA6BP63B,UAAU,CAAE,QAASA,CAAAA,UAAT,CAAoBlnC,IAApB,CAA0B,CACpC,GAAIrO,CAAAA,KAAK,CAAG,KAAKA,KAAjB,CACA,GAAI1L,CAAAA,MAAM,CAAG0L,KAAK,CAAC1L,MAAnB,CACA,GAAI/O,CAAAA,KAAK,CAAGya,KAAK,CAAC1L,MAAlB,CACA,GAAIhE,CAAAA,KAAK,CAAG0P,KAAK,CAAC5Y,GAAN,CAAU,SAAUC,IAAV,CAAgB,CACpC,MAAOA,CAAAA,IAAI,CAACjK,KAAZ,CACD,CAFW,EAETiE,OAFS,CAED,KAAKjE,KAFJ,CAAZ,CAGA,MAAOmI,KAAK,EAAZ,CAAgB,CACd+K,KAAK,CAAG,CAACA,KAAK,CAAG+d,IAAR,CAAe/Z,MAAhB,EAA0BA,MAAlC,CACA,GAAI,CAAC0L,KAAK,CAAC1P,KAAD,CAAL,CAAajR,QAAlB,CAA4B,CAC1B,KAAKkC,KAAL,CAAW,MAAX,CAAmBye,KAAK,CAAC1P,KAAD,CAAL,CAAalT,KAAhC,CAAuC,IAAvC,EACA,OACD,CACF,CACF,CA3CM,CA4CP4yD,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsBtE,IAAtB,CAA4B,CACxC,MAAO,MAAK1rC,KAAL,CAAW5B,MAAX,CAAkB,SAAU/W,IAAV,CAAgB,CACvC,MAAO,CAACA,IAAI,CAAChI,QAAb,CACD,CAFM,EAEJ+H,GAFI,CAEA,SAAUC,IAAV,CAAgB,CACrB,MAAOA,CAAAA,IAAI,CAACjK,KAAZ,CACD,CAJM,EAIJiE,OAJI,CAIIqqD,IAJJ,IAIc,CAAC,CAJtB,CAKD,CAlDM,CAmDPp6B,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBxwB,KAAvB,CAA8B,CAC3C,GAAIuI,CAAAA,OAAO,CAAGvI,KAAK,CAACuI,OAApB,CACA,GAAIA,OAAO,GAAK,EAAZ,EAAkBA,OAAO,GAAK,EAAlC,CAAsC,CACpC,GAAIstD,CAAAA,OAAO,CAAG,CAAE,GAAI,CAAN,CAAS,GAAI,CAAC,CAAd,CAAd,CACA,GAAI50D,CAAAA,MAAM,CAAG40D,OAAO,CAACttD,OAAO,CAAC8Y,QAAR,EAAD,CAApB,CACA,KAAKozC,UAAL,CAAgBxzD,MAAhB,EACAjB,KAAK,CAACsX,eAAN,GACA,OACD,CACF,CA5DM,CAd6D,CA6EtEhW,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLyD,WAAW,CAAE,EADR,CAEL07C,KAAK,CAAE,OAFF,CAGLqL,GAAG,CAAE,OAHA,CAILv+B,IAAI,CAAE,OAJD,CAKLjxB,KAAK,CAAE,EALF,CAMLqxD,YAAY,CAAE,EANT,CAOL5jD,OAAO,CAAE,KAPJ,CAQLq4D,OAAO,CAAE,EARJ,CASLC,OAAO,CAAE,EATJ,CAULx2D,KAAK,CAAE,CAVF,CAAP,CAYD,CA1FqE,CA6FtElL,QAAQ,CAAE,CACRue,KAAK,CAAE,QAASA,CAAAA,KAAT,EAAiB,CACtB,GAAIuhC,CAAAA,KAAK,CAAG,KAAKA,KAAjB,CACA,GAAIqL,CAAAA,GAAG,CAAG,KAAKA,GAAf,CACA,GAAIv+B,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CAEA,GAAIrE,CAAAA,MAAM,CAAG,EAAb,CAEA,GAAIu3B,KAAK,EAAIqL,GAAT,EAAgBv+B,IAApB,CAA0B,CACxB,GAAIhsB,CAAAA,OAAO,CAAGk/C,KAAd,CACA,MAAO6gB,WAAW,CAAC//D,OAAD,CAAUuqD,GAAV,CAAX,EAA6B,CAApC,CAAuC,CACrC5iC,MAAM,CAACnoB,IAAP,CAAY,CACVzE,KAAK,CAAEiF,OADG,CAEVhD,QAAQ,CAAE+iE,WAAW,CAAC//D,OAAD,CAAU,KAAK6gE,OAAL,EAAgB,OAA1B,CAAX,EAAiD,CAAjD,EAAsDd,WAAW,CAAC//D,OAAD,CAAU,KAAK8gE,OAAL,EAAgB,SAA1B,CAAX,EAAmD,CAFzG,CAAZ,EAIA9gE,OAAO,CAAGugE,QAAQ,CAACvgE,OAAD,CAAUgsB,IAAV,CAAlB,CACD,CACF,CAED,MAAOrE,CAAAA,MAAP,CACD,CApBO,CA7F4D,CAA3C,CAoH7B;AACC,4BAA6B,GAAIo5C,CAAAA,yCAAyC,CAAIL,mCAAjD,CAC9B;AAMA,yBAEA,GAAIM,CAAAA,qBAAqB,CAAG9gE,kBAAkB,CAC5C6gE,yCAD4C,CAE5CnB,+CAF4C,CAG5CC,wDAH4C,CAI5C,KAJ4C,CAK5C,IAL4C,CAM5C,IAN4C,CAO5C,IAP4C,CAA9C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIoB,CAAAA,eAAJ,CAAsB,CACnCD,qBAAqB,CAACtgE,OAAtB,CAA8ByB,MAA9B,CAAuC,gDAAvC,CACA,4BAA6B,GAAI++D,CAAAA,WAAW,CAAIF,qBAAqB,CAACtnE,OAAzC,CAC7B;AAIA,4BAA6B,GAAIynE,CAAAA,kBAAkB,CAAI,CACrDv7D,MAAM,CAAE,CAACinD,MAAD,CAD6C,CAGrDxyD,IAAI,CAAE,cAH+C,CAKrDmV,aAAa,CAAE,cALsC,CAOrDtR,KAAK,CAAE,CACL6E,IAAI,CAAE,CACJA,IAAI,CAAEU,MADF,CAEJT,OAAO,CAAE,aAFL,CADD,CAP8C,CAcrDjB,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,KAAKksD,KAAL,CAAaiT,WAAb,CACD,CAhBoD,CAA1B,CAkB7B;AAGA,0BACAC,kBAAkB,CAACn5D,OAAnB,CAA6B,SAAUC,GAAV,CAAe,CAC1CA,GAAG,CAAChG,SAAJ,CAAck/D,kBAAkB,CAAC9mE,IAAjC,CAAuC8mE,kBAAvC,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,oBAAoB,CAAID,kBAA5B,CAC7B;AACA,GAAIE,CAAAA,8CAA8C,CAAG,QAAjDA,CAAAA,8CAAiD,EAAW,CAC9D,GAAIllE,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,YADO,CAEP,CACEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,gBAAR,CADT,CAEEoC,EAAE,CAAE,CACF,cAAe,oBAASa,MAAT,CAAiB,CAC9BnB,GAAG,CAAC+C,KAAJ,CAAU,WAAV,EACD,CAHC,CAFN,CAFO,CAUP,CACE5C,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACqM,OAHb,CAIEC,UAAU,CAAE,SAJd,CADU,CADd,CASEjM,WAAW,CAAE,gDATf,CAUEK,KAAK,CAAEV,GAAG,CAACqH,WAVb,CAFA,CAcA,CACElH,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,+BAAf,CAAR,CAA0D,CAC1DF,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,4BAAf,CAAR,CAAuD,CACvDF,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,8BAAf,CAAR,CAAyD,CACzDL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACnB,CAAJ,CAAM,yBAAN,CAAP,CAAP,CADyD,CAAzD,CADqD,CAIvDsB,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CACT,mDAFJ,CAGEK,KAAK,CAAE,CACL,cAAeV,GAAG,CAACk1D,WADd,CAEL,WAAYl1D,GAAG,CAACgyD,YAFX,CAHT,CAFA,CAUA,CACE7xD,EAAE,CAAC,cAAD,CAAiB,CACjBsM,GAAG,CAAE,YADY,CAEjBrE,KAAK,CAAE,CACL,eAAgBpI,GAAG,CAACk1D,WADf,CAEL,aAAcl1D,GAAG,CAACo1D,QAFb,CAGL,gBAAiBp1D,GAAG,CAACgyD,YAHhB,CAIL9E,IAAI,CAAEltD,GAAG,CAACo6D,OAJL,CAFU,CAQjB95D,EAAE,CAAE,CACFiQ,MAAM,CAAEvQ,GAAG,CAACmlE,eADV,CAEF,eAAgBnlE,GAAG,CAAColE,oBAFlB,CARa,CAAjB,CADJ,CAVA,CAyBA,CAzBA,CAJqD,CAAvD,CADwD,CAiC1DjlE,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,4BAAf,CAAR,CAAuD,CACvDF,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,8BAAf,CAAR,CAAyD,CACzDL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACnB,CAAJ,CAAM,uBAAN,CAAP,CAAP,CADyD,CAAzD,CADqD,CAIvDsB,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CACT,mDAFJ,CAGEK,KAAK,CAAE,CACL,cAAeV,GAAG,CAACk1D,WADd,CAEL,WAAYl1D,GAAG,CAACgyD,YAFX,CAHT,CAFA,CAUA,CACE7xD,EAAE,CAAC,cAAD,CAAiB,CACjBsM,GAAG,CAAE,YADY,CAEjBrE,KAAK,CAAE,CACL,eAAgBpI,GAAG,CAACk1D,WADf,CAEL,aAAcl1D,GAAG,CAACo1D,QAFb,CAGL,gBAAiBp1D,GAAG,CAACgyD,YAHhB,CAIL9E,IAAI,CAAEltD,GAAG,CAACq6D,OAJL,CAFU,CAQjB/5D,EAAE,CAAE,CACFiQ,MAAM,CAAEvQ,GAAG,CAACqlE,eADV,CAEF,eAAgBrlE,GAAG,CAACslE,oBAFlB,CARa,CAAjB,CADJ,CAVA,CAyBA,CAzBA,CAJqD,CAAvD,CAjCwD,CAA1D,CADJ,CAmEEnlE,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,uBAAf,CAAR,CAAkD,CAClDF,EAAE,CACA,QADA,CAEA,CACEE,WAAW,CAAE,2BADf,CAEE+H,KAAK,CAAE,CAAExB,IAAI,CAAE,QAAR,CAFT,CAGEtG,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACq1D,YAAJ,GACD,CAHC,CAHN,CAFA,CAWA,CAACr1D,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACnB,CAAJ,CAAM,sBAAN,CAAP,CAAP,CAAD,CAXA,CADgD,CAclDsB,EAAE,CACA,QADA,CAEA,CACEE,WAAW,CAAE,4BADf,CAEE+H,KAAK,CAAE,CAAExB,IAAI,CAAE,QAAR,CAAkB/F,QAAQ,CAAEb,GAAG,CAACohE,WAAhC,CAFT,CAGE9gE,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAAC+/C,aAAJ,GACD,CAHC,CAHN,CAFA,CAWA,CAAC//C,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACnB,CAAJ,CAAM,uBAAN,CAAP,CAAP,CAAD,CAXA,CAdgD,CAAlD,CAnEJ,CAdA,CADJ,CAVO,CAAT,CA4HD,CAhID,CAiIA,GAAI0mE,CAAAA,uDAAuD,CAAG,EAA9D,CACAL,8CAA8C,CAACrjE,aAA/C,CAA+D,IAA/D,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA,GAAI2jE,CAAAA,QAAQ,CAAGnnE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,UAAhC,CAA4C,UAA5C,CAAf,CACA,GAAI0Y,CAAAA,QAAQ,CAAGpnE,MAAM,CAAC0uD,UAAU,CAAC,WAAD,CAAX,CAAN,CAAgC,UAAhC,CAA4C,UAA5C,CAAf,CAEA,GAAI2Y,CAAAA,8CAA8C,CAAG,QAASC,CAAAA,YAAT,CAAsBzY,IAAtB,CAA4B,CAC/E,MAAO7uD,CAAAA,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiCyY,QAAjC,CAA2CtY,IAAI,CAACkM,WAAL,EAA3C,CAA+DlM,IAAI,CAACyB,QAAL,EAA/D,CAAgFzB,IAAI,CAAC6B,OAAL,EAAhF,CAAP,CACD,CAFD,CAIA,GAAI6W,CAAAA,8CAA8C,CAAG,QAASC,CAAAA,YAAT,CAAsB3Y,IAAtB,CAA4B,CAC/E,MAAO7uD,CAAAA,MAAM,CAAC0uD,UAAU,CAAC,YAAD,CAAX,CAAN,CAAiC0Y,QAAjC,CAA2CvY,IAAI,CAACkM,WAAL,EAA3C,CAA+DlM,IAAI,CAACyB,QAAL,EAA/D,CAAgFzB,IAAI,CAAC6B,OAAL,EAAhF,CAAP,CACD,CAFD,CAIA;AACA,GAAI+W,CAAAA,WAAW,CAAG,QAASA,CAAAA,WAAT,CAAqB5Y,IAArB,CAA2B6Y,MAA3B,CAAmC,CACnD,MAAO,IAAIz2C,CAAAA,IAAJ,CAAS9rB,IAAI,CAACyH,GAAL,CAASiiD,IAAI,CAACc,OAAL,GAAiB+X,MAA1B,CAAkCH,8CAA8C,CAAC1Y,IAAD,CAA9C,CAAqDc,OAArD,EAAlC,CAAT,CAAP,CACD,CAFD,CAIA,4BAA6B,GAAIgY,CAAAA,kCAAkC,CAAI,CACrEv8D,MAAM,CAAE,CAACjD,cAAc,CAACkD,CAAhB,CAD6D,CAGrEhB,UAAU,CAAE,CAAEovD,WAAW,CAAEF,YAAf,CAHyD,CAKrE30D,QAAQ,CAAE,CACRiyD,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,MAAO,CAAC,KAAKnH,MAAL,EAAe,EAAhB,EAAoBlrD,OAApB,CAA4B,IAA5B,IAAsC,CAAC,CAA9C,CACD,CAHO,CAIRU,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,MAAO,MAAK2xD,WAAL,CAAmB,EAAnB,CAAwB,CAA/B,CACD,CANO,CAOR6C,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,MAAO,MAAKE,cAAL,CAAoB,CAApB,EAAyB,KAAK10D,MAA9B,CAAuC,KAAKqL,KAAL,CAAWq3D,UAAlD,CAA+D,KAAKr3D,KAAL,CAAWs3D,UAAjF,CACD,CATO,CAUR9E,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,MAAO,MAAKhH,OAAL,CAAapM,OAAb,GAAyB,KAAKqM,OAAL,CAAarM,OAAb,EAAhC,CACD,CAZO,CAaRoH,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,GAAI,CAAC,KAAKrH,MAAL,EAAe,EAAhB,EAAoBlrD,OAApB,CAA4B,GAA5B,IAAqC,CAAC,CAA1C,CAA6C,MAAO,GAAP,CAC7C,GAAI,CAAC,KAAKkrD,MAAL,EAAe,EAAhB,EAAoBlrD,OAApB,CAA4B,GAA5B,IAAqC,CAAC,CAA1C,CAA6C,MAAO,GAAP,CAC7C,MAAO,EAAP,CACD,CAjBO,CAL2D,CAyBrEe,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLyD,WAAW,CAAE,EADR,CAEL+yD,OAAO,CAAE,GAAI9qC,CAAAA,IAAJ,EAFJ,CAGL+qC,OAAO,CAAE,GAAI/qC,CAAAA,IAAJ,EAHJ,CAIL1wB,KAAK,CAAE,EAJF,CAKL8wC,QAAQ,CAAE,CAAC,GAAIpgB,CAAAA,IAAJ,EAAD,CAAa,GAAIA,CAAAA,IAAJ,EAAb,CALL,CAML2gC,YAAY,CAAE,IANT,CAOLlC,MAAM,CAAE,UAPH,CAQL1hD,OAAO,CAAE,KARJ,CASL4rD,cAAc,CAAE,CAAC,CAAD,CAAI,CAAJ,CATX,CAULjG,YAAY,CAAE,KAVT,CAAP,CAYD,CAtCoE,CAyCrE7vD,KAAK,CAAE,CACLvD,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAe+0B,MAAf,CAAuB,CAC5B,GAAIxsB,KAAK,CAAC4C,OAAN,CAAc4pB,MAAd,CAAJ,CAA2B,CACzB,KAAKymC,OAAL,CAAe,GAAI9qC,CAAAA,IAAJ,CAASqE,MAAM,CAAC,CAAD,CAAf,CAAf,CACA,KAAK0mC,OAAL,CAAe,GAAI/qC,CAAAA,IAAJ,CAASqE,MAAM,CAAC,CAAD,CAAf,CAAf,CACD,CAHD,IAGO,CACL,GAAIxsB,KAAK,CAAC4C,OAAN,CAAc,KAAKkmD,YAAnB,CAAJ,CAAsC,CACpC,KAAKmK,OAAL,CAAe,GAAI9qC,CAAAA,IAAJ,CAAS,KAAK2gC,YAAL,CAAkB,CAAlB,CAAT,CAAf,CACA,KAAKoK,OAAL,CAAe,GAAI/qC,CAAAA,IAAJ,CAAS,KAAK2gC,YAAL,CAAkB,CAAlB,CAAT,CAAf,CACD,CAHD,IAGO,IAAI,KAAKA,YAAT,CAAuB,CAC5B,KAAKmK,OAAL,CAAe,GAAI9qC,CAAAA,IAAJ,CAAS,KAAK2gC,YAAd,CAAf,CACA,KAAKoK,OAAL,CAAeyL,WAAW,CAAC,GAAIx2C,CAAAA,IAAJ,CAAS,KAAK2gC,YAAd,CAAD,CAA8B,GAAK,EAAL,CAAU,IAAxC,CAA1B,CACD,CAHM,IAGA,CACL,KAAKmK,OAAL,CAAe,GAAI9qC,CAAAA,IAAJ,EAAf,CACA,KAAK+qC,OAAL,CAAeyL,WAAW,CAAC,GAAIx2C,CAAAA,IAAJ,EAAD,CAAa,GAAK,EAAL,CAAU,IAAvB,CAA1B,CACD,CACF,CACF,CAjBI,CAkBLjjB,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBjK,GAAjB,CAAsB,CAC7B,GAAI4H,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI5H,GAAJ,CAAS,CACP,KAAKstC,QAAL,CAAgB,KAAK9wC,KAArB,CACA,KAAK8M,SAAL,CAAe,UAAY,CACzB,MAAO1B,CAAAA,KAAK,CAAC4E,KAAN,CAAYq3D,UAAZ,CAAuBxQ,eAAvB,CAAuC,OAAvC,CAAP,CACD,CAFD,EAGD,CACF,CA3BI,CAzC8D,CAuErEpzD,OAAO,CAAE,CACPwO,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAK9N,KAAL,CAAW,MAAX,CAAmB,IAAnB,EACD,CAHM,CAIPsyD,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,KAAKtyD,KAAL,CAAW,MAAX,CAAmB,KAAK2sC,QAAxB,EACD,CANM,CAOPy1B,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBjY,IAAzB,CAA+B,CAC9C,KAAKkN,OAAL,CAAe/7D,MAAM,CAAC0uD,UAAU,CAAC,mBAAD,CAAX,CAAN,CAAwCG,IAAxC,CAAf,CACA,KAAKhjD,YAAL,GACD,CAVM,CAWPm7D,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBnY,IAAzB,CAA+B,CAC9C,KAAKmN,OAAL,CAAeh8D,MAAM,CAAC0uD,UAAU,CAAC,mBAAD,CAAX,CAAN,CAAwCG,IAAxC,CAAf,CACA,KAAKhjD,YAAL,GACD,CAdM,CAePA,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,GAAI,KAAKsnD,YAAL,CAAkB,CAAC,KAAK4I,OAAN,CAAe,KAAKC,OAApB,CAAlB,CAAJ,CAAqD,CACnD,KAAKzrD,KAAL,CAAWq3D,UAAX,CAAsB9T,eAAtB,CAAwC,CAAC,CAACuT,8CAA8C,CAAC,KAAKtL,OAAN,CAA/C,CAA+D,KAAKC,OAApE,CAAD,CAAxC,CACA,KAAKzrD,KAAL,CAAWs3D,UAAX,CAAsB/T,eAAtB,CAAwC,CAAC,CAAC,KAAKiI,OAAN,CAAewL,8CAA8C,CAAC,KAAKvL,OAAN,CAA7D,CAAD,CAAxC,CACA,KAAKt3D,KAAL,CAAW,MAAX,CAAmB,CAAC,KAAKq3D,OAAN,CAAe,KAAKC,OAApB,CAAnB,CAAiD,IAAjD,EACD,CACF,CArBM,CAsBP+K,oBAAoB,CAAE,QAASA,CAAAA,oBAAT,CAA8BriB,KAA9B,CAAqCqL,GAArC,CAA0C,CAC9D,KAAKrrD,KAAL,CAAW,cAAX,CAA2BggD,KAA3B,CAAkCqL,GAAlC,CAAuC,KAAvC,EACA,KAAK6J,cAAL,CAAsB,CAAClV,KAAD,CAAQqL,GAAR,CAAtB,CACD,CAzBM,CA0BPkX,oBAAoB,CAAE,QAASA,CAAAA,oBAAT,CAA8BviB,KAA9B,CAAqCqL,GAArC,CAA0C,CAC9D,KAAKrrD,KAAL,CAAW,cAAX,CAA2BggD,KAA3B,CAAkCqL,GAAlC,CAAuC,KAAvC,EACA,KAAK6J,cAAL,CAAsB,CAAClV,KAAK,CAAG,KAAKx/C,MAAd,CAAsB6qD,GAAG,CAAG,KAAK7qD,MAAjC,CAAtB,CACD,CA7BM,CA8BPw8C,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI1zC,CAAAA,OAAO,CAAGsR,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAAlF,CAEA,GAAIwoD,CAAAA,kBAAkB,CAAG,KAAKv3D,KAAL,CAAWq3D,UAAX,CAAsB9T,eAA/C,CACA,GAAIiU,CAAAA,kBAAkB,CAAG,KAAKx3D,KAAL,CAAWs3D,UAAX,CAAsB/T,eAA/C,CAEA,KAAKiI,OAAL,CAAe/7D,MAAM,CAAC0uD,UAAU,CAAC,gBAAD,CAAX,CAAN,CAAqC,KAAKqN,OAA1C,CAAmD+L,kBAAnD,CAAuE,KAAKpY,MAA5E,CAAf,CACA,KAAKsM,OAAL,CAAeh8D,MAAM,CAAC0uD,UAAU,CAAC,gBAAD,CAAX,CAAN,CAAqC,KAAKsN,OAA1C,CAAmD+L,kBAAnD,CAAuE,KAAKrY,MAA5E,CAAf,CAEA,KAAKhrD,KAAL,CAAW,MAAX,CAAmB,CAAC,KAAKq3D,OAAN,CAAe,KAAKC,OAApB,CAAnB,CAAiDhuD,OAAjD,EACD,CAxCM,CAyCPwlD,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,KAAKjjD,KAAL,CAAWq3D,UAAX,CAAsBpU,cAAtB,GACA,KAAKjjD,KAAL,CAAWs3D,UAAX,CAAsBrU,cAAtB,GACD,CA5CM,CA6CPuG,oBAAoB,CAAE,QAASA,CAAAA,oBAAT,CAA8BvoC,IAA9B,CAAoC,CACxD,GAAIyoC,CAAAA,IAAI,CAAG,KAAKpD,WAAL,CAAmB,CAAC,CAAD,CAAI,CAAJ,CAAO,CAAP,CAAU,EAAV,CAAc,EAAd,CAAkB,EAAlB,CAAnB,CAA2C,CAAC,CAAD,CAAI,CAAJ,CAAO,CAAP,CAAU,EAAV,CAAtD,CACA,GAAIiD,CAAAA,OAAO,CAAG,CAAC,OAAD,CAAU,SAAV,EAAqBtyD,MAArB,CAA4B,KAAKqvD,WAAL,CAAmB,CAAC,SAAD,CAAnB,CAAiC,EAA7D,CAAd,CACA,GAAIpjD,CAAAA,KAAK,CAAGwmD,IAAI,CAACz1D,OAAL,CAAa,KAAKo1D,cAAL,CAAoB,CAApB,CAAb,CAAZ,CACA,GAAI3vD,CAAAA,IAAI,CAAG,CAACwJ,KAAK,CAAG+d,IAAR,CAAeyoC,IAAI,CAACxiD,MAArB,EAA+BwiD,IAAI,CAACxiD,MAA/C,CACA,GAAIuwD,CAAAA,IAAI,CAAG/N,IAAI,CAACxiD,MAAL,CAAc,CAAzB,CACA,GAAIxN,IAAI,CAAG+9D,IAAX,CAAiB,CACf,KAAKz3D,KAAL,CAAWq3D,UAAX,CAAsBxQ,eAAtB,CAAsC0C,OAAO,CAAC7vD,IAAD,CAA7C,EACD,CAFD,IAEO,CACL,KAAKsG,KAAL,CAAWs3D,UAAX,CAAsBzQ,eAAtB,CAAsC0C,OAAO,CAAC7vD,IAAI,CAAG+9D,IAAR,CAA7C,EACD,CACF,CAxDM,CAyDP7U,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsBtE,IAAtB,CAA4B,CACxC,MAAO/lD,CAAAA,KAAK,CAAC4C,OAAN,CAAcmjD,IAAd,GAAuB7uD,MAAM,CAAC0uD,UAAU,CAAC,iBAAD,CAAX,CAAN,CAAsC,KAAKqN,OAA3C,CAAoD,KAAKxrD,KAAL,CAAWq3D,UAAX,CAAsB9T,eAA1E,CAAvB,EAAqH9zD,MAAM,CAAC0uD,UAAU,CAAC,iBAAD,CAAX,CAAN,CAAsC,KAAKsN,OAA3C,CAAoD,KAAKzrD,KAAL,CAAWs3D,UAAX,CAAsB/T,eAA1E,CAA5H,CACD,CA3DM,CA4DPr/B,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBxwB,KAAvB,CAA8B,CAC3C,GAAIuI,CAAAA,OAAO,CAAGvI,KAAK,CAACuI,OAApB,CACA,GAAIstD,CAAAA,OAAO,CAAG,CAAE,GAAI,CAAC,CAAP,CAAU,GAAI,CAAd,CAAiB,GAAI,CAAC,CAAtB,CAAyB,GAAI,CAA7B,CAAd,CAEA;AACA,GAAIttD,OAAO,GAAK,EAAZ,EAAkBA,OAAO,GAAK,EAAlC,CAAsC,CACpC,GAAIglB,CAAAA,IAAI,CAAGsoC,OAAO,CAACttD,OAAD,CAAlB,CACA,KAAKutD,oBAAL,CAA0BvoC,IAA1B,EACAvtB,KAAK,CAAC0O,cAAN,GACA,OACD,CAED;AACA,GAAInG,OAAO,GAAK,EAAZ,EAAkBA,OAAO,GAAK,EAAlC,CAAsC,CACpC,GAAIwtD,CAAAA,KAAK,CAAGF,OAAO,CAACttD,OAAD,CAAnB,CACA,KAAKktD,OAAL,CAAahB,UAAb,CAAwBsB,KAAxB,EACA/1D,KAAK,CAAC0O,cAAN,GACA,OACD,CACF,CA/EM,CAvE4D,CAA1C,CAyJ7B;AACC,4BAA6B,GAAIs1D,CAAAA,wCAAwC,CAAIN,kCAAhD,CAC9B;AAMA,yBAEA,GAAIO,CAAAA,oBAAoB,CAAGxiE,kBAAkB,CAC3CuiE,wCAD2C,CAE3CpB,8CAF2C,CAG3CK,uDAH2C,CAI3C,KAJ2C,CAK3C,IAL2C,CAM3C,IAN2C,CAO3C,IAP2C,CAA7C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIiB,CAAAA,cAAJ,CAAqB,CAClCD,oBAAoB,CAAChiE,OAArB,CAA6ByB,MAA7B,CAAsC,+CAAtC,CACA,4BAA6B,GAAIygE,CAAAA,UAAU,CAAIF,oBAAoB,CAAChpE,OAAvC,CAC7B;AAKA,4BAA6B,GAAImpE,CAAAA,WAAW,CAAI,CAC9Cj9D,MAAM,CAAE,CAACinD,MAAD,CADsC,CAG9CxyD,IAAI,CAAE,cAHwC,CAK9C6D,KAAK,CAAE,CACL4kE,OAAO,CAAEzkE,OADJ,CAEL8vD,YAAY,CAAE9vD,OAFT,CALuC,CAU9C0B,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLgD,IAAI,CAAE,EADD,CAAP,CAGD,CAd6C,CAiB9CzE,KAAK,CAAE,CACLwkE,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBC,QAAjB,CAA2B,CAClC,GAAI,KAAKlW,MAAT,CAAiB,CACf,KAAK8B,aAAL,GACA,KAAK5rD,IAAL,CAAYggE,QAAQ,CAAG,WAAH,CAAiB,MAArC,CACA,KAAK9U,KAAL,CAAa8U,QAAQ,CAAGH,UAAH,CAAgB/N,UAArC,CACA,KAAK9G,WAAL,GACD,CALD,IAKO,CACL,KAAKhrD,IAAL,CAAYggE,QAAQ,CAAG,WAAH,CAAiB,MAArC,CACA,KAAK9U,KAAL,CAAa8U,QAAQ,CAAGH,UAAH,CAAgB/N,UAArC,CACD,CACF,CAXI,CAjBuC,CA+B9CzkD,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAKrN,IAAL,CAAY,KAAK+/D,OAAL,CAAe,WAAf,CAA6B,MAAzC,CACA,KAAK7U,KAAL,CAAa,KAAK6U,OAAL,CAAeF,UAAf,CAA4B/N,UAAzC,CACD,CAlC6C,CAAnB,CAoC7B;AAGA,0BACAgO,WAAW,CAAC76D,OAAZ,CAAsB,SAAUC,GAAV,CAAe,CACnCA,GAAG,CAAChG,SAAJ,CAAc4gE,WAAW,CAACxoE,IAA1B,CAAgCwoE,WAAhC,EACD,CAFD,CAIA,4BAA6B,GAAIG,CAAAA,oBAAoB,CAAIH,WAA5B,CAC7B;AACA,GAAII,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAI9mE,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,MADO,CAEP,CACEA,EAAE,CACA,YADA,CAEA,CACEiI,KAAK,CAAE,CAAElK,IAAI,CAAE8B,GAAG,CAAC+mE,UAAZ,CADT,CAEEzmE,EAAE,CAAE,CACF,cAAeN,GAAG,CAACgnE,gBADjB,CAEF,cAAehnE,GAAG,CAACinE,gBAFjB,CAFN,CAFA,CASA,CACE9mE,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAE,CAACoB,GAAG,CAACa,QAAL,EAAiBb,GAAG,CAACyS,UAH9B,CAIEnG,UAAU,CAAE,yBAJd,CADU,CADd,CASEG,GAAG,CAAE,QATP,CAUEpM,WAAW,CAAE,sBAVf,CAWEK,KAAK,CAAE,CAACV,GAAG,CAACqH,WAAL,CAAkBrH,GAAG,CAAC+6C,OAAJ,EAAe,mBAAjC,CAXT,CAYEluC,KAAK,CAAE,CAAEsB,KAAK,CAAEnO,GAAG,CAACmO,KAAJ,CAAY,IAArB,CAZT,CAaE/F,KAAK,CAAE,CACL0E,IAAI,CAAE,SADD,CAELsD,EAAE,CAAEpQ,GAAG,CAACknE,SAFH,CAGL,cACElnE,GAAG,CAACa,QAAJ,EAAgB,CAACb,GAAG,CAACyS,UAArB,CAAkC,MAAlC,CAA2C,OAJxC,CAbT,CAFA,CAsBA,CACEzS,GAAG,CAAC+M,KAAJ,CACI5M,EAAE,CAAC,KAAD,CAAQ,CACRE,WAAW,CAAE,mBADL,CAERuxB,QAAQ,CAAE,CAAElvB,WAAW,CAAE1C,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+M,KAAX,CAAf,CAFF,CAAR,CADN,CAKI/M,GAAG,CAACe,EAAJ,EANN,CAOEf,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAkB,CAAChN,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+6C,OAAX,CAAP,CAAD,CAAlB,CAPF,CAtBA,CA+BA,CA/BA,CADJ,CATA,CADJ,CA8CE/6C,GAAG,CAACgN,EAAJ,CAAO,WAAP,CA9CF,CAFO,CAkDP,CAlDO,CAAT,CAoDD,CAxDD,CAyDA,GAAIm6D,CAAAA,iDAAiD,CAAG,EAAxD,CACAL,wCAAwC,CAACjlE,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA,4BAA6B,GAAIulE,CAAAA,4BAA4B,CAAI,CAC/DlpE,IAAI,CAAE,WADyD,CAG/DuL,MAAM,CAAE,CAACuJ,kBAAkB,CAACtJ,CAApB,CAHuD,CAK/D3H,KAAK,CAAE,CACLkW,OAAO,CAAE,CACPrR,IAAI,CAAEU,MADC,CAEPT,OAAO,CAAE,OAFF,CAGPG,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmBpI,KAAnB,CAA0B,CACnC,MAAO,CAAC,OAAD,CAAU,OAAV,CAAmB,OAAnB,CAA4B,QAA5B,EAAsCiE,OAAtC,CAA8CjE,KAA9C,EAAuD,CAAC,CAA/D,CACD,CALM,CADJ,CAQLyoE,SAAS,CAAE,CACTzgE,IAAI,CAAE5E,MADG,CAET6E,OAAO,CAAE,CAFA,CARN,CAYLygE,UAAU,CAAE,CACV1gE,IAAI,CAAE5E,MADI,CAEV6E,OAAO,CAAE,GAFC,CAZP,CAgBLkG,KAAK,CAAEzF,MAhBF,CAiBLzG,QAAQ,CAAEqB,OAjBL,CAkBL64C,OAAO,CAAEzzC,MAlBJ,CAmBLw0B,SAAS,CAAE,EAnBN,CAoBLz0B,WAAW,CAAEC,MApBR,CAqBL6G,KAAK,CAAE,EArBF,CAsBLiK,YAAY,CAAE,CACZvR,OAAO,CAAE,IADG,CAtBT,CAyBLuU,WAAW,CAAE,CACXxU,IAAI,CAAE5E,MADK,CAEX6E,OAAO,CAAE,CAFE,CAzBR,CA6BLkgE,UAAU,CAAE,CACVngE,IAAI,CAAEU,MADI,CAEVT,OAAO,CAAE,gBAFC,CA7BP,CAiCL0R,QAAQ,CAAE,CACR3R,IAAI,CAAE5E,MADE,CAER6E,OAAO,CAAE,CAFD,CAjCL,CALwD,CA4C/D5D,QAAQ,CAAE,CACRikE,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,cAAgB7oE,MAAM,CAACoI,KAAK,CAAC,YAAD,CAAN,CAAN,EAAvB,CACD,CAHO,CA5CqD,CAiD/DtE,KAAK,CAAE,CACLsQ,UAAU,CAAE,QAASA,CAAAA,UAAT,CAAoBrQ,GAApB,CAAyB,CACnC,GAAI,KAAKvB,QAAT,CAAmB,CACjB,OACD,CACDuB,GAAG,CAAG,KAAKW,KAAL,CAAW,MAAX,CAAH,CAAwB,KAAKA,KAAL,CAAW,MAAX,CAA3B,CACD,CANI,CAjDwD,CA0D/DyM,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIxF,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI8xB,CAAAA,SAAS,CAAG,KAAKloB,YAAL,CAAoB,KAAKkoB,SAAL,EAAkB,KAAKltB,KAAL,CAAWktB,SAAjE,CACA,GAAImF,CAAAA,MAAM,CAAG,KAAKA,MAAL,EAAe,KAAKryB,KAAL,CAAWqyB,MAAvC,CAEA,GAAI,CAACnF,SAAD,EAAc,KAAKrzB,MAAL,CAAYqzB,SAA1B,EAAuC,KAAKrzB,MAAL,CAAYqzB,SAAZ,CAAsB,CAAtB,CAA3C,CAAqE,CACnEA,SAAS,CAAG,KAAKloB,YAAL,CAAoB,KAAKnL,MAAL,CAAYqzB,SAAZ,CAAsB,CAAtB,EAAyBzhB,GAAzD,CACD,CACD;AACA,GAAIyhB,SAAJ,CAAe,CACbz9B,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyB+b,SAAzB,CAAoC,uBAApC,EACAA,SAAS,CAAC9nB,YAAV,CAAuB,kBAAvB,CAA2C,KAAKkzD,SAAhD,EACAprC,SAAS,CAAC9nB,YAAV,CAAuB,UAAvB,CAAmC,KAAKuE,QAAxC,EAAmD;AACnD0oB,MAAM,CAACjtB,YAAP,CAAoB,UAApB,CAAgC,CAAhC,EAEA,GAAI,KAAKiE,OAAL,GAAiB,OAArB,CAA8B,CAC5B5Z,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,SAA9B,CAAyC,UAAY,CACnD9xB,KAAK,CAACyG,WAAN,GACA,GAAI8J,CAAAA,QAAQ,CAAGuhB,SAAS,CAACyrC,OAAzB,CACA,GAAIhtD,QAAQ,EAAI,MAAOA,CAAAA,QAAQ,CAAC/J,KAAhB,GAA0B,UAA1C,CAAsD,CACpD+J,QAAQ,CAAC/J,KAAT,GACD,CACF,CAND,EAOAnS,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmBkhB,MAAnB,CAA2B,SAA3B,CAAsC,KAAKxwB,WAA3C,EACApS,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,UAA9B,CAA0C,KAAKnrB,UAA/C,EACAtS,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmBkhB,MAAnB,CAA2B,UAA3B,CAAuC,KAAKtwB,UAA5C,EACD,CACDtS,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,SAA9B,CAAyC,KAAKhJ,aAA9C,EACAz0B,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,OAA9B,CAAuC,KAAKriB,WAA5C,EACD,CACD,GAAI,KAAKxB,OAAL,GAAiB,OAArB,CAA8B,CAC5B5Z,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,OAA9B,CAAuC,KAAK0rC,QAA5C,EACAnpE,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmBhR,QAAnB,CAA6B,OAA7B,CAAsC,KAAK04D,mBAA3C,EACD,CAHD,IAGO,IAAI,KAAKxvD,OAAL,GAAiB,OAArB,CAA8B,CACnC5Z,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,YAA9B,CAA4C,KAAKmiB,gBAAjD,EACA5/C,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmBkhB,MAAnB,CAA2B,YAA3B,CAAyC,KAAKgd,gBAA9C,EACA5/C,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,YAA9B,CAA4C,KAAKkK,gBAAjD,EACA3nC,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmBkhB,MAAnB,CAA2B,YAA3B,CAAyC,KAAK+E,gBAA9C,EACD,CALM,IAKA,IAAI,KAAK/tB,OAAL,GAAiB,OAArB,CAA8B,CACnC,GAAI,KAAKM,QAAL,CAAgB,CAApB,CAAuB,CACrBnC,OAAO,CAACua,IAAR,CAAa,+FAAb,EACD,CACD,GAAImL,SAAS,CAAC/nB,aAAV,CAAwB,iBAAxB,CAAJ,CAAgD,CAC9C1V,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,SAA9B,CAAyC,KAAK4rC,MAA9C,EACArpE,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,UAA9B,CAA0C,KAAK6rC,OAA/C,EACD,CAHD,IAGO,CACLtpE,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,WAA9B,CAA2C,KAAK4rC,MAAhD,EACArpE,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB+b,SAAnB,CAA8B,SAA9B,CAAyC,KAAK6rC,OAA9C,EACD,CACF,CACF,CA7G8D,CA8G/D1wD,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,KAAK2wD,OAAL,GACD,CAhH8D,CAiH/D7iD,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAK6iD,OAAL,GACD,CAnH8D,CAsH/DvlE,OAAO,CAAE,CACPmlE,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,KAAK/0D,UAAL,CAAkB,CAAC,KAAKA,UAAxB,CACD,CAHM,CAIPi1D,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,KAAKj1D,UAAL,CAAkB,IAAlB,CACD,CANM,CAOPk1D,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAKl1D,UAAL,CAAkB,KAAlB,CACD,CATM,CAUPhC,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClCpS,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyB,KAAKnM,YAA9B,CAA4C,UAA5C,EACA,GAAI,KAAKqE,OAAL,GAAiB,OAAjB,EAA4B,KAAKA,OAAL,GAAiB,OAAjD,CAA0D,KAAKxF,UAAL,CAAkB,IAAlB,CAC3D,CAbM,CAcPgH,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClCpb,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4B,KAAKnM,YAAjC,CAA+C,UAA/C,EACD,CAhBM,CAiBPjD,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChCtS,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4B,KAAKnM,YAAjC,CAA+C,UAA/C,EACA,GAAI,KAAKqE,OAAL,GAAiB,OAAjB,EAA4B,KAAKA,OAAL,GAAiB,OAAjD,CAA0D,KAAKxF,UAAL,CAAkB,KAAlB,CAC3D,CApBM,CAqBPwrC,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,GAAIxyC,CAAAA,MAAM,CAAG,IAAb,CAEA4N,YAAY,CAAC,KAAKwuD,MAAN,CAAZ,CACA,GAAI,KAAKR,SAAT,CAAoB,CAClB,KAAKQ,MAAL,CAAcvuD,UAAU,CAAC,UAAY,CACnC7N,MAAM,CAACgH,UAAP,CAAoB,IAApB,CACD,CAFuB,CAErB,KAAK40D,SAFgB,CAAxB,CAGD,CAJD,IAIO,CACL,KAAK50D,UAAL,CAAkB,IAAlB,CACD,CACF,CAhCM,CAiCPqgB,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBnZ,EAAvB,CAA2B,CACxC,GAAIA,EAAE,CAAC9O,OAAH,GAAe,EAAf,EAAqB,KAAKoN,OAAL,GAAiB,QAA1C,CAAoD,CAClD;AACA,KAAK0vD,OAAL,GACD,CACF,CAtCM,CAuCP3hC,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,GAAIxvB,CAAAA,MAAM,CAAG,IAAb,CAEA6C,YAAY,CAAC,KAAKwuD,MAAN,CAAZ,CACA,GAAI,KAAKP,UAAT,CAAqB,CACnB,KAAKO,MAAL,CAAcvuD,UAAU,CAAC,UAAY,CACnC9C,MAAM,CAAC/D,UAAP,CAAoB,KAApB,CACD,CAFuB,CAErB,KAAK60D,UAFgB,CAAxB,CAGD,CAJD,IAIO,CACL,KAAK70D,UAAL,CAAkB,KAAlB,CACD,CACF,CAlDM,CAmDPg1D,mBAAmB,CAAE,QAASA,CAAAA,mBAAT,CAA6BlxD,CAA7B,CAAgC,CACnD,GAAIulB,CAAAA,SAAS,CAAG,KAAKA,SAAL,EAAkB,KAAKltB,KAAL,CAAWktB,SAA7C,CACA,GAAImF,CAAAA,MAAM,CAAG,KAAKA,MAAL,EAAe,KAAKryB,KAAL,CAAWqyB,MAAvC,CAEA,GAAI,CAACnF,SAAD,EAAc,KAAKrzB,MAAL,CAAYqzB,SAA1B,EAAuC,KAAKrzB,MAAL,CAAYqzB,SAAZ,CAAsB,CAAtB,CAA3C,CAAqE,CACnEA,SAAS,CAAG,KAAKloB,YAAL,CAAoB,KAAKnL,MAAL,CAAYqzB,SAAZ,CAAsB,CAAtB,EAAyBzhB,GAAzD,CACD,CACD,GAAI,CAAC,KAAK5L,GAAN,EAAa,CAACqtB,SAAd,EAA2B,KAAKrtB,GAAL,CAAS2uB,QAAT,CAAkB7mB,CAAC,CAAChU,MAApB,CAA3B,EAA0Du5B,SAAS,CAACsB,QAAV,CAAmB7mB,CAAC,CAAChU,MAArB,CAA1D,EAA0F,CAAC0+B,MAA3F,EAAqGA,MAAM,CAAC7D,QAAP,CAAgB7mB,CAAC,CAAChU,MAAlB,CAAzG,CAAoI,OACpI,KAAKkQ,UAAL,CAAkB,KAAlB,CACD,CA5DM,CA6DPu0D,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,KAAKjkE,KAAL,CAAW,aAAX,EACD,CA/DM,CAgEPkkE,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,KAAKlkE,KAAL,CAAW,aAAX,EACA,KAAKyP,SAAL,GACD,CAnEM,CAoEPo1D,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAI,KAAKP,SAAL,EAAkB,KAAKC,UAA3B,CAAuC,CACrCjuD,YAAY,CAAC,KAAKwuD,MAAN,CAAZ,CACD,CACF,CAxEM,CAtHsD,CAiM/Dn4D,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,GAAIosB,CAAAA,SAAS,CAAG,KAAKA,SAArB,CAEAz9B,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,OAA/B,CAAwC,KAAK0rC,QAA7C,EACAnpE,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,SAA/B,CAA0C,KAAK6rC,OAA/C,EACAtpE,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,WAA/B,CAA4C,KAAK4rC,MAAjD,EACArpE,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,SAA/B,CAA0C,KAAK4rC,MAA/C,EACArpE,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,UAA/B,CAA2C,KAAK6rC,OAAhD,EACAtpE,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,WAA/B,CAA4C,KAAK4rC,MAAjD,EACArpE,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,SAA/B,CAA0C,KAAK6rC,OAA/C,EACAtpE,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,YAA/B,CAA6C,KAAKkK,gBAAlD,EACA3nC,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,YAA/B,CAA6C,KAAKmiB,gBAAlD,EACA5/C,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoBhR,QAApB,CAA8B,OAA9B,CAAuC,KAAK04D,mBAA5C,EACD,CA9M8D,CAApC,CAgN7B;AACC,4BAA6B,GAAIK,CAAAA,gCAAgC,CAAIV,4BAAxC,CAC9B;AAMA,yBAEA,GAAIW,CAAAA,cAAc,CAAGhkE,kBAAkB,CACrC+jE,gCADqC,CAErChB,wCAFqC,CAGrCK,iDAHqC,CAIrC,KAJqC,CAKrC,IALqC,CAMrC,IANqC,CAOrC,IAPqC,CAAvC,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIa,CAAAA,QAAJ,CAAe,CAC5BD,cAAc,CAACxjE,OAAf,CAAuByB,MAAvB,CAAgC,+BAAhC,CACA,4BAA6B,GAAIiiE,CAAAA,IAAI,CAAIF,cAAc,CAACxqE,OAA3B,CAC7B;AACA,GAAI2qE,CAAAA,YAAY,CAAG,QAASA,CAAAA,YAAT,CAAsB/oD,EAAtB,CAA0B+P,OAA1B,CAAmCC,KAAnC,CAA0C,CAC3D,GAAIvkB,CAAAA,IAAI,CAAGskB,OAAO,CAAC5iB,UAAR,CAAqB4iB,OAAO,CAACtwB,KAA7B,CAAqCswB,OAAO,CAACkc,GAAxD,CACA,GAAInK,CAAAA,MAAM,CAAG9R,KAAK,CAACvqB,OAAN,CAAcgK,KAAd,CAAoBhE,IAApB,CAAb,CACA,GAAIq2B,MAAJ,CAAY,CACV,GAAI95B,KAAK,CAAC4C,OAAN,CAAck3B,MAAd,CAAJ,CAA2B,CACzBA,MAAM,CAAC,CAAD,CAAN,CAAUryB,KAAV,CAAgBktB,SAAhB,CAA4B3c,EAA5B,CACD,CAFD,IAEO,CACL8hB,MAAM,CAACryB,KAAP,CAAaktB,SAAb,CAAyB3c,EAAzB,CACD,CACF,CACF,CAVD,CAYA,4BAA6B,GAAIgpD,CAAAA,SAAS,CAAI,CAC5ChpE,IAAI,CAAE,QAASA,CAAAA,IAAT,CAAcggB,EAAd,CAAkB+P,OAAlB,CAA2BC,KAA3B,CAAkC,CACtC+4C,YAAY,CAAC/oD,EAAD,CAAK+P,OAAL,CAAcC,KAAd,CAAZ,CACD,CAH2C,CAI5Ci5C,QAAQ,CAAE,QAASA,CAAAA,QAAT,CAAkBjpD,EAAlB,CAAsB+P,OAAtB,CAA+BC,KAA/B,CAAsC,CAC9C+4C,YAAY,CAAC/oD,EAAD,CAAK+P,OAAL,CAAcC,KAAd,CAAZ,CACD,CAN2C,CAAjB,CAQ7B;AAKAqZ,oBAAoB,CAAC9+B,CAArB,CAAuBy+D,SAAvB,CAAiC,SAAjC,CAA4CA,SAA5C,EAEA,0BACAF,IAAI,CAACp8D,OAAL,CAAe,SAAUC,GAAV,CAAe,CAC5BA,GAAG,CAACq8D,SAAJ,CAAc,SAAd,CAAyBA,SAAzB,EACAr8D,GAAG,CAAChG,SAAJ,CAAcmiE,IAAI,CAAC/pE,IAAnB,CAAyB+pE,IAAzB,EACD,CAHD,CAIAA,IAAI,CAACE,SAAL,CAAiBA,SAAjB,CAEA,4BAA6B,GAAIE,CAAAA,OAAO,CAAIJ,IAAf,CAC7B;AAOA,4BAA6B,GAAIK,CAAAA,QAAQ,CAAI,CAC3CpqE,IAAI,CAAE,WADqC,CAG3CuL,MAAM,CAAE,CAACuJ,kBAAkB,CAACtJ,CAApB,CAHmC,CAK3C3H,KAAK,CAAE,CACLslE,SAAS,CAAE,CACTzgE,IAAI,CAAE5E,MADG,CAET6E,OAAO,CAAE,CAFA,CADN,CAKLhG,QAAQ,CAAEqB,OALL,CAMLqmE,MAAM,CAAErmE,OANH,CAOLklB,MAAM,CAAE,CACNxgB,IAAI,CAAEU,MADA,CAENT,OAAO,CAAE,MAFH,CAPH,CAWLuU,WAAW,CAAE,CACXxU,IAAI,CAAE5E,MADK,CAEX6E,OAAO,CAAE,CAFE,CAXR,CAeLQ,WAAW,CAAEC,MAfR,CAgBLyzC,OAAO,CAAEzzC,MAhBJ,CAiBL8Q,YAAY,CAAE,CACZvR,OAAO,CAAE,IADG,CAjBT,CAoBLkgE,UAAU,CAAE,CACVngE,IAAI,CAAEU,MADI,CAEVT,OAAO,CAAE,mBAFC,CApBP,CAwBL6K,aAAa,CAAE,CACb7K,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,CACL0d,iBAAiB,CAAE,EADd,CAELxR,eAAe,CAAE,KAFZ,CAAP,CAID,CANY,CAxBV,CAgCLk1D,SAAS,CAAE,CACT5hE,IAAI,CAAE1E,OADG,CAET2E,OAAO,CAAE,IAFA,CAhCN,CAoCL4hE,SAAS,CAAE,CACT7hE,IAAI,CAAE5E,MADG,CAET6E,OAAO,CAAE,CAFA,CApCN,CAwCL0R,QAAQ,CAAE,CACR3R,IAAI,CAAE5E,MADE,CAER6E,OAAO,CAAE,CAFD,CAxCL,CALoC,CAmD3CjD,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLsjE,SAAS,CAAE,cAAgB7oE,MAAM,CAACoI,KAAK,CAAC,YAAD,CAAN,CAAN,EADtB,CAELiiE,cAAc,CAAE,IAFX,CAGL7vD,QAAQ,CAAE,KAHL,CAAP,CAKD,CAzD0C,CA0D3CjT,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,GAAIoE,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI,KAAKqjB,SAAT,CAAoB,OAEpB,KAAKs7C,QAAL,CAAgB,GAAIngC,CAAAA,oBAAoB,CAAC9+B,CAAzB,CAA2B,CACzC9F,IAAI,CAAE,CAAE47C,IAAI,CAAE,EAAR,CADmC,CAEzCv7C,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,MAAO,MAAK85C,IAAZ,CACD,CAJwC,CAA3B,EAKbgE,MALa,EAAhB,CAOA,KAAKolB,aAAL,CAAqBx2D,gBAAgB,GAAG,GAAH,CAAQ,UAAY,CACvD,MAAOpI,CAAAA,KAAK,CAAC+zC,iBAAN,EAAP,CACD,CAFoC,CAArC,CAGD,CAzE0C,CA0E3C95C,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,GAAI+F,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI,KAAKk9D,QAAT,CAAmB,CACjB,KAAKA,QAAL,CAAcnpB,IAAd,CAAqB95C,CAAC,CACpB,YADoB,CAEpB,CACE0C,KAAK,CAAE,CACLlK,IAAI,CAAE,KAAK6oE,UADN,CADT,CAIEzmE,EAAE,CAAE,CACF,aAAc,KAAKkS,SADjB,CAJN,CAFoB,CAUpB,CAAC9M,CAAC,CACA,KADA,CAEA,CACEpF,EAAE,CAAE,CACF,aAAc,QAASe,CAAAA,UAAT,EAAsB,CAClCoK,MAAM,CAACoyC,gBAAP,CAAwB,KAAxB,EAA+BpyC,MAAM,CAACm9D,aAAP,GAChC,CAHC,CAIF,aAAc,QAAS1nE,CAAAA,UAAT,EAAsB,CAClCuK,MAAM,CAACoyC,gBAAP,CAAwB,IAAxB,EACD,CANC,CADN,CAUEpxC,GAAG,CAAE,QAVP,CAWErE,KAAK,CAAE,CAAE0E,IAAI,CAAE,SAAR,CACLsD,EAAE,CAAE,KAAK82D,SADJ,CAEL,cAAe,KAAKrmE,QAAL,EAAiB,CAAC,KAAK4R,UAAvB,CAAoC,MAApC,CAA6C,OAFvD,CAXT,CAeEtG,UAAU,CAAE,CAAC,CACXjO,IAAI,CAAE,MADK,CAEXU,KAAK,CAAE,CAAC,KAAKiC,QAAN,EAAkB,KAAK4R,UAFnB,CAAD,CAfd,CAoBE,QAAS,CAAC,oBAAD,CAAuB,MAAQ,KAAK2U,MAApC,CAA4C,KAAK/f,WAAjD,CApBX,CAFA,CAuBA,CAAC,KAAKoB,MAAL,CAAYsyC,OAAZ,EAAuB,KAAKA,OAA7B,CAvBA,CAAF,CAVoB,CAAtB,CAoCD,CAED,GAAI8tB,CAAAA,YAAY,CAAG,KAAKC,eAAL,EAAnB,CACA,GAAI,CAACD,YAAL,CAAmB,MAAO,KAAP,CAEnB,GAAIjlE,CAAAA,IAAI,CAAGilE,YAAY,CAACjlE,IAAb,CAAoBilE,YAAY,CAACjlE,IAAb,EAAqB,EAApD,CACAA,IAAI,CAACvD,WAAL,CAAmB,KAAK0oE,eAAL,CAAqBnlE,IAAI,CAACvD,WAA1B,CAAnB,CAEA,MAAOwoE,CAAAA,YAAP,CACD,CA3H0C,CA4H3Cr5D,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIgH,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAK5C,YAAL,CAAoB,KAAKnF,GAAzB,CACA,GAAI,KAAKA,GAAL,CAASoR,QAAT,GAAsB,CAA1B,CAA6B,CAC3B,KAAKpR,GAAL,CAASuF,YAAT,CAAsB,kBAAtB,CAA0C,KAAKkzD,SAA/C,EACA,KAAKz4D,GAAL,CAASuF,YAAT,CAAsB,UAAtB,CAAkC,KAAKuE,QAAvC,EACAla,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB,KAAKnM,YAAxB,CAAsC,YAAtC,CAAoD,KAAKwF,IAAzD,EACA/a,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB,KAAKnM,YAAxB,CAAsC,YAAtC,CAAoD,KAAKvE,IAAzD,EACAhR,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB,KAAKnM,YAAxB,CAAsC,OAAtC,CAA+C,UAAY,CACzD,GAAI,CAAC4C,MAAM,CAAC/N,MAAP,CAAc5B,OAAf,EAA0B,CAAC2P,MAAM,CAAC/N,MAAP,CAAc5B,OAAd,CAAsBiP,MAArD,CAA6D,CAC3DU,MAAM,CAAC/F,WAAP,GACA,OACD,CACD,GAAI8J,CAAAA,QAAQ,CAAG/D,MAAM,CAAC/N,MAAP,CAAc5B,OAAd,CAAsB,CAAtB,EAAyBmiE,iBAAxC,CACA,GAAIzuD,QAAQ,EAAIA,QAAQ,CAAC/J,KAAzB,CAAgC,CAC9B+J,QAAQ,CAAC/J,KAAT,GACD,CAFD,IAEO,CACLgG,MAAM,CAAC/F,WAAP,GACD,CACF,CAXD,EAYApS,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB,KAAKnM,YAAxB,CAAsC,MAAtC,CAA8C,KAAKjD,UAAnD,EACAtS,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmB,KAAKnM,YAAxB,CAAsC,OAAtC,CAA+C,KAAKq1D,cAApD,EACD,CACD;AACA,GAAI,KAAKrqE,KAAL,EAAc,KAAK+pE,QAAvB,CAAiC,CAC/B,KAAKA,QAAL,CAAcj9D,SAAd,CAAwB,UAAY,CAClC,GAAI8K,MAAM,CAAC5X,KAAX,CAAkB,CAChB4X,MAAM,CAAC7H,YAAP,GACD,CACF,CAJD,EAKD,CACF,CA5J0C,CA8J3CxM,KAAK,CAAE,CACL0W,QAAQ,CAAE,QAASA,CAAAA,QAAT,CAAkBzW,GAAlB,CAAuB,CAC/B,GAAIA,GAAJ,CAAS,CACP/D,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyB,KAAKnM,YAA9B,CAA4C,UAA5C,EACD,CAFD,IAEO,CACLvV,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4B,KAAKnM,YAAjC,CAA+C,UAA/C,EACD,CACF,CAPI,CA9JoC,CAuK3CvR,OAAO,CAAE,CACP+W,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,KAAKykC,gBAAL,CAAsB,IAAtB,EACA,KAAK7B,gBAAL,GACD,CAJM,CAKP3sC,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,KAAKwuC,gBAAL,CAAsB,KAAtB,EACA,KAAK+qB,aAAL,GACD,CARM,CASPn4D,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAKoI,QAAL,CAAgB,IAAhB,CACA,KAAKO,IAAL,GACD,CAZM,CAaPzI,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,KAAKkI,QAAL,CAAgB,KAAhB,CACA,KAAKxJ,IAAL,GACD,CAhBM,CAiBP45D,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,KAAKpwD,QAAL,CAAgB,KAAhB,CACD,CAnBM,CAoBPkwD,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyB7gE,IAAzB,CAA+B,CAC9C,GAAI,CAACA,IAAL,CAAW,CACT,MAAO,YAAP,CACD,CAFD,IAEO,CACL,MAAO,cAAgBA,IAAI,CAACiR,OAAL,CAAa,YAAb,CAA2B,EAA3B,CAAvB,CACD,CACF,CA1BM,CA2BP6iC,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,GAAIhlC,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI,CAAC,KAAKkyD,aAAN,EAAuB,KAAKX,MAAhC,CAAwC,OACxClvD,YAAY,CAAC,KAAKb,OAAN,CAAZ,CACA,KAAKA,OAAL,CAAec,UAAU,CAAC,UAAY,CACpCtC,MAAM,CAACvE,UAAP,CAAoB,IAApB,CACD,CAFwB,CAEtB,KAAK40D,SAFiB,CAAzB,CAIA,GAAI,KAAKoB,SAAL,CAAiB,CAArB,CAAwB,CACtB,KAAKC,cAAL,CAAsBpvD,UAAU,CAAC,UAAY,CAC3CtC,MAAM,CAACvE,UAAP,CAAoB,KAApB,CACD,CAF+B,CAE7B,KAAKg2D,SAFwB,CAAhC,CAGD,CACF,CAzCM,CA0CP1qB,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,EAA6B,CAC9C,GAAI,KAAKyqB,SAAL,EAAkB,KAAKU,aAAvB,EAAwC,KAAKX,MAAjD,CAAyD,OACzDlvD,YAAY,CAAC,KAAKb,OAAN,CAAZ,CAEA,GAAI,KAAKkwD,cAAT,CAAyB,CACvBrvD,YAAY,CAAC,KAAKqvD,cAAN,CAAZ,CACD,CACD,KAAKj2D,UAAL,CAAkB,KAAlB,CAEA,GAAI,KAAK5R,QAAT,CAAmB,CACjB,KAAK2R,SAAL,GACD,CACF,CAtDM,CAuDPqrC,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,CAA0BqrB,aAA1B,CAAyC,CACzD,GAAIA,aAAa,GAAK,KAAtB,CAA6B,CAC3B7vD,YAAY,CAAC,KAAKqvD,cAAN,CAAZ,CACD,CACD,KAAKQ,aAAL,CAAqBA,aAArB,CACD,CA5DM,CA6DPJ,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,GAAIK,CAAAA,KAAK,CAAG,KAAK1gE,MAAL,CAAY5B,OAAxB,CACA,GAAI,CAACM,KAAK,CAAC4C,OAAN,CAAco/D,KAAd,CAAL,CAA2B,MAAO,KAAP,CAC3B,GAAI1sD,CAAAA,OAAO,CAAG,IAAd,CACA,IAAK,GAAI3K,CAAAA,KAAK,CAAG,CAAjB,CAAoBA,KAAK,CAAGq3D,KAAK,CAACrzD,MAAlC,CAA0ChE,KAAK,EAA/C,CAAmD,CACjD,GAAIq3D,KAAK,CAACr3D,KAAD,CAAL,EAAgBq3D,KAAK,CAACr3D,KAAD,CAAL,CAAae,GAAjC,CAAsC,CACpC4J,OAAO,CAAG0sD,KAAK,CAACr3D,KAAD,CAAf,CACD,EACF,CACD,MAAO2K,CAAAA,OAAP,CACD,CAvEM,CAvKkC,CAiP3CxF,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,KAAK0xD,QAAL,EAAiB,KAAKA,QAAL,CAAczxD,QAAd,EAAjB,CACD,CAnP0C,CAoP3CxH,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,GAAIosB,CAAAA,SAAS,CAAG,KAAKloB,YAArB,CACA,GAAIkoB,SAAS,CAACjc,QAAV,GAAuB,CAA3B,CAA8B,CAC5BxhB,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,YAA/B,CAA6C,KAAK1iB,IAAlD,EACA/a,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,YAA/B,CAA6C,KAAKzsB,IAAlD,EACAhR,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,OAA/B,CAAwC,KAAKrrB,WAA7C,EACApS,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,MAA/B,CAAuC,KAAKnrB,UAA5C,EACAtS,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoB+b,SAApB,CAA+B,OAA/B,CAAwC,KAAKmtC,cAA7C,EACD,CACF,CA7P0C,CAAhB,CA+P7B;AAGA,0BACAX,QAAQ,CAACz8D,OAAT,CAAmB,SAAUC,GAAV,CAAe,CAChCA,GAAG,CAAChG,SAAJ,CAAcwiE,QAAQ,CAACpqE,IAAvB,CAA6BoqE,QAA7B,EACD,CAFD,CAIA,4BAA6B,GAAIc,CAAAA,gBAAgB,CAAId,QAAxB,CAC7B;AACA,GAAIe,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAIrpE,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CAAC,YAAD,CAAe,CAAEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,aAAR,CAAT,CAAf,CAAmD,CAC1DiC,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACqM,OAHb,CAIEC,UAAU,CAAE,SAJd,CADU,CADd,CASEjM,WAAW,CAAE,yBATf,CAUE+H,KAAK,CAAE,CACLmQ,QAAQ,CAAE,IADL,CAELzL,IAAI,CAAE,QAFD,CAGL,aAAc,MAHT,CAIL,aAAc9M,GAAG,CAAC+M,KAAJ,EAAa,QAJtB,CAVT,CAgBEzM,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtB,GAAIA,MAAM,CAACoB,MAAP,GAAkBpB,MAAM,CAACoL,aAA7B,CAA4C,CAC1C,MAAO,KAAP,CACD,CACD,MAAOvM,CAAAA,GAAG,CAACwM,kBAAJ,CAAuBrL,MAAvB,CAAP,CACD,CANC,CAhBN,CAFA,CA2BA,CACEhB,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,gBADf,CAEEK,KAAK,CAAE,CAACV,GAAG,CAAC4M,WAAL,CAAkB5M,GAAG,CAAC2M,MAAJ,EAAc,wBAAhC,CAFT,CAFA,CAMA,CACE3M,GAAG,CAAC+M,KAAJ,GAAc,IAAd,CACI5M,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,wBAAf,CAAR,CAAmD,CACnDF,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,uBAAf,CAAR,CAAkD,CAClDL,GAAG,CAAC8b,IAAJ,EAAY9b,GAAG,CAAC2M,MAAhB,CACIxM,EAAE,CAAC,KAAD,CAAQ,CACRO,KAAK,CAAE,CAAC,wBAAD,CAA2BV,GAAG,CAAC8b,IAA/B,CADC,CAAR,CADN,CAII9b,GAAG,CAACe,EAAJ,EAL8C,CAMlDZ,EAAE,CAAC,MAAD,CAAS,CAACH,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+M,KAAX,CAAP,CAAD,CAAT,CANgD,CAAlD,CADiD,CASnD/M,GAAG,CAACiN,SAAJ,CACI9M,EAAE,CACA,QADA,CAEA,CACEE,WAAW,CAAE,2BADf,CAEE+H,KAAK,CAAE,CAAExB,IAAI,CAAE,QAAR,CAAkB,aAAc,OAAhC,CAFT,CAGEtG,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACspE,YAAJ,CACEtpE,GAAG,CAACupE,yBAAJ,CACI,OADJ,CAEI,QAHN,EAKD,CAPC,CAQFz4D,OAAO,CAAE,iBAAS3P,MAAT,CAAiB,CACxB,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CACE5P,MAAM,CAAC0J,OADT,CAEE,OAFF,CAGE,EAHF,CAIE1J,MAAM,CAACjC,GAJT,CAKE,OALF,CAFF,CASE,CACA,MAAO,KAAP,CACD,CACDc,GAAG,CAACspE,YAAJ,CACEtpE,GAAG,CAACupE,yBAAJ,CACI,OADJ,CAEI,QAHN,EAKD,CA1BC,CAHN,CAFA,CAkCA,CACEppE,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,qCADP,CAAN,CADJ,CAlCA,CADN,CAyCIL,GAAG,CAACe,EAAJ,EAlD+C,CAAnD,CADN,CAqDIf,GAAG,CAACe,EAAJ,EAtDN,CAuDEZ,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,yBAAf,CAAR,CAAoD,CACpDF,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,2BAAf,CAAR,CAAsD,CACtDL,GAAG,CAAC8b,IAAJ,EAAY,CAAC9b,GAAG,CAAC2M,MAAjB,EAA2B3M,GAAG,CAACwpE,OAAJ,GAAgB,EAA3C,CACIrpE,EAAE,CAAC,KAAD,CAAQ,CAAEO,KAAK,CAAE,CAAC,wBAAD,CAA2BV,GAAG,CAAC8b,IAA/B,CAAT,CAAR,CADN,CAEI9b,GAAG,CAACe,EAAJ,EAHkD,CAItDf,GAAG,CAACwpE,OAAJ,GAAgB,EAAhB,CACIrpE,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,yBAAf,CAFA,CAGA,CACEL,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAkB,CAChB,CAAChN,GAAG,CAACypE,wBAAL,CACItpE,EAAE,CAAC,GAAD,CAAM,CAACH,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACwpE,OAAX,CAAP,CAAD,CAAN,CADN,CAEIrpE,EAAE,CAAC,GAAD,CAAM,CACNyxB,QAAQ,CAAE,CAAE83C,SAAS,CAAE1pE,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACwpE,OAAX,CAAb,CADJ,CAAN,CAHU,CAAlB,CADF,CAHA,CAYA,CAZA,CADN,CAeIxpE,GAAG,CAACe,EAAJ,EAnBkD,CAAtD,CADkD,CAsBpDZ,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAAC2pE,SAHb,CAIEr9D,UAAU,CAAE,WAJd,CADU,CADd,CASEjM,WAAW,CAAE,uBATf,CAFA,CAaA,CACEF,EAAE,CAAC,UAAD,CAAa,CACbsM,GAAG,CAAE,OADQ,CAEbrE,KAAK,CAAE,CACLxB,IAAI,CAAE5G,GAAG,CAAC4pE,SADL,CAEL90D,WAAW,CAAE9U,GAAG,CAAC6pE,gBAFZ,CAFM,CAMb1+D,QAAQ,CAAE,CACR2F,OAAO,CAAE,iBAAS3P,MAAT,CAAiB,CACxB,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CACE5P,MAAM,CAAC0J,OADT,CAEE,OAFF,CAGE,EAHF,CAIE1J,MAAM,CAACjC,GAJT,CAKE,OALF,CAFF,CASE,CACA,MAAO,KAAP,CACD,CACD,MAAOc,CAAAA,GAAG,CAAC8pE,gBAAJ,CAAqB3oE,MAArB,CAAP,CACD,CAfO,CANG,CAuBbwwB,KAAK,CAAE,CACL/yB,KAAK,CAAEoB,GAAG,CAAC+pE,UADN,CAELjvC,QAAQ,CAAE,kBAASzF,GAAT,CAAc,CACtBr1B,GAAG,CAAC+pE,UAAJ,CAAiB10C,GAAjB,CACD,CAJI,CAKL/oB,UAAU,CAAE,YALP,CAvBM,CAAb,CADJ,CAgCEnM,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,0BADf,CAEEwM,KAAK,CAAE,CACLm9D,UAAU,CAAE,CAAC,CAAChqE,GAAG,CAACiqE,kBAAN,CACR,SADQ,CAER,QAHC,CAFT,CAFA,CAUA,CAACjqE,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACiqE,kBAAX,CAAP,CAAD,CAVA,CAhCJ,CAbA,CA0DA,CA1DA,CAtBkD,CAApD,CAvDJ,CA0IE9pE,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,sBAAf,CAFA,CAGA,CACEL,GAAG,CAACkqE,gBAAJ,CACI/pE,EAAE,CACA,WADA,CAEA,CACEO,KAAK,CAAE,CAACV,GAAG,CAACmqE,mBAAL,CADT,CAEE/hE,KAAK,CAAE,CACLuK,OAAO,CAAE3S,GAAG,CAACoqE,mBADR,CAEL5nD,KAAK,CAAExiB,GAAG,CAACqqE,WAFN,CAGLpgE,IAAI,CAAE,OAHD,CAFT,CAOE3J,EAAE,CAAE,CACFwQ,OAAO,CAAE,iBAAS3P,MAAT,CAAiB,CACxB,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CACE5P,MAAM,CAAC0J,OADT,CAEE,OAFF,CAGE,EAHF,CAIE1J,MAAM,CAACjC,GAJT,CAKE,OALF,CAFF,CASE,CACA,MAAO,KAAP,CACD,CACDc,GAAG,CAACspE,YAAJ,CAAiB,QAAjB,EACD,CAfC,CAPN,CAwBEn+D,QAAQ,CAAE,CACR5K,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACspE,YAAJ,CAAiB,QAAjB,EACD,CAHO,CAxBZ,CAFA,CAgCA,CACEtpE,GAAG,CAACc,EAAJ,CACE,eACEd,GAAG,CAACyB,EAAJ,CACEzB,GAAG,CAACsqE,gBAAJ,EACEtqE,GAAG,CAACnB,CAAJ,CAAM,sBAAN,CAFJ,CADF,CAKE,YANJ,CADF,CAhCA,CADN,CA4CImB,GAAG,CAACe,EAAJ,EA7CN,CA8CEZ,EAAE,CACA,WADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACuqE,iBAHb,CAIEj+D,UAAU,CAAE,mBAJd,CADU,CADd,CASEG,GAAG,CAAE,SATP,CAUE/L,KAAK,CAAE,CAACV,GAAG,CAACwqE,oBAAL,CAVT,CAWEpiE,KAAK,CAAE,CACLuK,OAAO,CAAE3S,GAAG,CAACyqE,oBADR,CAELjoD,KAAK,CAAExiB,GAAG,CAACqqE,WAFN,CAGLpgE,IAAI,CAAE,OAHD,CAXT,CAgBE3J,EAAE,CAAE,CACFwQ,OAAO,CAAE,iBAAS3P,MAAT,CAAiB,CACxB,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CACE5P,MAAM,CAAC0J,OADT,CAEE,OAFF,CAGE,EAHF,CAIE1J,MAAM,CAACjC,GAJT,CAKE,OALF,CAFF,CASE,CACA,MAAO,KAAP,CACD,CACDc,GAAG,CAACspE,YAAJ,CAAiB,SAAjB,EACD,CAfC,CAhBN,CAiCEn+D,QAAQ,CAAE,CACR5K,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACspE,YAAJ,CAAiB,SAAjB,EACD,CAHO,CAjCZ,CAFA,CAyCA,CACEtpE,GAAG,CAACc,EAAJ,CACE,eACEd,GAAG,CAACyB,EAAJ,CACEzB,GAAG,CAAC0qE,iBAAJ,EACE1qE,GAAG,CAACnB,CAAJ,CAAM,uBAAN,CAFJ,CADF,CAKE,YANJ,CADF,CAzCA,CA9CJ,CAHA,CAsGA,CAtGA,CA1IJ,CANA,CADJ,CA3BA,CADwD,CAAnD,CAAT,CA0RD,CA9RD,CA+RA,GAAI8rE,CAAAA,iDAAiD,CAAG,EAAxD,CACAtB,wCAAwC,CAACxnE,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA,GAAI+oE,CAAAA,YAAY,CAAGltE,mBAAmB,CAAC,EAAD,CAAtC,CACA,GAAImtE,CAAAA,mBAAmB,CAAG,aAAantE,mBAAmB,CAAC0B,CAApB,CAAsBwrE,YAAtB,CAAvC,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA,GAAIE,CAAAA,UAAU,CAAG,IAAK,EAAtB,CACA,GAAIC,CAAAA,OAAO,CAAG,CACZh+C,OAAO,CAAE,SADG,CAEZugB,IAAI,CAAE,MAFM,CAGZ09B,OAAO,CAAE,SAHG,CAIZ30D,KAAK,CAAE,OAJK,CAAd,CAOA,4BAA6B,GAAI40D,CAAAA,4CAA4C,CAAI,CAC/ExhE,MAAM,CAAE,CAAC8D,aAAa,CAAC7D,CAAf,CAAkBlD,cAAc,CAACkD,CAAjC,CADuE,CAG/E3H,KAAK,CAAE,CACL8L,KAAK,CAAE,CACLhH,OAAO,CAAE,IADJ,CADF,CAILmH,UAAU,CAAE,CACVnH,OAAO,CAAE,IADC,CAJP,CAOLoG,SAAS,CAAE,CACTrG,IAAI,CAAE1E,OADG,CAET2E,OAAO,CAAE,IAFA,CAPN,CAWLoH,iBAAiB,CAAE,CACjBpH,OAAO,CAAE,IADQ,CAXd,CAcLqH,kBAAkB,CAAE,CAClBrH,OAAO,CAAE,IADS,CAdf,CAiBLqkE,iBAAiB,CAAE,CACjBrkE,OAAO,CAAE,IADQ,CAjBd,CAoBL8F,MAAM,CAAE,CACN9F,OAAO,CAAE,KADH,CAEND,IAAI,CAAE1E,OAFA,CApBH,CAwBLmoE,WAAW,CAAE,CACXxjE,OAAO,CAAE,KADE,CAEXD,IAAI,CAAE1E,OAFK,CAxBR,CAHwE,CAiC/EwG,UAAU,CAAE,CACV8B,OAAO,CAAElE,aAAa,CAACoD,CADb,CAEVmO,QAAQ,CAAEJ,cAAc,CAAC/N,CAFf,CAjCmE,CAsC/EzG,QAAQ,CAAE,CACR6Y,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,GAAIlV,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CACIm0B,SAAS,CAAG,KAAKA,SADrB,CAGA,MAAOA,CAAAA,SAAS,GAAKn0B,IAAI,EAAImkE,OAAO,CAACnkE,IAAD,CAAf,CAAwB,WAAamkE,OAAO,CAACnkE,IAAD,CAA5C,CAAqD,EAA1D,CAAhB,CACD,CANO,CAOR4jE,oBAAoB,CAAE,QAASA,CAAAA,oBAAT,EAAgC,CACpD,MAAO,sBAAwB,KAAKW,kBAApC,CACD,CATO,CAURhB,mBAAmB,CAAE,QAASA,CAAAA,mBAAT,EAA+B,CAClD,MAAO,GAAK,KAAKiB,iBAAjB,CACD,CAZO,CAtCqE,CAqD/E/oE,OAAO,CAAE,CACPgpE,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,GAAIrhE,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAIshE,CAAAA,SAAS,CAAG,KAAKC,GAArB,CACA,MAAO,WAAY,CACjBvhE,KAAK,CAAC0B,SAAN,CAAgB,UAAY,CAC1B,GAAI4/D,SAAS,GAAKthE,KAAK,CAACuhE,GAAxB,CAA6BvhE,KAAK,CAAC29D,OAAN,GAC9B,CAFD,EAGD,CAJD,CAKD,CAVM,CAWPA,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIl8D,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI,CAAC,KAAKY,OAAV,CAAmB,OACnB,KAAKA,OAAL,CAAe,KAAf,CACA,KAAKm/D,QAAL,CAAgB,IAAhB,CAEA,KAAKC,OAAL,EAAgB,KAAKA,OAAL,EAAhB,CACAX,UAAU,CAACY,WAAX,GAA0B;AAC1B,GAAI,KAAK19D,UAAT,CAAqB,CACnBsL,UAAU,CAAC,KAAKqyD,gBAAN,CAAwB,GAAxB,CAAV,CACD,CACD,KAAKvmD,MAAL,CAAc,KAAd,CACA,KAAKwmD,YAAL,GACAtyD,UAAU,CAAC,UAAY,CACrB,GAAI7N,MAAM,CAACogE,MAAX,CAAmBpgE,MAAM,CAACqvB,QAAP,CAAgBrvB,MAAM,CAACogE,MAAvB,CAA+BpgE,MAA/B,EACpB,CAFS,CAAV,CAGD,CA5BM,CA6BPe,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,EAA8B,CAChD,GAAI,KAAKyB,iBAAT,CAA4B,CAC1B,KAAKq7D,YAAL,CAAkB,KAAKC,yBAAL,CAAiC,OAAjC,CAA2C,QAA7D,EACD,CACF,CAjCM,CAkCPO,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,GAAI,KAAKF,SAAL,GAAmB,UAAvB,CAAmC,CACjC,MAAO,MAAKN,YAAL,CAAkB,SAAlB,CAAP,CACD,CACF,CAtCM,CAuCPA,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsBuC,MAAtB,CAA8B,CAC1C,GAAI,KAAKC,KAAL,GAAe,QAAf,EAA2BD,MAAM,GAAK,SAAtC,EAAmD,CAAC,KAAKE,QAAL,EAAxD,CAAyE,CACvE,OACD,CACD,KAAKF,MAAL,CAAcA,MAAd,CACA,GAAI,MAAO,MAAKx9D,WAAZ,GAA4B,UAAhC,CAA4C,CAC1C,KAAK6B,KAAL,CAAa,KAAKm7D,YAAL,EAAb,CACA,KAAKh9D,WAAL,CAAiBw9D,MAAjB,CAAyB,IAAzB,CAA+B,KAAK37D,KAApC,EACD,CAHD,IAGO,CACL,KAAKy3D,OAAL,GACD,CACF,CAlDM,CAmDPoE,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,GAAI,KAAKD,KAAL,GAAe,QAAnB,CAA6B,CAC3B,GAAIE,CAAAA,YAAY,CAAG,KAAKA,YAAxB,CACA,GAAIA,YAAY,EAAI,CAACA,YAAY,CAACzuD,IAAb,CAAkB,KAAKwsD,UAAL,EAAmB,EAArC,CAArB,CAA+D,CAC7D,KAAKE,kBAAL,CAA0B,KAAKgC,iBAAL,EAA0B5tE,MAAM,CAACsgC,WAAW,CAAC,GAAD,CAAZ,CAAN,CAAyB,qBAAzB,CAApD,CACAtgC,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyB,KAAKmsD,eAAL,EAAzB,CAAiD,SAAjD,EACA,MAAO,MAAP,CACD,CACD,GAAIC,CAAAA,cAAc,CAAG,KAAKA,cAA1B,CACA,GAAI,MAAOA,CAAAA,cAAP,GAA0B,UAA9B,CAA0C,CACxC,GAAIC,CAAAA,cAAc,CAAGD,cAAc,CAAC,KAAKpC,UAAN,CAAnC,CACA,GAAIqC,cAAc,GAAK,KAAvB,CAA8B,CAC5B,KAAKnC,kBAAL,CAA0B,KAAKgC,iBAAL,EAA0B5tE,MAAM,CAACsgC,WAAW,CAAC,GAAD,CAAZ,CAAN,CAAyB,qBAAzB,CAApD,CACAtgC,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyB,KAAKmsD,eAAL,EAAzB,CAAiD,SAAjD,EACA,MAAO,MAAP,CACD,CACD,GAAI,MAAOE,CAAAA,cAAP,GAA0B,QAA9B,CAAwC,CACtC,KAAKnC,kBAAL,CAA0BmC,cAA1B,CACA/tE,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyB,KAAKmsD,eAAL,EAAzB,CAAiD,SAAjD,EACA,MAAO,MAAP,CACD,CACF,CACF,CACD,KAAKjC,kBAAL,CAA0B,EAA1B,CACA5rE,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4B,KAAKmsD,eAAL,EAA5B,CAAoD,SAApD,EACA,MAAO,KAAP,CACD,CA7EM,CA8EPG,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAIC,CAAAA,GAAG,CAAG,KAAK79D,GAAL,CAASsF,aAAT,CAAuB,kCAAvB,CAAV,CACA,GAAIhH,CAAAA,KAAK,CAAG,KAAK0B,GAAL,CAASsF,aAAT,CAAuB,8CAAvB,CAAZ,CACA,MAAOu4D,CAAAA,GAAG,EAAIv/D,KAAd,CACD,CAlFM,CAmFPm/D,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,GAAIK,CAAAA,SAAS,CAAG,KAAK39D,KAAL,CAAW0B,KAAX,CAAiB1B,KAAjC,CACA,MAAO29D,CAAAA,SAAS,CAACj8D,KAAV,EAAmBi8D,SAAS,CAAC14D,QAApC,CACD,CAtFM,CAuFP3G,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAKo8D,YAAL,CAAkB,OAAlB,EACD,CAzFM,CArDsE,CAiJ/EnnE,KAAK,CAAE,CACL4nE,UAAU,CAAE,CACVpgE,SAAS,CAAE,IADD,CAEVC,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBxH,GAAjB,CAAsB,CAC7B,GAAIoU,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAK9K,SAAL,CAAe,SAAU+H,CAAV,CAAa,CAC1B,GAAI+C,MAAM,CAACs1D,KAAP,GAAiB,QAAjB,EAA6B1pE,GAAG,GAAK,IAAzC,CAA+C,CAC7CoU,MAAM,CAACu1D,QAAP,GACD,CACF,CAJD,EAKD,CAVS,CADP,CAcL1/D,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBjK,GAAjB,CAAsB,CAC7B,GAAI4U,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI5U,GAAJ,CAAS,CACP,KAAKmpE,GAAL,GACA,GAAI,KAAKO,KAAL,GAAe,OAAf,EAA0B,KAAKA,KAAL,GAAe,SAA7C,CAAwD,CACtD,KAAKpgE,SAAL,CAAe,UAAY,CACzBsL,MAAM,CAACpI,KAAP,CAAammD,OAAb,CAAqBtmD,GAArB,CAAyB+B,KAAzB,GACD,CAFD,EAGD,CACD,KAAKg8D,gBAAL,CAAwBz9D,QAAQ,CAACiO,aAAjC,CACA8tD,UAAU,CAAG,GAAID,CAAAA,mBAAmB,CAACnhE,CAAxB,CAA0B,KAAK+E,GAA/B,CAAoC,KAAK+9D,gBAAzC,CAA2D,KAAKH,aAAL,EAA3D,CAAb,CACD,CAED;AACA,GAAI,KAAKP,KAAL,GAAe,QAAnB,CAA6B,OAC7B,GAAI1pE,GAAJ,CAAS,CACPkX,UAAU,CAAC,UAAY,CACrB,GAAItC,MAAM,CAACpI,KAAP,CAAa0B,KAAb,EAAsB0G,MAAM,CAACpI,KAAP,CAAa0B,KAAb,CAAmB7B,GAA7C,CAAkD,CAChDuI,MAAM,CAACk1D,eAAP,GAAyB17D,KAAzB,GACD,CACF,CAJS,CAIP,GAJO,CAAV,CAKD,CAND,IAMO,CACL,KAAKy5D,kBAAL,CAA0B,EAA1B,CACA5rE,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4B,KAAKmsD,eAAL,EAA5B,CAAoD,SAApD,EACD,CACF,CAxCI,CAjJwE,CA4L/E18D,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAI8W,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAK5a,SAAL,CAAe,UAAY,CACzB,GAAI4a,MAAM,CAAC4kD,iBAAX,CAA8B,CAC5BrlD,MAAM,CAACnX,gBAAP,CAAwB,YAAxB,CAAsC4X,MAAM,CAACpW,KAA7C,EACD,CACF,CAJD,EAKD,CApM8E,CAqM/E+G,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI,KAAKi0D,iBAAT,CAA4B,CAC1BrlD,MAAM,CAAC3W,mBAAP,CAA2B,YAA3B,CAAyC,KAAKgB,KAA9C,EACD,CACDoJ,UAAU,CAAC,UAAY,CACrBwxD,UAAU,CAACY,WAAX,GACD,CAFS,CAAV,CAGD,CA5M8E,CA6M/E9nE,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL2nE,GAAG,CAAE,CADA,CAELx+D,KAAK,CAAEvB,SAFF,CAGLg+D,OAAO,CAAE,EAHJ,CAIL5iE,IAAI,CAAE,EAJD,CAKLm0B,SAAS,CAAE,EALN,CAMLnuB,WAAW,CAAE,EANR,CAOL+8D,SAAS,CAAE,KAPN,CAQLI,UAAU,CAAE,IARP,CASLF,gBAAgB,CAAE,EATb,CAULD,SAAS,CAAE,MAVN,CAWLoC,YAAY,CAAE,IAXT,CAYLG,cAAc,CAAE,IAZX,CAaLF,iBAAiB,CAAE,EAbd,CAcL1B,iBAAiB,CAAE,IAdd,CAeLL,gBAAgB,CAAE,KAfb,CAgBL2B,MAAM,CAAE,EAhBH,CAiBLnB,iBAAiB,CAAE,EAjBd,CAkBLJ,gBAAgB,CAAE,EAlBb,CAmBLG,oBAAoB,CAAE,KAnBjB,CAoBLL,mBAAmB,CAAE,KApBhB,CAqBLe,kBAAkB,CAAE,EArBf,CAsBLsB,qBAAqB,CAAE,KAtBlB,CAuBLrB,iBAAiB,CAAE,EAvBd,CAwBLnB,kBAAkB,CAAE,IAxBf,CAyBLnvC,QAAQ,CAAE,IAzBL,CA0BL2uC,wBAAwB,CAAE,KA1BrB,CA2BL+C,gBAAgB,CAAE,IA3Bb,CA4BL/rC,eAAe,CAAE,KA5BZ,CA6BL8oC,yBAAyB,CAAE,KA7BtB,CAAP,CA+BD,CA7O8E,CAApD,CA+O7B;AACC,4BAA6B,GAAImD,CAAAA,qDAAqD,CAAIzB,4CAA7D,CAC9B;AAMA,yBAEA,GAAI0B,CAAAA,kBAAkB,CAAG5oE,kBAAkB,CACzC2oE,qDADyC,CAEzCrD,wCAFyC,CAGzCsB,iDAHyC,CAIzC,KAJyC,CAKzC,IALyC,CAMzC,IANyC,CAOzC,IAPyC,CAA3C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIiC,CAAAA,YAAJ,CAAmB,CAChCD,kBAAkB,CAACpoE,OAAnB,CAA2ByB,MAA3B,CAAoC,mCAApC,CACA,4BAA6B,GAAI6mE,CAAAA,oBAAoB,CAAIF,kBAAkB,CAACpvE,OAA/C,CAC7B;AACA,GAAIuvE,CAAAA,KAAK,CAAGpvE,mBAAmB,CAAC,EAAD,CAA/B,CAEA;AACA,GAAIqvE,CAAAA,WAAW,CAAG,MAAOruE,CAAAA,MAAP,GAAkB,UAAlB,EAAgC,SAAOA,MAAM,CAACm+B,QAAd,IAA2B,QAA3D,CAAsE,SAAUC,GAAV,CAAe,CAAE,gBAAcA,GAAd,EAAoB,CAA3G,CAA8G,SAAUA,GAAV,CAAe,CAAE,MAAOA,CAAAA,GAAG,EAAI,MAAOp+B,CAAAA,MAAP,GAAkB,UAAzB,EAAuCo+B,GAAG,CAACC,WAAJ,GAAoBr+B,MAA3D,EAAqEo+B,GAAG,GAAKp+B,MAAM,CAACe,SAApF,CAAgG,QAAhG,UAAkHq9B,GAAlH,CAAP,CAA+H,CAAhR,CAEA,GAAIkwC,CAAAA,aAAa,CAAG,CAClBjgE,KAAK,CAAE,IADW,CAElBy8D,OAAO,CAAE,EAFS,CAGlB5iE,IAAI,CAAE,EAHY,CAIlBm0B,SAAS,CAAE,EAJO,CAKlB4uC,SAAS,CAAE,KALO,CAMlB18D,SAAS,CAAE,IANO,CAOlBggE,SAAS,CAAE,IAPO,CAQlBj/D,UAAU,CAAE,IARM,CASlBC,iBAAiB,CAAE,IATD,CAUlBC,kBAAkB,CAAE,IAVF,CAWlBg9D,iBAAiB,CAAE,IAXD,CAYlBnB,UAAU,CAAE,IAZM,CAalBF,gBAAgB,CAAE,EAbA,CAclBD,SAAS,CAAE,MAdO,CAelBoC,YAAY,CAAE,IAfI,CAgBlBG,cAAc,CAAE,IAhBE,CAiBlBF,iBAAiB,CAAE,EAjBD,CAkBlB1B,iBAAiB,CAAE,IAlBD,CAmBlBL,gBAAgB,CAAE,KAnBA,CAoBlBgD,qBAAqB,CAAE,OApBL,CAqBlBC,sBAAsB,CAAE,KArBN,CAsBlBC,qBAAqB,CAAE,KAtBL,CAuBlB1C,iBAAiB,CAAE,EAvBD,CAwBlBJ,gBAAgB,CAAE,EAxBA,CAyBlBa,kBAAkB,CAAE,EAzBF,CA0BlBC,iBAAiB,CAAE,EA1BD,CA2BlBx+D,WAAW,CAAE,EA3BK,CA4BlByB,WAAW,CAAE,IA5BK,CA6BlBo7D,wBAAwB,CAAE,KA7BR,CA8BlB98D,MAAM,CAAE,KA9BU,CA+BlB09D,WAAW,CAAE,KA/BK,CAgClBd,yBAAyB,CAAE,KAhCT,CAApB,CAwCA,GAAI8D,CAAAA,qBAAqB,CAAG7kC,oBAAoB,CAAC9+B,CAArB,CAAuB6nC,MAAvB,CAA8Bs7B,oBAA9B,CAA5B,CAEA,GAAIS,CAAAA,UAAU,CAAG,IAAK,EAAtB,CACIC,aAAa,CAAG,IAAK,EADzB,CAEA,GAAIC,CAAAA,QAAQ,CAAG,EAAf,CAEA,GAAIC,CAAAA,eAAe,CAAG,QAASA,CAAAA,eAAT,CAAyB5B,MAAzB,CAAiC,CACrD,GAAIyB,UAAJ,CAAgB,CACd,GAAIxyC,CAAAA,QAAQ,CAAGwyC,UAAU,CAACxyC,QAA1B,CACA,GAAI,MAAOA,CAAAA,QAAP,GAAoB,UAAxB,CAAoC,CAClC,GAAIyyC,aAAa,CAAC5D,SAAlB,CAA6B,CAC3B7uC,QAAQ,CAACyyC,aAAa,CAACxD,UAAf,CAA2B8B,MAA3B,CAAR,CACD,CAFD,IAEO,CACL/wC,QAAQ,CAAC+wC,MAAD,CAAR,CACD,CACF,CACD,GAAIyB,UAAU,CAACI,OAAf,CAAwB,CACtB,GAAI7B,MAAM,GAAK,SAAf,CAA0B,CACxB,GAAI0B,aAAa,CAAC5D,SAAlB,CAA6B,CAC3B2D,UAAU,CAACI,OAAX,CAAmB,CAAE9uE,KAAK,CAAE2uE,aAAa,CAACxD,UAAvB,CAAmC8B,MAAM,CAAEA,MAA3C,CAAnB,EACD,CAFD,IAEO,CACLyB,UAAU,CAACI,OAAX,CAAmB7B,MAAnB,EACD,CACF,CAND,IAMO,IAAIyB,UAAU,CAACK,MAAX,GAAsB9B,MAAM,GAAK,QAAX,EAAuBA,MAAM,GAAK,OAAxD,CAAJ,CAAsE,CAC3EyB,UAAU,CAACK,MAAX,CAAkB9B,MAAlB,EACD,CACF,CACF,CACF,CAtBD,CAwBA,GAAI+B,CAAAA,YAAY,CAAG,QAASA,CAAAA,YAAT,EAAwB,CACzCL,aAAa,CAAG,GAAIF,CAAAA,qBAAJ,CAA0B,CACxCluD,EAAE,CAAEpQ,QAAQ,CAACsR,aAAT,CAAuB,KAAvB,CADoC,CAA1B,CAAhB,CAIAktD,aAAa,CAACzyC,QAAd,CAAyB2yC,eAAzB,CACD,CAND,CAQA,GAAII,CAAAA,gBAAgB,CAAG,QAASC,CAAAA,WAAT,EAAuB,CAC5C,GAAI,CAACP,aAAL,CAAoB,CAClBK,YAAY,GACb,CACDL,aAAa,CAAC1B,MAAd,CAAuB,EAAvB,CAEA,GAAI,CAAC0B,aAAa,CAAClhE,OAAf,EAA0BkhE,aAAa,CAACQ,UAA5C,CAAwD,CACtD,GAAIP,QAAQ,CAAC13D,MAAT,CAAkB,CAAtB,CAAyB,CACvBw3D,UAAU,CAAGE,QAAQ,CAACQ,KAAT,EAAb,CAEA,GAAIzpE,CAAAA,OAAO,CAAG+oE,UAAU,CAAC/oE,OAAzB,CACA,IAAK,GAAI0vC,CAAAA,IAAT,GAAiB1vC,CAAAA,OAAjB,CAA0B,CACxB,GAAIA,OAAO,CAAC7E,cAAR,CAAuBu0C,IAAvB,CAAJ,CAAkC,CAChCs5B,aAAa,CAACt5B,IAAD,CAAb,CAAsB1vC,OAAO,CAAC0vC,IAAD,CAA7B,CACD,CACF,CACD,GAAI1vC,OAAO,CAACu2B,QAAR,GAAqBtvB,SAAzB,CAAoC,CAClC+hE,aAAa,CAACzyC,QAAd,CAAyB2yC,eAAzB,CACD,CAED,GAAIQ,CAAAA,KAAK,CAAGV,aAAa,CAACzyC,QAA1B,CACAyyC,aAAa,CAACzyC,QAAd,CAAyB,SAAU+wC,MAAV,CAAkBtxD,QAAlB,CAA4B,CACnD0zD,KAAK,CAACpC,MAAD,CAAStxD,QAAT,CAAL,CACAuzD,WAAW,GACZ,CAHD,CAIA,GAAIzvE,MAAM,CAACyuE,KAAK,CAAC,SAAD,CAAN,CAAN,CAAyBS,aAAa,CAAC/D,OAAvC,CAAJ,CAAqD,CACnD+D,aAAa,CAAC9kE,MAAd,CAAqB5B,OAArB,CAA+B,CAAC0mE,aAAa,CAAC/D,OAAf,CAA/B,CACA+D,aAAa,CAAC/D,OAAd,CAAwB,IAAxB,CACD,CAHD,IAGO,CACL,MAAO+D,CAAAA,aAAa,CAAC9kE,MAAd,CAAqB5B,OAA5B,CACD,CACD,CAAC,OAAD,CAAU,WAAV,CAAuB,mBAAvB,CAA4C,oBAA5C,CAAkE,mBAAlE,EAAuFqC,OAAvF,CAA+F,SAAU+qC,IAAV,CAAgB,CAC7G,GAAIs5B,aAAa,CAACt5B,IAAD,CAAb,GAAwBzoC,SAA5B,CAAuC,CACrC+hE,aAAa,CAACt5B,IAAD,CAAb,CAAsB,IAAtB,CACD,CACF,CAJD,EAKAllC,QAAQ,CAACC,IAAT,CAAcC,WAAd,CAA0Bs+D,aAAa,CAAC9+D,GAAxC,EAEA+5B,oBAAoB,CAAC9+B,CAArB,CAAuB6sC,QAAvB,CAAgC,UAAY,CAC1Cg3B,aAAa,CAAClhE,OAAd,CAAwB,IAAxB,CACD,CAFD,EAGD,CACF,CACF,CA3CD,CA6CA,GAAI6hE,CAAAA,eAAe,CAAG,QAASC,CAAAA,UAAT,CAAoB5pE,OAApB,CAA6Bu2B,QAA7B,CAAuC,CAC3D,GAAI0N,oBAAoB,CAAC9+B,CAArB,CAAuBjK,SAAvB,CAAiC4tB,SAArC,CAAgD,OAChD,GAAI,MAAO9oB,CAAAA,OAAP,GAAmB,QAAnB,EAA+BlG,MAAM,CAACyuE,KAAK,CAAC,SAAD,CAAN,CAAN,CAAyBvoE,OAAzB,CAAnC,CAAsE,CACpEA,OAAO,CAAG,CACRilE,OAAO,CAAEjlE,OADD,CAAV,CAGA,GAAI,MAAOoZ,CAAAA,SAAS,CAAC,CAAD,CAAhB,GAAwB,QAA5B,CAAsC,CACpCpZ,OAAO,CAACwI,KAAR,CAAgB4Q,SAAS,CAAC,CAAD,CAAzB,CACD,CACF,CAPD,IAOO,IAAIpZ,OAAO,CAACu2B,QAAR,EAAoB,CAACA,QAAzB,CAAmC,CACxCA,QAAQ,CAAGv2B,OAAO,CAACu2B,QAAnB,CACD,CAED,GAAI,MAAOszC,CAAAA,OAAP,GAAmB,WAAvB,CAAoC,CAClC,MAAO,IAAIA,CAAAA,OAAJ,CAAY,SAAUV,OAAV,CAAmBC,MAAnB,CAA2B,CAC5C;AACAH,QAAQ,CAACnqE,IAAT,CAAc,CACZkB,OAAO,CAAEsnB,aAAa,GAAG,EAAH,CAAOmhD,aAAP,CAAsBmB,UAAU,CAACtjC,QAAjC,CAA2CtmC,OAA3C,CADV,CAEZu2B,QAAQ,CAAEA,QAFE,CAGZ4yC,OAAO,CAAEA,OAHG,CAIZC,MAAM,CAAEA,MAJI,CAAd,EAOAE,gBAAgB,GACjB,CAVM,CAAP,CAWD,CAZD,IAYO,CACLL,QAAQ,CAACnqE,IAAT,CAAc,CACZkB,OAAO,CAAEsnB,aAAa,GAAG,EAAH,CAAOmhD,aAAP,CAAsBmB,UAAU,CAACtjC,QAAjC,CAA2CtmC,OAA3C,CADV,CAEZu2B,QAAQ,CAAEA,QAFE,CAAd,EAKA+yC,gBAAgB,GACjB,CACF,CAjCD,CAmCAK,eAAe,CAACG,WAAhB,CAA8B,SAAUxjC,QAAV,CAAoB,CAChDqjC,eAAe,CAACrjC,QAAhB,CAA2BA,QAA3B,CACD,CAFD,CAIAqjC,eAAe,CAACI,KAAhB,CAAwB,SAAU9E,OAAV,CAAmBz8D,KAAnB,CAA0BxI,OAA1B,CAAmC,CACzD,GAAI,CAAC,MAAOwI,CAAAA,KAAP,GAAiB,WAAjB,CAA+B,WAA/B,CAA6CggE,WAAW,CAAChgE,KAAD,CAAzD,IAAsE,QAA1E,CAAoF,CAClFxI,OAAO,CAAGwI,KAAV,CACAA,KAAK,CAAG,EAAR,CACD,CAHD,IAGO,IAAIA,KAAK,GAAKvB,SAAd,CAAyB,CAC9BuB,KAAK,CAAG,EAAR,CACD,CACD,MAAOmhE,CAAAA,eAAe,CAACriD,aAAa,GAAG,CACrC9e,KAAK,CAAEA,KAD8B,CAErCy8D,OAAO,CAAEA,OAF4B,CAGrCsC,KAAK,CAAE,OAH8B,CAIrC59D,kBAAkB,CAAE,KAJiB,CAKrCD,iBAAiB,CAAE,KALkB,CAAH,CAMjC1J,OANiC,CAAd,CAAtB,CAOD,CAdD,CAgBA2pE,eAAe,CAACnZ,OAAhB,CAA0B,SAAUyU,OAAV,CAAmBz8D,KAAnB,CAA0BxI,OAA1B,CAAmC,CAC3D,GAAI,CAAC,MAAOwI,CAAAA,KAAP,GAAiB,WAAjB,CAA+B,WAA/B,CAA6CggE,WAAW,CAAChgE,KAAD,CAAzD,IAAsE,QAA1E,CAAoF,CAClFxI,OAAO,CAAGwI,KAAV,CACAA,KAAK,CAAG,EAAR,CACD,CAHD,IAGO,IAAIA,KAAK,GAAKvB,SAAd,CAAyB,CAC9BuB,KAAK,CAAG,EAAR,CACD,CACD,MAAOmhE,CAAAA,eAAe,CAACriD,aAAa,GAAG,CACrC9e,KAAK,CAAEA,KAD8B,CAErCy8D,OAAO,CAAEA,OAF4B,CAGrCsC,KAAK,CAAE,SAH8B,CAIrC5B,gBAAgB,CAAE,IAJmB,CAAH,CAKjC3lE,OALiC,CAAd,CAAtB,CAMD,CAbD,CAeA2pE,eAAe,CAACK,MAAhB,CAAyB,SAAU/E,OAAV,CAAmBz8D,KAAnB,CAA0BxI,OAA1B,CAAmC,CAC1D,GAAI,CAAC,MAAOwI,CAAAA,KAAP,GAAiB,WAAjB,CAA+B,WAA/B,CAA6CggE,WAAW,CAAChgE,KAAD,CAAzD,IAAsE,QAA1E,CAAoF,CAClFxI,OAAO,CAAGwI,KAAV,CACAA,KAAK,CAAG,EAAR,CACD,CAHD,IAGO,IAAIA,KAAK,GAAKvB,SAAd,CAAyB,CAC9BuB,KAAK,CAAG,EAAR,CACD,CACD,MAAOmhE,CAAAA,eAAe,CAACriD,aAAa,GAAG,CACrC9e,KAAK,CAAEA,KAD8B,CAErCy8D,OAAO,CAAEA,OAF4B,CAGrCU,gBAAgB,CAAE,IAHmB,CAIrCP,SAAS,CAAE,IAJ0B,CAKrCmC,KAAK,CAAE,QAL8B,CAAH,CAMjCvnE,OANiC,CAAd,CAAtB,CAOD,CAdD,CAgBA2pE,eAAe,CAACh+D,KAAhB,CAAwB,UAAY,CAClCq9D,aAAa,CAAC5F,OAAd,GACA4F,aAAa,CAAClhE,OAAd,CAAwB,KAAxB,CACAmhE,QAAQ,CAAG,EAAX,CACAF,UAAU,CAAG,IAAb,CACD,CALD,CAOA,4BAA6B,GAAIkB,CAAAA,6BAA6B,CAAIN,eAArC,CAE7B;AAEA,4BAA6B,GAAIO,CAAAA,WAAW,CAAID,6BAAnB,CAC7B;AACA,GAAIE,CAAAA,8CAA8C,CAAG,QAAjDA,CAAAA,8CAAiD,EAAW,CAC9D,GAAI1uE,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,eADf,CAEE+H,KAAK,CAAE,CAAE,aAAc,YAAhB,CAA8B0E,IAAI,CAAE,YAApC,CAFT,CAFO,CAMP,CAAC9M,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAD,CANO,CAOP,CAPO,CAAT,CASD,CAbD,CAcA,GAAI2hE,CAAAA,uDAAuD,CAAG,EAA9D,CACAD,8CAA8C,CAAC7sE,aAA/C,CAA+D,IAA/D,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAI+sE,CAAAA,kCAAkC,CAAI,CACrE1wE,IAAI,CAAE,cAD+D,CAGrE6D,KAAK,CAAE,CACLusD,SAAS,CAAE,CACT1nD,IAAI,CAAEU,MADG,CAETT,OAAO,CAAE,GAFA,CADN,CAKLgoE,cAAc,CAAE,CACdjoE,IAAI,CAAEU,MADQ,CAEdT,OAAO,CAAE,EAFK,CALX,CAH8D,CAcrEkR,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,MAAO,CACL+2D,YAAY,CAAE,IADT,CAAP,CAGD,CAlBoE,CAmBrEt/D,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIgS,CAAAA,KAAK,CAAG,KAAK/S,GAAL,CAASkI,gBAAT,CAA0B,sBAA1B,CAAZ,CACA,GAAI6K,KAAK,CAAC1L,MAAV,CAAkB,CAChB0L,KAAK,CAACA,KAAK,CAAC1L,MAAN,CAAe,CAAhB,CAAL,CAAwB9B,YAAxB,CAAqC,cAArC,CAAqD,MAArD,EACD,CACF,CAxBoE,CAA1C,CA0B7B;AACC,4BAA6B,GAAI+6D,CAAAA,sCAAsC,CAAIH,kCAA9C,CAC9B;AAMA,yBAEA,GAAII,CAAAA,oBAAoB,CAAGjrE,kBAAkB,CAC3CgrE,sCAD2C,CAE3CL,8CAF2C,CAG3CC,uDAH2C,CAI3C,KAJ2C,CAK3C,IAL2C,CAM3C,IAN2C,CAO3C,IAP2C,CAA7C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIM,CAAAA,cAAJ,CAAqB,CAClCD,oBAAoB,CAACzqE,OAArB,CAA6ByB,MAA7B,CAAsC,wCAAtC,CACA,4BAA6B,GAAIkpE,CAAAA,UAAU,CAAIF,oBAAoB,CAACzxE,OAAvC,CAC7B;AAGA,0BACA2xE,UAAU,CAACrjE,OAAX,CAAqB,SAAUC,GAAV,CAAe,CAClCA,GAAG,CAAChG,SAAJ,CAAcopE,UAAU,CAAChxE,IAAzB,CAA+BgxE,UAA/B,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,mBAAmB,CAAID,UAA3B,CAC7B;AACA,GAAIE,CAAAA,mDAAmD,CAAG,QAAtDA,CAAAA,mDAAsD,EAAW,CACnE,GAAIpvE,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CAAC,MAAD,CAAS,CAAEE,WAAW,CAAE,qBAAf,CAAT,CAAiD,CACxDF,EAAE,CACA,MADA,CAEA,CACEsM,GAAG,CAAE,MADP,CAEE/L,KAAK,CAAE,CAAC,sBAAD,CAAyBV,GAAG,CAACqvE,EAAJ,CAAS,SAAT,CAAqB,EAA9C,CAFT,CAGEjnE,KAAK,CAAE,CAAE0E,IAAI,CAAE,MAAR,CAHT,CAFA,CAOA,CAAC9M,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAD,CAPA,CAQA,CARA,CADsD,CAWxDhN,GAAG,CAAC6uE,cAAJ,CACI1uE,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,0BADP,CAENK,KAAK,CAAEV,GAAG,CAAC6uE,cAFL,CAAN,CADN,CAKI1uE,EAAE,CACA,MADA,CAEA,CACEE,WAAW,CAAE,0BADf,CAEE+H,KAAK,CAAE,CAAE0E,IAAI,CAAE,cAAR,CAFT,CAFA,CAMA,CAAC9M,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACsuD,SAAX,CAAP,CAAD,CANA,CAhBkD,CAAjD,CAAT,CAyBD,CA7BD,CA8BA,GAAIghB,CAAAA,4DAA4D,CAAG,EAAnE,CACAF,mDAAmD,CAACvtE,aAApD,CAAoE,IAApE,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAI0tE,CAAAA,uCAAuC,CAAI,CAC1ErxE,IAAI,CAAE,kBADoE,CAE1E6D,KAAK,CAAE,CACLstE,EAAE,CAAE,EADC,CAELl2D,OAAO,CAAEjX,OAFJ,CAFmE,CAM1E0B,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL0qD,SAAS,CAAE,EADN,CAELugB,cAAc,CAAE,EAFX,CAAP,CAID,CAXyE,CAc1ExzD,MAAM,CAAE,CAAC,cAAD,CAdkE,CAgB1E7L,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIxF,CAAAA,KAAK,CAAG,IAAZ,CAEA,KAAKskD,SAAL,CAAiB,KAAKwgB,YAAL,CAAkBxgB,SAAnC,CACA,KAAKugB,cAAL,CAAsB,KAAKC,YAAL,CAAkBD,cAAxC,CACA,GAAIW,CAAAA,IAAI,CAAG,KAAK5gE,KAAL,CAAW4gE,IAAtB,CACAA,IAAI,CAACx7D,YAAL,CAAkB,MAAlB,CAA0B,MAA1B,EACAw7D,IAAI,CAAC9gE,gBAAL,CAAsB,OAAtB,CAA+B,SAAU+E,CAAV,CAAa,CAC1C,GAAI47D,CAAAA,EAAE,CAAGrlE,KAAK,CAACqlE,EAAf,CACI3rD,OAAO,CAAG1Z,KAAK,CAAC0Z,OADpB,CAGA,GAAI,CAAC2rD,EAAD,EAAO,CAAC3rD,OAAZ,CAAqB,OACrB1Z,KAAK,CAACmP,OAAN,CAAgBuK,OAAO,CAACvK,OAAR,CAAgBk2D,EAAhB,CAAhB,CAAsC3rD,OAAO,CAACrgB,IAAR,CAAagsE,EAAb,CAAtC,CACD,CAND,EAOD,CA9ByE,CAA/C,CAgC7B;AACC,4BAA6B,GAAII,CAAAA,2CAA2C,CAAIF,uCAAnD,CAC9B;AAMA,yBAEA,GAAIG,CAAAA,yBAAyB,CAAG3rE,kBAAkB,CAChD0rE,2CADgD,CAEhDL,mDAFgD,CAGhDE,4DAHgD,CAIhD,KAJgD,CAKhD,IALgD,CAMhD,IANgD,CAOhD,IAPgD,CAAlD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIK,CAAAA,mBAAJ,CAA0B,CACvCD,yBAAyB,CAACnrE,OAA1B,CAAkCyB,MAAlC,CAA2C,6CAA3C,CACA,4BAA6B,GAAI4pE,CAAAA,eAAe,CAAIF,yBAAyB,CAACnyE,OAAjD,CAC7B;AAGA,0BACAqyE,eAAe,CAAC/jE,OAAhB,CAA0B,SAAUC,GAAV,CAAe,CACvCA,GAAG,CAAChG,SAAJ,CAAc8pE,eAAe,CAAC1xE,IAA9B,CAAoC0xE,eAApC,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,wBAAwB,CAAID,eAAhC,CAC7B;AACA,GAAIE,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAI9vE,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,MADO,CAEP,CACEE,WAAW,CAAE,SADf,CAEEK,KAAK,CAAE,CACLV,GAAG,CAAC+vE,aAAJ,CAAoB,kBAAoB/vE,GAAG,CAAC+vE,aAA5C,CAA4D,EADvD,CAEL,CAAE,kBAAmB/vE,GAAG,CAACgwE,MAAzB,CAFK,CAFT,CAFO,CASP,CAAChwE,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAD,CATO,CAUP,CAVO,CAAT,CAYD,CAhBD,CAiBA,GAAIijE,CAAAA,iDAAiD,CAAG,EAAxD,CACAH,wCAAwC,CAACjuE,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA,4BAA6B,GAAIquE,CAAAA,4BAA4B,CAAI,CAC/DhyE,IAAI,CAAE,QADyD,CAG/DmV,aAAa,CAAE,QAHgD,CAK/D0E,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,MAAO,CACLiU,MAAM,CAAE,IADH,CAAP,CAGD,CAT8D,CAY/DjqB,KAAK,CAAE,CACL4vB,KAAK,CAAEtzB,MADF,CAEL8xE,KAAK,CAAE9xE,MAFF,CAGL0xE,aAAa,CAAEzoE,MAHV,CAIL8oE,UAAU,CAAE9oE,MAJP,CAKL+oE,WAAW,CAAE,CACXzpE,IAAI,CAAEU,MADK,CAEXT,OAAO,CAAE,EAFE,CALR,CASLmpE,MAAM,CAAE9tE,OATH,CAULouE,aAAa,CAAEpuE,OAVV,CAWL2qB,UAAU,CAAE3qB,OAXP,CAYLquE,WAAW,CAAE,CACX3pE,IAAI,CAAE1E,OADK,CAEX2E,OAAO,CAAE,IAFE,CAZR,CAgBLoD,IAAI,CAAE3C,MAhBD,CAiBLzG,QAAQ,CAAEqB,OAjBL,CAkBLsuE,oBAAoB,CAAE,CACpB5pE,IAAI,CAAE1E,OADc,CAEpB2E,OAAO,CAAE,IAFW,CAlBjB,CAsBL4pE,oBAAoB,CAAE,CACpB7pE,IAAI,CAAE1E,OADc,CAEpB2E,OAAO,CAAE,KAFW,CAtBjB,CAZwD,CAuC/D1E,KAAK,CAAE,CACLguE,KAAK,CAAE,QAASA,CAAAA,KAAT,EAAiB,CACtB;AACA,KAAKO,MAAL,CAAYxnE,OAAZ,CAAoB,SAAUynE,KAAV,CAAiB,CACnCA,KAAK,CAACC,oBAAN,GACAD,KAAK,CAACE,iBAAN,GACD,CAHD,EAKA,GAAI,KAAKL,oBAAT,CAA+B,CAC7B,KAAKzE,QAAL,CAAc,UAAY,CAAE,CAA5B,EACD,CACF,CAXI,CAvCwD,CAoD/D9oE,QAAQ,CAAE,CACR6tE,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,GAAI,CAAC,KAAKC,sBAAL,CAA4Bj7D,MAAjC,CAAyC,MAAO,EAAP,CACzC,GAAI5K,CAAAA,GAAG,CAAG1H,IAAI,CAAC0H,GAAL,CAAS4S,KAAT,CAAeta,IAAf,CAAqB,KAAKutE,sBAA1B,CAAV,CACA,MAAO7lE,CAAAA,GAAG,CAAGA,GAAG,CAAG,IAAT,CAAgB,EAA1B,CACD,CALO,CApDqD,CA2D/DtH,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL8sE,MAAM,CAAE,EADH,CAELK,sBAAsB,CAAE,EAAG;AAFtB,CAAP,CAID,CAhE8D,CAiE/D98D,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIjK,CAAAA,KAAK,CAAG,IAAZ,CAEA,KAAKkK,GAAL,CAAS,kBAAT,CAA6B,SAAUy8D,KAAV,CAAiB,CAC5C,GAAIA,KAAJ,CAAW,CACT3mE,KAAK,CAAC0mE,MAAN,CAAartE,IAAb,CAAkBstE,KAAlB,EACD,CACF,CAJD,EAKA,0BACA,KAAKz8D,GAAL,CAAS,qBAAT,CAAgC,SAAUy8D,KAAV,CAAiB,CAC/C,GAAIA,KAAK,CAAC18B,IAAV,CAAgB,CACdjqC,KAAK,CAAC0mE,MAAN,CAAazuD,MAAb,CAAoBjY,KAAK,CAAC0mE,MAAN,CAAa7tE,OAAb,CAAqB8tE,KAArB,CAApB,CAAiD,CAAjD,EACD,CACF,CAJD,EAKD,CA/E8D,CAiF/DtuE,OAAO,CAAE,CACP2uE,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,GAAI,CAAC,KAAKr/C,KAAV,CAAiB,CACfvb,OAAO,CAACua,IAAR,CAAa,gEAAb,EACA,OACD,CACD,KAAK+/C,MAAL,CAAYxnE,OAAZ,CAAoB,SAAUynE,KAAV,CAAiB,CACnCA,KAAK,CAACM,UAAN,GACD,CAFD,EAGD,CATM,CAUPC,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAInvE,CAAAA,KAAK,CAAG4b,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,EAAhF,CAEA,GAAI+yD,CAAAA,MAAM,CAAG3uE,KAAK,CAAC+T,MAAN,CAAe,MAAO/T,CAAAA,KAAP,GAAiB,QAAjB,CAA4B,KAAK2uE,MAAL,CAAY9wD,MAAZ,CAAmB,SAAU+wD,KAAV,CAAiB,CAC1F,MAAO5uE,CAAAA,KAAK,GAAK4uE,KAAK,CAAC18B,IAAvB,CACD,CAFuD,CAA5B,CAEvB,KAAKy8B,MAAL,CAAY9wD,MAAZ,CAAmB,SAAU+wD,KAAV,CAAiB,CACvC,MAAO5uE,CAAAA,KAAK,CAACc,OAAN,CAAc8tE,KAAK,CAAC18B,IAApB,EAA4B,CAAC,CAApC,CACD,CAFI,CAFQ,CAIR,KAAKy8B,MAJV,CAKAA,MAAM,CAACxnE,OAAP,CAAe,SAAUynE,KAAV,CAAiB,CAC9BA,KAAK,CAACO,aAAN,GACD,CAFD,EAGD,CArBM,CAsBPnF,QAAQ,CAAE,QAASA,CAAAA,QAAT,CAAkBjxC,QAAlB,CAA4B,CACpC,GAAIrvB,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI,CAAC,KAAKkmB,KAAV,CAAiB,CACfvb,OAAO,CAACua,IAAR,CAAa,6DAAb,EACA,OACD,CAED,GAAIwgD,CAAAA,OAAO,CAAG,IAAK,EAAnB,CACA;AACA,GAAI,MAAOr2C,CAAAA,QAAP,GAAoB,UAApB,EAAkCjV,MAAM,CAACuoD,OAA7C,CAAsD,CACpD+C,OAAO,CAAG,GAAItrD,CAAAA,MAAM,CAACuoD,OAAX,CAAmB,SAAUV,OAAV,CAAmBC,MAAnB,CAA2B,CACtD7yC,QAAQ,CAAG,QAASA,CAAAA,QAAT,CAAkBs2C,KAAlB,CAAyB,CAClCA,KAAK,CAAG1D,OAAO,CAAC0D,KAAD,CAAV,CAAoBzD,MAAM,CAACyD,KAAD,CAA/B,CACD,CAFD,CAGD,CAJS,CAAV,CAKD,CAED,GAAIA,CAAAA,KAAK,CAAG,IAAZ,CACA,GAAIvU,CAAAA,KAAK,CAAG,CAAZ,CACA;AACA,GAAI,KAAK6T,MAAL,CAAY56D,MAAZ,GAAuB,CAAvB,EAA4BglB,QAAhC,CAA0C,CACxCA,QAAQ,CAAC,IAAD,CAAR,CACD,CACD,GAAIu2C,CAAAA,aAAa,CAAG,EAApB,CACA,KAAKX,MAAL,CAAYxnE,OAAZ,CAAoB,SAAUynE,KAAV,CAAiB,CACnCA,KAAK,CAAC5E,QAAN,CAAe,EAAf,CAAmB,SAAUvC,OAAV,CAAmBmH,KAAnB,CAA0B,CAC3C,GAAInH,OAAJ,CAAa,CACX4H,KAAK,CAAG,KAAR,CACD,CACDC,aAAa,CAAGxlD,aAAa,GAAG,EAAH,CAAOwlD,aAAP,CAAsBV,KAAtB,CAA7B,CACA,GAAI,MAAO71C,CAAAA,QAAP,GAAoB,UAApB,EAAkC,EAAE+hC,KAAF,GAAYpxD,MAAM,CAACilE,MAAP,CAAc56D,MAAhE,CAAwE,CACtEglB,QAAQ,CAACs2C,KAAD,CAAQC,aAAR,CAAR,CACD,CACF,CARD,EASD,CAVD,EAYA,GAAIF,OAAJ,CAAa,CACX,MAAOA,CAAAA,OAAP,CACD,CACF,CA9DM,CA+DPG,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBvvE,KAAvB,CAA8B+pC,EAA9B,CAAkC,CAC/C/pC,KAAK,CAAG,GAAG8D,MAAH,CAAU9D,KAAV,CAAR,CACA,GAAI2uE,CAAAA,MAAM,CAAG,KAAKA,MAAL,CAAY9wD,MAAZ,CAAmB,SAAU+wD,KAAV,CAAiB,CAC/C,MAAO5uE,CAAAA,KAAK,CAACc,OAAN,CAAc8tE,KAAK,CAAC18B,IAApB,IAA8B,CAAC,CAAtC,CACD,CAFY,CAAb,CAGA,GAAI,CAACy8B,MAAM,CAAC56D,MAAZ,CAAoB,CAClBM,OAAO,CAACua,IAAR,CAAa,0CAAb,EACA,OACD,CAED+/C,MAAM,CAACxnE,OAAP,CAAe,SAAUynE,KAAV,CAAiB,CAC9BA,KAAK,CAAC5E,QAAN,CAAe,EAAf,CAAmBjgC,EAAnB,EACD,CAFD,EAGD,CA5EM,CA6EPylC,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,CAA4BpjE,KAA5B,CAAmC,CACrD,GAAI2D,CAAAA,KAAK,CAAG,KAAKi/D,sBAAL,CAA4BluE,OAA5B,CAAoCsL,KAApC,CAAZ,CACA;AACA,GAAI2D,KAAK,GAAK,CAAC,CAAf,CAAkB,CAChB,KAAM,IAAI04B,CAAAA,KAAJ,CAAU,8BAAV,CAA0Cr8B,KAA1C,CAAN,CACD,CACD,MAAO2D,CAAAA,KAAP,CACD,CApFM,CAqFP0/D,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,CAA4BpvE,GAA5B,CAAiC0H,MAAjC,CAAyC,CAC3D,GAAI1H,GAAG,EAAI0H,MAAX,CAAmB,CACjB,GAAIgI,CAAAA,KAAK,CAAG,KAAKy/D,kBAAL,CAAwBznE,MAAxB,CAAZ,CACA,KAAKinE,sBAAL,CAA4B9uD,MAA5B,CAAmCnQ,KAAnC,CAA0C,CAA1C,CAA6C1P,GAA7C,EACD,CAHD,IAGO,IAAIA,GAAJ,CAAS,CACd,KAAK2uE,sBAAL,CAA4B1tE,IAA5B,CAAiCjB,GAAjC,EACD,CACF,CA5FM,CA6FPqvE,oBAAoB,CAAE,QAASA,CAAAA,oBAAT,CAA8BrvE,GAA9B,CAAmC,CACvD,GAAI0P,CAAAA,KAAK,CAAG,KAAKy/D,kBAAL,CAAwBnvE,GAAxB,CAAZ,CACA,KAAK2uE,sBAAL,CAA4B9uD,MAA5B,CAAmCnQ,KAAnC,CAA0C,CAA1C,EACD,CAhGM,CAjFsD,CAApC,CAoL7B;AACC,4BAA6B,GAAI4/D,CAAAA,gCAAgC,CAAIxB,4BAAxC,CAC9B;AAMA,yBAEA,GAAIyB,CAAAA,cAAc,CAAG5tE,kBAAkB,CACrC2tE,gCADqC,CAErC5B,wCAFqC,CAGrCG,iDAHqC,CAIrC,KAJqC,CAKrC,IALqC,CAMrC,IANqC,CAOrC,IAPqC,CAAvC,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAI2B,CAAAA,QAAJ,CAAe,CAC5BD,cAAc,CAACptE,OAAf,CAAuByB,MAAvB,CAAgC,4BAAhC,CACA,4BAA6B,GAAI6rE,CAAAA,QAAQ,CAAIF,cAAc,CAACp0E,OAA/B,CAC7B;AAGA,0BACAs0E,QAAQ,CAAChmE,OAAT,CAAmB,SAAUC,GAAV,CAAe,CAChCA,GAAG,CAAChG,SAAJ,CAAc+rE,QAAQ,CAAC3zE,IAAvB,CAA6B2zE,QAA7B,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,aAAa,CAAID,QAArB,CAC7B;AACA,GAAIE,CAAAA,6CAA6C,CAAG,QAAhDA,CAAAA,6CAAgD,EAAW,CAC7D,GAAI/xE,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,cADf,CAEEK,KAAK,CAAE,CACL,CACE,yBAA0BV,GAAG,CAACgsB,MAAJ,EAAchsB,GAAG,CAACgsB,MAAJ,CAAWa,UADrD,CAEE,WAAY7sB,GAAG,CAACoqB,aAAJ,GAAsB,OAFpC,CAGE,gBAAiBpqB,GAAG,CAACoqB,aAAJ,GAAsB,YAHzC,CAIE,aAAcpqB,GAAG,CAACoqB,aAAJ,GAAsB,SAJtC,CAKE,cAAepqB,GAAG,CAACgyE,UAAJ,EAAkBhyE,GAAG,CAACklB,QALvC,CAME,iBAAkBllB,GAAG,CAACgsB,MAAJ,EAAchsB,GAAG,CAACgsB,MAAJ,CAAWykD,oBAN7C,CADK,CASLzwE,GAAG,CAACiyE,SAAJ,CAAgB,iBAAmBjyE,GAAG,CAACiyE,SAAvC,CAAmD,EAT9C,CAFT,CAFO,CAgBP,CACE9xE,EAAE,CACA,YADA,CAEA,CACEiI,KAAK,CAAE,CACL,gBAAiBpI,GAAG,CAACkyE,UAAJ,EAAkBlyE,GAAG,CAACkyE,UAAJ,CAAe/jE,KAAf,GAAyB,MADvD,CAEL,aAAcnO,GAAG,CAACssB,IAAJ,CAAS8jD,UAAT,GAAwB,MAFjC,CADT,CAFA,CAQA,CACEpwE,GAAG,CAACmK,KAAJ,EAAanK,GAAG,CAACyI,MAAJ,CAAW0B,KAAxB,CACIhK,EAAE,CACA,OADA,CAEA,CACEE,WAAW,CAAE,qBADf,CAEEwM,KAAK,CAAE7M,GAAG,CAACkyE,UAFb,CAGE9pE,KAAK,CAAE,CAAE+pE,GAAG,CAAEnyE,GAAG,CAACoyE,QAAX,CAHT,CAFA,CAOA,CACEpyE,GAAG,CAACgN,EAAJ,CAAO,OAAP,CAAgB,CACdhN,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACmK,KAAJ,CAAYnK,GAAG,CAACssB,IAAJ,CAAS+jD,WAA5B,CAAP,CADc,CAAhB,CADF,CAPA,CAYA,CAZA,CADN,CAeIrwE,GAAG,CAACe,EAAJ,EAhBN,CARA,CADJ,CA4BEZ,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,uBAAf,CAAwCwM,KAAK,CAAE7M,GAAG,CAACqyE,YAAnD,CAFA,CAGA,CACEryE,GAAG,CAACgN,EAAJ,CAAO,SAAP,CADF,CAEE7M,EAAE,CACA,YADA,CAEA,CAAEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,gBAAR,CAAT,CAFA,CAGA,CACE8B,GAAG,CAACoqB,aAAJ,GAAsB,OAAtB,EACApqB,GAAG,CAACuwE,WADJ,EAEAvwE,GAAG,CAACssB,IAAJ,CAASikD,WAFT,CAGIvwE,GAAG,CAACgN,EAAJ,CACE,OADF,CAEE,CACE7M,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,qBADf,CAEEK,KAAK,CAAE,CACL,8BACE,MAAOV,CAAAA,GAAG,CAACswE,aAAX,GAA6B,SAA7B,CACItwE,GAAG,CAACswE,aADR,CAEKtwE,GAAG,CAACgsB,MAAJ,EAAchsB,GAAG,CAACgsB,MAAJ,CAAWskD,aAA1B,EACA,KALD,CAFT,CAFA,CAYA,CACEtwE,GAAG,CAACc,EAAJ,CACE,eACEd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACsyE,eAAX,CADF,CAEE,YAHJ,CADF,CAZA,CADJ,CAFF,CAwBE,CAAEj8D,KAAK,CAAErW,GAAG,CAACsyE,eAAb,CAxBF,CAHJ,CA6BItyE,GAAG,CAACe,EAAJ,EA9BN,CAHA,CAmCA,CAnCA,CAFJ,CAHA,CA2CA,CA3CA,CA5BJ,CAhBO,CA0FP,CA1FO,CAAT,CA4FD,CAhGD,CAiGA,GAAIwxE,CAAAA,sDAAsD,CAAG,EAA7D,CACAR,6CAA6C,CAAClwE,aAA9C,CAA8D,IAA9D,CAGA;AAEA;AACA,GAAI2wE,CAAAA,yBAAyB,CAAG90E,mBAAmB,CAAC,EAAD,CAAnD,CACA,GAAI+0E,CAAAA,gCAAgC,CAAG,aAAa/0E,mBAAmB,CAAC0B,CAApB,CAAsBozE,yBAAtB,CAApD,CAEA;AAGA,4BAA6B,GAAIE,CAAAA,kCAAkC,CAAI,CACrE3wE,KAAK,CAAE,CACL4wE,WAAW,CAAEzwE,OADR,CAEL0wE,SAAS,CAAE1wE,OAFN,CAD8D,CAMrEmZ,MAAM,CAAE,CAAC,QAAD,CAAW,YAAX,CAN6D,CAQrEpX,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,GAAIyB,CAAAA,CAAC,CAAGiY,SAAS,CAAC,CAAD,CAAjB,CAEA,GAAIwrD,CAAAA,KAAK,CAAG,KAAK1gE,MAAL,CAAY5B,OAAxB,CACA,GAAI,CAACsiE,KAAL,CAAY,MAAO,KAAP,CACZ,GAAI,KAAKwJ,WAAT,CAAsB,CACpB,GAAI7B,CAAAA,cAAc,CAAG,KAAK9kD,MAAL,CAAY8kD,cAAjC,CACA,GAAIjkE,CAAAA,KAAK,CAAG,EAAZ,CACA,GAAIikE,cAAc,EAAIA,cAAc,GAAK,MAAzC,CAAiD,CAC/C,GAAI+B,CAAAA,UAAU,CAAGvoE,QAAQ,CAACwmE,cAAD,CAAiB,EAAjB,CAAR,CAA+B,KAAKgC,aAArD,CACA,GAAID,UAAJ,CAAgB,CACdhmE,KAAK,CAACgmE,UAAN,CAAmBA,UAAU,CAAG,IAAhC,CACD,CACF,CACD,MAAOntE,CAAAA,CAAC,CACN,KADM,CAEN,CAAE,QAAS,0BAAX,CAAuCmH,KAAK,CAAEA,KAA9C,CAFM,CAGN,CAACs8D,KAAD,CAHM,CAAR,CAKD,CAdD,IAcO,CACL,MAAOA,CAAAA,KAAK,CAAC,CAAD,CAAZ,CACD,CACF,CA9BoE,CAiCrE9mE,OAAO,CAAE,CACP0wE,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI,KAAKtkE,GAAL,EAAY,KAAKA,GAAL,CAASukE,iBAAzB,CAA4C,CAC1C,GAAIF,CAAAA,aAAa,CAAGjtD,MAAM,CAACgF,gBAAP,CAAwB,KAAKpc,GAAL,CAASukE,iBAAjC,EAAoD7kE,KAAxE,CACA,MAAO3K,CAAAA,IAAI,CAACmI,IAAL,CAAUsf,UAAU,CAAC6nD,aAAD,CAApB,CAAP,CACD,CAHD,IAGO,CACL,MAAO,EAAP,CACD,CACF,CARM,CASPG,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,GAAIpH,CAAAA,MAAM,CAAGluD,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,QAAjF,CAEA,GAAI,KAAKlV,MAAL,CAAY5B,OAAZ,EAAuB,KAAK8rE,WAA5B,EAA2C,KAAKlkE,GAAL,CAASukE,iBAAxD,CAA2E,CACzE,GAAInH,MAAM,GAAK,QAAf,CAAyB,CACvB,KAAKiH,aAAL,CAAqB,KAAKC,aAAL,EAArB,CACD,CAFD,IAEO,IAAIlH,MAAM,GAAK,QAAf,CAAyB,CAC9B,KAAK7/C,MAAL,CAAYylD,oBAAZ,CAAiC,KAAKqB,aAAtC,EACD,CACF,CACF,CAnBM,CAjC4D,CAuDrE3wE,KAAK,CAAE,CACL2wE,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuB1wE,GAAvB,CAA4B0H,MAA5B,CAAoC,CACjD,GAAI,KAAK8oE,SAAT,CAAoB,CAClB,KAAK5mD,MAAL,CAAYwlD,kBAAZ,CAA+BpvE,GAA/B,CAAoC0H,MAApC,EACA,KAAKmiB,UAAL,CAAgBinD,wBAAhB,CAAyC9wE,GAAzC,EACD,CACF,CANI,CAvD8D,CAgErEwB,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLkvE,aAAa,CAAE,CADV,CAAP,CAGD,CApEoE,CAqErEtjE,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAKyjE,gBAAL,CAAsB,QAAtB,EACD,CAvEoE,CAwErEz/D,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAKy/D,gBAAL,CAAsB,QAAtB,EACD,CA1EoE,CA2ErEh8D,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,KAAKg8D,gBAAL,CAAsB,QAAtB,EACD,CA7EoE,CAA1C,CA+E7B;AACC,4BAA6B,GAAIE,CAAAA,sCAAsC,CAAIT,kCAA9C,CAC9B;AACA,GAAIU,CAAAA,iBAAJ,CAAuBC,0BAAvB,CAKA,yBAEA,GAAIC,CAAAA,oBAAoB,CAAGvvE,kBAAkB,CAC3CovE,sCAD2C,CAE3CC,iBAF2C,CAG3CC,0BAH2C,CAI3C,KAJ2C,CAK3C,IAL2C,CAM3C,IAN2C,CAO3C,IAP2C,CAA7C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIE,CAAAA,cAAJ,CAAqB,CAClCD,oBAAoB,CAAC/uE,OAArB,CAA6ByB,MAA7B,CAAsC,kCAAtC,CACA,4BAA6B,GAAIwtE,CAAAA,UAAU,CAAIF,oBAAoB,CAAC/1E,OAAvC,CAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA,4BAA6B,GAAIk2E,CAAAA,iCAAiC,CAAI,CACpEv1E,IAAI,CAAE,YAD8D,CAGpEmV,aAAa,CAAE,YAHqD,CAKpE5J,MAAM,CAAE,CAACkE,eAAe,CAACjE,CAAjB,CAL4D,CAOpEqO,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,MAAO,CACLkU,UAAU,CAAE,IADP,CAAP,CAGD,CAXmE,CAcpE5Q,MAAM,CAAE,CAAC,QAAD,CAd4D,CAgBpEtZ,KAAK,CAAE,CACLoI,KAAK,CAAE7C,MADF,CAEL8oE,UAAU,CAAE9oE,MAFP,CAGL2sC,IAAI,CAAE3sC,MAHD,CAIL4d,QAAQ,CAAE,CACRte,IAAI,CAAE1E,OADE,CAER2E,OAAO,CAAE2E,SAFD,CAJL,CAQL2kE,KAAK,CAAE,CAAC9xE,MAAD,CAAS8I,KAAT,CARF,CASLkP,KAAK,CAAE/O,MATF,CAULosE,cAAc,CAAEpsE,MAVX,CAWL6qE,GAAG,CAAE7qE,MAXA,CAYLgpE,aAAa,CAAE,CACb1pE,IAAI,CAAE,CAACU,MAAD,CAASpF,OAAT,CADO,CAEb2E,OAAO,CAAE,EAFI,CAZV,CAgBL0pE,WAAW,CAAE,CACX3pE,IAAI,CAAE1E,OADK,CAEX2E,OAAO,CAAE,IAFE,CAhBR,CAoBLoD,IAAI,CAAE3C,MApBD,CAhB6D,CAsCpEoB,UAAU,CAAE,CACV;AACAirE,SAAS,CAAEH,UAFD,CAtCwD,CA0CpErxE,KAAK,CAAE,CACLkU,KAAK,CAAE,CACL1M,SAAS,CAAE,IADN,CAELC,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBhL,KAAjB,CAAwB,CAC/B,KAAK0zE,eAAL,CAAuB1zE,KAAvB,CACA,KAAKwrB,aAAL,CAAqBxrB,KAAK,CAAG,OAAH,CAAa,EAAvC,CACD,CALI,CADF,CAQL80E,cAAc,CAAE,QAASA,CAAAA,cAAT,CAAwB90E,KAAxB,CAA+B,CAC7C,KAAKwrB,aAAL,CAAqBxrB,KAArB,CACD,CAVI,CA1C6D,CAsDpEqE,QAAQ,CAAE,CACRmvE,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAKD,GAAL,EAAY,KAAKl+B,IAAxB,CACD,CAHO,CAIRi+B,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAI0B,CAAAA,GAAG,CAAG,EAAV,CACA,GAAI,KAAKtnD,IAAL,CAAUyjD,aAAV,GAA4B,KAAhC,CAAuC,MAAO6D,CAAAA,GAAP,CACvC,GAAIxD,CAAAA,UAAU,CAAG,KAAKA,UAAL,EAAmB,KAAK9jD,IAAL,CAAU8jD,UAA9C,CACA,GAAIA,UAAJ,CAAgB,CACdwD,GAAG,CAACzlE,KAAJ,CAAYiiE,UAAZ,CACD,CACD,MAAOwD,CAAAA,GAAP,CACD,CAZO,CAaRvB,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,GAAIuB,CAAAA,GAAG,CAAG,EAAV,CACA,GAAIzpE,CAAAA,KAAK,CAAG,KAAKA,KAAjB,CACA,GAAI,KAAKmiB,IAAL,CAAUyjD,aAAV,GAA4B,KAA5B,EAAqC,KAAKzjD,IAAL,CAAU0jD,MAAnD,CAA2D,MAAO4D,CAAAA,GAAP,CAC3D,GAAI,CAACzpE,KAAD,EAAU,CAAC,KAAKimE,UAAhB,EAA8B,KAAKtoD,QAAvC,CAAiD,MAAO8rD,CAAAA,GAAP,CACjD,GAAIxD,CAAAA,UAAU,CAAG,KAAKA,UAAL,EAAmB,KAAK9jD,IAAL,CAAU8jD,UAA9C,CACA,GAAIA,UAAU,GAAK,MAAnB,CAA2B,CACzB,GAAI,KAAKA,UAAL,GAAoB,MAAxB,CAAgC,CAC9BwD,GAAG,CAACf,UAAJ,CAAiB,KAAKgB,kBAAtB,CACD,CAFD,IAEO,IAAI,KAAKvnD,IAAL,CAAU8jD,UAAV,GAAyB,MAA7B,CAAqC,CAC1CwD,GAAG,CAACf,UAAJ,CAAiB,KAAK7mD,MAAL,CAAY8kD,cAA7B,CACD,CACF,CAND,IAMO,CACL8C,GAAG,CAACf,UAAJ,CAAiBzC,UAAjB,CACD,CACD,MAAOwD,CAAAA,GAAP,CACD,CA7BO,CA8BRtnD,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,GAAIvnB,CAAAA,MAAM,CAAG,KAAKuE,OAAlB,CACA,GAAIwqE,CAAAA,UAAU,CAAG/uE,MAAM,CAACM,QAAP,CAAgBgO,aAAjC,CACA,MAAOygE,UAAU,GAAK,QAAtB,CAAgC,CAC9B,GAAIA,UAAU,GAAK,YAAnB,CAAiC,CAC/B,KAAKhsD,QAAL,CAAgB,IAAhB,CACD,CACD/iB,MAAM,CAAGA,MAAM,CAACuE,OAAhB,CACAwqE,UAAU,CAAG/uE,MAAM,CAACM,QAAP,CAAgBgO,aAA7B,CACD,CACD,MAAOtO,CAAAA,MAAP,CACD,CAzCO,CA0CRgvE,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAIpiD,CAAAA,KAAK,CAAG,KAAKrF,IAAL,CAAUqF,KAAtB,CACA,GAAI,CAACA,KAAD,EAAU,CAAC,KAAKsiB,IAApB,CAA0B,CACxB,OACD,CAED,GAAI1vB,CAAAA,IAAI,CAAG,KAAK0vB,IAAhB,CACA,GAAI1vB,IAAI,CAAC1hB,OAAL,CAAa,GAAb,IAAsB,CAAC,CAA3B,CAA8B,CAC5B0hB,IAAI,CAAGA,IAAI,CAACpL,OAAL,CAAa,GAAb,CAAkB,GAAlB,CAAP,CACD,CAED,MAAO9a,CAAAA,MAAM,CAACoI,KAAK,CAAC,eAAD,CAAN,CAAN,CAA+BkrB,KAA/B,CAAsCpN,IAAtC,CAA4C,IAA5C,EAAkD6kC,CAAzD,CACD,CAtDO,CAuDR4oB,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAI7B,CAAAA,KAAK,CAAG,KAAK6D,QAAL,EAAZ,CACA,GAAIhC,CAAAA,UAAU,CAAG,KAAjB,CAEA,GAAI7B,KAAK,EAAIA,KAAK,CAACr6D,MAAnB,CAA2B,CACzBq6D,KAAK,CAAChxC,KAAN,CAAY,SAAU80C,IAAV,CAAgB,CAC1B,GAAIA,IAAI,CAAC/uD,QAAT,CAAmB,CACjB8sD,UAAU,CAAG,IAAb,CACA,MAAO,MAAP,CACD,CACD,MAAO,KAAP,CACD,CAND,EAOD,CACD,MAAOA,CAAAA,UAAP,CACD,CArEO,CAsERkC,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAKloD,MAAL,CAAY/hB,IAAnB,CACD,CAxEO,CAyER0iB,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,MAAO,MAAK1iB,IAAL,EAAa,KAAKiqE,SAAzB,CACD,CA3EO,CA4ERjC,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAKtlD,cAAL,EAAuB,CAAC,KAAK3T,QAAL,EAAiB,EAAlB,EAAsB/O,IAApD,CACD,CA9EO,CAtD0D,CAsIpErG,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLwmB,aAAa,CAAE,EADV,CAELkoD,eAAe,CAAE,EAFZ,CAGL6B,gBAAgB,CAAE,KAHb,CAILntE,SAAS,CAAE,EAJN,CAKL8gB,QAAQ,CAAE,KALL,CAML+rD,kBAAkB,CAAE,EANf,CAAP,CAQD,CA/ImE,CAiJpExxE,OAAO,CAAE,CACP0pE,QAAQ,CAAE,QAASA,CAAAA,QAAT,CAAkB9zD,OAAlB,CAA2B,CACnC,GAAIjO,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI8wB,CAAAA,QAAQ,CAAGnd,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoElX,KAAK,CAAC,MAAD,CAAxF,CAEA,KAAK0tE,gBAAL,CAAwB,KAAxB,CACA,GAAIhE,CAAAA,KAAK,CAAG,KAAKiE,eAAL,CAAqBn8D,OAArB,CAAZ,CACA,GAAI,CAAC,CAACk4D,KAAD,EAAUA,KAAK,CAACr6D,MAAN,GAAiB,CAA5B,GAAkC,KAAKoP,QAAL,GAAkB1Z,SAAxD,CAAmE,CACjEsvB,QAAQ,GACR,MAAO,KAAP,CACD,CAED,KAAK1Q,aAAL,CAAqB,YAArB,CAEA,GAAIiqD,CAAAA,UAAU,CAAG,EAAjB,CACA,GAAIlE,KAAK,EAAIA,KAAK,CAACr6D,MAAN,CAAe,CAA5B,CAA+B,CAC7Bq6D,KAAK,CAACjnE,OAAN,CAAc,SAAU+qE,IAAV,CAAgB,CAC5B,MAAOA,CAAAA,IAAI,CAACh8D,OAAZ,CACD,CAFD,EAGD,CACDo8D,UAAU,CAAC,KAAKpgC,IAAN,CAAV,CAAwBk8B,KAAxB,CAEA,GAAInpE,CAAAA,SAAS,CAAG,GAAIyrE,CAAAA,gCAAgC,CAAC/oE,CAArC,CAAuC2qE,UAAvC,CAAhB,CACA,GAAI1iD,CAAAA,KAAK,CAAG,EAAZ,CAEAA,KAAK,CAAC,KAAKsiB,IAAN,CAAL,CAAmB,KAAK8/B,UAAxB,CAEA/sE,SAAS,CAAC+kE,QAAV,CAAmBp6C,KAAnB,CAA0B,CAAE2iD,WAAW,CAAE,IAAf,CAA1B,CAAiD,SAAUC,MAAV,CAAkBlD,aAAlB,CAAiC,CAChFrnE,KAAK,CAACogB,aAAN,CAAsB,CAACmqD,MAAD,CAAU,SAAV,CAAsB,OAA5C,CACAvqE,KAAK,CAACsoE,eAAN,CAAwBiC,MAAM,CAAGA,MAAM,CAAC,CAAD,CAAN,CAAU/K,OAAb,CAAuB,EAArD,CAEA1uC,QAAQ,CAAC9wB,KAAK,CAACsoE,eAAP,CAAwBjB,aAAxB,CAAR,CACArnE,KAAK,CAACgiB,MAAN,EAAgBhiB,KAAK,CAACgiB,MAAN,CAAajpB,KAAb,CAAmB,UAAnB,CAA+BiH,KAAK,CAACiqC,IAArC,CAA2C,CAACsgC,MAA5C,CAAoDvqE,KAAK,CAACsoE,eAAN,EAAyB,IAA7E,CAAhB,CACD,CAND,EAOD,CAnCM,CAoCPpB,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,KAAK9mD,aAAL,CAAqB,EAArB,CACA,KAAKkoD,eAAL,CAAuB,EAAvB,CACA,KAAK6B,gBAAL,CAAwB,KAAxB,CACD,CAxCM,CAyCPlD,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAIxlE,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAK2e,aAAL,CAAqB,EAArB,CACA,KAAKkoD,eAAL,CAAuB,EAAvB,CAEA,GAAI3gD,CAAAA,KAAK,CAAG,KAAKrF,IAAL,CAAUqF,KAAtB,CACA,GAAI/yB,CAAAA,KAAK,CAAG,KAAKm1E,UAAjB,CACA,GAAIxvD,CAAAA,IAAI,CAAG,KAAK0vB,IAAhB,CACA,GAAI1vB,IAAI,CAAC1hB,OAAL,CAAa,GAAb,IAAsB,CAAC,CAA3B,CAA8B,CAC5B0hB,IAAI,CAAGA,IAAI,CAACpL,OAAL,CAAa,GAAb,CAAkB,GAAlB,CAAP,CACD,CAED,GAAI86B,CAAAA,IAAI,CAAG51C,MAAM,CAACoI,KAAK,CAAC,eAAD,CAAN,CAAN,CAA+BkrB,KAA/B,CAAsCpN,IAAtC,CAA4C,IAA5C,CAAX,CAEA,KAAK4vD,gBAAL,CAAwB,IAAxB,CACA,GAAIhtE,KAAK,CAAC4C,OAAN,CAAcnL,KAAd,CAAJ,CAA0B,CACxBq1C,IAAI,CAAC71C,CAAL,CAAO61C,IAAI,CAACgnB,CAAZ,EAAiB,GAAGp1D,MAAH,CAAU,KAAK6rD,YAAf,CAAjB,CACD,CAFD,IAEO,CACLzd,IAAI,CAAC71C,CAAL,CAAO61C,IAAI,CAACgnB,CAAZ,EAAiB,KAAKvJ,YAAtB,CACD,CAED;AACA,KAAKhmD,SAAL,CAAe,UAAY,CACzBD,MAAM,CAAC0oE,gBAAP,CAA0B,KAA1B,CACD,CAFD,EAIA,KAAK5kE,SAAL,CAAe,cAAf,CAA+B,YAA/B,CAA6C,KAAKmiD,YAAlD,EACD,CArEM,CAsEPsiB,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,GAAIQ,CAAAA,SAAS,CAAG,KAAKloD,IAAL,CAAU6jD,KAA1B,CACA,GAAIsE,CAAAA,SAAS,CAAG,KAAKtE,KAArB,CACA,GAAIuE,CAAAA,YAAY,CAAG,KAAKxvD,QAAL,GAAkB1Z,SAAlB,CAA8B,CAAE0Z,QAAQ,CAAE,CAAC,CAAC,KAAKA,QAAnB,CAA9B,CAA8D,EAAjF,CAEA,GAAI+uB,CAAAA,IAAI,CAAG51C,MAAM,CAACoI,KAAK,CAAC,eAAD,CAAN,CAAN,CAA+B+tE,SAA/B,CAA0C,KAAKvgC,IAAL,EAAa,EAAvD,CAAX,CACAugC,SAAS,CAAGA,SAAS,CAAGvgC,IAAI,CAAC71C,CAAL,CAAO,KAAK61C,IAAL,EAAa,EAApB,GAA2BA,IAAI,CAACmV,CAAnC,CAAuC,EAA5D,CAEA,MAAO,GAAGvjD,MAAH,CAAU4uE,SAAS,EAAID,SAAb,EAA0B,EAApC,EAAwC3uE,MAAxC,CAA+C6uE,YAA/C,CAAP,CACD,CA/EM,CAgFPN,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBn8D,OAAzB,CAAkC,CACjD,GAAIk4D,CAAAA,KAAK,CAAG,KAAK6D,QAAL,EAAZ,CAEA,MAAO7D,CAAAA,KAAK,CAACvwD,MAAN,CAAa,SAAUq0D,IAAV,CAAgB,CAClC,GAAI,CAACA,IAAI,CAACh8D,OAAN,EAAiBA,OAAO,GAAK,EAAjC,CAAqC,MAAO,KAAP,CACrC,GAAI9Q,KAAK,CAAC4C,OAAN,CAAckqE,IAAI,CAACh8D,OAAnB,CAAJ,CAAiC,CAC/B,MAAOg8D,CAAAA,IAAI,CAACh8D,OAAL,CAAapV,OAAb,CAAqBoV,OAArB,EAAgC,CAAC,CAAxC,CACD,CAFD,IAEO,CACL,MAAOg8D,CAAAA,IAAI,CAACh8D,OAAL,GAAiBA,OAAxB,CACD,CACF,CAPM,EAOJrP,GAPI,CAOA,SAAUqrE,IAAV,CAAgB,CACrB,MAAOpoD,CAAAA,aAAa,GAAG,EAAH,CAAOooD,IAAP,CAApB,CACD,CATM,CAAP,CAUD,CA7FM,CA8FPU,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAK5I,QAAL,CAAc,MAAd,EACD,CAhGM,CAiGP6I,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI,KAAKT,gBAAT,CAA2B,CACzB,KAAKA,gBAAL,CAAwB,KAAxB,CACA,OACD,CAED,KAAKpI,QAAL,CAAc,QAAd,EACD,CAxGM,CAyGPmH,wBAAwB,CAAE,QAASA,CAAAA,wBAAT,CAAkC/kE,KAAlC,CAAyC,CACjE,KAAK0lE,kBAAL,CAA0B1lE,KAAK,CAAGA,KAAK,CAAG,IAAX,CAAkB,EAAjD,CACD,CA3GM,CA4GP0iE,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,EAA6B,CAC9C,GAAIV,CAAAA,KAAK,CAAG,KAAK6D,QAAL,EAAZ,CAEA,GAAI7D,KAAK,CAACr6D,MAAN,EAAgB,KAAKoP,QAAL,GAAkB1Z,SAAtC,CAAiD,CAC/C,KAAK0I,GAAL,CAAS,cAAT,CAAyB,KAAKygE,WAA9B,EACA,KAAKzgE,GAAL,CAAS,gBAAT,CAA2B,KAAK0gE,aAAhC,EACD,CACF,CAnHM,CAoHPhE,oBAAoB,CAAE,QAASA,CAAAA,oBAAT,EAAgC,CACpD,KAAKne,IAAL,GACD,CAtHM,CAjJ2D,CAyQpEjjD,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAI,KAAKykC,IAAT,CAAe,CACb,KAAK1gC,QAAL,CAAc,QAAd,CAAwB,kBAAxB,CAA4C,CAAC,IAAD,CAA5C,EAEA,GAAIm+C,CAAAA,YAAY,CAAG,KAAKqiB,UAAxB,CACA,GAAI5sE,KAAK,CAAC4C,OAAN,CAAc2nD,YAAd,CAAJ,CAAiC,CAC/BA,YAAY,CAAG,GAAG7rD,MAAH,CAAU6rD,YAAV,CAAf,CACD,CACDrzD,MAAM,CAACC,cAAP,CAAsB,IAAtB,CAA4B,cAA5B,CAA4C,CAC1CM,KAAK,CAAE8yD,YADmC,CAA5C,EAIA,KAAKmf,iBAAL,GACD,CACF,CAvRmE,CAwRpE55D,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,KAAK1D,QAAL,CAAc,QAAd,CAAwB,qBAAxB,CAA+C,CAAC,IAAD,CAA/C,EACD,CA1RmE,CAAzC,CA4R7B;AACC,4BAA6B,GAAIshE,CAAAA,qCAAqC,CAAIpB,iCAA7C,CAC9B;AAMA,yBAEA,GAAIqB,CAAAA,mBAAmB,CAAG/wE,kBAAkB,CAC1C8wE,qCAD0C,CAE1C9C,6CAF0C,CAG1CQ,sDAH0C,CAI1C,KAJ0C,CAK1C,IAL0C,CAM1C,IAN0C,CAO1C,IAP0C,CAA5C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIwC,CAAAA,aAAJ,CAAoB,CACjCD,mBAAmB,CAACvwE,OAApB,CAA4ByB,MAA5B,CAAqC,iCAArC,CACA,4BAA6B,GAAIgvE,CAAAA,SAAS,CAAIF,mBAAmB,CAACv3E,OAArC,CAC7B;AAGA,0BACAy3E,SAAS,CAACnpE,OAAV,CAAoB,SAAUC,GAAV,CAAe,CACjCA,GAAG,CAAChG,SAAJ,CAAckvE,SAAS,CAAC92E,IAAxB,CAA8B82E,SAA9B,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,kBAAkB,CAAID,SAA1B,CAC7B;AACA,GAAIE,CAAAA,2CAA2C,CAAG,QAA9CA,CAAAA,2CAA8C,EAAW,CAC3D,GAAIl1E,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CAAC,KAAD,CAAQ,CACfE,WAAW,CAAE,qBADE,CAEfK,KAAK,CAAE,MAAQV,GAAG,CAACm1E,QAAJ,CAAaC,WAFb,CAGfvoE,KAAK,CAAE7M,GAAG,CAACq1E,QAHI,CAAR,CAAT,CAKD,CATD,CAUA,GAAIC,CAAAA,oDAAoD,CAAG,EAA3D,CACAJ,2CAA2C,CAACrzE,aAA5C,CAA4D,IAA5D,CAGA;AAEA;AACA;AACA;AACA;AAGA,4BAA6B,GAAI0zE,CAAAA,+BAA+B,CAAI,CAClEr3E,IAAI,CAAE,QAD4D,CAGlE6D,KAAK,CAAE,CACLyzE,IAAI,CAAEruE,KADD,CAH2D,CAOlEkU,MAAM,CAAE,CAAC,UAAD,CAP0D,CASlEpY,QAAQ,CAAE,CACRoyE,QAAQ,CAAE,CACR72E,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,GAAIwL,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI6C,CAAAA,KAAK,CAAG,EAAZ,CACA,GAAItJ,CAAAA,MAAM,CAAG,CAAb,CACA,GAAIkyE,CAAAA,OAAO,CAAG,CAAd,CACA,GAAIC,CAAAA,QAAQ,CAAG,CAAC,KAAD,CAAQ,QAAR,EAAkB7yE,OAAlB,CAA0B,KAAKsyE,QAAL,CAAcC,WAAxC,IAAyD,CAAC,CAA1D,CAA8D,OAA9D,CAAwE,QAAvF,CACA,GAAIO,CAAAA,OAAO,CAAGD,QAAQ,GAAK,OAAb,CAAuB,GAAvB,CAA6B,GAA3C,CACA,GAAIE,CAAAA,cAAc,CAAG,QAASA,CAAAA,cAAT,CAAwBC,GAAxB,CAA6B,CAChD,MAAOA,CAAAA,GAAG,CAAC34C,WAAJ,GAAkB/jB,OAAlB,CAA0B,aAA1B,CAAyC,SAAU28D,CAAV,CAAa,CAC3D,MAAOA,CAAAA,CAAC,CAACltC,WAAF,EAAP,CACD,CAFM,CAAP,CAGD,CAJD,CAKA,KAAK4sC,IAAL,CAAUr2C,KAAV,CAAgB,SAAUjhB,GAAV,CAAepM,KAAf,CAAsB,CACpC,GAAIrD,CAAAA,GAAG,CAAGpQ,MAAM,CAACoI,KAAK,CAAC,WAAD,CAAN,CAAN,CAA2BuD,KAAK,CAACV,OAAN,CAAcsF,KAAd,CAAoB4mE,IAApB,EAA4B,EAAvD,CAA2D,SAAU32E,CAAV,CAAa,CAChF,MAAOA,CAAAA,CAAC,CAACuR,EAAF,CAAK+I,OAAL,CAAa,MAAb,CAAqB,EAArB,IAA6B+E,GAAG,CAAC63D,QAAxC,CACD,CAFS,CAAV,CAGA,GAAI,CAACtnE,GAAL,CAAU,CACR,MAAO,MAAP,CACD,CAED,GAAI,CAACyP,GAAG,CAACvd,MAAT,CAAiB,CACf4C,MAAM,EAAIkL,GAAG,CAAC,SAAWmnE,cAAc,CAACF,QAAD,CAA1B,CAAb,CACA,MAAO,KAAP,CACD,CAHD,IAGO,CACLD,OAAO,CAAGhnE,GAAG,CAAC,SAAWmnE,cAAc,CAACF,QAAD,CAA1B,CAAb,CACA,GAAIM,CAAAA,SAAS,CAAGnwD,MAAM,CAACgF,gBAAP,CAAwBpc,GAAxB,CAAhB,CACA,GAAIinE,QAAQ,GAAK,OAAb,EAAwB1rE,KAAK,CAACwrE,IAAN,CAAW1/D,MAAX,CAAoB,CAAhD,CAAmD,CACjD2/D,OAAO,EAAIxqD,UAAU,CAAC+qD,SAAS,CAACrxD,WAAX,CAAV,CAAoCsG,UAAU,CAAC+qD,SAAS,CAACC,YAAX,CAAzD,CACD,CACD,GAAIP,QAAQ,GAAK,OAAjB,CAA0B,CACxBnyE,MAAM,EAAI0nB,UAAU,CAAC+qD,SAAS,CAACrxD,WAAX,CAApB,CACD,CACD,MAAO,MAAP,CACD,CACF,CAtBD,EAwBA,GAAIkJ,CAAAA,SAAS,CAAG,YAAc+nD,cAAc,CAACD,OAAD,CAA5B,CAAwC,GAAxC,CAA8CpyE,MAA9C,CAAuD,KAAvE,CACAsJ,KAAK,CAAC6oE,QAAD,CAAL,CAAkBD,OAAO,CAAG,IAA5B,CACA5oE,KAAK,CAACghB,SAAN,CAAkBA,SAAlB,CACAhhB,KAAK,CAACqpE,WAAN,CAAoBroD,SAApB,CACAhhB,KAAK,CAACspE,eAAN,CAAwBtoD,SAAxB,CAEA,MAAOhhB,CAAAA,KAAP,CACD,CA7CO,CADF,CATwD,CAAvC,CA2D7B;AACC,4BAA6B,GAAIupE,CAAAA,mCAAmC,CAAIb,+BAA3C,CAC9B;AAMA,yBAEA,GAAIc,CAAAA,iBAAiB,CAAGtyE,kBAAkB,CACxCqyE,mCADwC,CAExClB,2CAFwC,CAGxCI,oDAHwC,CAIxC,KAJwC,CAKxC,IALwC,CAMxC,IANwC,CAOxC,IAPwC,CAA1C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIgB,CAAAA,WAAJ,CAAkB,CAC/BD,iBAAiB,CAAC9xE,OAAlB,CAA0ByB,MAA1B,CAAmC,+BAAnC,CACA,4BAA6B,GAAIuwE,CAAAA,OAAO,CAAIF,iBAAiB,CAAC94E,OAAjC,CAC7B;AAKA,QAASi5E,CAAAA,IAAT,EAAgB,CAAE,CAClB,GAAIC,CAAAA,6CAA6C,CAAG,QAASb,CAAAA,cAAT,CAAwBC,GAAxB,CAA6B,CAC/E,MAAOA,CAAAA,GAAG,CAAC34C,WAAJ,GAAkB/jB,OAAlB,CAA0B,aAA1B,CAAyC,SAAU28D,CAAV,CAAa,CAC3D,MAAOA,CAAAA,CAAC,CAACltC,WAAF,EAAP,CACD,CAFM,CAAP,CAGD,CAJD,CAMA,4BAA6B,GAAI8tC,CAAAA,+BAA+B,CAAI,CAClEx4E,IAAI,CAAE,QAD4D,CAGlEwK,UAAU,CAAE,CACViuE,MAAM,CAAEJ,OADE,CAHsD,CAOlEl7D,MAAM,CAAE,CAAC,UAAD,CAP0D,CASlEtZ,KAAK,CAAE,CACL60E,KAAK,CAAEzvE,KADF,CAEL0vE,WAAW,CAAEvvE,MAFR,CAGLskD,QAAQ,CAAE1pD,OAHL,CAIL40E,UAAU,CAAE,CACVlwE,IAAI,CAAE0H,QADI,CAEVzH,OAAO,CAAE2vE,IAFC,CAJP,CAQLO,WAAW,CAAE,CACXnwE,IAAI,CAAE0H,QADK,CAEXzH,OAAO,CAAE2vE,IAFE,CARR,CAYL5vE,IAAI,CAAEU,MAZD,CAaL0vE,OAAO,CAAE90E,OAbJ,CAT2D,CAyBlE0B,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLqzE,UAAU,CAAE,KADP,CAELC,SAAS,CAAE,CAFN,CAGLC,OAAO,CAAE,KAHJ,CAILC,SAAS,CAAE,IAJN,CAAP,CAMD,CAhCiE,CAmClEn0E,QAAQ,CAAE,CACRo0E,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,GAAIC,CAAAA,GAAG,CAAG,CAAC,KAAD,CAAQ,QAAR,EAAkBz0E,OAAlB,CAA0B,KAAKsyE,QAAL,CAAcC,WAAxC,IAAyD,CAAC,CAA1D,CAA8D,GAA9D,CAAoE,GAA9E,CACA,MAAO,CACLvnD,SAAS,CAAE,YAAcypD,GAAd,CAAoB,IAApB,CAA2B,KAAKJ,SAAhC,CAA4C,KADlD,CAAP,CAGD,CANO,CAORxB,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,CAAC,KAAD,CAAQ,QAAR,EAAkB7yE,OAAlB,CAA0B,KAAKsyE,QAAL,CAAcC,WAAxC,IAAyD,CAAC,CAA1D,CAA8D,OAA9D,CAAwE,QAA/E,CACD,CATO,CAnCwD,CA+ClE/yE,OAAO,CAAE,CACPk1E,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAIC,CAAAA,aAAa,CAAG,KAAK5oE,KAAL,CAAW6oE,SAAX,CAAqB,SAAWhB,6CAA6C,CAAC,KAAKf,QAAN,CAA7E,CAApB,CACA,GAAIgC,CAAAA,aAAa,CAAG,KAAKR,SAAzB,CAEA,GAAI,CAACQ,aAAL,CAAoB,OAEpB,GAAIC,CAAAA,SAAS,CAAGD,aAAa,CAAGF,aAAhB,CAAgCE,aAAa,CAAGF,aAAhD,CAAgE,CAAhF,CAEA,KAAKN,SAAL,CAAiBS,SAAjB,CACD,CAVM,CAWPC,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAIC,CAAAA,OAAO,CAAG,KAAKjpE,KAAL,CAAWkpE,GAAX,CAAe,SAAWrB,6CAA6C,CAAC,KAAKf,QAAN,CAAvE,CAAd,CACA,GAAI8B,CAAAA,aAAa,CAAG,KAAK5oE,KAAL,CAAW6oE,SAAX,CAAqB,SAAWhB,6CAA6C,CAAC,KAAKf,QAAN,CAA7E,CAApB,CACA,GAAIgC,CAAAA,aAAa,CAAG,KAAKR,SAAzB,CAEA,GAAIW,OAAO,CAAGH,aAAV,EAA2BF,aAA/B,CAA8C,OAE9C,GAAIG,CAAAA,SAAS,CAAGE,OAAO,CAAGH,aAAV,CAA0BF,aAAa,CAAG,CAA1C,CAA8CE,aAAa,CAAGF,aAA9D,CAA8EK,OAAO,CAAGL,aAAxG,CAEA,KAAKN,SAAL,CAAiBS,SAAjB,CACD,CArBM,CAsBPI,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,EAA6B,CAC9C,GAAI,CAAC,KAAKd,UAAV,CAAsB,OACtB,GAAIa,CAAAA,GAAG,CAAG,KAAKlpE,KAAL,CAAWkpE,GAArB,CACA,GAAIE,CAAAA,SAAS,CAAG,KAAKvpE,GAAL,CAASsF,aAAT,CAAuB,YAAvB,CAAhB,CACA,GAAI,CAACikE,SAAL,CAAgB,OAChB,GAAIP,CAAAA,SAAS,CAAG,KAAK7oE,KAAL,CAAW6oE,SAA3B,CACA,GAAIQ,CAAAA,YAAY,CAAG,CAAC,KAAD,CAAQ,QAAR,EAAkBp1E,OAAlB,CAA0B,KAAKsyE,QAAL,CAAcC,WAAxC,IAAyD,CAAC,CAA7E,CACA,GAAI8C,CAAAA,iBAAiB,CAAGF,SAAS,CAACn8C,qBAAV,EAAxB,CACA,GAAIs8C,CAAAA,iBAAiB,CAAGV,SAAS,CAAC57C,qBAAV,EAAxB,CACA,GAAIu8C,CAAAA,SAAS,CAAGH,YAAY,CAAGH,GAAG,CAAC7hE,WAAJ,CAAkBkiE,iBAAiB,CAAChqE,KAAvC,CAA+C2pE,GAAG,CAAClgC,YAAJ,CAAmBugC,iBAAiB,CAAC5wD,MAAhH,CACA,GAAImwD,CAAAA,aAAa,CAAG,KAAKR,SAAzB,CACA,GAAIS,CAAAA,SAAS,CAAGD,aAAhB,CAEA,GAAIO,YAAJ,CAAkB,CAChB,GAAIC,iBAAiB,CAAC75D,IAAlB,CAAyB85D,iBAAiB,CAAC95D,IAA/C,CAAqD,CACnDs5D,SAAS,CAAGD,aAAa,EAAIS,iBAAiB,CAAC95D,IAAlB,CAAyB65D,iBAAiB,CAAC75D,IAA/C,CAAzB,CACD,CACD,GAAI65D,iBAAiB,CAAC35D,KAAlB,CAA0B45D,iBAAiB,CAAC55D,KAAhD,CAAuD,CACrDo5D,SAAS,CAAGD,aAAa,CAAGQ,iBAAiB,CAAC35D,KAAlC,CAA0C45D,iBAAiB,CAAC55D,KAAxE,CACD,CACF,CAPD,IAOO,CACL,GAAI25D,iBAAiB,CAAC9pE,GAAlB,CAAwB+pE,iBAAiB,CAAC/pE,GAA9C,CAAmD,CACjDupE,SAAS,CAAGD,aAAa,EAAIS,iBAAiB,CAAC/pE,GAAlB,CAAwB8pE,iBAAiB,CAAC9pE,GAA9C,CAAzB,CACD,CACD,GAAI8pE,iBAAiB,CAAChwB,MAAlB,CAA2BiwB,iBAAiB,CAACjwB,MAAjD,CAAyD,CACvDyvB,SAAS,CAAGD,aAAa,EAAIQ,iBAAiB,CAAChwB,MAAlB,CAA2BiwB,iBAAiB,CAACjwB,MAAjD,CAAzB,CACD,CACF,CACDyvB,SAAS,CAAGn0E,IAAI,CAAC0H,GAAL,CAASysE,SAAT,CAAoB,CAApB,CAAZ,CACA,KAAKT,SAAL,CAAiB1zE,IAAI,CAACyH,GAAL,CAAS0sE,SAAT,CAAoBS,SAApB,CAAjB,CACD,CApDM,CAqDPC,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,GAAI,CAAC,KAAKzpE,KAAL,CAAWkpE,GAAhB,CAAqB,OACrB,GAAIpC,CAAAA,QAAQ,CAAG,KAAKA,QAApB,CACA,GAAImC,CAAAA,OAAO,CAAG,KAAKjpE,KAAL,CAAWkpE,GAAX,CAAe,SAAWrB,6CAA6C,CAACf,QAAD,CAAvE,CAAd,CACA,GAAI8B,CAAAA,aAAa,CAAG,KAAK5oE,KAAL,CAAW6oE,SAAX,CAAqB,SAAWhB,6CAA6C,CAACf,QAAD,CAA7E,CAApB,CACA,GAAIgC,CAAAA,aAAa,CAAG,KAAKR,SAAzB,CAEA,GAAIM,aAAa,CAAGK,OAApB,CAA6B,CAC3B,GAAIS,CAAAA,cAAc,CAAG,KAAKpB,SAA1B,CACA,KAAKD,UAAL,CAAkB,KAAKA,UAAL,EAAmB,EAArC,CACA,KAAKA,UAAL,CAAgB/uE,IAAhB,CAAuBowE,cAAvB,CACA,KAAKrB,UAAL,CAAgB3uE,IAAhB,CAAuBgwE,cAAc,CAAGd,aAAjB,CAAiCK,OAAxD,CACA,GAAIA,OAAO,CAAGS,cAAV,CAA2Bd,aAA/B,CAA8C,CAC5C,KAAKN,SAAL,CAAiBW,OAAO,CAAGL,aAA3B,CACD,CACF,CARD,IAQO,CACL,KAAKP,UAAL,CAAkB,KAAlB,CACA,GAAIS,aAAa,CAAG,CAApB,CAAuB,CACrB,KAAKR,SAAL,CAAiB,CAAjB,CACD,CACF,CACF,CA1EM,CA2EPqB,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmBhiE,CAAnB,CAAsB,CAC/B,GAAI1L,CAAAA,OAAO,CAAG0L,CAAC,CAAC1L,OAAhB,CACA,GAAIkP,CAAAA,SAAS,CAAG,IAAK,EAArB,CACA,GAAID,CAAAA,YAAY,CAAG,IAAK,EAAxB,CACI0+D,OAAO,CAAG,IAAK,EADnB,CAEA,GAAI,CAAC,EAAD,CAAK,EAAL,CAAS,EAAT,CAAa,EAAb,EAAiB31E,OAAjB,CAAyBgI,OAAzB,IAAsC,CAAC,CAA3C,CAA8C,CAC5C;AACA2tE,OAAO,CAAGjiE,CAAC,CAAChK,aAAF,CAAgBoK,gBAAhB,CAAiC,YAAjC,CAAV,CACAmD,YAAY,CAAG3S,KAAK,CAAC1H,SAAN,CAAgBoD,OAAhB,CAAwB/E,IAAxB,CAA6B06E,OAA7B,CAAsCjiE,CAAC,CAAChU,MAAxC,CAAf,CACD,CAJD,IAIO,CACL,OACD,CACD,GAAIsI,OAAO,GAAK,EAAZ,EAAkBA,OAAO,GAAK,EAAlC,CAAsC,CACpC;AACA,GAAIiP,YAAY,GAAK,CAArB,CAAwB,CACtB;AACAC,SAAS,CAAGy+D,OAAO,CAAC1iE,MAAR,CAAiB,CAA7B,CACD,CAHD,IAGO,CACLiE,SAAS,CAAGD,YAAY,CAAG,CAA3B,CACD,CACF,CARD,IAQO,CACL;AACA,GAAIA,YAAY,CAAG0+D,OAAO,CAAC1iE,MAAR,CAAiB,CAApC,CAAuC,CACrC;AACAiE,SAAS,CAAGD,YAAY,CAAG,CAA3B,CACD,CAHD,IAGO,CACLC,SAAS,CAAG,CAAZ,CACD,CACF,CACDy+D,OAAO,CAACz+D,SAAD,CAAP,CAAmBvJ,KAAnB,GAA4B;AAC5BgoE,OAAO,CAACz+D,SAAD,CAAP,CAAmBxZ,KAAnB,GAA4B;AAC5B,KAAKk4E,QAAL,GACD,CA3GM,CA4GPA,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,GAAI,KAAKrB,SAAT,CAAoB,CAClB,KAAKD,OAAL,CAAe,IAAf,CACD,CACF,CAhHM,CAiHPuB,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAKvB,OAAL,CAAe,KAAf,CACD,CAnHM,CAoHPwB,uBAAuB,CAAE,QAASA,CAAAA,uBAAT,EAAmC,CAC1D,GAAI3uE,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAIggE,CAAAA,UAAU,CAAGj7D,QAAQ,CAAC6pE,eAA1B,CACA,GAAI5O,UAAU,GAAK,QAAnB,CAA6B,CAC3B,KAAKoN,SAAL,CAAiB,KAAjB,CACD,CAFD,IAEO,IAAIpN,UAAU,GAAK,SAAnB,CAA8B,CACnC1wD,UAAU,CAAC,UAAY,CACrBtP,KAAK,CAACotE,SAAN,CAAkB,IAAlB,CACD,CAFS,CAEP,EAFO,CAAV,CAGD,CACF,CA/HM,CAgIPyB,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,EAA6B,CAC9C,KAAKzB,SAAL,CAAiB,KAAjB,CACD,CAlIM,CAmIP0B,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,EAA8B,CAChD,GAAIrtE,CAAAA,MAAM,CAAG,IAAb,CAEA6N,UAAU,CAAC,UAAY,CACrB7N,MAAM,CAAC2rE,SAAP,CAAmB,IAAnB,CACD,CAFS,CAEP,EAFO,CAAV,CAGD,CAzIM,CA/CyD,CA2LlE5jE,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAK6kE,MAAL,GACD,CA7LiE,CA8LlEp0E,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,GAAI8Q,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI5P,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CACIgwE,KAAK,CAAG,KAAKA,KADjB,CAEIhrB,QAAQ,CAAG,KAAKA,QAFpB,CAGIorB,OAAO,CAAG,KAAKA,OAHnB,CAIIF,UAAU,CAAG,KAAKA,UAJtB,CAKIC,WAAW,CAAG,KAAKA,WALvB,CAMIM,QAAQ,CAAG,KAAKA,QANpB,CAOIJ,UAAU,CAAG,KAAKA,UAPtB,CAQIW,UAAU,CAAG,KAAKA,UARtB,CASIL,UAAU,CAAG,KAAKA,UATtB,CAUIgB,SAAS,CAAG,KAAKA,SAVrB,CAWIE,QAAQ,CAAG,KAAKA,QAXpB,CAYIC,WAAW,CAAG,KAAKA,WAZvB,CAcA,GAAIK,CAAAA,SAAS,CAAG9B,UAAU,CAAG,CAACvxE,CAAC,CAC7B,MAD6B,CAE7B,CAAE,QAAS,CAAC,mBAAD,CAAsBuxE,UAAU,CAAC/uE,IAAX,CAAkB,EAAlB,CAAuB,aAA7C,CAAX,CAAwE5H,EAAE,CAAE,CACxE,QAASi3E,UAD+D,CAA5E,CAF6B,CAM7B,CAAC7xE,CAAC,CAAC,GAAD,CAAM,CAAE,QAAS,oBAAX,CAAN,CAAF,CAN6B,CAAF,CAO1BA,CAAC,CACF,MADE,CAEF,CAAE,QAAS,CAAC,mBAAD,CAAsBuxE,UAAU,CAAC3uE,IAAX,CAAkB,EAAlB,CAAuB,aAA7C,CAAX,CAAwEhI,EAAE,CAAE,CACxE,QAASs3E,UAD+D,CAA5E,CAFE,CAMF,CAAClyE,CAAC,CAAC,GAAD,CAAM,CAAE,QAAS,qBAAX,CAAN,CAAF,CANE,CAPyB,CAAH,CAcrB,IAdL,CAgBA,GAAI8vE,CAAAA,IAAI,CAAG,KAAKl0E,EAAL,CAAQs1E,KAAR,CAAe,SAAUoC,IAAV,CAAgBlnE,KAAhB,CAAuB,CAC/C,GAAIlH,CAAAA,IAAJ,CAEA,GAAIquE,CAAAA,OAAO,CAAGD,IAAI,CAAC96E,IAAL,EAAa86E,IAAI,CAAClnE,KAAlB,EAA2BA,KAAzC,CACA,GAAIqnB,CAAAA,QAAQ,CAAG6/C,IAAI,CAACE,UAAL,EAAmBttB,QAAlC,CAEAotB,IAAI,CAAClnE,KAAL,CAAa,GAAKA,KAAlB,CAEA,GAAIqnE,CAAAA,QAAQ,CAAGhgD,QAAQ,CAAGzzB,CAAC,CAAC,MAAD,CAAS,CAAE,QAAS,eAAX,CAA4BpF,EAAE,CAAE,CAChE,QAAS,QAASC,CAAAA,KAAT,CAAeoZ,EAAf,CAAmB,CAC1Bo9D,WAAW,CAACiC,IAAD,CAAOr/D,EAAP,CAAX,CACD,CAH+D,CAAhC,CAAT,CAAJ,CAKlB,IALL,CAOA,GAAIy/D,CAAAA,eAAe,CAAGJ,IAAI,CAACvwE,MAAL,CAAY0B,KAAZ,EAAqB6uE,IAAI,CAAC7uE,KAAhD,CACA,GAAIoO,CAAAA,QAAQ,CAAGygE,IAAI,CAACr4E,MAAL,CAAc,CAAd,CAAkB,CAAC,CAAlC,CACA,MAAO+E,CAAAA,CAAC,CACN,KADM,CAEN,CACE,SAAUkF,IAAI,CAAG,CACf,gBAAiB,IADF,CAAP,CAEPA,IAAI,CAAC,MAAQ4L,MAAM,CAAC2+D,QAAP,CAAgBC,WAAzB,CAAJ,CAA4C,IAFrC,CAE2CxqE,IAAI,CAAC,WAAD,CAAJ,CAAoBouE,IAAI,CAACr4E,MAFpE,CAE4EiK,IAAI,CAAC,aAAD,CAAJ,CAAsBouE,IAAI,CAACn4E,QAFvG,CAEiH+J,IAAI,CAAC,aAAD,CAAJ,CAAsBuuB,QAFvI,CAEiJvuB,IAAI,CAAC,UAAD,CAAJ,CAAmB4L,MAAM,CAAC2gE,OAF3K,CAEoLvsE,IAF9L,CADF,CAIExC,KAAK,CAAE,CAAEgI,EAAE,CAAE,OAAS6oE,OAAf,CAEL,gBAAiB,QAAUA,OAFtB,CAGLnsE,IAAI,CAAE,KAHD,CAIL,gBAAiBksE,IAAI,CAACr4E,MAJjB,CAML4X,QAAQ,CAAEA,QANL,CAJT,CAYErZ,GAAG,CAAE,OAAS+5E,OAZhB,CAYyBxsE,GAAG,CAAE,MAZ9B,CAYsC4sE,QAAQ,CAAE,IAZhD,CAaE/4E,EAAE,CAAE,CACF,QAAS,QAASkQ,CAAAA,KAAT,EAAiB,CACxBioE,QAAQ,GACT,CAHC,CAIF,OAAQ,QAAS/nE,CAAAA,IAAT,EAAgB,CACtBgoE,WAAW,GACZ,CANC,CAOF,QAAS,QAASn4E,CAAAA,KAAT,CAAeoZ,EAAf,CAAmB,CAC1B++D,WAAW,GAAG5B,UAAU,CAACkC,IAAD,CAAOC,OAAP,CAAgBt/D,EAAhB,CAAV,CACf,CATC,CAUF,UAAW,QAAS7I,CAAAA,OAAT,CAAiB6I,EAAjB,CAAqB,CAC9B,GAAIwf,QAAQ,GAAKxf,EAAE,CAAC9O,OAAH,GAAe,EAAf,EAAqB8O,EAAE,CAAC9O,OAAH,GAAe,CAAzC,CAAZ,CAAyD,CACvDksE,WAAW,CAACiC,IAAD,CAAOr/D,EAAP,CAAX,CACD,CACF,CAdC,CAbN,CAFM,CAgCN,CAACy/D,eAAD,CAAkBD,QAAlB,CAhCM,CAAR,CAkCD,CAnDU,CAAX,CAoDA,MAAOzzE,CAAAA,CAAC,CACN,KADM,CAEN,CAAE,QAAS,CAAC,mBAAD,CAAsBuxE,UAAU,CAAG,eAAH,CAAqB,EAArD,CAAyD,MAAQ,KAAK9B,QAAL,CAAcC,WAA/E,CAAX,CAFM,CAGN,CAAC2D,SAAD,CAAYrzE,CAAC,CACX,KADW,CAEX,CAAE,QAAS,CAAC,qBAAD,CAAX,CAAoC+G,GAAG,CAAE,WAAzC,CAFW,CAGX,CAAC/G,CAAC,CACA,KADA,CAEA,CACE,QAAS,CAAC,cAAD,CAAiB,MAAQ,KAAKyvE,QAAL,CAAcC,WAAvC,CAAoD4B,OAAO,EAAI,CAAC,KAAD,CAAQ,QAAR,EAAkBn0E,OAAlB,CAA0B,KAAKsyE,QAAL,CAAcC,WAAxC,IAAyD,CAAC,CAArE,CAAyE,YAAzE,CAAwF,EAA5I,CADX,CAEE3oE,GAAG,CAAE,KAFP,CAGEI,KAAK,CAAEwqE,QAHT,CAIEjvE,KAAK,CAAE,CAAE0E,IAAI,CAAE,SAAR,CAJT,CAMExM,EAAE,CAAE,CACF,UAAWi4E,SADT,CANN,CAFA,CAYA,CAAC,CAAC3xE,IAAD,CAAQlB,CAAC,CAAC,SAAD,CAAY,CACpB0C,KAAK,CAAE,CAAEotE,IAAI,CAAEoB,KAAR,CADa,CAAZ,CAAT,CAEI,IAFL,CAEWpB,IAFX,CAZA,CAAF,CAHW,CAAb,CAHM,CAAR,CAwBD,CA3SiE,CA4SlEhmE,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIwH,CAAAA,MAAM,CAAG,IAAb,CAEA3Y,MAAM,CAACqgC,aAAa,CAAC,mBAAD,CAAd,CAAN,CAA2C,KAAKjwB,GAAhD,CAAqD,KAAK4pE,MAA1D,EACAtpE,QAAQ,CAACL,gBAAT,CAA0B,kBAA1B,CAA8C,KAAKiqE,uBAAnD,EACA9yD,MAAM,CAACnX,gBAAP,CAAwB,MAAxB,CAAgC,KAAKmqE,iBAArC,EACAhzD,MAAM,CAACnX,gBAAP,CAAwB,OAAxB,CAAiC,KAAKoqE,kBAAtC,EACAx/D,UAAU,CAAC,UAAY,CACrBtC,MAAM,CAAC+gE,iBAAP,GACD,CAFS,CAEP,CAFO,CAAV,CAGD,CAtTiE,CAuTlE9gE,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI,KAAKxI,GAAL,EAAY,KAAK4pE,MAArB,CAA6Bh6E,MAAM,CAACqgC,aAAa,CAAC,sBAAD,CAAd,CAAN,CAA8C,KAAKjwB,GAAnD,CAAwD,KAAK4pE,MAA7D,EAC7BtpE,QAAQ,CAACG,mBAAT,CAA6B,kBAA7B,CAAiD,KAAKypE,uBAAtD,EACA9yD,MAAM,CAAC3W,mBAAP,CAA2B,MAA3B,CAAmC,KAAK2pE,iBAAxC,EACAhzD,MAAM,CAAC3W,mBAAP,CAA2B,OAA3B,CAAoC,KAAK4pE,kBAAzC,EACD,CA5TiE,CAAvC,CA8T7B;AACC,4BAA6B,GAAIQ,CAAAA,mCAAmC,CAAI5C,+BAA3C,CAC9B;AACA,GAAI6C,CAAAA,cAAJ,CAAoBC,uBAApB,CAKA,yBAEA,GAAIC,CAAAA,iBAAiB,CAAG11E,kBAAkB,CACxCu1E,mCADwC,CAExCC,cAFwC,CAGxCC,uBAHwC,CAIxC,KAJwC,CAKxC,IALwC,CAMxC,IANwC,CAOxC,IAPwC,CAA1C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIE,CAAAA,WAAJ,CAAkB,CAC/BD,iBAAiB,CAACl1E,OAAlB,CAA0ByB,MAA1B,CAAmC,+BAAnC,CACA,4BAA6B,GAAI2zE,CAAAA,OAAO,CAAIF,iBAAiB,CAACl8E,OAAjC,CAC7B;AAIA,4BAA6B,GAAIq8E,CAAAA,4BAA4B,CAAI,CAC/D17E,IAAI,CAAE,QADyD,CAG/DwK,UAAU,CAAE,CACVmxE,MAAM,CAAEF,OADE,CAHmD,CAO/D53E,KAAK,CAAE,CACL6E,IAAI,CAAEU,MADD,CAELwyE,UAAU,CAAExyE,MAFP,CAGL6xB,QAAQ,CAAEj3B,OAHL,CAIL63E,OAAO,CAAE73E,OAJJ,CAKLtD,KAAK,CAAE,EALF,CAMLgtD,QAAQ,CAAE1pD,OANL,CAOLkzE,WAAW,CAAE,CACXxuE,IAAI,CAAEU,MADK,CAEXT,OAAO,CAAE,KAFE,CAPR,CAWL2Z,WAAW,CAAElS,QAXR,CAYL0oE,OAAO,CAAE90E,OAZJ,CAPwD,CAsB/D6V,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,MAAO,CACLo9D,QAAQ,CAAE,IADL,CAAP,CAGD,CA1B8D,CA2B/DvxE,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLizE,WAAW,CAAE,KAAKj4E,KAAL,EAAc,KAAKk7E,UAD3B,CAELlD,KAAK,CAAE,EAFF,CAAP,CAID,CAhC8D,CAmC/Dz0E,KAAK,CAAE,CACL23E,UAAU,CAAE,QAASA,CAAAA,UAAT,CAAoBl7E,KAApB,CAA2B,CACrC,KAAKo7E,cAAL,CAAoBp7E,KAApB,EACD,CAHI,CAILA,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAe+0B,MAAf,CAAuB,CAC5B,KAAKqmD,cAAL,CAAoBrmD,MAApB,EACD,CANI,CAOLkjD,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqBj4E,KAArB,CAA4B,CACvC,GAAIoL,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI,KAAK4E,KAAL,CAAWkpE,GAAf,CAAoB,CAClB,KAAKpsE,SAAL,CAAe,UAAY,CACzB1B,KAAK,CAAC4E,KAAN,CAAYkpE,GAAZ,CAAgBpsE,SAAhB,CAA0B,SAAU+H,CAAV,CAAa,CACrCzJ,KAAK,CAAC4E,KAAN,CAAYkpE,GAAZ,CAAgBC,iBAAhB,GACD,CAFD,EAGD,CAJD,EAKD,CACF,CAjBI,CAnCwD,CAuD/D11E,OAAO,CAAE,CACP43E,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,EAA6B,CAC9C,GAAIxuE,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAIyuE,CAAAA,aAAa,CAAGv8D,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAAxF,CAEA,GAAI,KAAKlV,MAAL,CAAY5B,OAAhB,CAAyB,CACvB,GAAIszE,CAAAA,SAAS,CAAG,KAAK1xE,MAAL,CAAY5B,OAAZ,CAAoB+Y,MAApB,CAA2B,SAAUuP,KAAV,CAAiB,CAC1D,MAAOA,CAAAA,KAAK,CAACtc,GAAN,EAAasc,KAAK,CAACirD,gBAAnB,EAAuCjrD,KAAK,CAACirD,gBAAN,CAAuBC,IAAvB,CAA4B91E,OAA5B,CAAoCrG,IAApC,GAA6C,WAA3F,CACD,CAFe,CAAhB,CAGA;AACA,GAAI04E,CAAAA,KAAK,CAAGuD,SAAS,CAACvxE,GAAV,CAAc,SAAUgC,IAAV,CAAgB,CACxC,GAAIo+D,CAAAA,iBAAiB,CAAGp+D,IAAI,CAACo+D,iBAA7B,CACA,MAAOA,CAAAA,iBAAP,CACD,CAHW,CAAZ,CAIA,GAAIsR,CAAAA,YAAY,CAAG,EAAE1D,KAAK,CAAC9gE,MAAN,GAAiB,KAAK8gE,KAAL,CAAW9gE,MAA5B,EAAsC8gE,KAAK,CAACz3C,KAAN,CAAY,SAAU65C,IAAV,CAAgBlnE,KAAhB,CAAuB,CAC5F,MAAOknE,CAAAA,IAAI,GAAKvtE,MAAM,CAACmrE,KAAP,CAAa9kE,KAAb,CAAhB,CACD,CAF0D,CAAxC,CAAnB,CAGA,GAAIooE,aAAa,EAAII,YAArB,CAAmC,CACjC,KAAK1D,KAAL,CAAaA,KAAb,CACD,CACF,CAfD,IAeO,IAAI,KAAKA,KAAL,CAAW9gE,MAAX,GAAsB,CAA1B,CAA6B,CAClC,KAAK8gE,KAAL,CAAa,EAAb,CACD,CACF,CAxBM,CAyBP2D,cAAc,CAAE,QAASA,CAAAA,cAAT,CAAwBr8D,GAAxB,CAA6B+6D,OAA7B,CAAsC32E,KAAtC,CAA6C,CAC3D,GAAI4b,GAAG,CAACrd,QAAR,CAAkB,OAClB,KAAKm5E,cAAL,CAAoBf,OAApB,EACA,KAAKl2E,KAAL,CAAW,WAAX,CAAwBmb,GAAxB,CAA6B5b,KAA7B,EACD,CA7BM,CA8BPk4E,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBxB,IAAzB,CAA+Br/D,EAA/B,CAAmC,CAClD,GAAIq/D,IAAI,CAACn4E,QAAT,CAAmB,OACnB8Y,EAAE,CAACC,eAAH,GACA,KAAK7W,KAAL,CAAW,MAAX,CAAmBi2E,IAAI,CAAC96E,IAAxB,CAA8B,QAA9B,EACA,KAAK6E,KAAL,CAAW,YAAX,CAAyBi2E,IAAI,CAAC96E,IAA9B,EACD,CAnCM,CAoCPu8E,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,KAAK13E,KAAL,CAAW,MAAX,CAAmB,IAAnB,CAAyB,KAAzB,EACA,KAAKA,KAAL,CAAW,SAAX,EACD,CAvCM,CAwCPi3E,cAAc,CAAE,QAASA,CAAAA,cAAT,CAAwBp7E,KAAxB,CAA+B,CAC7C,GAAI4X,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAIkkE,CAAAA,iBAAiB,CAAG,QAASA,CAAAA,iBAAT,EAA6B,CACnDlkE,MAAM,CAACqgE,WAAP,CAAqBj4E,KAArB,CACA4X,MAAM,CAACzT,KAAP,CAAa,OAAb,CAAsBnE,KAAtB,EACD,CAHD,CAIA,GAAI,KAAKi4E,WAAL,GAAqBj4E,KAArB,EAA8B,KAAK4hB,WAAvC,CAAoD,CAClD,GAAIslC,CAAAA,MAAM,CAAG,KAAKtlC,WAAL,CAAiB5hB,KAAjB,CAAwB,KAAKi4E,WAA7B,CAAb,CACA,GAAI/wB,MAAM,EAAIA,MAAM,CAAC60B,IAArB,CAA2B,CACzB70B,MAAM,CAAC60B,IAAP,CAAY,UAAY,CACtBD,iBAAiB,GACjBlkE,MAAM,CAAC5H,KAAP,CAAakpE,GAAb,EAAoBthE,MAAM,CAAC5H,KAAP,CAAakpE,GAAb,CAAiBY,WAAjB,EAApB,CACD,CAHD,CAGG,UAAY,CACb;AACA;AACD,CAND,EAOD,CARD,IAQO,IAAI5yB,MAAM,GAAK,KAAf,CAAsB,CAC3B40B,iBAAiB,GAClB,CACF,CAbD,IAaO,CACLA,iBAAiB,GAClB,CACF,CA/DM,CAvDsD,CAyH/Dz2E,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,GAAIuqC,CAAAA,KAAJ,CAEA,GAAIrpC,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CACI2zE,cAAc,CAAG,KAAKA,cAD1B,CAEIC,eAAe,CAAG,KAAKA,eAF3B,CAGIC,YAAY,CAAG,KAAKA,YAHxB,CAII5D,WAAW,CAAG,KAAKA,WAJvB,CAKID,KAAK,CAAG,KAAKA,KALjB,CAMIhrB,QAAQ,CAAG,KAAKA,QANpB,CAOImuB,OAAO,CAAG,KAAKA,OAPnB,CAQI3E,WAAW,CAAG,KAAKA,WARvB,CASI4B,OAAO,CAAG,KAAKA,OATnB,CAYA,GAAI4D,CAAAA,SAAS,CAAGhvB,QAAQ,EAAImuB,OAAZ,CAAsBr0E,CAAC,CACrC,MADqC,CAErC,CACE,QAAS,kBADX,CAEEpF,EAAE,CAAE,CACF,QAASm6E,YADP,CAEF,UAAW,QAAS3pE,CAAAA,OAAT,CAAiB6I,EAAjB,CAAqB,CAC9B,GAAIA,EAAE,CAAC9O,OAAH,GAAe,EAAnB,CAAuB,CACrB4vE,YAAY,GACb,CACF,CANC,CAFN,CAUEryE,KAAK,CAAE,CACLmQ,QAAQ,CAAE,GADL,CAVT,CAFqC,CAgBrC,CAAC7S,CAAC,CAAC,GAAD,CAAM,CAAE,QAAS,cAAX,CAAN,CAAF,CAhBqC,CAAvB,CAiBZ,IAjBJ,CAmBA,GAAIm1E,CAAAA,OAAO,CAAG,CACZ94E,KAAK,CAAE,CACL80E,WAAW,CAAEA,WADR,CAELC,UAAU,CAAEyD,cAFP,CAGLxD,WAAW,CAAEyD,eAHR,CAIL5uB,QAAQ,CAAEA,QAJL,CAKLhlD,IAAI,CAAEA,IALD,CAMLgwE,KAAK,CAAEA,KANF,CAOLI,OAAO,CAAEA,OAPJ,CADK,CAUZvqE,GAAG,CAAE,KAVO,CAAd,CAYA,GAAIm+C,CAAAA,MAAM,CAAGllD,CAAC,CACZ,KADY,CAEZ,CAAE,QAAS,CAAC,iBAAD,CAAoB,MAAQ0vE,WAA5B,CAAX,CAFY,CAGZ,CAACwF,SAAD,CAAYl1E,CAAC,CAAC,SAAD,CAAYm1E,OAAZ,CAAb,CAHY,CAAd,CAKA,GAAIhmC,CAAAA,MAAM,CAAGnvC,CAAC,CACZ,KADY,CAEZ,CAAE,QAAS,kBAAX,CAFY,CAGZ,CAAC,KAAK+C,MAAL,CAAY5B,OAAb,CAHY,CAAd,CAMA,MAAOnB,CAAAA,CAAC,CACN,KADM,CAEN,CAAE,SAAUuqC,KAAK,CAAG,CAChB,UAAW,IADK,CAEhB,gBAAiBrpC,IAAI,GAAK,MAFV,CAAR,CAGPqpC,KAAK,CAAC,YAAcmlC,WAAf,CAAL,CAAmC,IAH5B,CAGkCnlC,KAAK,CAAC,sBAAD,CAAL,CAAgCrpC,IAAI,GAAK,aAH3E,CAG0FqpC,KAHpG,CAAF,CAFM,CAMN,CAACmlC,WAAW,GAAK,QAAhB,CAA2B,CAACxqB,MAAD,CAAS/V,MAAT,CAA3B,CAA8C,CAACA,MAAD,CAAS+V,MAAT,CAA/C,CANM,CAAR,CAQD,CA1L8D,CA2L/D32C,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAI,CAAC,KAAK4iE,WAAV,CAAuB,CACrB,KAAKmD,cAAL,CAAoB,GAApB,EACD,CAED,KAAK9lE,GAAL,CAAS,gBAAT,CAA2B,KAAK+lE,iBAAL,CAAuB96E,IAAvB,CAA4B,IAA5B,CAAkC,IAAlC,CAA3B,EACD,CAjM8D,CAkM/DqQ,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAKyqE,iBAAL,GACD,CApM8D,CAqM/DzmE,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAKymE,iBAAL,GACD,CAvM8D,CAApC,CAyM7B;AACC,4BAA6B,GAAIa,CAAAA,gCAAgC,CAAIlB,4BAAxC,CAC9B;AACA,GAAImB,CAAAA,WAAJ,CAAiBC,oBAAjB,CAKA,yBAEA,GAAIC,CAAAA,cAAc,CAAGl3E,kBAAkB,CACrC+2E,gCADqC,CAErCC,WAFqC,CAGrCC,oBAHqC,CAIrC,KAJqC,CAKrC,IALqC,CAMrC,IANqC,CAOrC,IAPqC,CAAvC,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIE,CAAAA,QAAJ,CAAe,CAC5BD,cAAc,CAAC12E,OAAf,CAAuByB,MAAvB,CAAgC,4BAAhC,CACA,4BAA6B,GAAIwvE,CAAAA,IAAI,CAAIyF,cAAc,CAAC19E,OAA3B,CAC7B;AAGA,0BACAi4E,IAAI,CAAC3pE,OAAL,CAAe,SAAUC,GAAV,CAAe,CAC5BA,GAAG,CAAChG,SAAJ,CAAc0vE,IAAI,CAACt3E,IAAnB,CAAyBs3E,IAAzB,EACD,CAFD,CAIA,4BAA6B,GAAI2F,CAAAA,aAAa,CAAI3F,IAArB,CAC7B;AACA,GAAI4F,CAAAA,4CAA4C,CAAG,QAA/CA,CAAAA,4CAA+C,EAAW,CAC5D,GAAIp7E,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAO,CAACD,GAAG,CAAC2uC,IAAL,EAAa3uC,GAAG,CAAC6vC,MAAjB,EAA2B7vC,GAAG,CAACW,MAA/B,CACHR,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACW,MAHb,CAIE2L,UAAU,CAAE,QAJd,CADU,CADd,CASEjM,WAAW,CAAE,aATf,CAUE+H,KAAK,CAAE,CACL0E,IAAI,CAAE,UADD,CAEL,cAAe,CAAC9M,GAAG,CAACW,MAFf,CAGLyP,EAAE,CAAE,QAAUpQ,GAAG,CAAC+1E,QAHb,CAIL,kBAAmB,OAAS/1E,GAAG,CAAC+1E,QAJ3B,CAVT,CAFA,CAmBA,CAAC/1E,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAD,CAnBA,CAoBA,CApBA,CADC,CAuBHhN,GAAG,CAACe,EAAJ,EAvBJ,CAwBD,CA5BD,CA6BA,GAAIs6E,CAAAA,qDAAqD,CAAG,EAA5D,CACAD,4CAA4C,CAACv5E,aAA7C,CAA6D,IAA7D,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAIy5E,CAAAA,gCAAgC,CAAI,CACnEp9E,IAAI,CAAE,WAD6D,CAGnEmV,aAAa,CAAE,WAHoD,CAKnEtR,KAAK,CAAE,CACLoI,KAAK,CAAE7C,MADF,CAELi0E,YAAY,CAAEjtE,QAFT,CAGLpQ,IAAI,CAAEoJ,MAHD,CAIL6xB,QAAQ,CAAEj3B,OAJL,CAKLrB,QAAQ,CAAEqB,OALL,CAMLysC,IAAI,CAAEzsC,OAND,CAL4D,CAcnE0B,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLkO,KAAK,CAAE,IADF,CAEL+9B,MAAM,CAAE,KAFH,CAAP,CAID,CAnBkE,CAsBnE5sC,QAAQ,CAAE,CACRi2E,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,MAAO,MAAK//C,QAAL,EAAiB,KAAK7vB,OAAL,CAAa6vB,QAArC,CACD,CAHO,CAIRx4B,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,GAAIA,CAAAA,MAAM,CAAG,KAAK2I,OAAL,CAAautE,WAAb,IAA8B,KAAK34E,IAAL,EAAa,KAAK4T,KAAhD,CAAb,CACA,GAAInR,MAAJ,CAAY,CACV,KAAKkvC,MAAL,CAAc,IAAd,CACD,CACD,MAAOlvC,CAAAA,MAAP,CACD,CAVO,CAWRo1E,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAK73E,IAAL,EAAa,KAAK4T,KAAzB,CACD,CAbO,CAtByD,CAsCnE0B,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAKlK,OAAL,CAAavG,KAAb,CAAmB,gBAAnB,EACD,CAxCkE,CAAxC,CA0C7B;AACC,4BAA6B,GAAIy4E,CAAAA,oCAAoC,CAAIF,gCAA5C,CAC9B;AAMA,yBAEA,GAAIG,CAAAA,kBAAkB,CAAG13E,kBAAkB,CACzCy3E,oCADyC,CAEzCJ,4CAFyC,CAGzCC,qDAHyC,CAIzC,KAJyC,CAKzC,IALyC,CAMzC,IANyC,CAOzC,IAPyC,CAA3C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIK,CAAAA,YAAJ,CAAmB,CAChCD,kBAAkB,CAACl3E,OAAnB,CAA2ByB,MAA3B,CAAoC,gCAApC,CACA,4BAA6B,GAAI21E,CAAAA,QAAQ,CAAIF,kBAAkB,CAACl+E,OAAnC,CAC7B;AAGA,0BACAo+E,QAAQ,CAAC9vE,OAAT,CAAmB,SAAUC,GAAV,CAAe,CAChCA,GAAG,CAAChG,SAAJ,CAAc61E,QAAQ,CAACz9E,IAAvB,CAA6By9E,QAA7B,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,iBAAiB,CAAID,QAAzB,CAC7B;AAEA,4BAA6B,GAAIE,CAAAA,2BAA2B,CAAI,CAC9D39E,IAAI,CAAE,OADwD,CAE9D6D,KAAK,CAAE,CACLurB,IAAI,CAAEhmB,MADD,CAEL6xB,QAAQ,CAAEj3B,OAFL,CAGL0E,IAAI,CAAEU,MAHD,CAILgyB,GAAG,CAAEp3B,OAJA,CAKL45E,kBAAkB,CAAE55E,OALf,CAML8f,KAAK,CAAE1a,MANF,CAOL2C,IAAI,CAAE3C,MAPD,CAQL8f,MAAM,CAAE,CACNxgB,IAAI,CAAEU,MADA,CAENT,OAAO,CAAE,OAFH,CAGNG,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmB5E,GAAnB,CAAwB,CACjC,MAAO,CAAC,MAAD,CAAS,OAAT,CAAkB,OAAlB,EAA2BS,OAA3B,CAAmCT,GAAnC,IAA4C,CAAC,CAApD,CACD,CALK,CARH,CAFuD,CAkB9DC,OAAO,CAAE,CACP6K,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqB5K,KAArB,CAA4B,CACvCA,KAAK,CAACsX,eAAN,GACA,KAAK7W,KAAL,CAAW,OAAX,CAAoBT,KAApB,EACD,CAJM,CAKPmX,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqBnX,KAArB,CAA4B,CACvC,KAAKS,KAAL,CAAW,OAAX,CAAoBT,KAApB,EACD,CAPM,CAlBqD,CA2B9DW,QAAQ,CAAE,CACR84E,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,MAAO,MAAK9xE,IAAL,EAAa,CAAC,KAAK+O,QAAL,EAAiB,EAAlB,EAAsB/O,IAA1C,CACD,CAHO,CA3BoD,CAgC9DhG,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,GAAIkB,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CACIm1E,OAAO,CAAG,KAAKA,OADnB,CAEIziD,GAAG,CAAG,KAAKA,GAFf,CAGIlS,MAAM,CAAG,KAAKA,MAHlB,CAKA,GAAIu1B,CAAAA,OAAO,CAAG,CAAC,QAAD,CAAW/1C,IAAI,CAAG,WAAaA,IAAhB,CAAuB,EAAtC,CAA0Cm1E,OAAO,CAAG,WAAaA,OAAhB,CAA0B,EAA3E,CAA+E30D,MAAM,CAAG,WAAaA,MAAhB,CAAyB,EAA9G,CAAkHkS,GAAG,EAAI,QAAzH,CAAd,CACA,GAAI0iD,CAAAA,KAAK,CAAGt2E,CAAC,CACX,MADW,CAEX,CACE,QAASi3C,OADX,CAEE9vC,KAAK,CAAE,CAAEqT,eAAe,CAAE,KAAK8B,KAAxB,CAFT,CAGE1hB,EAAE,CAAE,CACF,QAAS,KAAKmZ,WADZ,CAHN,CAFW,CASX,CAAC,KAAKhR,MAAL,CAAY5B,OAAb,CAAsB,KAAKsyB,QAAL,EAAiBzzB,CAAC,CAAC,GAAD,CAAM,CAAE,QAAS,6BAAX,CAA0CpF,EAAE,CAAE,CACxF,QAAS,KAAK4M,WAD0E,CAA9C,CAAN,CAAxC,CATW,CAAb,CAeA,MAAO,MAAK4uE,kBAAL,CAA0BE,KAA1B,CAAkCt2E,CAAC,CACxC,YADwC,CAExC,CACE0C,KAAK,CAAE,CAAElK,IAAI,CAAE,mBAAR,CADT,CAFwC,CAKxC,CAAC89E,KAAD,CALwC,CAA1C,CAOD,CA7D6D,CAAnC,CA+D7B;AACC,4BAA6B,GAAIC,CAAAA,+BAA+B,CAAIJ,2BAAvC,CAC9B;AACA,GAAIK,CAAAA,UAAJ,CAAgBC,mBAAhB,CAKA,yBAEA,GAAIC,CAAAA,aAAa,CAAGr4E,kBAAkB,CACpCk4E,+BADoC,CAEpCC,UAFoC,CAGpCC,mBAHoC,CAIpC,KAJoC,CAKpC,IALoC,CAMpC,IANoC,CAOpC,IAPoC,CAAtC,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIE,CAAAA,OAAJ,CAAc,CAC3BD,aAAa,CAAC73E,OAAd,CAAsByB,MAAtB,CAA+B,0BAA/B,CACA,4BAA6B,GAAI6M,CAAAA,GAAG,CAAIupE,aAAa,CAAC7+E,OAAzB,CAC7B;AAGA,0BACAsV,GAAG,CAAChH,OAAJ,CAAc,SAAUC,GAAV,CAAe,CAC3BA,GAAG,CAAChG,SAAJ,CAAc+M,GAAG,CAAC3U,IAAlB,CAAwB2U,GAAxB,EACD,CAFD,CAIA,4BAA6B,GAAIypE,CAAAA,YAAY,CAAIzpE,GAApB,CAC7B;AACA,GAAI0pE,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAIv8E,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,SADf,CAEEK,KAAK,CAAE,CACL,6BAA8BV,GAAG,CAACw8E,gBAD7B,CAEL,cAAe,CAAC,CAACx8E,GAAG,CAACgkD,SAAJ,CAAcy4B,YAF1B,CAGL,oBAAqB,CAACz8E,GAAG,CAACgkD,SAAJ,CAAc04B,SAH/B,CAIL,gBAAiB18E,GAAG,CAACgkD,SAAJ,CAAc24B,QAAd,GAA2B,OAJvC,CAFT,CAQEv0E,KAAK,CAAE,CAAE0E,IAAI,CAAE,MAAR,CART,CAFO,CAYP,CACE9M,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAAC6rC,IAAJ,CAASnvB,UAAhB,CAA4B,SAASC,KAAT,CAAgB,CAC1C,MAAOxc,CAAAA,EAAE,CAAC,cAAD,CAAiB,CACxBjB,GAAG,CAAEc,GAAG,CAAC48E,UAAJ,CAAejgE,KAAf,CADmB,CAExBvU,KAAK,CAAE,CACLo3C,IAAI,CAAE7iC,KADD,CAEL5a,KAAK,CAAE/B,GAAG,CAAC+B,KAFN,CAGL,sBAAuB/B,GAAG,CAAC68E,iBAHtB,CAIL,gBAAiB78E,GAAG,CAAC88E,YAJhB,CAKL,iBAAkB98E,GAAG,CAAC+8E,aALjB,CAFiB,CASxBz8E,EAAE,CAAE,CAAE,cAAeN,GAAG,CAACg9E,gBAArB,CAToB,CAAjB,CAAT,CAWD,CAZD,CADF,CAcEh9E,GAAG,CAACi9E,OAAJ,CACI98E,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,sBAAf,CAAR,CAAiD,CACjDF,EAAE,CAAC,MAAD,CAAS,CAAEE,WAAW,CAAE,qBAAf,CAAT,CAAiD,CACjDL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACk7B,SAAX,CAAP,CADiD,CAAjD,CAD+C,CAAjD,CADN,CAMIl7B,GAAG,CAACe,EAAJ,EApBN,CAqBEZ,EAAE,CAAC,KAAD,CAAQ,CACRgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACgkD,SAAJ,CAAck5B,iBAHvB,CAIE5wE,UAAU,CAAE,6BAJd,CADU,CADJ,CASRG,GAAG,CAAE,eATG,CAURpM,WAAW,CAAE,yBAVL,CAAR,CArBJ,CAZO,CA8CP,CA9CO,CAAT,CAgDD,CApDD,CAqDA,GAAI88E,CAAAA,iDAAiD,CAAG,EAAxD,CACAZ,wCAAwC,CAAC16E,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA,GAAIu7E,CAAAA,QAAQ,CAAG,aAAf,CAEA,GAAIC,CAAAA,YAAY,CAAG,QAASA,CAAAA,YAAT,CAAsB79B,IAAtB,CAA4B57C,IAA5B,CAAkC,CACnD,GAAI,CAACA,IAAD,EAASA,IAAI,CAACw5E,QAAD,CAAjB,CAA6B,OAC7B/+E,MAAM,CAACC,cAAP,CAAsBsF,IAAtB,CAA4Bw5E,QAA5B,CAAsC,CACpCx+E,KAAK,CAAE4gD,IAAI,CAACpvC,EADwB,CAEpC7R,UAAU,CAAE,KAFwB,CAGpC++E,YAAY,CAAE,KAHsB,CAIpCC,QAAQ,CAAE,KAJ0B,CAAtC,EAMD,CARD,CAUA,GAAIC,CAAAA,eAAe,CAAG,QAASZ,CAAAA,UAAT,CAAoB19E,GAApB,CAAyB0E,IAAzB,CAA+B,CACnD,GAAI,CAAC1E,GAAL,CAAU,MAAO0E,CAAAA,IAAI,CAACw5E,QAAD,CAAX,CACV,MAAOx5E,CAAAA,IAAI,CAAC1E,GAAD,CAAX,CACD,CAHD,CAKA,GAAIu+E,CAAAA,oBAAoB,CAAG,QAASA,CAAAA,oBAAT,CAA8BhhE,OAA9B,CAAuCpJ,aAAvC,CAAsD,CAC/E,GAAI9Q,CAAAA,MAAM,CAAGka,OAAb,CACA,MAAOla,MAAM,EAAIA,MAAM,CAACC,OAAP,GAAmB,MAApC,CAA4C,CAC1C,GAAID,MAAM,CAACglE,OAAP,EAAkBhlE,MAAM,CAACglE,OAAP,CAAeliE,QAAf,CAAwBnH,IAAxB,GAAiCmV,aAAvD,CAAsE,CACpE,MAAO9Q,CAAAA,MAAM,CAACglE,OAAd,CACD,CACDhlE,MAAM,CAAGA,MAAM,CAACoN,UAAhB,CACD,CACD,MAAO,KAAP,CACD,CATD,CAUA;AACA,GAAI+tE,CAAAA,YAAY,CAAG,UAAY,CAAE,QAASC,CAAAA,gBAAT,CAA0Bp7E,MAA1B,CAAkCR,KAAlC,CAAyC,CAAE,IAAK,GAAInE,CAAAA,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGmE,KAAK,CAAC+T,MAA1B,CAAkClY,CAAC,EAAnC,CAAuC,CAAE,GAAIy2E,CAAAA,UAAU,CAAGtyE,KAAK,CAACnE,CAAD,CAAtB,CAA2By2E,UAAU,CAAC91E,UAAX,CAAwB81E,UAAU,CAAC91E,UAAX,EAAyB,KAAjD,CAAwD81E,UAAU,CAACiJ,YAAX,CAA0B,IAA1B,CAAgC,GAAI,SAAWjJ,CAAAA,UAAf,CAA2BA,UAAU,CAACkJ,QAAX,CAAsB,IAAtB,CAA4Bl/E,MAAM,CAACC,cAAP,CAAsBiE,MAAtB,CAA8B8xE,UAAU,CAACn1E,GAAzC,CAA8Cm1E,UAA9C,EAA4D,CAAE,CAAC,MAAO,UAAUn9B,WAAV,CAAuB0mC,UAAvB,CAAmCC,WAAnC,CAAgD,CAAE,GAAID,UAAJ,CAAgBD,gBAAgB,CAACzmC,WAAW,CAACz3C,SAAb,CAAwBm+E,UAAxB,CAAhB,CAAqD,GAAIC,WAAJ,CAAiBF,gBAAgB,CAACzmC,WAAD,CAAc2mC,WAAd,CAAhB,CAA4C,MAAO3mC,CAAAA,WAAP,CAAqB,CAAhN,CAAmN,CAA9hB,EAAnB,CAEA,QAAS4mC,CAAAA,mBAAT,CAA6BvjE,QAA7B,CAAuC28B,WAAvC,CAAoD,CAAE,GAAI,EAAE38B,QAAQ,WAAY28B,CAAAA,WAAtB,CAAJ,CAAwC,CAAE,KAAM,IAAIC,CAAAA,SAAJ,CAAc,mCAAd,CAAN,CAA2D,CAAE,CAM7J,GAAI4mC,CAAAA,aAAa,CAAG,QAASA,CAAAA,aAAT,CAAuBv+B,IAAvB,CAA6B,CAC/C,GAAIw+B,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,IAAI,CAAG,IAAX,CACA,GAAIC,CAAAA,iBAAiB,CAAG,IAAxB,CACA,IAAK,GAAItgF,CAAAA,CAAC,CAAG,CAAR,CAAW+1C,CAAC,CAAG6L,IAAI,CAAC1pC,MAAzB,CAAiClY,CAAC,CAAG+1C,CAArC,CAAwC/1C,CAAC,EAAzC,CAA6C,CAC3C,GAAIwB,CAAAA,CAAC,CAAGogD,IAAI,CAAC5hD,CAAD,CAAZ,CACA,GAAIwB,CAAC,CAACyyB,OAAF,GAAc,IAAd,EAAsBzyB,CAAC,CAAC21B,aAA5B,CAA2C,CACzCipD,GAAG,CAAG,KAAN,CACA,GAAI,CAAC5+E,CAAC,CAACyB,QAAP,CAAiB,CACfq9E,iBAAiB,CAAG,KAApB,CACD,CACF,CACD,GAAI9+E,CAAC,CAACyyB,OAAF,GAAc,KAAd,EAAuBzyB,CAAC,CAAC21B,aAA7B,CAA4C,CAC1CkpD,IAAI,CAAG,KAAP,CACD,CACF,CAED,MAAO,CAAED,GAAG,CAAEA,GAAP,CAAYC,IAAI,CAAEA,IAAlB,CAAwBC,iBAAiB,CAAEA,iBAA3C,CAA8D7X,IAAI,CAAE,CAAC2X,GAAD,EAAQ,CAACC,IAA7E,CAAP,CACD,CAlBD,CAoBA,GAAIE,CAAAA,aAAa,CAAG,QAASA,CAAAA,aAAT,CAAuB3+B,IAAvB,CAA6B,CAC/C,GAAIA,IAAI,CAAC9iC,UAAL,CAAgB5G,MAAhB,GAA2B,CAA/B,CAAkC,OAElC,GAAIsoE,CAAAA,cAAc,CAAGL,aAAa,CAACv+B,IAAI,CAAC9iC,UAAN,CAAlC,CACIshE,GAAG,CAAGI,cAAc,CAACJ,GADzB,CAEIC,IAAI,CAAGG,cAAc,CAACH,IAF1B,CAGI5X,IAAI,CAAG+X,cAAc,CAAC/X,IAH1B,CAKA,GAAI2X,GAAJ,CAAS,CACPx+B,IAAI,CAAC3tB,OAAL,CAAe,IAAf,CACA2tB,IAAI,CAACzqB,aAAL,CAAqB,KAArB,CACD,CAHD,IAGO,IAAIsxC,IAAJ,CAAU,CACf7mB,IAAI,CAAC3tB,OAAL,CAAe,KAAf,CACA2tB,IAAI,CAACzqB,aAAL,CAAqB,IAArB,CACD,CAHM,IAGA,IAAIkpD,IAAJ,CAAU,CACfz+B,IAAI,CAAC3tB,OAAL,CAAe,KAAf,CACA2tB,IAAI,CAACzqB,aAAL,CAAqB,KAArB,CACD,CAED,GAAIhwB,CAAAA,MAAM,CAAGy6C,IAAI,CAACz6C,MAAlB,CACA,GAAI,CAACA,MAAD,EAAWA,MAAM,CAAConC,KAAP,GAAiB,CAAhC,CAAmC,OAEnC,GAAI,CAACqT,IAAI,CAAC7pB,KAAL,CAAW0oD,aAAhB,CAA+B,CAC7BF,aAAa,CAACp5E,MAAD,CAAb,CACD,CACF,CAzBD,CA2BA,GAAIu5E,CAAAA,mBAAmB,CAAG,QAASA,CAAAA,mBAAT,CAA6B9+B,IAA7B,CAAmCvL,IAAnC,CAAyC,CACjE,GAAIlyC,CAAAA,KAAK,CAAGy9C,IAAI,CAAC7pB,KAAL,CAAW5zB,KAAvB,CACA,GAAI6B,CAAAA,IAAI,CAAG47C,IAAI,CAAC57C,IAAL,EAAa,EAAxB,CACA,GAAIknC,CAAAA,MAAM,CAAG/oC,KAAK,CAACkyC,IAAD,CAAlB,CAEA,GAAI,MAAOnJ,CAAAA,MAAP,GAAkB,UAAtB,CAAkC,CAChC,MAAOA,CAAAA,MAAM,CAAClnC,IAAD,CAAO47C,IAAP,CAAb,CACD,CAFD,IAEO,IAAI,MAAO1U,CAAAA,MAAP,GAAkB,QAAtB,CAAgC,CACrC,MAAOlnC,CAAAA,IAAI,CAACknC,MAAD,CAAX,CACD,CAFM,IAEA,IAAI,MAAOA,CAAAA,MAAP,GAAkB,WAAtB,CAAmC,CACxC,GAAIyzC,CAAAA,QAAQ,CAAG36E,IAAI,CAACqwC,IAAD,CAAnB,CACA,MAAOsqC,CAAAA,QAAQ,GAAK/yE,SAAb,CAAyB,EAAzB,CAA8B+yE,QAArC,CACD,CACF,CAbD,CAeA,GAAIC,CAAAA,UAAU,CAAG,CAAjB,CAEA,GAAIC,CAAAA,SAAS,CAAG,UAAY,CAC1B,QAASC,CAAAA,IAAT,CAAcn6E,OAAd,CAAuB,CACrBu5E,mBAAmB,CAAC,IAAD,CAAOY,IAAP,CAAnB,CAEA,KAAKtuE,EAAL,CAAUouE,UAAU,EAApB,CACA,KAAKlxD,IAAL,CAAY,IAAZ,CACA,KAAKuE,OAAL,CAAe,KAAf,CACA,KAAKkD,aAAL,CAAqB,KAArB,CACA,KAAKnxB,IAAL,CAAY,IAAZ,CACA,KAAKkpC,QAAL,CAAgB,KAAhB,CACA,KAAK/nC,MAAL,CAAc,IAAd,CACA,KAAKsH,OAAL,CAAe,IAAf,CACA,KAAKsyE,SAAL,CAAiB,KAAjB,CAEA,IAAK,GAAIzgF,CAAAA,IAAT,GAAiBqG,CAAAA,OAAjB,CAA0B,CACxB,GAAIA,OAAO,CAAC7E,cAAR,CAAuBxB,IAAvB,CAAJ,CAAkC,CAChC,KAAKA,IAAL,EAAaqG,OAAO,CAACrG,IAAD,CAApB,CACD,CACF,CAED;AACA,KAAKiuC,KAAL,CAAa,CAAb,CACA,KAAK0D,MAAL,CAAc,KAAd,CACA,KAAKnzB,UAAL,CAAkB,EAAlB,CACA,KAAK/J,OAAL,CAAe,KAAf,CAEA,GAAI,KAAK5N,MAAT,CAAiB,CACf,KAAKonC,KAAL,CAAa,KAAKpnC,MAAL,CAAYonC,KAAZ,CAAoB,CAAjC,CACD,CAED,GAAIxW,CAAAA,KAAK,CAAG,KAAKA,KAAjB,CACA,GAAI,CAACA,KAAL,CAAY,CACV,KAAM,IAAI6U,CAAAA,KAAJ,CAAU,0BAAV,CAAN,CACD,CACD7U,KAAK,CAACipD,YAAN,CAAmB,IAAnB,EAEA,GAAI78E,CAAAA,KAAK,CAAG4zB,KAAK,CAAC5zB,KAAlB,CACA,GAAIA,KAAK,EAAI,MAAOA,CAAAA,KAAK,CAAC88E,MAAb,GAAwB,WAArC,CAAkD,CAChD,GAAIA,CAAAA,MAAM,CAAGP,mBAAmB,CAAC,IAAD,CAAO,QAAP,CAAhC,CACA,GAAI,MAAOO,CAAAA,MAAP,GAAkB,SAAtB,CAAiC,CAC/B,KAAKC,YAAL,CAAoBD,MAApB,CACD,CACF,CAED,GAAIlpD,KAAK,CAACgZ,IAAN,GAAe,IAAf,EAAuB,KAAK/qC,IAAhC,CAAsC,CACpC,KAAK6xC,OAAL,CAAa,KAAK7xC,IAAlB,EAEA,GAAI+xB,KAAK,CAAC0W,gBAAV,CAA4B,CAC1B,KAAKS,QAAL,CAAgB,IAAhB,CACD,CACF,CAND,IAMO,IAAI,KAAKX,KAAL,CAAa,CAAb,EAAkBxW,KAAK,CAACgZ,IAAxB,EAAgChZ,KAAK,CAAC0W,gBAA1C,CAA4D,CACjE,KAAKD,MAAL,GACD,CACD,GAAI,CAACjlC,KAAK,CAAC4C,OAAN,CAAc,KAAKnG,IAAnB,CAAL,CAA+B,CAC7By5E,YAAY,CAAC,IAAD,CAAO,KAAKz5E,IAAZ,CAAZ,CACD,CACD,GAAI,CAAC,KAAKA,IAAV,CAAgB,OAChB,GAAIm7E,CAAAA,mBAAmB,CAAGppD,KAAK,CAACopD,mBAAhC,CACA,GAAI7/E,CAAAA,GAAG,CAAGy2B,KAAK,CAACz2B,GAAhB,CACA,GAAIA,GAAG,EAAI6/E,mBAAP,EAA8BA,mBAAmB,CAACl8E,OAApB,CAA4B,KAAK3D,GAAjC,IAA0C,CAAC,CAA7E,CAAgF,CAC9E,KAAKktC,MAAL,CAAY,IAAZ,CAAkBzW,KAAK,CAACqpD,gBAAxB,EACD,CAED,GAAI9/E,GAAG,EAAIy2B,KAAK,CAACspD,cAAN,GAAyBzzE,SAAhC,EAA6C,KAAKtM,GAAL,GAAay2B,KAAK,CAACspD,cAApE,CAAoF,CAClFtpD,KAAK,CAACupD,WAAN,CAAoB,IAApB,CACAvpD,KAAK,CAACupD,WAAN,CAAkBP,SAAlB,CAA8B,IAA9B,CACD,CAED,GAAIhpD,KAAK,CAACgZ,IAAV,CAAgB,CACdhZ,KAAK,CAACwpD,uBAAN,CAA8B,IAA9B,EACD,CAED,KAAKC,eAAL,GACD,CAEDV,IAAI,CAACj/E,SAAL,CAAeg2C,OAAf,CAAyB,QAASA,CAAAA,OAAT,CAAiB7xC,IAAjB,CAAuB,CAC9C,GAAI,CAACuD,KAAK,CAAC4C,OAAN,CAAcnG,IAAd,CAAL,CAA0B,CACxBy5E,YAAY,CAAC,IAAD,CAAOz5E,IAAP,CAAZ,CACD,CAED,KAAKA,IAAL,CAAYA,IAAZ,CACA,KAAK8Y,UAAL,CAAkB,EAAlB,CAEA,GAAIzT,CAAAA,QAAQ,CAAG,IAAK,EAApB,CACA,GAAI,KAAKkjC,KAAL,GAAe,CAAf,EAAoB,KAAKvoC,IAAL,WAAqBuD,CAAAA,KAA7C,CAAoD,CAClD8B,QAAQ,CAAG,KAAKrF,IAAhB,CACD,CAFD,IAEO,CACLqF,QAAQ,CAAGq1E,mBAAmB,CAAC,IAAD,CAAO,UAAP,CAAnB,EAAyC,EAApD,CACD,CAED,IAAK,GAAI1gF,CAAAA,CAAC,CAAG,CAAR,CAAW+1C,CAAC,CAAG1qC,QAAQ,CAAC6M,MAA7B,CAAqClY,CAAC,CAAG+1C,CAAzC,CAA4C/1C,CAAC,EAA7C,CAAiD,CAC/C,KAAKyhF,WAAL,CAAiB,CAAEz7E,IAAI,CAAEqF,QAAQ,CAACrL,CAAD,CAAhB,CAAjB,EACD,CACF,CAlBD,CAoBA8gF,IAAI,CAACj/E,SAAL,CAAe29B,QAAf,CAA0B,QAASA,CAAAA,QAAT,CAAkB76B,MAAlB,CAA0B,CAClD,GAAI8vD,CAAAA,IAAI,CAAG10C,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,IAA/E,CAEA,GAAI2hE,CAAAA,IAAI,CAAG,QAASA,CAAAA,IAAT,CAAcv6E,MAAd,CAAsB,CAC/B,GAAIkE,CAAAA,QAAQ,CAAGlE,MAAM,CAAC2X,UAAP,EAAqB,EAApC,CACA,GAAI8O,CAAAA,MAAM,CAAG,KAAb,CACA,IAAK,GAAI5tB,CAAAA,CAAC,CAAG,CAAR,CAAW+1C,CAAC,CAAG1qC,QAAQ,CAAC6M,MAA7B,CAAqClY,CAAC,CAAG+1C,CAAzC,CAA4C/1C,CAAC,EAA7C,CAAiD,CAC/C,GAAI+e,CAAAA,KAAK,CAAG1T,QAAQ,CAACrL,CAAD,CAApB,CACA,GAAI+e,KAAK,GAAKpa,MAAV,EAAoB8vD,IAAI,EAAIitB,IAAI,CAAC3iE,KAAD,CAApC,CAA6C,CAC3C6O,MAAM,CAAG,IAAT,CACA,MACD,CACF,CACD,MAAOA,CAAAA,MAAP,CACD,CAXD,CAaA,MAAO8zD,CAAAA,IAAI,CAAC,IAAD,CAAX,CACD,CAjBD,CAmBAZ,IAAI,CAACj/E,SAAL,CAAe8/E,MAAf,CAAwB,QAASA,CAAAA,MAAT,EAAkB,CACxC,GAAIx6E,CAAAA,MAAM,CAAG,KAAKA,MAAlB,CACA,GAAIA,MAAJ,CAAY,CACVA,MAAM,CAAC6K,WAAP,CAAmB,IAAnB,EACD,CACF,CALD,CAOA8uE,IAAI,CAACj/E,SAAL,CAAe4/E,WAAf,CAA6B,QAASA,CAAAA,WAAT,CAAqB1iE,KAArB,CAA4B7K,KAA5B,CAAmC0tE,KAAnC,CAA0C,CACrE,GAAI,CAAC7iE,KAAL,CAAY,KAAM,IAAI6tB,CAAAA,KAAJ,CAAU,uCAAV,CAAN,CAEZ,GAAI,EAAE7tB,KAAK,WAAY+hE,CAAAA,IAAnB,CAAJ,CAA8B,CAC5B,GAAI,CAACc,KAAL,CAAY,CACV,GAAIv2E,CAAAA,QAAQ,CAAG,KAAKw2E,WAAL,CAAiB,IAAjB,CAAf,CACA,GAAIx2E,QAAQ,CAACpG,OAAT,CAAiB8Z,KAAK,CAAC/Y,IAAvB,IAAiC,CAAC,CAAtC,CAAyC,CACvC,GAAI,MAAOkO,CAAAA,KAAP,GAAiB,WAAjB,EAAgCA,KAAK,CAAG,CAA5C,CAA+C,CAC7C7I,QAAQ,CAAC5F,IAAT,CAAcsZ,KAAK,CAAC/Y,IAApB,EACD,CAFD,IAEO,CACLqF,QAAQ,CAACgZ,MAAT,CAAgBnQ,KAAhB,CAAuB,CAAvB,CAA0B6K,KAAK,CAAC/Y,IAAhC,EACD,CACF,CACF,CACDioB,aAAa,GAAGlP,KAAH,CAAU,CACrB5X,MAAM,CAAE,IADa,CAErB4wB,KAAK,CAAE,KAAKA,KAFS,CAAV,CAAb,CAIAhZ,KAAK,CAAG,GAAI+hE,CAAAA,IAAJ,CAAS/hE,KAAT,CAAR,CACD,CAEDA,KAAK,CAACwvB,KAAN,CAAc,KAAKA,KAAL,CAAa,CAA3B,CAEA,GAAI,MAAOr6B,CAAAA,KAAP,GAAiB,WAAjB,EAAgCA,KAAK,CAAG,CAA5C,CAA+C,CAC7C,KAAK4K,UAAL,CAAgBrZ,IAAhB,CAAqBsZ,KAArB,EACD,CAFD,IAEO,CACL,KAAKD,UAAL,CAAgBuF,MAAhB,CAAuBnQ,KAAvB,CAA8B,CAA9B,CAAiC6K,KAAjC,EACD,CAED,KAAKyiE,eAAL,GACD,CA9BD,CAgCAV,IAAI,CAACj/E,SAAL,CAAeigF,YAAf,CAA8B,QAASA,CAAAA,YAAT,CAAsB/iE,KAAtB,CAA6BlQ,GAA7B,CAAkC,CAC9D,GAAIqF,CAAAA,KAAK,CAAG,IAAK,EAAjB,CACA,GAAIrF,GAAJ,CAAS,CACPqF,KAAK,CAAG,KAAK4K,UAAL,CAAgB7Z,OAAhB,CAAwB4J,GAAxB,CAAR,CACD,CACD,KAAK4yE,WAAL,CAAiB1iE,KAAjB,CAAwB7K,KAAxB,EACD,CAND,CAQA4sE,IAAI,CAACj/E,SAAL,CAAekgF,WAAf,CAA6B,QAASA,CAAAA,WAAT,CAAqBhjE,KAArB,CAA4BlQ,GAA5B,CAAiC,CAC5D,GAAIqF,CAAAA,KAAK,CAAG,IAAK,EAAjB,CACA,GAAIrF,GAAJ,CAAS,CACPqF,KAAK,CAAG,KAAK4K,UAAL,CAAgB7Z,OAAhB,CAAwB4J,GAAxB,CAAR,CACA,GAAIqF,KAAK,GAAK,CAAC,CAAf,CAAkBA,KAAK,EAAI,CAAT,CACnB,CACD,KAAKutE,WAAL,CAAiB1iE,KAAjB,CAAwB7K,KAAxB,EACD,CAPD,CASA4sE,IAAI,CAACj/E,SAAL,CAAemQ,WAAf,CAA6B,QAASA,CAAAA,WAAT,CAAqB+M,KAArB,CAA4B,CACvD,GAAI1T,CAAAA,QAAQ,CAAG,KAAKw2E,WAAL,IAAsB,EAArC,CACA,GAAIG,CAAAA,SAAS,CAAG32E,QAAQ,CAACpG,OAAT,CAAiB8Z,KAAK,CAAC/Y,IAAvB,CAAhB,CACA,GAAIg8E,SAAS,CAAG,CAAC,CAAjB,CAAoB,CAClB32E,QAAQ,CAACgZ,MAAT,CAAgB29D,SAAhB,CAA2B,CAA3B,EACD,CAED,GAAI9tE,CAAAA,KAAK,CAAG,KAAK4K,UAAL,CAAgB7Z,OAAhB,CAAwB8Z,KAAxB,CAAZ,CAEA,GAAI7K,KAAK,CAAG,CAAC,CAAb,CAAgB,CACd,KAAK6jB,KAAL,EAAc,KAAKA,KAAL,CAAWkqD,cAAX,CAA0BljE,KAA1B,CAAd,CACAA,KAAK,CAAC5X,MAAN,CAAe,IAAf,CACA,KAAK2X,UAAL,CAAgBuF,MAAhB,CAAuBnQ,KAAvB,CAA8B,CAA9B,EACD,CAED,KAAKstE,eAAL,GACD,CAhBD,CAkBAV,IAAI,CAACj/E,SAAL,CAAeqgF,iBAAf,CAAmC,QAASA,CAAAA,iBAAT,CAA2Bl8E,IAA3B,CAAiC,CAClE,GAAIm8E,CAAAA,UAAU,CAAG,IAAjB,CAEA,IAAK,GAAIniF,CAAAA,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG,KAAK8e,UAAL,CAAgB5G,MAApC,CAA4ClY,CAAC,EAA7C,CAAiD,CAC/C,GAAI,KAAK8e,UAAL,CAAgB9e,CAAhB,EAAmBgG,IAAnB,GAA4BA,IAAhC,CAAsC,CACpCm8E,UAAU,CAAG,KAAKrjE,UAAL,CAAgB9e,CAAhB,CAAb,CACA,MACD,CACF,CAED,GAAImiF,UAAJ,CAAgB,CACd,KAAKnwE,WAAL,CAAiBmwE,UAAjB,EACD,CACF,CAbD,CAeArB,IAAI,CAACj/E,SAAL,CAAe2sC,MAAf,CAAwB,QAASA,CAAAA,MAAT,CAAgBtR,QAAhB,CAA0BklD,YAA1B,CAAwC,CAC9D,GAAIh2E,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAIi2E,CAAAA,IAAI,CAAG,QAASA,CAAAA,IAAT,EAAgB,CACzB,GAAID,YAAJ,CAAkB,CAChB,GAAIj7E,CAAAA,MAAM,CAAGiF,KAAK,CAACjF,MAAnB,CACA,MAAOA,MAAM,CAAConC,KAAP,CAAe,CAAtB,CAAyB,CACvBpnC,MAAM,CAAC+nC,QAAP,CAAkB,IAAlB,CACA/nC,MAAM,CAAGA,MAAM,CAACA,MAAhB,CACD,CACF,CACDiF,KAAK,CAAC8iC,QAAN,CAAiB,IAAjB,CACA,GAAIhS,QAAJ,CAAcA,QAAQ,GACvB,CAVD,CAYA,GAAI,KAAKolD,cAAL,EAAJ,CAA2B,CACzB,KAAKvvC,QAAL,CAAc,SAAU/sC,IAAV,CAAgB,CAC5B,GAAIA,IAAI,WAAYuD,CAAAA,KAApB,CAA2B,CACzB,GAAI6C,KAAK,CAAC6nB,OAAV,CAAmB,CACjB7nB,KAAK,CAACm2E,UAAN,CAAiB,IAAjB,CAAuB,IAAvB,EACD,CAFD,IAEO,IAAI,CAACn2E,KAAK,CAAC2rB,KAAN,CAAY0oD,aAAjB,CAAgC,CACrCF,aAAa,CAACn0E,KAAD,CAAb,CACD,CACDi2E,IAAI,GACL,CACF,CATD,EAUD,CAXD,IAWO,CACLA,IAAI,GACL,CACF,CA7BD,CA+BAvB,IAAI,CAACj/E,SAAL,CAAe2gF,gBAAf,CAAkC,QAASA,CAAAA,gBAAT,CAA0Bj9E,KAA1B,CAAiC,CACjE,GAAIsI,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI40E,CAAAA,YAAY,CAAG1iE,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,EAAvF,CAEAxa,KAAK,CAAC+F,OAAN,CAAc,SAAUL,IAAV,CAAgB,CAC5B4C,MAAM,CAAC4zE,WAAP,CAAmBxzD,aAAa,GAAG,CAAEjoB,IAAI,CAAEiF,IAAR,CAAH,CAAmBw3E,YAAnB,CAAhC,CAAkE70E,SAAlE,CAA6E,IAA7E,EACD,CAFD,EAGD,CARD,CAUAkzE,IAAI,CAACj/E,SAAL,CAAewgB,QAAf,CAA0B,QAASA,CAAAA,QAAT,EAAoB,CAC5C,KAAK6sB,QAAL,CAAgB,KAAhB,CACD,CAFD,CAIA4xC,IAAI,CAACj/E,SAAL,CAAeygF,cAAf,CAAgC,QAASA,CAAAA,cAAT,EAA0B,CACxD,MAAO,MAAKvqD,KAAL,CAAWgZ,IAAX,GAAoB,IAApB,EAA4B,KAAKhZ,KAAL,CAAWkb,IAAvC,EAA+C,CAAC,KAAKhB,MAA5D,CACD,CAFD,CAIA6uC,IAAI,CAACj/E,SAAL,CAAe2/E,eAAf,CAAiC,QAASA,CAAAA,eAAT,EAA2B,CAC1D,GAAI,KAAKzpD,KAAL,CAAWgZ,IAAX,GAAoB,IAApB,EAA4B,KAAKkB,MAAL,GAAgB,IAA5C,EAAoD,MAAO,MAAKivC,YAAZ,GAA6B,WAArF,CAAkG,CAChG,KAAKD,MAAL,CAAc,KAAKC,YAAnB,CACA,OACD,CACD,GAAIpiE,CAAAA,UAAU,CAAG,KAAKA,UAAtB,CACA,GAAI,CAAC,KAAKiZ,KAAL,CAAWgZ,IAAZ,EAAoB,KAAKhZ,KAAL,CAAWgZ,IAAX,GAAoB,IAApB,EAA4B,KAAKkB,MAAL,GAAgB,IAApE,CAA0E,CACxE,KAAKgvC,MAAL,CAAc,CAACniE,UAAD,EAAeA,UAAU,CAAC5G,MAAX,GAAsB,CAAnD,CACA,OACD,CACD,KAAK+oE,MAAL,CAAc,KAAd,CACD,CAXD,CAaAH,IAAI,CAACj/E,SAAL,CAAe0gF,UAAf,CAA4B,QAASA,CAAAA,UAAT,CAAoBvhF,KAApB,CAA2ByzD,IAA3B,CAAiCiuB,SAAjC,CAA4CC,SAA5C,CAAuD,CACjF,GAAI/pE,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAKue,aAAL,CAAqBn2B,KAAK,GAAK,MAA/B,CACA,KAAKizB,OAAL,CAAejzB,KAAK,GAAK,IAAzB,CAEA,GAAI,KAAK+2B,KAAL,CAAW0oD,aAAf,CAA8B,OAE9B,GAAI,EAAE,KAAK6B,cAAL,IAAyB,CAAC,KAAKvqD,KAAL,CAAW6qD,gBAAvC,CAAJ,CAA8D,CAC5D,GAAIC,CAAAA,eAAe,CAAG1C,aAAa,CAAC,KAAKrhE,UAAN,CAAnC,CACIshE,GAAG,CAAGyC,eAAe,CAACzC,GAD1B,CAEIE,iBAAiB,CAAGuC,eAAe,CAACvC,iBAFxC,CAIA,GAAI,CAAC,KAAKW,MAAN,EAAgB,CAACb,GAAjB,EAAwBE,iBAA5B,CAA+C,CAC7C,KAAKrsD,OAAL,CAAe,KAAf,CACAjzB,KAAK,CAAG,KAAR,CACD,CAED,GAAI8hF,CAAAA,iBAAiB,CAAG,QAASA,CAAAA,iBAAT,EAA6B,CACnD,GAAIruB,IAAJ,CAAU,CACR,GAAI31C,CAAAA,UAAU,CAAGlG,MAAM,CAACkG,UAAxB,CACA,IAAK,GAAI9e,CAAAA,CAAC,CAAG,CAAR,CAAW+1C,CAAC,CAAGj3B,UAAU,CAAC5G,MAA/B,CAAuClY,CAAC,CAAG+1C,CAA3C,CAA8C/1C,CAAC,EAA/C,CAAmD,CACjD,GAAI+e,CAAAA,KAAK,CAAGD,UAAU,CAAC9e,CAAD,CAAtB,CACA2iF,SAAS,CAAGA,SAAS,EAAI3hF,KAAK,GAAK,KAAnC,CACA,GAAI+hF,CAAAA,OAAO,CAAGhkE,KAAK,CAAC9b,QAAN,CAAiB8b,KAAK,CAACkV,OAAvB,CAAiC0uD,SAA/C,CACA5jE,KAAK,CAACwjE,UAAN,CAAiBQ,OAAjB,CAA0BtuB,IAA1B,CAAgC,IAAhC,CAAsCkuB,SAAtC,EACD,CAED,GAAIK,CAAAA,eAAe,CAAG7C,aAAa,CAACrhE,UAAD,CAAnC,CACI2pD,IAAI,CAAGua,eAAe,CAACva,IAD3B,CAEIwa,IAAI,CAAGD,eAAe,CAAC5C,GAF3B,CAIA,GAAI,CAAC6C,IAAL,CAAW,CACTrqE,MAAM,CAACqb,OAAP,CAAiBgvD,IAAjB,CACArqE,MAAM,CAACue,aAAP,CAAuBsxC,IAAvB,CACD,CACF,CACF,CAnBD,CAqBA,GAAI,KAAK6Z,cAAL,EAAJ,CAA2B,CACzB;AACA,KAAKvvC,QAAL,CAAc,UAAY,CACxB+vC,iBAAiB,GACjBvC,aAAa,CAAC3nE,MAAD,CAAb,CACD,CAHD,CAGG,CACDqb,OAAO,CAAEjzB,KAAK,GAAK,KADlB,CAHH,EAMA,OACD,CATD,IASO,CACL8hF,iBAAiB,GAClB,CACF,CAED,GAAI37E,CAAAA,MAAM,CAAG,KAAKA,MAAlB,CACA,GAAI,CAACA,MAAD,EAAWA,MAAM,CAAConC,KAAP,GAAiB,CAAhC,CAAmC,OAEnC,GAAI,CAACm0C,SAAL,CAAgB,CACdnC,aAAa,CAACp5E,MAAD,CAAb,CACD,CACF,CA3DD,CA6DA25E,IAAI,CAACj/E,SAAL,CAAeggF,WAAf,CAA6B,QAASA,CAAAA,WAAT,EAAuB,CAClD,GAAIqB,CAAAA,SAAS,CAAGnjE,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAApF,CACA;AACA,GAAI,KAAKwuB,KAAL,GAAe,CAAnB,CAAsB,MAAO,MAAKvoC,IAAZ,CACtB,GAAIA,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CACA,GAAI,CAACA,IAAL,CAAW,MAAO,KAAP,CAEX,GAAI7B,CAAAA,KAAK,CAAG,KAAK4zB,KAAL,CAAW5zB,KAAvB,CACA,GAAIkH,CAAAA,QAAQ,CAAG,UAAf,CACA,GAAIlH,KAAJ,CAAW,CACTkH,QAAQ,CAAGlH,KAAK,CAACkH,QAAN,EAAkB,UAA7B,CACD,CAED,GAAIrF,IAAI,CAACqF,QAAD,CAAJ,GAAmBuC,SAAvB,CAAkC,CAChC5H,IAAI,CAACqF,QAAD,CAAJ,CAAiB,IAAjB,CACD,CAED,GAAI63E,SAAS,EAAI,CAACl9E,IAAI,CAACqF,QAAD,CAAtB,CAAkC,CAChCrF,IAAI,CAACqF,QAAD,CAAJ,CAAiB,EAAjB,CACD,CAED,MAAOrF,CAAAA,IAAI,CAACqF,QAAD,CAAX,CACD,CAtBD,CAwBAy1E,IAAI,CAACj/E,SAAL,CAAeshF,cAAf,CAAgC,QAASA,CAAAA,cAAT,EAA0B,CACxD,GAAI/pE,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAIgqE,CAAAA,OAAO,CAAG,KAAKvB,WAAL,IAAsB,EAApC,CACA,GAAIwB,CAAAA,OAAO,CAAG,KAAKvkE,UAAL,CAAgB9T,GAAhB,CAAoB,SAAU42C,IAAV,CAAgB,CAChD,MAAOA,CAAAA,IAAI,CAAC57C,IAAZ,CACD,CAFa,CAAd,CAIA,GAAIs9E,CAAAA,UAAU,CAAG,EAAjB,CACA,GAAIC,CAAAA,QAAQ,CAAG,EAAf,CAEAH,OAAO,CAAC93E,OAAR,CAAgB,SAAUL,IAAV,CAAgBiJ,KAAhB,CAAuB,CACrC,GAAI5S,CAAAA,GAAG,CAAG2J,IAAI,CAACu0E,QAAD,CAAd,CACA,GAAIgE,CAAAA,YAAY,CAAG,CAAC,CAACliF,GAAF,EAASb,MAAM,CAACoI,KAAK,CAAC,gBAAD,CAAN,CAAN,CAAgCw6E,OAAhC,CAAyC,SAAUr9E,IAAV,CAAgB,CACnF,MAAOA,CAAAA,IAAI,CAACw5E,QAAD,CAAJ,GAAmBl+E,GAA1B,CACD,CAF2B,GAEtB,CAFN,CAGA,GAAIkiF,YAAJ,CAAkB,CAChBF,UAAU,CAAChiF,GAAD,CAAV,CAAkB,CAAE4S,KAAK,CAAEA,KAAT,CAAgBlO,IAAI,CAAEiF,IAAtB,CAAlB,CACD,CAFD,IAEO,CACLs4E,QAAQ,CAAC99E,IAAT,CAAc,CAAEyO,KAAK,CAAEA,KAAT,CAAgBlO,IAAI,CAAEiF,IAAtB,CAAd,EACD,CACF,CAVD,EAYA,GAAI,CAAC,KAAK8sB,KAAL,CAAWgZ,IAAhB,CAAsB,CACpBsyC,OAAO,CAAC/3E,OAAR,CAAgB,SAAUL,IAAV,CAAgB,CAC9B,GAAI,CAACq4E,UAAU,CAACr4E,IAAI,CAACu0E,QAAD,CAAL,CAAf,CAAiCpmE,MAAM,CAAC8oE,iBAAP,CAAyBj3E,IAAzB,EAClC,CAFD,EAGD,CAEDs4E,QAAQ,CAACj4E,OAAT,CAAiB,SAAU0B,IAAV,CAAgB,CAC/B,GAAIkH,CAAAA,KAAK,CAAGlH,IAAI,CAACkH,KAAjB,CACIlO,IAAI,CAAGgH,IAAI,CAAChH,IADhB,CAGAoT,MAAM,CAACqoE,WAAP,CAAmB,CAAEz7E,IAAI,CAAEA,IAAR,CAAnB,CAAmCkO,KAAnC,EACD,CALD,EAOA,KAAKstE,eAAL,GACD,CArCD,CAuCAV,IAAI,CAACj/E,SAAL,CAAekxC,QAAf,CAA0B,QAASA,CAAAA,QAAT,CAAkB7V,QAAlB,CAA4B,CACpD,GAAIxU,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI+5D,CAAAA,YAAY,CAAG1iE,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,EAAvF,CAEA,GAAI,KAAKgY,KAAL,CAAWgZ,IAAX,GAAoB,IAApB,EAA4B,KAAKhZ,KAAL,CAAWkb,IAAvC,EAA+C,CAAC,KAAKhB,MAArD,GAAgE,CAAC,KAAKl9B,OAAN,EAAiBtU,MAAM,CAAC4f,IAAP,CAAYoiE,YAAZ,EAA0BvqE,MAA3G,CAAJ,CAAwH,CACtH,KAAKnD,OAAL,CAAe,IAAf,CAEA,GAAI+6D,CAAAA,OAAO,CAAG,QAASA,CAAAA,OAAT,CAAiBzkE,QAAjB,CAA2B,CACvCqd,MAAM,CAACupB,MAAP,CAAgB,IAAhB,CACAvpB,MAAM,CAAC3T,OAAP,CAAiB,KAAjB,CACA2T,MAAM,CAAC5J,UAAP,CAAoB,EAApB,CAEA4J,MAAM,CAAC85D,gBAAP,CAAwBn3E,QAAxB,CAAkCo3E,YAAlC,EAEA/5D,MAAM,CAAC84D,eAAP,GACA,GAAItkD,QAAJ,CAAc,CACZA,QAAQ,CAACh9B,IAAT,CAAcwoB,MAAd,CAAsBrd,QAAtB,EACD,CACF,CAXD,CAaA,KAAK0sB,KAAL,CAAWkb,IAAX,CAAgB,IAAhB,CAAsB68B,OAAtB,EACD,CAjBD,IAiBO,CACL,GAAI5yC,QAAJ,CAAc,CACZA,QAAQ,CAACh9B,IAAT,CAAc,IAAd,EACD,CACF,CACF,CA3BD,CA6BA4/E,YAAY,CAACgB,IAAD,CAAO,CAAC,CAClBx/E,GAAG,CAAE,OADa,CAElBV,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,MAAO8/E,CAAAA,mBAAmB,CAAC,IAAD,CAAO,OAAP,CAA1B,CACD,CAJiB,CAAD,CAKhB,CACDp/E,GAAG,CAAE,KADJ,CAEDV,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,GAAI6iF,CAAAA,OAAO,CAAG,KAAK1rD,KAAL,CAAWz2B,GAAzB,CACA,GAAI,KAAK0E,IAAT,CAAe,MAAO,MAAKA,IAAL,CAAUy9E,OAAV,CAAP,CACf,MAAO,KAAP,CACD,CANA,CALgB,CAYhB,CACDniF,GAAG,CAAE,UADJ,CAEDV,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,MAAO8/E,CAAAA,mBAAmB,CAAC,IAAD,CAAO,UAAP,CAA1B,CACD,CAJA,CAZgB,CAiBhB,CACDp/E,GAAG,CAAE,aADJ,CAEDV,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,GAAIuG,CAAAA,MAAM,CAAG,KAAKA,MAAlB,CACA,GAAIA,MAAJ,CAAY,CACV,GAAI+M,CAAAA,KAAK,CAAG/M,MAAM,CAAC2X,UAAP,CAAkB7Z,OAAlB,CAA0B,IAA1B,CAAZ,CACA,GAAIiP,KAAK,CAAG,CAAC,CAAb,CAAgB,CACd,MAAO/M,CAAAA,MAAM,CAAC2X,UAAP,CAAkB5K,KAAK,CAAG,CAA1B,CAAP,CACD,CACF,CACD,MAAO,KAAP,CACD,CAXA,CAjBgB,CA6BhB,CACD5S,GAAG,CAAE,iBADJ,CAEDV,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,GAAIuG,CAAAA,MAAM,CAAG,KAAKA,MAAlB,CACA,GAAIA,MAAJ,CAAY,CACV,GAAI+M,CAAAA,KAAK,CAAG/M,MAAM,CAAC2X,UAAP,CAAkB7Z,OAAlB,CAA0B,IAA1B,CAAZ,CACA,GAAIiP,KAAK,CAAG,CAAC,CAAb,CAAgB,CACd,MAAOA,CAAAA,KAAK,CAAG,CAAR,CAAY/M,MAAM,CAAC2X,UAAP,CAAkB5K,KAAK,CAAG,CAA1B,CAAZ,CAA2C,IAAlD,CACD,CACF,CACD,MAAO,KAAP,CACD,CAXA,CA7BgB,CAAP,CAAZ,CA2CA,MAAO4sE,CAAAA,IAAP,CACD,CA9ce,EAAhB,CAgdA,4BAA6B,GAAI4C,CAAAA,UAAU,CAAI7C,SAAlB,CAC7B;AACA,GAAI8C,CAAAA,iBAAiB,CAAG,MAAO7iF,CAAAA,MAAP,GAAkB,UAAlB,EAAgC,SAAOA,MAAM,CAACm+B,QAAd,IAA2B,QAA3D,CAAsE,SAAUC,GAAV,CAAe,CAAE,gBAAcA,GAAd,EAAoB,CAA3G,CAA8G,SAAUA,GAAV,CAAe,CAAE,MAAOA,CAAAA,GAAG,EAAI,MAAOp+B,CAAAA,MAAP,GAAkB,UAAzB,EAAuCo+B,GAAG,CAACC,WAAJ,GAAoBr+B,MAA3D,EAAqEo+B,GAAG,GAAKp+B,MAAM,CAACe,SAApF,CAAgG,QAAhG,UAAkHq9B,GAAlH,CAAP,CAA+H,CAAtR,CAEA,QAAS0kD,CAAAA,yBAAT,CAAmCjnE,QAAnC,CAA6C28B,WAA7C,CAA0D,CAAE,GAAI,EAAE38B,QAAQ,WAAY28B,CAAAA,WAAtB,CAAJ,CAAwC,CAAE,KAAM,IAAIC,CAAAA,SAAJ,CAAc,mCAAd,CAAN,CAA2D,CAAE,CAKnK,GAAIsqC,CAAAA,oBAAoB,CAAG,UAAY,CACrC,QAASC,CAAAA,SAAT,CAAmBn9E,OAAnB,CAA4B,CAC1B,GAAIyF,CAAAA,KAAK,CAAG,IAAZ,CAEAw3E,yBAAyB,CAAC,IAAD,CAAOE,SAAP,CAAzB,CAEA,KAAKxC,WAAL,CAAmB,IAAnB,CACA,KAAKD,cAAL,CAAsB,IAAtB,CAEA,IAAK,GAAI//C,CAAAA,MAAT,GAAmB36B,CAAAA,OAAnB,CAA4B,CAC1B,GAAIA,OAAO,CAAC7E,cAAR,CAAuBw/B,MAAvB,CAAJ,CAAoC,CAClC,KAAKA,MAAL,EAAe36B,OAAO,CAAC26B,MAAD,CAAtB,CACD,CACF,CAED,KAAKyiD,QAAL,CAAgB,EAAhB,CAEA,KAAK91C,IAAL,CAAY,GAAIy1C,CAAAA,UAAJ,CAAe,CACzB19E,IAAI,CAAE,KAAKA,IADc,CAEzB+xB,KAAK,CAAE,IAFkB,CAAf,CAAZ,CAKA,GAAI,KAAKgZ,IAAL,EAAa,KAAKkC,IAAtB,CAA4B,CAC1B,GAAI+wC,CAAAA,MAAM,CAAG,KAAK/wC,IAAlB,CACA+wC,MAAM,CAAC,KAAK/1C,IAAN,CAAY,SAAUjoC,IAAV,CAAgB,CAChCoG,KAAK,CAAC6hC,IAAN,CAAWu0C,gBAAX,CAA4Bx8E,IAA5B,EACAoG,KAAK,CAAC63E,wBAAN,GACD,CAHK,CAAN,CAID,CAND,IAMO,CACL,KAAKA,wBAAL,GACD,CACF,CAEDH,SAAS,CAACjiF,SAAV,CAAoBmgB,MAApB,CAA6B,QAASA,CAAAA,MAAT,CAAgBhhB,KAAhB,CAAuB,CAClD,GAAIkjF,CAAAA,gBAAgB,CAAG,KAAKA,gBAA5B,CACA,GAAInzC,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CACA,GAAI4Q,CAAAA,QAAQ,CAAG,QAASA,CAAAA,QAAT,CAAkBC,IAAlB,CAAwB,CACrC,GAAI9iC,CAAAA,UAAU,CAAG8iC,IAAI,CAAC3T,IAAL,CAAY2T,IAAI,CAAC3T,IAAL,CAAUnvB,UAAtB,CAAmC8iC,IAAI,CAAC9iC,UAAzD,CAEAA,UAAU,CAACxT,OAAX,CAAmB,SAAUyT,KAAV,CAAiB,CAClCA,KAAK,CAACtQ,OAAN,CAAgBy1E,gBAAgB,CAAChkF,IAAjB,CAAsB6e,KAAtB,CAA6B/d,KAA7B,CAAoC+d,KAAK,CAAC/Y,IAA1C,CAAgD+Y,KAAhD,CAAhB,CAEA4iC,QAAQ,CAAC5iC,KAAD,CAAR,CACD,CAJD,EAMA,GAAI,CAAC6iC,IAAI,CAACnzC,OAAN,EAAiBqQ,UAAU,CAAC5G,MAAhC,CAAwC,CACtC,GAAIisE,CAAAA,SAAS,CAAG,IAAhB,CACAA,SAAS,CAAG,CAACrlE,UAAU,CAAC+W,IAAX,CAAgB,SAAU9W,KAAV,CAAiB,CAC5C,MAAOA,CAAAA,KAAK,CAACtQ,OAAb,CACD,CAFY,CAAb,CAIA,GAAImzC,IAAI,CAAC3T,IAAT,CAAe,CACb2T,IAAI,CAAC3T,IAAL,CAAUx/B,OAAV,CAAoB01E,SAAS,GAAK,KAAlC,CACD,CAFD,IAEO,CACLviC,IAAI,CAACnzC,OAAL,CAAe01E,SAAS,GAAK,KAA7B,CACD,CACF,CACD,GAAI,CAACnjF,KAAL,CAAY,OAEZ,GAAI4gD,IAAI,CAACnzC,OAAL,EAAgB,CAACmzC,IAAI,CAACq/B,MAAtB,EAAgC,CAAClwC,IAArC,CAA2C6Q,IAAI,CAACpT,MAAL,GAC5C,CAxBD,CA0BAmT,QAAQ,CAAC,IAAD,CAAR,CACD,CA9BD,CAgCAmiC,SAAS,CAACjiF,SAAV,CAAoBg2C,OAApB,CAA8B,QAASA,CAAAA,OAAT,CAAiB5rC,MAAjB,CAAyB,CACrD,GAAIm4E,CAAAA,eAAe,CAAGn4E,MAAM,GAAK,KAAKgiC,IAAL,CAAUjoC,IAA3C,CACA,GAAIo+E,eAAJ,CAAqB,CACnB,KAAKn2C,IAAL,CAAU4J,OAAV,CAAkB5rC,MAAlB,EACA,KAAKg4E,wBAAL,GACD,CAHD,IAGO,CACL,KAAKh2C,IAAL,CAAUk1C,cAAV,GACD,CACF,CARD,CAUAW,SAAS,CAACjiF,SAAV,CAAoBwiF,OAApB,CAA8B,QAASA,CAAAA,OAAT,CAAiBr+E,IAAjB,CAAuB,CACnD,GAAIA,IAAI,WAAY09E,CAAAA,UAApB,CAAgC,MAAO19E,CAAAA,IAAP,CAChC,GAAI1E,CAAAA,GAAG,CAAG,CAAC,MAAO0E,CAAAA,IAAP,GAAgB,WAAhB,CAA8B,WAA9B,CAA4C29E,iBAAiB,CAAC39E,IAAD,CAA9D,IAA0E,QAA1E,CAAqFA,IAArF,CAA4F45E,eAAe,CAAC,KAAKt+E,GAAN,CAAW0E,IAAX,CAArH,CACA,MAAO,MAAK+9E,QAAL,CAAcziF,GAAd,GAAsB,IAA7B,CACD,CAJD,CAMAwiF,SAAS,CAACjiF,SAAV,CAAoBigF,YAApB,CAAmC,QAASA,CAAAA,YAAT,CAAsB97E,IAAtB,CAA4Bs+E,OAA5B,CAAqC,CACtE,GAAIC,CAAAA,OAAO,CAAG,KAAKF,OAAL,CAAaC,OAAb,CAAd,CACAC,OAAO,CAACp9E,MAAR,CAAe26E,YAAf,CAA4B,CAAE97E,IAAI,CAAEA,IAAR,CAA5B,CAA4Cu+E,OAA5C,EACD,CAHD,CAKAT,SAAS,CAACjiF,SAAV,CAAoBkgF,WAApB,CAAkC,QAASA,CAAAA,WAAT,CAAqB/7E,IAArB,CAA2Bs+E,OAA3B,CAAoC,CACpE,GAAIC,CAAAA,OAAO,CAAG,KAAKF,OAAL,CAAaC,OAAb,CAAd,CACAC,OAAO,CAACp9E,MAAR,CAAe46E,WAAf,CAA2B,CAAE/7E,IAAI,CAAEA,IAAR,CAA3B,CAA2Cu+E,OAA3C,EACD,CAHD,CAKAT,SAAS,CAACjiF,SAAV,CAAoB8/E,MAApB,CAA6B,QAASA,CAAAA,MAAT,CAAgB37E,IAAhB,CAAsB,CACjD,GAAI47C,CAAAA,IAAI,CAAG,KAAKyiC,OAAL,CAAar+E,IAAb,CAAX,CAEA,GAAI47C,IAAI,EAAIA,IAAI,CAACz6C,MAAjB,CAAyB,CACvB,GAAIy6C,IAAI,GAAK,KAAK0/B,WAAlB,CAA+B,CAC7B,KAAKA,WAAL,CAAmB,IAAnB,CACD,CACD1/B,IAAI,CAACz6C,MAAL,CAAY6K,WAAZ,CAAwB4vC,IAAxB,EACD,CACF,CATD,CAWAkiC,SAAS,CAACjiF,SAAV,CAAoB8R,MAApB,CAA6B,QAASA,CAAAA,MAAT,CAAgB3N,IAAhB,CAAsBw+E,UAAtB,CAAkC,CAC7D,GAAIzyE,CAAAA,UAAU,CAAGyyE,UAAU,CAAG,KAAKH,OAAL,CAAaG,UAAb,CAAH,CAA8B,KAAKv2C,IAA9D,CAEA,GAAIl8B,UAAJ,CAAgB,CACdA,UAAU,CAAC0vE,WAAX,CAAuB,CAAEz7E,IAAI,CAAEA,IAAR,CAAvB,EACD,CACF,CAND,CAQA89E,SAAS,CAACjiF,SAAV,CAAoBoiF,wBAApB,CAA+C,QAASA,CAAAA,wBAAT,EAAoC,CACjF,GAAIp2E,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI42E,CAAAA,kBAAkB,CAAG,KAAKA,kBAAL,EAA2B,EAApD,CACA,GAAIV,CAAAA,QAAQ,CAAG,KAAKA,QAApB,CAEAU,kBAAkB,CAACn5E,OAAnB,CAA2B,SAAUo5E,UAAV,CAAsB,CAC/C,GAAI9iC,CAAAA,IAAI,CAAGmiC,QAAQ,CAACW,UAAD,CAAnB,CAEA,GAAI9iC,IAAJ,CAAU,CACRA,IAAI,CAAC2gC,UAAL,CAAgB,IAAhB,CAAsB,CAAC10E,MAAM,CAAC4yE,aAA9B,EACD,CACF,CAND,EAOD,CAbD,CAeAqD,SAAS,CAACjiF,SAAV,CAAoB0/E,uBAApB,CAA8C,QAASA,CAAAA,uBAAT,CAAiC3/B,IAAjC,CAAuC,CACnF,GAAI6iC,CAAAA,kBAAkB,CAAG,KAAKA,kBAAL,EAA2B,EAApD,CAEA,GAAIA,kBAAkB,CAACx/E,OAAnB,CAA2B28C,IAAI,CAACtgD,GAAhC,IAAyC,CAAC,CAA9C,CAAiD,CAC/CsgD,IAAI,CAAC2gC,UAAL,CAAgB,IAAhB,CAAsB,CAAC,KAAK9B,aAA5B,EACD,CACF,CAND,CAQAqD,SAAS,CAACjiF,SAAV,CAAoB8iF,oBAApB,CAA2C,QAASA,CAAAA,oBAAT,CAA8B14E,MAA9B,CAAsC,CAC/E,GAAIA,MAAM,GAAK,KAAKw4E,kBAApB,CAAwC,CACtC,KAAKA,kBAAL,CAA0Bx4E,MAA1B,CACA,KAAKg4E,wBAAL,GACD,CACF,CALD,CAOAH,SAAS,CAACjiF,SAAV,CAAoBm/E,YAApB,CAAmC,QAASA,CAAAA,YAAT,CAAsBp/B,IAAtB,CAA4B,CAC7D,GAAItgD,CAAAA,GAAG,CAAG,KAAKA,GAAf,CACA,GAAI,CAACA,GAAD,EAAQ,CAACsgD,IAAT,EAAiB,CAACA,IAAI,CAAC57C,IAA3B,CAAiC,OAEjC,GAAIy9E,CAAAA,OAAO,CAAG7hC,IAAI,CAACtgD,GAAnB,CACA,GAAImiF,OAAO,GAAK71E,SAAhB,CAA2B,KAAKm2E,QAAL,CAAcniC,IAAI,CAACtgD,GAAnB,EAA0BsgD,IAA1B,CAC5B,CAND,CAQAkiC,SAAS,CAACjiF,SAAV,CAAoBogF,cAApB,CAAqC,QAASA,CAAAA,cAAT,CAAwBrgC,IAAxB,CAA8B,CACjE,GAAIhpC,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAItX,CAAAA,GAAG,CAAG,KAAKA,GAAf,CACA,GAAI,CAACA,GAAD,EAAQ,CAACsgD,IAAT,EAAiB,CAACA,IAAI,CAAC57C,IAA3B,CAAiC,OAEjC47C,IAAI,CAAC9iC,UAAL,CAAgBxT,OAAhB,CAAwB,SAAUyT,KAAV,CAAiB,CACvCnG,MAAM,CAACqpE,cAAP,CAAsBljE,KAAtB,EACD,CAFD,EAIA,MAAO,MAAKglE,QAAL,CAAcniC,IAAI,CAACtgD,GAAnB,CAAP,CACD,CAXD,CAaAwiF,SAAS,CAACjiF,SAAV,CAAoB+iF,eAApB,CAAsC,QAASA,CAAAA,eAAT,EAA2B,CAC/D,GAAIC,CAAAA,QAAQ,CAAG9kE,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAAnF,CACA,GAAI+kE,CAAAA,kBAAkB,CAAG/kE,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAA7F,CAEA,GAAIglE,CAAAA,YAAY,CAAG,EAAnB,CACA,GAAIpjC,CAAAA,QAAQ,CAAG,QAASA,CAAAA,QAAT,CAAkBC,IAAlB,CAAwB,CACrC,GAAI9iC,CAAAA,UAAU,CAAG8iC,IAAI,CAAC3T,IAAL,CAAY2T,IAAI,CAAC3T,IAAL,CAAUnvB,UAAtB,CAAmC8iC,IAAI,CAAC9iC,UAAzD,CAEAA,UAAU,CAACxT,OAAX,CAAmB,SAAUyT,KAAV,CAAiB,CAClC,GAAI,CAACA,KAAK,CAACkV,OAAN,EAAiB6wD,kBAAkB,EAAI/lE,KAAK,CAACoY,aAA9C,IAAiE,CAAC0tD,QAAD,EAAaA,QAAQ,EAAI9lE,KAAK,CAACkiE,MAAhG,CAAJ,CAA6G,CAC3G8D,YAAY,CAACt/E,IAAb,CAAkBsZ,KAAK,CAAC/Y,IAAxB,EACD,CAED27C,QAAQ,CAAC5iC,KAAD,CAAR,CACD,CAND,EAOD,CAVD,CAYA4iC,QAAQ,CAAC,IAAD,CAAR,CAEA,MAAOojC,CAAAA,YAAP,CACD,CApBD,CAsBAjB,SAAS,CAACjiF,SAAV,CAAoBmjF,cAApB,CAAqC,QAASA,CAAAA,cAAT,EAA0B,CAC7D,GAAI5rE,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAIyrE,CAAAA,QAAQ,CAAG9kE,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAAnF,CAEA,MAAO,MAAK6kE,eAAL,CAAqBC,QAArB,EAA+B75E,GAA/B,CAAmC,SAAUhF,IAAV,CAAgB,CACxD,MAAO,CAACA,IAAI,EAAI,EAAT,EAAaoT,MAAM,CAAC9X,GAApB,CAAP,CACD,CAFM,CAAP,CAGD,CARD,CAUAwiF,SAAS,CAACjiF,SAAV,CAAoBojF,mBAApB,CAA0C,QAASA,CAAAA,mBAAT,EAA+B,CACvE,GAAIjjC,CAAAA,KAAK,CAAG,EAAZ,CACA,GAAIL,CAAAA,QAAQ,CAAG,QAASA,CAAAA,QAAT,CAAkBC,IAAlB,CAAwB,CACrC,GAAI9iC,CAAAA,UAAU,CAAG8iC,IAAI,CAAC3T,IAAL,CAAY2T,IAAI,CAAC3T,IAAL,CAAUnvB,UAAtB,CAAmC8iC,IAAI,CAAC9iC,UAAzD,CAEAA,UAAU,CAACxT,OAAX,CAAmB,SAAUyT,KAAV,CAAiB,CAClC,GAAIA,KAAK,CAACoY,aAAV,CAAyB,CACvB6qB,KAAK,CAACv8C,IAAN,CAAWsZ,KAAK,CAAC/Y,IAAjB,EACD,CAED27C,QAAQ,CAAC5iC,KAAD,CAAR,CACD,CAND,EAOD,CAVD,CAYA4iC,QAAQ,CAAC,IAAD,CAAR,CAEA,MAAOK,CAAAA,KAAP,CACD,CAjBD,CAmBA8hC,SAAS,CAACjiF,SAAV,CAAoBqjF,kBAApB,CAAyC,QAASA,CAAAA,kBAAT,EAA8B,CACrE,GAAIx8D,CAAAA,MAAM,CAAG,IAAb,CAEA,MAAO,MAAKu8D,mBAAL,GAA2Bj6E,GAA3B,CAA+B,SAAUhF,IAAV,CAAgB,CACpD,MAAO,CAACA,IAAI,EAAI,EAAT,EAAa0iB,MAAM,CAACpnB,GAApB,CAAP,CACD,CAFM,CAAP,CAGD,CAND,CAQAwiF,SAAS,CAACjiF,SAAV,CAAoBsjF,YAApB,CAAmC,QAASA,CAAAA,YAAT,EAAwB,CACzD,GAAIC,CAAAA,QAAQ,CAAG,EAAf,CACA,GAAIrB,CAAAA,QAAQ,CAAG,KAAKA,QAApB,CACA,IAAK,GAAIN,CAAAA,OAAT,GAAoBM,CAAAA,QAApB,CAA8B,CAC5B,GAAIA,QAAQ,CAACjiF,cAAT,CAAwB2hF,OAAxB,CAAJ,CAAsC,CACpC2B,QAAQ,CAAC3/E,IAAT,CAAcs+E,QAAQ,CAACN,OAAD,CAAtB,EACD,CACF,CAED,MAAO2B,CAAAA,QAAP,CACD,CAVD,CAYAtB,SAAS,CAACjiF,SAAV,CAAoBshF,cAApB,CAAqC,QAASA,CAAAA,cAAT,CAAwB7hF,GAAxB,CAA6B0E,IAA7B,CAAmC,CACtE,GAAI47C,CAAAA,IAAI,CAAG,KAAKmiC,QAAL,CAAcziF,GAAd,CAAX,CACA,GAAI,CAACsgD,IAAL,CAAW,OACX,GAAI9iC,CAAAA,UAAU,CAAG8iC,IAAI,CAAC9iC,UAAtB,CACA,IAAK,GAAI9e,CAAAA,CAAC,CAAG8e,UAAU,CAAC5G,MAAX,CAAoB,CAAjC,CAAoClY,CAAC,EAAI,CAAzC,CAA4CA,CAAC,EAA7C,CAAiD,CAC/C,GAAI+e,CAAAA,KAAK,CAAGD,UAAU,CAAC9e,CAAD,CAAtB,CACA,KAAK2hF,MAAL,CAAY5iE,KAAK,CAAC/Y,IAAlB,EACD,CACD,IAAK,GAAIN,CAAAA,EAAE,CAAG,CAAT,CAAYqwC,CAAC,CAAG/vC,IAAI,CAACkS,MAA1B,CAAkCxS,EAAE,CAAGqwC,CAAvC,CAA0CrwC,EAAE,EAA5C,CAAgD,CAC9C,GAAI2/E,CAAAA,MAAM,CAAGr/E,IAAI,CAACN,EAAD,CAAjB,CACA,KAAKiO,MAAL,CAAY0xE,MAAZ,CAAoBzjC,IAAI,CAAC57C,IAAzB,EACD,CACF,CAZD,CAcA89E,SAAS,CAACjiF,SAAV,CAAoByjF,eAApB,CAAsC,QAASA,CAAAA,eAAT,CAAyBhkF,GAAzB,CAA8B,CAClE,GAAIujF,CAAAA,QAAQ,CAAG9kE,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAAnF,CACA,GAAIwlE,CAAAA,WAAW,CAAGxlE,SAAS,CAAC,CAAD,CAA3B,CAEA,GAAIqlE,CAAAA,QAAQ,CAAG,KAAKD,YAAL,GAAoBt5C,IAApB,CAAyB,SAAU//B,CAAV,CAAa8zB,CAAb,CAAgB,CACtD,MAAOA,CAAAA,CAAC,CAAC2O,KAAF,CAAUziC,CAAC,CAACyiC,KAAnB,CACD,CAFc,CAAf,CAGA,GAAIi3C,CAAAA,KAAK,CAAG/kF,MAAM,CAACY,MAAP,CAAc,IAAd,CAAZ,CACA,GAAIgf,CAAAA,IAAI,CAAG5f,MAAM,CAAC4f,IAAP,CAAYklE,WAAZ,CAAX,CACAH,QAAQ,CAAC95E,OAAT,CAAiB,SAAUs2C,IAAV,CAAgB,CAC/B,MAAOA,CAAAA,IAAI,CAAC2gC,UAAL,CAAgB,KAAhB,CAAuB,KAAvB,CAAP,CACD,CAFD,EAGA,IAAK,GAAIviF,CAAAA,CAAC,CAAG,CAAR,CAAW+1C,CAAC,CAAGqvC,QAAQ,CAACltE,MAA7B,CAAqClY,CAAC,CAAG+1C,CAAzC,CAA4C/1C,CAAC,EAA7C,CAAiD,CAC/C,GAAI4hD,CAAAA,IAAI,CAAGwjC,QAAQ,CAACplF,CAAD,CAAnB,CACA,GAAIyjF,CAAAA,OAAO,CAAG7hC,IAAI,CAAC57C,IAAL,CAAU1E,GAAV,EAAeykB,QAAf,EAAd,CACA,GAAIkO,CAAAA,OAAO,CAAG5T,IAAI,CAACpb,OAAL,CAAaw+E,OAAb,EAAwB,CAAC,CAAvC,CACA,GAAI,CAACxvD,OAAL,CAAc,CACZ,GAAI2tB,IAAI,CAAC3tB,OAAL,EAAgB,CAACuxD,KAAK,CAAC/B,OAAD,CAA1B,CAAqC,CACnC7hC,IAAI,CAAC2gC,UAAL,CAAgB,KAAhB,CAAuB,KAAvB,EACD,CACD,SACD,CAED,GAAIp7E,CAAAA,MAAM,CAAGy6C,IAAI,CAACz6C,MAAlB,CACA,MAAOA,MAAM,EAAIA,MAAM,CAAConC,KAAP,CAAe,CAAhC,CAAmC,CACjCi3C,KAAK,CAACr+E,MAAM,CAACnB,IAAP,CAAY1E,GAAZ,CAAD,CAAL,CAA0B,IAA1B,CACA6F,MAAM,CAAGA,MAAM,CAACA,MAAhB,CACD,CAED,GAAIy6C,IAAI,CAACq/B,MAAL,EAAe,KAAKR,aAAxB,CAAuC,CACrC7+B,IAAI,CAAC2gC,UAAL,CAAgB,IAAhB,CAAsB,KAAtB,EACA,SACD,CACD3gC,IAAI,CAAC2gC,UAAL,CAAgB,IAAhB,CAAsB,IAAtB,EAEA,GAAIsC,QAAJ,CAAc,CACZ,CAAC,UAAY,CACXjjC,IAAI,CAAC2gC,UAAL,CAAgB,KAAhB,CAAuB,KAAvB,EACA,GAAI5gC,CAAAA,QAAQ,CAAG,QAASA,CAAAA,QAAT,CAAkBC,IAAlB,CAAwB,CACrC,GAAI9iC,CAAAA,UAAU,CAAG8iC,IAAI,CAAC9iC,UAAtB,CACAA,UAAU,CAACxT,OAAX,CAAmB,SAAUyT,KAAV,CAAiB,CAClC,GAAI,CAACA,KAAK,CAACkiE,MAAX,CAAmB,CACjBliE,KAAK,CAACwjE,UAAN,CAAiB,KAAjB,CAAwB,KAAxB,EACD,CACD5gC,QAAQ,CAAC5iC,KAAD,CAAR,CACD,CALD,EAMD,CARD,CASA4iC,QAAQ,CAACC,IAAD,CAAR,CACD,CAZD,IAaD,CACF,CACF,CAnDD,CAqDAkiC,SAAS,CAACjiF,SAAV,CAAoB4jF,eAApB,CAAsC,QAASA,CAAAA,eAAT,CAAyBlgF,KAAzB,CAAgC,CACpE,GAAIs/E,CAAAA,QAAQ,CAAG9kE,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAAnF,CAEA,GAAIze,CAAAA,GAAG,CAAG,KAAKA,GAAf,CACA,GAAIikF,CAAAA,WAAW,CAAG,EAAlB,CACAhgF,KAAK,CAAC+F,OAAN,CAAc,SAAUL,IAAV,CAAgB,CAC5Bs6E,WAAW,CAAC,CAACt6E,IAAI,EAAI,EAAT,EAAa3J,GAAb,CAAD,CAAX,CAAiC,IAAjC,CACD,CAFD,EAIA,KAAKgkF,eAAL,CAAqBhkF,GAArB,CAA0BujF,QAA1B,CAAoCU,WAApC,EACD,CAVD,CAYAzB,SAAS,CAACjiF,SAAV,CAAoB6jF,cAApB,CAAqC,QAASA,CAAAA,cAAT,CAAwBrlE,IAAxB,CAA8B,CACjE,GAAIwkE,CAAAA,QAAQ,CAAG9kE,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,KAAnF,CAEA,KAAK0kE,kBAAL,CAA0BpkE,IAA1B,CACA,GAAI/e,CAAAA,GAAG,CAAG,KAAKA,GAAf,CACA,GAAIikF,CAAAA,WAAW,CAAG,EAAlB,CACAllE,IAAI,CAAC/U,OAAL,CAAa,SAAUhK,GAAV,CAAe,CAC1BikF,WAAW,CAACjkF,GAAD,CAAX,CAAmB,IAAnB,CACD,CAFD,EAIA,KAAKgkF,eAAL,CAAqBhkF,GAArB,CAA0BujF,QAA1B,CAAoCU,WAApC,EACD,CAXD,CAaAzB,SAAS,CAACjiF,SAAV,CAAoB8jF,sBAApB,CAA6C,QAASA,CAAAA,sBAAT,CAAgCtlE,IAAhC,CAAsC,CACjF,GAAI+iB,CAAAA,MAAM,CAAG,IAAb,CAEA/iB,IAAI,CAAGA,IAAI,EAAI,EAAf,CACA,KAAK8gE,mBAAL,CAA2B9gE,IAA3B,CAEAA,IAAI,CAAC/U,OAAL,CAAa,SAAUhK,GAAV,CAAe,CAC1B,GAAIsgD,CAAAA,IAAI,CAAGxe,MAAM,CAACihD,OAAP,CAAe/iF,GAAf,CAAX,CACA,GAAIsgD,IAAJ,CAAUA,IAAI,CAACpT,MAAL,CAAY,IAAZ,CAAkBpL,MAAM,CAACg+C,gBAAzB,EACX,CAHD,EAID,CAVD,CAYA0C,SAAS,CAACjiF,SAAV,CAAoB0gF,UAApB,CAAiC,QAASA,CAAAA,UAAT,CAAoBv8E,IAApB,CAA0BiuB,OAA1B,CAAmCwgC,IAAnC,CAAyC,CACxE,GAAI7S,CAAAA,IAAI,CAAG,KAAKyiC,OAAL,CAAar+E,IAAb,CAAX,CAEA,GAAI47C,IAAJ,CAAU,CACRA,IAAI,CAAC2gC,UAAL,CAAgB,CAAC,CAACtuD,OAAlB,CAA2BwgC,IAA3B,EACD,CACF,CAND,CAQAqvB,SAAS,CAACjiF,SAAV,CAAoB+jF,cAApB,CAAqC,QAASA,CAAAA,cAAT,EAA0B,CAC7D,MAAO,MAAKtE,WAAZ,CACD,CAFD,CAIAwC,SAAS,CAACjiF,SAAV,CAAoBgkF,cAApB,CAAqC,QAASA,CAAAA,cAAT,CAAwBvE,WAAxB,CAAqC,CACxE,GAAIwE,CAAAA,eAAe,CAAG,KAAKxE,WAA3B,CACA,GAAIwE,eAAJ,CAAqB,CACnBA,eAAe,CAAC/E,SAAhB,CAA4B,KAA5B,CACD,CACD,KAAKO,WAAL,CAAmBA,WAAnB,CACA,KAAKA,WAAL,CAAiBP,SAAjB,CAA6B,IAA7B,CACD,CAPD,CASA+C,SAAS,CAACjiF,SAAV,CAAoBkkF,kBAApB,CAAyC,QAASA,CAAAA,kBAAT,CAA4BnkC,IAA5B,CAAkC,CACzE,GAAItgD,CAAAA,GAAG,CAAGsgD,IAAI,CAAC,KAAKtgD,GAAN,CAAd,CACA,GAAI0kF,CAAAA,QAAQ,CAAG,KAAKjC,QAAL,CAAcziF,GAAd,CAAf,CACA,KAAKukF,cAAL,CAAoBG,QAApB,EACD,CAJD,CAMAlC,SAAS,CAACjiF,SAAV,CAAoBokF,iBAApB,CAAwC,QAASA,CAAAA,iBAAT,CAA2B3kF,GAA3B,CAAgC,CACtE,GAAIA,GAAG,GAAK,IAAR,EAAgBA,GAAG,GAAKsM,SAA5B,CAAuC,CACrC,KAAK0zE,WAAL,GAAqB,KAAKA,WAAL,CAAiBP,SAAjB,CAA6B,KAAlD,EACA,KAAKO,WAAL,CAAmB,IAAnB,CACA,OACD,CACD,GAAI1/B,CAAAA,IAAI,CAAG,KAAKyiC,OAAL,CAAa/iF,GAAb,CAAX,CACA,GAAIsgD,IAAJ,CAAU,CACR,KAAKikC,cAAL,CAAoBjkC,IAApB,EACD,CACF,CAVD,CAYA,MAAOkiC,CAAAA,SAAP,CACD,CAxX0B,EAA3B,CA0XA,4BAA6B,GAAIoC,CAAAA,UAAU,CAAIrC,oBAAlB,CAC7B,CACA;AACA,GAAIsC,CAAAA,6CAA6C,CAAG,QAAhDA,CAAAA,6CAAgD,EAAW,CAC7D,GAAIC,CAAAA,MAAM,CAAG,IAAb,CACA,GAAIhkF,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACw/C,IAAJ,CAASnzC,OAHlB,CAIEC,UAAU,CAAE,cAJd,CADU,CADd,CASEG,GAAG,CAAE,MATP,CAUEpM,WAAW,CAAE,cAVf,CAWEK,KAAK,CAAE,CACL,cAAeV,GAAG,CAAC8sC,QADd,CAEL,aAAc9sC,GAAG,CAACw/C,IAAJ,CAASm/B,SAFlB,CAGL,YAAa,CAAC3+E,GAAG,CAACw/C,IAAJ,CAASnzC,OAHlB,CAIL,eAAgB,CAACrM,GAAG,CAACw/C,IAAJ,CAAS3+C,QAJrB,CAKL,aAAc,CAACb,GAAG,CAACw/C,IAAJ,CAAS3+C,QAAV,EAAsBb,GAAG,CAACw/C,IAAJ,CAAS3tB,OALxC,CAXT,CAkBEzpB,KAAK,CAAE,CACL0E,IAAI,CAAE,UADD,CAELyL,QAAQ,CAAE,IAFL,CAGL,gBAAiBvY,GAAG,CAAC8sC,QAHhB,CAIL,gBAAiB9sC,GAAG,CAACw/C,IAAJ,CAAS3+C,QAJrB,CAKL,eAAgBb,GAAG,CAACw/C,IAAJ,CAAS3tB,OALpB,CAMLoyD,SAAS,CAAEjkF,GAAG,CAACuuC,IAAJ,CAAS01C,SANf,CAlBT,CA0BE3jF,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBA,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAACyZ,WAAJ,CAAgBtY,MAAhB,CAAP,CACD,CAJC,CAKFy9C,WAAW,CAAE,qBAASz9C,MAAT,CAAiB,CAC5B,MAAO6iF,CAAAA,MAAM,CAAC9lC,iBAAP,CAAyB/8C,MAAzB,CAAP,CACD,CAPC,CAQFstB,SAAS,CAAE,mBAASttB,MAAT,CAAiB,CAC1BA,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAACkkF,eAAJ,CAAoB/iF,MAApB,CAAP,CACD,CAXC,CAYFgjF,QAAQ,CAAE,kBAAShjF,MAAT,CAAiB,CACzBA,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAACokF,cAAJ,CAAmBjjF,MAAnB,CAAP,CACD,CAfC,CAgBFkjF,OAAO,CAAE,iBAASljF,MAAT,CAAiB,CACxBA,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAACskF,aAAJ,CAAkBnjF,MAAlB,CAAP,CACD,CAnBC,CAoBFojF,IAAI,CAAE,cAASpjF,MAAT,CAAiB,CACrBA,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAACwkF,UAAJ,CAAerjF,MAAf,CAAP,CACD,CAvBC,CA1BN,CAFO,CAsDP,CACEhB,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,uBADf,CAEEwM,KAAK,CAAE,CACL,eAAgB,CAAC7M,GAAG,CAACw/C,IAAJ,CAASrT,KAAT,CAAiB,CAAlB,EAAuBnsC,GAAG,CAACuuC,IAAJ,CAASG,MAAhC,CAAyC,IADpD,CAFT,CAFA,CAQA,CACEvuC,EAAE,CAAC,MAAD,CAAS,CACTO,KAAK,CAAE,CACL,CACE,UAAWV,GAAG,CAACw/C,IAAJ,CAASq/B,MADtB,CAEE/xC,QAAQ,CAAE,CAAC9sC,GAAG,CAACw/C,IAAJ,CAASq/B,MAAV,EAAoB7+E,GAAG,CAAC8sC,QAFpC,CADK,CAKL,2BALK,CAML9sC,GAAG,CAACuuC,IAAJ,CAASxT,SAAT,CAAqB/6B,GAAG,CAACuuC,IAAJ,CAASxT,SAA9B,CAA0C,qBANrC,CADE,CASTz6B,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBA,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAACykF,qBAAJ,CAA0BtjF,MAA1B,CAAP,CACD,CAJC,CATK,CAAT,CADJ,CAiBEnB,GAAG,CAAC88E,YAAJ,CACI38E,EAAE,CAAC,aAAD,CAAgB,CAChBiI,KAAK,CAAE,CACL2sB,aAAa,CAAE/0B,GAAG,CAACw/C,IAAJ,CAASzqB,aADnB,CAELl0B,QAAQ,CAAE,CAAC,CAACb,GAAG,CAACw/C,IAAJ,CAAS3+C,QAFhB,CADS,CAKhBP,EAAE,CAAE,CAAEiQ,MAAM,CAAEvQ,GAAG,CAAC0kF,iBAAd,CALY,CAMhBv5E,QAAQ,CAAE,CACR5K,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBA,MAAM,CAACyY,eAAP,GACD,CAHO,CANM,CAWhB+X,KAAK,CAAE,CACL/yB,KAAK,CAAEoB,GAAG,CAACw/C,IAAJ,CAAS3tB,OADX,CAELiJ,QAAQ,CAAE,kBAASzF,GAAT,CAAc,CACtBr1B,GAAG,CAAC0iB,IAAJ,CAAS1iB,GAAG,CAACw/C,IAAb,CAAmB,SAAnB,CAA8BnqB,GAA9B,EACD,CAJI,CAKL/oB,UAAU,CAAE,cALP,CAXS,CAAhB,CADN,CAoBItM,GAAG,CAACe,EAAJ,EArCN,CAsCEf,GAAG,CAACw/C,IAAJ,CAAS7sC,OAAT,CACIxS,EAAE,CAAC,MAAD,CAAS,CACTE,WAAW,CAAE,4CADJ,CAAT,CADN,CAIIL,GAAG,CAACe,EAAJ,EA1CN,CA2CEZ,EAAE,CAAC,cAAD,CAAiB,CAAEiI,KAAK,CAAE,CAAEo3C,IAAI,CAAEx/C,GAAG,CAACw/C,IAAZ,CAAT,CAAjB,CA3CJ,CARA,CAqDA,CArDA,CADJ,CAwDEr/C,EAAE,CAAC,wBAAD,CAA2B,CAC3B,CAACH,GAAG,CAAC68E,iBAAL,EAA0B78E,GAAG,CAAC2kF,iBAA9B,CACIxkF,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAAC8sC,QAHb,CAIExgC,UAAU,CAAE,UAJd,CADU,CADd,CASEjM,WAAW,CAAE,wBATf,CAUE+H,KAAK,CAAE,CAAE0E,IAAI,CAAE,OAAR,CAAiB,gBAAiB9M,GAAG,CAAC8sC,QAAtC,CAVT,CAFA,CAcA9sC,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAACw/C,IAAJ,CAAS9iC,UAAhB,CAA4B,SAASC,KAAT,CAAgB,CAC1C,MAAOxc,CAAAA,EAAE,CAAC,cAAD,CAAiB,CACxBjB,GAAG,CAAEc,GAAG,CAAC48E,UAAJ,CAAejgE,KAAf,CADmB,CAExBvU,KAAK,CAAE,CACL,iBAAkBpI,GAAG,CAAC+8E,aADjB,CAEL,sBAAuB/8E,GAAG,CAAC68E,iBAFtB,CAGL,gBAAiB78E,GAAG,CAAC88E,YAHhB,CAILt9B,IAAI,CAAE7iC,KAJD,CAFiB,CAQxBrc,EAAE,CAAE,CAAE,cAAeN,GAAG,CAAC4kF,qBAArB,CARoB,CAAjB,CAAT,CAUD,CAXD,CAdA,CA0BA,CA1BA,CADN,CA6BI5kF,GAAG,CAACe,EAAJ,EA9BuB,CAA3B,CAxDJ,CAtDO,CA+IP,CA/IO,CAAT,CAiJD,CAtJD,CAuJA,GAAI8jF,CAAAA,sDAAsD,CAAG,EAA7D,CACAd,6CAA6C,CAACliF,aAA9C,CAA8D,IAA9D,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA,4BAA6B,GAAIijF,CAAAA,iCAAiC,CAAI,CACpE5mF,IAAI,CAAE,YAD8D,CAGpEmV,aAAa,CAAE,YAHqD,CAKpE5J,MAAM,CAAE,CAACkE,eAAe,CAACjE,CAAjB,CAL4D,CAOpE3H,KAAK,CAAE,CACLy9C,IAAI,CAAE,CACJ34C,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,EAAP,CACD,CAHG,CADD,CAMLrF,KAAK,CAAE,EANF,CAOLg7E,aAAa,CAAEzuE,QAPV,CAQLuuE,iBAAiB,CAAE,CACjBj2E,IAAI,CAAE1E,OADW,CAEjB2E,OAAO,CAAE,IAFQ,CARd,CAYLi2E,YAAY,CAAE,CACZl2E,IAAI,CAAE1E,OADM,CAEZ2E,OAAO,CAAE,KAFG,CAZT,CAP6D,CAyBpE6B,UAAU,CAAE,CACVuc,oBAAoB,CAAEZ,2BAA2B,CAAC3a,CADxC,CAEV+wC,UAAU,CAAE7S,gBAAgB,CAACl+B,CAFnB,CAGVq7E,WAAW,CAAE,CACXhjF,KAAK,CAAE,CACLy9C,IAAI,CAAE,CACJt6B,QAAQ,CAAE,IADN,CADD,CADI,CAMXjhB,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,GAAIX,CAAAA,MAAM,CAAG,KAAKuE,OAAlB,CACA,GAAIilC,CAAAA,IAAI,CAAGxpC,MAAM,CAACwpC,IAAlB,CACA,GAAIiR,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CACA,GAAI57C,CAAAA,IAAI,CAAG47C,IAAI,CAAC57C,IAAhB,CACI+xB,KAAK,CAAG6pB,IAAI,CAAC7pB,KADjB,CAGA,MAAO5wB,CAAAA,MAAM,CAACg4E,aAAP,CAAuBh4E,MAAM,CAACg4E,aAAP,CAAqBj/E,IAArB,CAA0BiH,MAAM,CAACm6C,YAAjC,CAA+Cx5C,CAA/C,CAAkD,CAAEtF,KAAK,CAAEmuC,IAAI,CAAC1pC,MAAL,CAAYD,OAArB,CAA8B46C,IAAI,CAAEA,IAApC,CAA0C57C,IAAI,CAAEA,IAAhD,CAAsD+xB,KAAK,CAAEA,KAA7D,CAAlD,CAAvB,CAAiJ4Y,IAAI,CAACoc,YAAL,CAAkB9jD,OAAlB,CAA4B0nC,IAAI,CAACoc,YAAL,CAAkB9jD,OAAlB,CAA0B,CAAE24C,IAAI,CAAEA,IAAR,CAAc57C,IAAI,CAAEA,IAApB,CAA1B,CAA5B,CAAoF8B,CAAC,CAC3O,MAD2O,CAE3O,CAAE,QAAS,qBAAX,CAF2O,CAG3O,CAAC85C,IAAI,CAACr1C,KAAN,CAH2O,CAA7O,CAKD,CAlBU,CAHH,CAzBwD,CAkDpEvG,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL2qC,IAAI,CAAE,IADD,CAELzB,QAAQ,CAAE,KAFL,CAGL63C,iBAAiB,CAAE,KAHd,CAILK,UAAU,CAAE,IAJP,CAKLC,gBAAgB,CAAE,IALb,CAAP,CAOD,CA1DmE,CA6DpE9iF,KAAK,CAAE,CACL,qBAAsB,QAAS+iF,CAAAA,iBAAT,CAA2B9iF,GAA3B,CAAgC,CACpD,KAAK+iF,kBAAL,CAAwB,KAAK3lC,IAAL,CAAU3tB,OAAlC,CAA2CzvB,GAA3C,EACD,CAHI,CAIL,eAAgB,QAASgjF,CAAAA,WAAT,CAAqBhjF,GAArB,CAA0B,CACxC,KAAK+iF,kBAAL,CAAwB/iF,GAAxB,CAA6B,KAAKo9C,IAAL,CAAUzqB,aAAvC,EACD,CANI,CAOL,gBAAiB,QAASswD,CAAAA,YAAT,CAAsBjjF,GAAtB,CAA2B,CAC1C,GAAI4H,CAAAA,KAAK,CAAG,IAAZ,CAEA,KAAK0B,SAAL,CAAe,UAAY,CACzB,MAAO1B,CAAAA,KAAK,CAAC8iC,QAAN,CAAiB1qC,GAAxB,CACD,CAFD,EAGA,GAAIA,GAAJ,CAAS,CACP,KAAKuiF,iBAAL,CAAyB,IAAzB,CACD,CACF,CAhBI,CA7D6D,CAgFpEtiF,OAAO,CAAE,CACPu6E,UAAU,CAAE,QAASA,CAAAA,UAAT,CAAoBp9B,IAApB,CAA0B,CACpC,MAAOg+B,CAAAA,eAAe,CAAC,KAAKjvC,IAAL,CAAU8yC,OAAX,CAAoB7hC,IAAI,CAAC57C,IAAzB,CAAtB,CACD,CAHM,CAIPuhF,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,CAA4BtzD,OAA5B,CAAqCkD,aAArC,CAAoD,CACtE,GAAI,KAAKiwD,UAAL,GAAoBnzD,OAApB,EAA+B,KAAKozD,gBAAL,GAA0BlwD,aAA7D,CAA4E,CAC1E,KAAKwZ,IAAL,CAAUxrC,KAAV,CAAgB,cAAhB,CAAgC,KAAKy8C,IAAL,CAAU57C,IAA1C,CAAgDiuB,OAAhD,CAAyDkD,aAAzD,EACD,CACD,KAAKiwD,UAAL,CAAkBnzD,OAAlB,CACA,KAAKkD,aAAL,CAAqBA,aAArB,CACD,CAVM,CAWPtb,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,GAAIkc,CAAAA,KAAK,CAAG,KAAK4Y,IAAL,CAAU5Y,KAAtB,CACAA,KAAK,CAAC8tD,cAAN,CAAqB,KAAKjkC,IAA1B,EACA,KAAKjR,IAAL,CAAUxrC,KAAV,CAAgB,gBAAhB,CAAkC4yB,KAAK,CAACupD,WAAN,CAAoBvpD,KAAK,CAACupD,WAAN,CAAkBt7E,IAAtC,CAA6C,IAA/E,CAAqF+xB,KAAK,CAACupD,WAA3F,EACA,KAAK3wC,IAAL,CAAU2wC,WAAV,CAAwB,IAAxB,CACA,GAAI,KAAK3wC,IAAL,CAAU+2C,iBAAd,CAAiC,CAC/B,KAAKb,qBAAL,GACD,CACD,GAAI,KAAKl2C,IAAL,CAAUg3C,gBAAV,EAA8B,CAAC,KAAK/lC,IAAL,CAAU3+C,QAA7C,CAAuD,CACrD,KAAK6jF,iBAAL,CAAuB,IAAvB,CAA6B,CAC3BniF,MAAM,CAAE,CAAEsvB,OAAO,CAAE,CAAC,KAAK2tB,IAAL,CAAU3tB,OAAtB,CADmB,CAA7B,EAGD,CACD,KAAK0c,IAAL,CAAUxrC,KAAV,CAAgB,YAAhB,CAA8B,KAAKy8C,IAAL,CAAU57C,IAAxC,CAA8C,KAAK47C,IAAnD,CAAyD,IAAzD,EACD,CAzBM,CA0BPtB,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2B57C,KAA3B,CAAkC,CACnD,GAAI,KAAKisC,IAAL,CAAUi3C,OAAV,CAAkB,kBAAlB,GAAyC,KAAKj3C,IAAL,CAAUi3C,OAAV,CAAkB,kBAAlB,EAAsC1vE,MAAtC,CAA+C,CAA5F,CAA+F,CAC7FxT,KAAK,CAACsX,eAAN,GACAtX,KAAK,CAAC0O,cAAN,GACD,CACD,KAAKu9B,IAAL,CAAUxrC,KAAV,CAAgB,kBAAhB,CAAoCT,KAApC,CAA2C,KAAKk9C,IAAL,CAAU57C,IAArD,CAA2D,KAAK47C,IAAhE,CAAsE,IAAtE,EACD,CAhCM,CAiCPilC,qBAAqB,CAAE,QAASA,CAAAA,qBAAT,EAAiC,CACtD,GAAI,KAAKjlC,IAAL,CAAUq/B,MAAd,CAAsB,OACtB,GAAI,KAAK/xC,QAAT,CAAmB,CACjB,KAAKyB,IAAL,CAAUxrC,KAAV,CAAgB,eAAhB,CAAiC,KAAKy8C,IAAL,CAAU57C,IAA3C,CAAiD,KAAK47C,IAAtD,CAA4D,IAA5D,EACA,KAAKA,IAAL,CAAUv/B,QAAV,GACD,CAHD,IAGO,CACL,KAAKu/B,IAAL,CAAUpT,MAAV,GACA,KAAKrpC,KAAL,CAAW,aAAX,CAA0B,KAAKy8C,IAAL,CAAU57C,IAApC,CAA0C,KAAK47C,IAA/C,CAAqD,IAArD,EACD,CACF,CA1CM,CA2CPklC,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2B9lF,KAA3B,CAAkC+a,EAAlC,CAAsC,CACvD,GAAIlO,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAK+zC,IAAL,CAAU2gC,UAAV,CAAqBxmE,EAAE,CAACpX,MAAH,CAAUsvB,OAA/B,CAAwC,CAAC,KAAK0c,IAAL,CAAU8vC,aAAnD,EACA,KAAK3yE,SAAL,CAAe,UAAY,CACzB,GAAIiqB,CAAAA,KAAK,CAAGlqB,MAAM,CAAC8iC,IAAP,CAAY5Y,KAAxB,CACAlqB,MAAM,CAAC8iC,IAAP,CAAYxrC,KAAZ,CAAkB,OAAlB,CAA2B0I,MAAM,CAAC+zC,IAAP,CAAY57C,IAAvC,CAA6C,CAC3C++E,YAAY,CAAEhtD,KAAK,CAAC6sD,eAAN,EAD6B,CAE3CW,WAAW,CAAExtD,KAAK,CAACitD,cAAN,EAF8B,CAG3C6C,gBAAgB,CAAE9vD,KAAK,CAACktD,mBAAN,EAHyB,CAI3C6C,eAAe,CAAE/vD,KAAK,CAACmtD,kBAAN,EAJ0B,CAA7C,EAMD,CARD,EASD,CAxDM,CAyDP8B,qBAAqB,CAAE,QAASA,CAAAA,qBAAT,CAA+Be,QAA/B,CAAyCnmC,IAAzC,CAA+CjlC,QAA/C,CAAyD,CAC9E,KAAKhL,SAAL,CAAe,YAAf,CAA6B,kBAA7B,CAAiDiwC,IAAjD,EACA,KAAKjR,IAAL,CAAUxrC,KAAV,CAAgB,aAAhB,CAA+B4iF,QAA/B,CAAyCnmC,IAAzC,CAA+CjlC,QAA/C,EACD,CA5DM,CA6DP2pE,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyB5hF,KAAzB,CAAgC,CAC/C,GAAI,CAAC,KAAKisC,IAAL,CAAU01C,SAAf,CAA0B,OAC1B,KAAK11C,IAAL,CAAUxrC,KAAV,CAAgB,sBAAhB,CAAwCT,KAAxC,CAA+C,IAA/C,EACD,CAhEM,CAiEP8hF,cAAc,CAAE,QAASA,CAAAA,cAAT,CAAwB9hF,KAAxB,CAA+B,CAC7C,GAAI,CAAC,KAAKisC,IAAL,CAAU01C,SAAf,CAA0B,OAC1B,KAAK11C,IAAL,CAAUxrC,KAAV,CAAgB,qBAAhB,CAAuCT,KAAvC,CAA8C,IAA9C,EACAA,KAAK,CAAC0O,cAAN,GACD,CArEM,CAsEPwzE,UAAU,CAAE,QAASA,CAAAA,UAAT,CAAoBliF,KAApB,CAA2B,CACrCA,KAAK,CAAC0O,cAAN,GACD,CAxEM,CAyEPszE,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBhiF,KAAvB,CAA8B,CAC3C,GAAI,CAAC,KAAKisC,IAAL,CAAU01C,SAAf,CAA0B,OAC1B,KAAK11C,IAAL,CAAUxrC,KAAV,CAAgB,oBAAhB,CAAsCT,KAAtC,CAA6C,IAA7C,EACD,CA5EM,CAhF2D,CA+JpE2R,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIuC,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAIzR,CAAAA,MAAM,CAAG,KAAKuE,OAAlB,CAEA,GAAIvE,MAAM,CAAC6gF,MAAX,CAAmB,CACjB,KAAKr3C,IAAL,CAAYxpC,MAAZ,CACD,CAFD,IAEO,CACL,KAAKwpC,IAAL,CAAYxpC,MAAM,CAACwpC,IAAnB,CACD,CAED,GAAIA,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CACA,GAAI,CAACA,IAAL,CAAW,CACTn4B,OAAO,CAACua,IAAR,CAAa,4BAAb,EACD,CAED,GAAI5uB,CAAAA,KAAK,CAAGwsC,IAAI,CAACxsC,KAAL,EAAc,EAA1B,CACA,GAAIgqC,CAAAA,WAAW,CAAGhqC,KAAK,CAAC,UAAD,CAAL,EAAqB,UAAvC,CAEA,KAAK6hB,MAAL,CAAY,aAAemoB,WAA3B,CAAwC,UAAY,CAClDv1B,MAAM,CAACgpC,IAAP,CAAYuhC,cAAZ,GACD,CAFD,EAIA,GAAI,KAAKvhC,IAAL,CAAU1S,QAAd,CAAwB,CACtB,KAAKA,QAAL,CAAgB,IAAhB,CACA,KAAK63C,iBAAL,CAAyB,IAAzB,CACD,CAED,GAAI,KAAKp2C,IAAL,CAAUs3C,SAAd,CAAyB,CACvB,KAAK3xE,GAAL,CAAS,kBAAT,CAA6B,SAAUsrC,IAAV,CAAgB,CAC3C,GAAIhpC,MAAM,CAACgpC,IAAP,GAAgBA,IAApB,CAA0B,CACxBhpC,MAAM,CAACgpC,IAAP,CAAYv/B,QAAZ,GACD,CACF,CAJD,EAKD,CACF,CAlMmE,CAAzC,CAoM7B;AACC,4BAA6B,GAAI6lE,CAAAA,qCAAqC,CAAIhB,iCAA7C,CAC9B;AAMA,yBAEA,GAAIiB,CAAAA,mBAAmB,CAAGhiF,kBAAkB,CAC1C+hF,qCAD0C,CAE1C/B,6CAF0C,CAG1Cc,sDAH0C,CAI1C,KAJ0C,CAK1C,IAL0C,CAM1C,IAN0C,CAO1C,IAP0C,CAA5C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAImB,CAAAA,aAAJ,CAAoB,CACjCD,mBAAmB,CAACxhF,OAApB,CAA4ByB,MAA5B,CAAqC,iCAArC,CACA,4BAA6B,GAAIigF,CAAAA,SAAS,CAAIF,mBAAmB,CAACxoF,OAArC,CAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA,4BAA6B,GAAI2oF,CAAAA,4BAA4B,CAAI,CAC/DhoF,IAAI,CAAE,QADyD,CAG/DuL,MAAM,CAAE,CAACkE,eAAe,CAACjE,CAAjB,CAHuD,CAK/DhB,UAAU,CAAE,CACVy9E,UAAU,CAAEF,SADF,CALmD,CAS/DriF,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL+xB,KAAK,CAAE,IADF,CAELkW,IAAI,CAAE,IAFD,CAGLqzC,WAAW,CAAE,IAHR,CAILkH,SAAS,CAAE,IAJN,CAKLC,aAAa,CAAE,EALV,CAMLriC,SAAS,CAAE,CACTk5B,iBAAiB,CAAE,KADV,CAETT,YAAY,CAAE,IAFL,CAGT6J,QAAQ,CAAE,IAHD,CAIT5J,SAAS,CAAE,IAJF,CANN,CAAP,CAaD,CAvB8D,CA0B/D36E,KAAK,CAAE,CACL6B,IAAI,CAAE,CACJgD,IAAI,CAAEO,KADF,CADD,CAIL+zB,SAAS,CAAE,CACTt0B,IAAI,CAAEU,MADG,CAETT,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO/I,CAAAA,MAAM,CAACsgC,WAAW,CAAC,GAAD,CAAZ,CAAN,CAAyB,mBAAzB,CAAP,CACD,CAJQ,CAJN,CAULk+C,iBAAiB,CAAE,CACjBj2E,IAAI,CAAE1E,OADW,CAEjB2E,OAAO,CAAE,IAFQ,CAVd,CAcLw6E,OAAO,CAAE/5E,MAdJ,CAeL+2E,aAAa,CAAEn8E,OAfV,CAgBLmqC,gBAAgB,CAAEnqC,OAhBb,CAiBLojF,iBAAiB,CAAE,CACjB1+E,IAAI,CAAE1E,OADW,CAEjB2E,OAAO,CAAE,IAFQ,CAjBd,CAqBL0+E,gBAAgB,CAAErjF,OArBb,CAsBLs+E,gBAAgB,CAAE,CAChB55E,IAAI,CAAE1E,OADU,CAEhB2E,OAAO,CAAE,KAFO,CAtBb,CA0BLm4E,gBAAgB,CAAE,CAChBp4E,IAAI,CAAE1E,OADU,CAEhB2E,OAAO,CAAE,IAFO,CA1Bb,CA8BLw7E,kBAAkB,CAAEl7E,KA9Bf,CA+BL43E,mBAAmB,CAAE53E,KA/BhB,CAgCL83E,cAAc,CAAE,CAAC33E,MAAD,CAAStF,MAAT,CAhCX,CAiCL+6E,aAAa,CAAEzuE,QAjCV,CAkCLwuE,YAAY,CAAE,CACZl2E,IAAI,CAAE1E,OADM,CAEZ2E,OAAO,CAAE,KAFG,CAlCT,CAsCLo9E,SAAS,CAAE,CACTr9E,IAAI,CAAE1E,OADG,CAET2E,OAAO,CAAE,KAFA,CAtCN,CA0CL0/E,SAAS,CAAEj4E,QA1CN,CA2CLouE,SAAS,CAAEpuE,QA3CN,CA4CLvM,KAAK,CAAE,CACL8E,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,CACL6B,QAAQ,CAAE,UADL,CAELkB,KAAK,CAAE,OAFF,CAGLtJ,QAAQ,CAAE,UAHL,CAAP,CAKD,CAPI,CA5CF,CAqDL8tC,IAAI,CAAE,CACJ/nC,IAAI,CAAE1E,OADF,CAEJ2E,OAAO,CAAE,KAFL,CArDD,CAyDL21E,gBAAgB,CAAEt6E,OAzDb,CA0DL2uC,IAAI,CAAEviC,QA1DD,CA2DLwzE,gBAAgB,CAAExzE,QA3Db,CA4DLu3E,SAAS,CAAE3jF,OA5DN,CA6DLwsC,MAAM,CAAE,CACN9nC,IAAI,CAAE5E,MADA,CAEN6E,OAAO,CAAE,EAFH,CA7DH,CAiELk0B,SAAS,CAAEzzB,MAjEN,CA1BwD,CA8F/DrE,QAAQ,CAAE,CACRgG,QAAQ,CAAE,CACRkpB,GAAG,CAAE,QAASA,CAAAA,GAAT,CAAavzB,KAAb,CAAoB,CACvB,KAAKgF,IAAL,CAAYhF,KAAZ,CACD,CAHO,CAIRJ,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,MAAO,MAAKoF,IAAZ,CACD,CANO,CADF,CAUR4iF,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,MAAOr/E,CAAAA,KAAK,CAAC1H,SAAN,CAAgBgb,KAAhB,CAAsB3c,IAAtB,CAA2B,KAAKsoF,SAAhC,CAAP,CACD,CAZO,CAaRnJ,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIvgE,CAAAA,UAAU,CAAG,KAAKmvB,IAAL,CAAUnvB,UAA3B,CAEA,MAAO,CAACA,UAAD,EAAeA,UAAU,CAAC5G,MAAX,GAAsB,CAArC,EAA0C4G,UAAU,CAACyiB,KAAX,CAAiB,SAAUv0B,IAAV,CAAgB,CAChF,GAAIyB,CAAAA,OAAO,CAAGzB,IAAI,CAACyB,OAAnB,CACA,MAAO,CAACA,OAAR,CACD,CAHgD,CAAjD,CAID,CApBO,CA9FqD,CAqH/DlK,KAAK,CAAE,CACLkgF,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,CAA4Bx4E,MAA5B,CAAoC,CACtD,KAAK8rB,KAAL,CAAW4sD,oBAAX,CAAgC14E,MAAhC,EACD,CAHI,CAILk1E,mBAAmB,CAAE,QAASA,CAAAA,mBAAT,CAA6Bl1E,MAA7B,CAAqC,CACxD,KAAK8rB,KAAL,CAAWopD,mBAAX,CAAiCl1E,MAAjC,CACA,KAAK8rB,KAAL,CAAW4tD,sBAAX,CAAkC15E,MAAlC,EACD,CAPI,CAQLjG,IAAI,CAAE,QAASA,CAAAA,IAAT,CAAciG,MAAd,CAAsB,CAC1B,KAAK8rB,KAAL,CAAW8f,OAAX,CAAmB5rC,MAAnB,EACD,CAVI,CAWLw8E,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBjkF,GAAvB,CAA4B,CACzC+E,KAAK,CAAC1H,SAAN,CAAgByJ,OAAhB,CAAwBpL,IAAxB,CAA6BsE,GAA7B,CAAkC,SAAUqkF,QAAV,CAAoB,CACpDA,QAAQ,CAACzyE,YAAT,CAAsB,UAAtB,CAAkC,CAAC,CAAnC,EACD,CAFD,EAGD,CAfI,CAgBLqqE,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBx0E,MAAvB,CAA+B,CAC5C,KAAK8rB,KAAL,CAAW0oD,aAAX,CAA2Bx0E,MAA3B,CACD,CAlBI,CArHwD,CA0I/DxH,OAAO,CAAE,CACPud,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgBhhB,KAAhB,CAAuB,CAC7B,GAAI,CAAC,KAAKkjF,gBAAV,CAA4B,KAAM,IAAIt3C,CAAAA,KAAJ,CAAU,iDAAV,CAAN,CAC5B,KAAK7U,KAAL,CAAW/V,MAAX,CAAkBhhB,KAAlB,EACD,CAJM,CAKPg+E,UAAU,CAAE,QAASA,CAAAA,UAAT,CAAoBp9B,IAApB,CAA0B,CACpC,MAAOg+B,CAAAA,eAAe,CAAC,KAAK6D,OAAN,CAAe7hC,IAAI,CAAC57C,IAApB,CAAtB,CACD,CAPM,CAQP8iF,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqB9iF,IAArB,CAA2B,CACtC,GAAI,CAAC,KAAKy9E,OAAV,CAAmB,KAAM,IAAI72C,CAAAA,KAAJ,CAAU,2CAAV,CAAN,CACnB,GAAIgV,CAAAA,IAAI,CAAG,KAAK7pB,KAAL,CAAWssD,OAAX,CAAmBr+E,IAAnB,CAAX,CACA,GAAI,CAAC47C,IAAL,CAAW,MAAO,EAAP,CACX,GAAIj7B,CAAAA,IAAI,CAAG,CAACi7B,IAAI,CAAC57C,IAAN,CAAX,CACA,GAAImB,CAAAA,MAAM,CAAGy6C,IAAI,CAACz6C,MAAlB,CACA,MAAOA,MAAM,EAAIA,MAAM,GAAK,KAAK8mC,IAAjC,CAAuC,CACrCtnB,IAAI,CAAClhB,IAAL,CAAU0B,MAAM,CAACnB,IAAjB,EACAmB,MAAM,CAAGA,MAAM,CAACA,MAAhB,CACD,CACD,MAAOwf,CAAAA,IAAI,CAAC0kB,OAAL,EAAP,CACD,CAnBM,CAoBPu5C,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBC,QAAzB,CAAmCC,kBAAnC,CAAuD,CACtE,MAAO,MAAK/sD,KAAL,CAAW6sD,eAAX,CAA2BC,QAA3B,CAAqCC,kBAArC,CAAP,CACD,CAtBM,CAuBPE,cAAc,CAAE,QAASA,CAAAA,cAAT,CAAwBH,QAAxB,CAAkC,CAChD,MAAO,MAAK9sD,KAAL,CAAWitD,cAAX,CAA0BH,QAA1B,CAAP,CACD,CAzBM,CA0BPe,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,GAAItE,CAAAA,WAAW,CAAG,KAAKvpD,KAAL,CAAW6tD,cAAX,EAAlB,CACA,MAAOtE,CAAAA,WAAW,CAAGA,WAAW,CAACt7E,IAAf,CAAsB,IAAxC,CACD,CA7BM,CA8BP+iF,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI,CAAC,KAAKtF,OAAV,CAAmB,KAAM,IAAI72C,CAAAA,KAAJ,CAAU,6CAAV,CAAN,CACnB,GAAI00C,CAAAA,WAAW,CAAG,KAAKsE,cAAL,EAAlB,CACA,MAAOtE,CAAAA,WAAW,CAAGA,WAAW,CAAC,KAAKmC,OAAN,CAAd,CAA+B,IAAjD,CACD,CAlCM,CAmCPgC,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBzjC,KAAzB,CAAgC6iC,QAAhC,CAA0C,CACzD,GAAI,CAAC,KAAKpB,OAAV,CAAmB,KAAM,IAAI72C,CAAAA,KAAJ,CAAU,+CAAV,CAAN,CACnB,KAAK7U,KAAL,CAAW0tD,eAAX,CAA2BzjC,KAA3B,CAAkC6iC,QAAlC,EACD,CAtCM,CAuCPa,cAAc,CAAE,QAASA,CAAAA,cAAT,CAAwBrlE,IAAxB,CAA8BwkE,QAA9B,CAAwC,CACtD,GAAI,CAAC,KAAKpB,OAAV,CAAmB,KAAM,IAAI72C,CAAAA,KAAJ,CAAU,8CAAV,CAAN,CACnB,KAAK7U,KAAL,CAAW2tD,cAAX,CAA0BrlE,IAA1B,CAAgCwkE,QAAhC,EACD,CA1CM,CA2CPtC,UAAU,CAAE,QAASA,CAAAA,UAAT,CAAoBv8E,IAApB,CAA0BiuB,OAA1B,CAAmCwgC,IAAnC,CAAyC,CACnD,KAAK18B,KAAL,CAAWwqD,UAAX,CAAsBv8E,IAAtB,CAA4BiuB,OAA5B,CAAqCwgC,IAArC,EACD,CA7CM,CA8CPwwB,mBAAmB,CAAE,QAASA,CAAAA,mBAAT,EAA+B,CAClD,MAAO,MAAKltD,KAAL,CAAWktD,mBAAX,EAAP,CACD,CAhDM,CAiDPC,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,EAA8B,CAChD,MAAO,MAAKntD,KAAL,CAAWmtD,kBAAX,EAAP,CACD,CAnDM,CAoDPW,cAAc,CAAE,QAASA,CAAAA,cAAT,CAAwBjkC,IAAxB,CAA8B,CAC5C,GAAI,CAAC,KAAK6hC,OAAV,CAAmB,KAAM,IAAI72C,CAAAA,KAAJ,CAAU,8CAAV,CAAN,CACnB,KAAK7U,KAAL,CAAWguD,kBAAX,CAA8BnkC,IAA9B,EACD,CAvDM,CAwDPonC,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuB1nF,GAAvB,CAA4B,CACzC,GAAI,CAAC,KAAKmiF,OAAV,CAAmB,KAAM,IAAI72C,CAAAA,KAAJ,CAAU,6CAAV,CAAN,CACnB,KAAK7U,KAAL,CAAWkuD,iBAAX,CAA6B3kF,GAA7B,EACD,CA3DM,CA4DP+iF,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBr+E,IAAjB,CAAuB,CAC9B,MAAO,MAAK+xB,KAAL,CAAWssD,OAAX,CAAmBr+E,IAAnB,CAAP,CACD,CA9DM,CA+DP27E,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgB37E,IAAhB,CAAsB,CAC5B,KAAK+xB,KAAL,CAAW4pD,MAAX,CAAkB37E,IAAlB,EACD,CAjEM,CAkEP2N,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgB3N,IAAhB,CAAsB+L,UAAtB,CAAkC,CACxC,KAAKgmB,KAAL,CAAWpkB,MAAX,CAAkB3N,IAAlB,CAAwB+L,UAAxB,EACD,CApEM,CAqEP+vE,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsB97E,IAAtB,CAA4Bu+E,OAA5B,CAAqC,CACjD,KAAKxsD,KAAL,CAAW+pD,YAAX,CAAwB97E,IAAxB,CAA8Bu+E,OAA9B,EACD,CAvEM,CAwEPxC,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqB/7E,IAArB,CAA2Bu+E,OAA3B,CAAoC,CAC/C,KAAKxsD,KAAL,CAAWgqD,WAAX,CAAuB/7E,IAAvB,CAA6Bu+E,OAA7B,EACD,CA1EM,CA2EPnF,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,CAA0B2I,QAA1B,CAAoCnmC,IAApC,CAA0CjlC,QAA1C,CAAoD,CACpE,KAAKhL,SAAL,CAAe,YAAf,CAA6B,kBAA7B,CAAiDiwC,IAAjD,EACA,KAAKz8C,KAAL,CAAW,aAAX,CAA0B4iF,QAA1B,CAAoCnmC,IAApC,CAA0CjlC,QAA1C,EACD,CA9EM,CA+EPssE,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2B3nF,GAA3B,CAAgC0E,IAAhC,CAAsC,CACvD,GAAI,CAAC,KAAKy9E,OAAV,CAAmB,KAAM,IAAI72C,CAAAA,KAAJ,CAAU,8CAAV,CAAN,CACnB,KAAK7U,KAAL,CAAWorD,cAAX,CAA0B7hF,GAA1B,CAA+B0E,IAA/B,EACD,CAlFM,CAmFPkjF,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,KAAKV,SAAL,CAAiB,KAAK33E,GAAL,CAASkI,gBAAT,CAA0B,8BAA1B,CAAjB,CACA,KAAK0vE,aAAL,CAAqB,KAAK53E,GAAL,CAASkI,gBAAT,CAA0B,sBAA1B,CAArB,CACA,GAAIowE,CAAAA,WAAW,CAAG,KAAKt4E,GAAL,CAASkI,gBAAT,CAA0B,4BAA1B,CAAlB,CACA,GAAIowE,WAAW,CAACjxE,MAAhB,CAAwB,CACtBixE,WAAW,CAAC,CAAD,CAAX,CAAe/yE,YAAf,CAA4B,UAA5B,CAAwC,CAAxC,EACA,OACD,CACD,KAAKoyE,SAAL,CAAe,CAAf,GAAqB,KAAKA,SAAL,CAAe,CAAf,EAAkBpyE,YAAlB,CAA+B,UAA/B,CAA2C,CAA3C,CAArB,CACD,CA5FM,CA6FP8e,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBnZ,EAAvB,CAA2B,CACxC,GAAIqtE,CAAAA,WAAW,CAAGrtE,EAAE,CAACpX,MAArB,CACA,GAAIykF,WAAW,CAACpkF,SAAZ,CAAsBC,OAAtB,CAA8B,cAA9B,IAAkD,CAAC,CAAvD,CAA0D,OAC1D,GAAIgI,CAAAA,OAAO,CAAG8O,EAAE,CAAC9O,OAAjB,CACA,KAAKu7E,SAAL,CAAiB,KAAK33E,GAAL,CAASkI,gBAAT,CAA0B,8BAA1B,CAAjB,CACA,GAAImD,CAAAA,YAAY,CAAG,KAAK0sE,aAAL,CAAmB3jF,OAAnB,CAA2BmkF,WAA3B,CAAnB,CACA,GAAIjtE,CAAAA,SAAS,CAAG,IAAK,EAArB,CACA,GAAI,CAAC,EAAD,CAAK,EAAL,EAASlX,OAAT,CAAiBgI,OAAjB,EAA4B,CAAC,CAAjC,CAAoC,CAClC;AACA8O,EAAE,CAAC3I,cAAH,GACA,GAAInG,OAAO,GAAK,EAAhB,CAAoB,CAClB;AACAkP,SAAS,CAAGD,YAAY,GAAK,CAAjB,CAAqBA,YAAY,CAAG,CAApC,CAAwC,CAApD,CACD,CAHD,IAGO,CACLC,SAAS,CAAGD,YAAY,CAAG,KAAK0sE,aAAL,CAAmB1wE,MAAnB,CAA4B,CAA3C,CAA+CgE,YAAY,CAAG,CAA9D,CAAkE,CAA9E,CACD,CACD,KAAK0sE,aAAL,CAAmBzsE,SAAnB,EAA8BvJ,KAA9B,GAAuC;AACxC,CACD,GAAI,CAAC,EAAD,CAAK,EAAL,EAAS3N,OAAT,CAAiBgI,OAAjB,EAA4B,CAAC,CAAjC,CAAoC,CAClC;AACA8O,EAAE,CAAC3I,cAAH,GACAg2E,WAAW,CAACzmF,KAAZ,GAAqB;AACtB,CACD,GAAI0mF,CAAAA,QAAQ,CAAGD,WAAW,CAACjzE,aAAZ,CAA0B,mBAA1B,CAAf,CACA,GAAI,CAAC,EAAD,CAAK,EAAL,EAASlR,OAAT,CAAiBgI,OAAjB,EAA4B,CAAC,CAA7B,EAAkCo8E,QAAtC,CAAgD,CAC9C;AACAttE,EAAE,CAAC3I,cAAH,GACAi2E,QAAQ,CAAC1mF,KAAT,GACD,CACF,CA1HM,CA1IsD,CAuQ/D0T,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIjK,CAAAA,KAAK,CAAG,IAAZ,CAEA,KAAK47E,MAAL,CAAc,IAAd,CAEA,KAAKjwD,KAAL,CAAa,GAAImuD,CAAAA,UAAJ,CAAe,CAC1B5kF,GAAG,CAAE,KAAKmiF,OADgB,CAE1Bz9E,IAAI,CAAE,KAAKA,IAFe,CAG1B+qC,IAAI,CAAE,KAAKA,IAHe,CAI1B5sC,KAAK,CAAE,KAAKA,KAJc,CAK1B8uC,IAAI,CAAE,KAAKA,IALe,CAM1BouC,cAAc,CAAE,KAAKA,cANK,CAO1BZ,aAAa,CAAE,KAAKA,aAPM,CAQ1BmC,gBAAgB,CAAE,KAAKA,gBARG,CAS1B6B,kBAAkB,CAAE,KAAKA,kBATC,CAU1BtD,mBAAmB,CAAE,KAAKA,mBAVA,CAW1BC,gBAAgB,CAAE,KAAKA,gBAXG,CAY1B3yC,gBAAgB,CAAE,KAAKA,gBAZG,CAa1By1C,gBAAgB,CAAE,KAAKA,gBAbG,CAAf,CAAb,CAgBA,KAAKj2C,IAAL,CAAY,KAAKlW,KAAL,CAAWkW,IAAvB,CAEA,GAAImY,CAAAA,SAAS,CAAG,KAAKA,SAArB,CACA,KAAK9vC,GAAL,CAAS,sBAAT,CAAiC,SAAU5R,KAAV,CAAiBsuC,QAAjB,CAA2B,CAC1D,GAAI,MAAO5mC,CAAAA,KAAK,CAACu8E,SAAb,GAA2B,UAA3B,EAAyC,CAACv8E,KAAK,CAACu8E,SAAN,CAAgB31C,QAAQ,CAAC4O,IAAzB,CAA9C,CAA8E,CAC5El9C,KAAK,CAAC0O,cAAN,GACA,MAAO,MAAP,CACD,CACD1O,KAAK,CAAC4kF,YAAN,CAAmBC,aAAnB,CAAmC,MAAnC,CAEA;AACA,GAAI,CACF;AACA;AACA7kF,KAAK,CAAC4kF,YAAN,CAAmBzxC,OAAnB,CAA2B,YAA3B,CAAyC,EAAzC,EACD,CAAC,MAAOl/B,CAAP,CAAU,CAAE,CACdytC,SAAS,CAACy4B,YAAV,CAAyB7rC,QAAzB,CACA5mC,KAAK,CAACjH,KAAN,CAAY,iBAAZ,CAA+B6tC,QAAQ,CAAC4O,IAAxC,CAA8Cl9C,KAA9C,EACD,CAfD,EAiBA,KAAK4R,GAAL,CAAS,qBAAT,CAAgC,SAAU5R,KAAV,CAAiBsuC,QAAjB,CAA2B,CACzD,GAAI01C,CAAAA,QAAQ,CAAG7I,oBAAoB,CAACn7E,KAAK,CAACC,MAAP,CAAe,YAAf,CAAnC,CACA,GAAI6kF,CAAAA,WAAW,CAAGpjC,SAAS,CAACsiC,QAA5B,CACA,GAAIc,WAAW,EAAIA,WAAW,GAAKd,QAAnC,CAA6C,CAC3CjoF,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4BqnE,WAAW,CAAC34E,GAAxC,CAA6C,eAA7C,EACD,CACD,GAAIguE,CAAAA,YAAY,CAAGz4B,SAAS,CAACy4B,YAA7B,CACA,GAAI,CAACA,YAAD,EAAiB,CAAC6J,QAAtB,CAAgC,OAEhC,GAAIe,CAAAA,QAAQ,CAAG,IAAf,CACA,GAAIC,CAAAA,SAAS,CAAG,IAAhB,CACA,GAAIC,CAAAA,QAAQ,CAAG,IAAf,CACA,GAAIC,CAAAA,kBAAkB,CAAG,IAAzB,CACA,GAAI,MAAOx9E,CAAAA,KAAK,CAAC0yE,SAAb,GAA2B,UAA/B,CAA2C,CACzC2K,QAAQ,CAAGr9E,KAAK,CAAC0yE,SAAN,CAAgBD,YAAY,CAACj9B,IAA7B,CAAmC8mC,QAAQ,CAAC9mC,IAA5C,CAAkD,MAAlD,CAAX,CACAgoC,kBAAkB,CAAGF,SAAS,CAAGt9E,KAAK,CAAC0yE,SAAN,CAAgBD,YAAY,CAACj9B,IAA7B,CAAmC8mC,QAAQ,CAAC9mC,IAA5C,CAAkD,OAAlD,CAAjC,CACA+nC,QAAQ,CAAGv9E,KAAK,CAAC0yE,SAAN,CAAgBD,YAAY,CAACj9B,IAA7B,CAAmC8mC,QAAQ,CAAC9mC,IAA5C,CAAkD,MAAlD,CAAX,CACD,CACDl9C,KAAK,CAAC4kF,YAAN,CAAmBO,UAAnB,CAAgCH,SAAS,CAAG,MAAH,CAAY,MAArD,CACA,GAAI,CAACD,QAAQ,EAAIC,SAAZ,EAAyBC,QAA1B,GAAuCH,WAAW,GAAKd,QAA3D,CAAqE,CACnE,GAAIc,WAAJ,CAAiB,CACfp9E,KAAK,CAACjH,KAAN,CAAY,iBAAZ,CAA+B05E,YAAY,CAACj9B,IAA5C,CAAkD4nC,WAAW,CAAC5nC,IAA9D,CAAoEl9C,KAApE,EACD,CACD0H,KAAK,CAACjH,KAAN,CAAY,iBAAZ,CAA+B05E,YAAY,CAACj9B,IAA5C,CAAkD8mC,QAAQ,CAAC9mC,IAA3D,CAAiEl9C,KAAjE,EACD,CAED,GAAI+kF,QAAQ,EAAIC,SAAZ,EAAyBC,QAA7B,CAAuC,CACrCvjC,SAAS,CAACsiC,QAAV,CAAqBA,QAArB,CACD,CAED,GAAIA,QAAQ,CAAC9mC,IAAT,CAAckoC,WAAd,GAA8BjL,YAAY,CAACj9B,IAA/C,CAAqD,CACnD+nC,QAAQ,CAAG,KAAX,CACD,CACD,GAAIjB,QAAQ,CAAC9mC,IAAT,CAAcmoC,eAAd,GAAkClL,YAAY,CAACj9B,IAAnD,CAAyD,CACvD6nC,QAAQ,CAAG,KAAX,CACD,CACD,GAAIf,QAAQ,CAAC9mC,IAAT,CAAcpiB,QAAd,CAAuBq/C,YAAY,CAACj9B,IAApC,CAA0C,KAA1C,CAAJ,CAAsD,CACpD8nC,SAAS,CAAG,KAAZ,CACD,CACD,GAAI7K,YAAY,CAACj9B,IAAb,GAAsB8mC,QAAQ,CAAC9mC,IAA/B,EAAuCi9B,YAAY,CAACj9B,IAAb,CAAkBpiB,QAAlB,CAA2BkpD,QAAQ,CAAC9mC,IAApC,CAA3C,CAAsF,CACpF6nC,QAAQ,CAAG,KAAX,CACAC,SAAS,CAAG,KAAZ,CACAC,QAAQ,CAAG,KAAX,CACD,CAED,GAAIK,CAAAA,cAAc,CAAGtB,QAAQ,CAAC73E,GAAT,CAAaotB,qBAAb,EAArB,CACA,GAAIgsD,CAAAA,YAAY,CAAG79E,KAAK,CAACyE,GAAN,CAAUotB,qBAAV,EAAnB,CAEA,GAAI8gD,CAAAA,QAAQ,CAAG,IAAK,EAApB,CACA,GAAImL,CAAAA,WAAW,CAAGT,QAAQ,CAAGC,SAAS,CAAG,IAAH,CAAUC,QAAQ,CAAG,IAAH,CAAU,CAAxC,CAA4C,CAAC,CAAvE,CACA,GAAIQ,CAAAA,WAAW,CAAGR,QAAQ,CAAGD,SAAS,CAAG,IAAH,CAAUD,QAAQ,CAAG,IAAH,CAAU,CAAxC,CAA4C,CAAtE,CAEA,GAAIW,CAAAA,YAAY,CAAG,CAAC,IAApB,CACA,GAAIC,CAAAA,QAAQ,CAAG3lF,KAAK,CAAC4lF,OAAN,CAAgBN,cAAc,CAACx5E,GAA9C,CACA,GAAI65E,QAAQ,CAAGL,cAAc,CAACrgE,MAAf,CAAwBugE,WAAvC,CAAoD,CAClDnL,QAAQ,CAAG,QAAX,CACD,CAFD,IAEO,IAAIsL,QAAQ,CAAGL,cAAc,CAACrgE,MAAf,CAAwBwgE,WAAvC,CAAoD,CACzDpL,QAAQ,CAAG,OAAX,CACD,CAFM,IAEA,IAAI2K,SAAJ,CAAe,CACpB3K,QAAQ,CAAG,OAAX,CACD,CAFM,IAEA,CACLA,QAAQ,CAAG,MAAX,CACD,CAED,GAAIwL,CAAAA,YAAY,CAAG7B,QAAQ,CAAC73E,GAAT,CAAasF,aAAb,CAA2B,4BAA3B,EAAyD8nB,qBAAzD,EAAnB,CACA,GAAIusD,CAAAA,aAAa,CAAGp+E,KAAK,CAAC4E,KAAN,CAAYw5E,aAAhC,CACA,GAAIzL,QAAQ,GAAK,QAAjB,CAA2B,CACzBqL,YAAY,CAAGG,YAAY,CAAC/5E,GAAb,CAAmBy5E,YAAY,CAACz5E,GAA/C,CACD,CAFD,IAEO,IAAIuuE,QAAQ,GAAK,OAAjB,CAA0B,CAC/BqL,YAAY,CAAGG,YAAY,CAACjgC,MAAb,CAAsB2/B,YAAY,CAACz5E,GAAlD,CACD,CACDg6E,aAAa,CAACv7E,KAAd,CAAoBuB,GAApB,CAA0B45E,YAAY,CAAG,IAAzC,CACAI,aAAa,CAACv7E,KAAd,CAAoBwR,IAApB,CAA2B8pE,YAAY,CAAC5pE,KAAb,CAAqBspE,YAAY,CAACxpE,IAAlC,CAAyC,IAApE,CAEA,GAAIs+D,QAAQ,GAAK,OAAjB,CAA0B,CACxBt+E,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBumE,QAAQ,CAAC73E,GAAlC,CAAuC,eAAvC,EACD,CAFD,IAEO,CACLpQ,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4BumE,QAAQ,CAAC73E,GAArC,CAA0C,eAA1C,EACD,CAEDu1C,SAAS,CAACk5B,iBAAV,CAA8BP,QAAQ,GAAK,QAAb,EAAyBA,QAAQ,GAAK,OAApE,CACA34B,SAAS,CAAC04B,SAAV,CAAsB14B,SAAS,CAACk5B,iBAAV,EAA+BsK,kBAArD,CACAxjC,SAAS,CAAC24B,QAAV,CAAqBA,QAArB,CACA3yE,KAAK,CAACjH,KAAN,CAAY,gBAAZ,CAA8B05E,YAAY,CAACj9B,IAA3C,CAAiD8mC,QAAQ,CAAC9mC,IAA1D,CAAgEl9C,KAAhE,EACD,CApFD,EAsFA,KAAK4R,GAAL,CAAS,oBAAT,CAA+B,SAAU5R,KAAV,CAAiB,CAC9C,GAAIm6E,CAAAA,YAAY,CAAGz4B,SAAS,CAACy4B,YAA7B,CACIE,QAAQ,CAAG34B,SAAS,CAAC24B,QADzB,CAEI2J,QAAQ,CAAGtiC,SAAS,CAACsiC,QAFzB,CAIAhkF,KAAK,CAAC0O,cAAN,GACA1O,KAAK,CAAC4kF,YAAN,CAAmBO,UAAnB,CAAgC,MAAhC,CAEA,GAAIhL,YAAY,EAAI6J,QAApB,CAA8B,CAC5B,GAAI+B,CAAAA,gBAAgB,CAAG,CAAEzkF,IAAI,CAAE64E,YAAY,CAACj9B,IAAb,CAAkB57C,IAA1B,CAAvB,CACA,GAAI+4E,QAAQ,GAAK,MAAjB,CAAyB,CACvBF,YAAY,CAACj9B,IAAb,CAAkB+/B,MAAlB,GACD,CACD,GAAI5C,QAAQ,GAAK,QAAjB,CAA2B,CACzB2J,QAAQ,CAAC9mC,IAAT,CAAcz6C,MAAd,CAAqB26E,YAArB,CAAkC2I,gBAAlC,CAAoD/B,QAAQ,CAAC9mC,IAA7D,EACD,CAFD,IAEO,IAAIm9B,QAAQ,GAAK,OAAjB,CAA0B,CAC/B2J,QAAQ,CAAC9mC,IAAT,CAAcz6C,MAAd,CAAqB46E,WAArB,CAAiC0I,gBAAjC,CAAmD/B,QAAQ,CAAC9mC,IAA5D,EACD,CAFM,IAEA,IAAIm9B,QAAQ,GAAK,OAAjB,CAA0B,CAC/B2J,QAAQ,CAAC9mC,IAAT,CAAc6/B,WAAd,CAA0BgJ,gBAA1B,EACD,CACD,GAAI1L,QAAQ,GAAK,MAAjB,CAAyB,CACvB3yE,KAAK,CAAC2rB,KAAN,CAAYipD,YAAZ,CAAyByJ,gBAAzB,EACD,CAEDhqF,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4BumE,QAAQ,CAAC73E,GAArC,CAA0C,eAA1C,EAEAzE,KAAK,CAACjH,KAAN,CAAY,eAAZ,CAA6B05E,YAAY,CAACj9B,IAA1C,CAAgD8mC,QAAQ,CAAC9mC,IAAzD,CAA+Dm9B,QAA/D,CAAyEr6E,KAAzE,EACA,GAAIq6E,QAAQ,GAAK,MAAjB,CAAyB,CACvB3yE,KAAK,CAACjH,KAAN,CAAY,WAAZ,CAAyB05E,YAAY,CAACj9B,IAAtC,CAA4C8mC,QAAQ,CAAC9mC,IAArD,CAA2Dm9B,QAA3D,CAAqEr6E,KAArE,EACD,CACF,CACD,GAAIm6E,YAAY,EAAI,CAAC6J,QAArB,CAA+B,CAC7Bt8E,KAAK,CAACjH,KAAN,CAAY,eAAZ,CAA6B05E,YAAY,CAACj9B,IAA1C,CAAgD,IAAhD,CAAsDm9B,QAAtD,CAAgEr6E,KAAhE,EACD,CAED0hD,SAAS,CAACk5B,iBAAV,CAA8B,KAA9B,CACAl5B,SAAS,CAACy4B,YAAV,CAAyB,IAAzB,CACAz4B,SAAS,CAACsiC,QAAV,CAAqB,IAArB,CACAtiC,SAAS,CAAC04B,SAAV,CAAsB,IAAtB,CACD,CAvCD,EAwCD,CA9a8D,CA+a/DltE,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAKs3E,YAAL,GACA,KAAKr4E,GAAL,CAASC,gBAAT,CAA0B,SAA1B,CAAqC,KAAKokB,aAA1C,EACD,CAlb8D,CAmb/Dtf,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAK4yE,SAAL,CAAiB,KAAK33E,GAAL,CAASkI,gBAAT,CAA0B,iBAA1B,CAAjB,CACA,KAAK0vE,aAAL,CAAqB,KAAK53E,GAAL,CAASkI,gBAAT,CAA0B,sBAA1B,CAArB,CACD,CAtb8D,CAApC,CAwb7B;AACC,4BAA6B,GAAI2xE,CAAAA,gCAAgC,CAAIpC,4BAAxC,CAC9B;AAMA,yBAEA,GAAIqC,CAAAA,cAAc,CAAGxkF,kBAAkB,CACrCukF,gCADqC,CAErC/L,wCAFqC,CAGrCY,iDAHqC,CAIrC,KAJqC,CAKrC,IALqC,CAMrC,IANqC,CAOrC,IAPqC,CAAvC,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIqL,CAAAA,QAAJ,CAAe,CAC5BD,cAAc,CAAChkF,OAAf,CAAuByB,MAAvB,CAAgC,4BAAhC,CACA,4BAA6B,GAAIyiF,CAAAA,QAAQ,CAAIF,cAAc,CAAChrF,OAA/B,CAC7B;AAGA,0BACAkrF,QAAQ,CAAC58E,OAAT,CAAmB,SAAUC,GAAV,CAAe,CAChCA,GAAG,CAAChG,SAAJ,CAAc2iF,QAAQ,CAACvqF,IAAvB,CAA6BuqF,QAA7B,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,aAAa,CAAID,QAArB,CAC7B;AACA,GAAIE,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAI3oF,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CAAC,YAAD,CAAe,CAAEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,eAAR,CAAT,CAAf,CAAqD,CAC5DiC,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACqM,OAHb,CAIEC,UAAU,CAAE,SAJd,CADU,CADd,CASEjM,WAAW,CAAE,UATf,CAUEK,KAAK,CAAE,CACLV,GAAG,CAAC4oF,SADC,CAEL5oF,GAAG,CAAC2M,MAAJ,CAAa,WAAb,CAA2B,EAFtB,CAGL,MAAQ3M,GAAG,CAAConB,MAHP,CAVT,CAeEhf,KAAK,CAAE,CAAE0E,IAAI,CAAE,OAAR,CAfT,CAFA,CAmBA,CACE9M,GAAG,CAAC6oF,QAAJ,CACI1oF,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,gBADP,CAENK,KAAK,CAAE,CAACV,GAAG,CAAC+6B,SAAL,CAAgB/6B,GAAG,CAAC8oF,SAApB,CAFD,CAAN,CADN,CAKI9oF,GAAG,CAACe,EAAJ,EANN,CAOEZ,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,mBAAf,CAAR,CAA8C,CAC9CL,GAAG,CAAC+M,KAAJ,EAAa/M,GAAG,CAACyI,MAAJ,CAAWsE,KAAxB,CACI5M,EAAE,CACA,MADA,CAEA,CAAEE,WAAW,CAAE,iBAAf,CAAkCK,KAAK,CAAE,CAACV,GAAG,CAAC+oF,WAAL,CAAzC,CAFA,CAGA,CAAC/oF,GAAG,CAACgN,EAAJ,CAAO,OAAP,CAAgB,CAAChN,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+M,KAAX,CAAP,CAAD,CAAhB,CAAD,CAHA,CAIA,CAJA,CADN,CAOI/M,GAAG,CAACe,EAAJ,EAR0C,CAS9Cf,GAAG,CAACyI,MAAJ,CAAW5B,OAAX,EAAsB,CAAC7G,GAAG,CAACgpF,WAA3B,CACI7oF,EAAE,CACA,GADA,CAEA,CAAEE,WAAW,CAAE,uBAAf,CAFA,CAGA,CAACL,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAD,CAHA,CAIA,CAJA,CADN,CAOIhN,GAAG,CAACe,EAAJ,EAhB0C,CAiB9Cf,GAAG,CAACgpF,WAAJ,EAAmB,CAAChpF,GAAG,CAACyI,MAAJ,CAAW5B,OAA/B,CACI1G,EAAE,CAAC,GAAD,CAAM,CAAEE,WAAW,CAAE,uBAAf,CAAN,CAAgD,CAChDL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACgpF,WAAX,CAAP,CADgD,CAAhD,CADN,CAIIhpF,GAAG,CAACe,EAAJ,EArB0C,CAsB9CZ,EAAE,CACA,GADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACm5B,QAHb,CAIE7sB,UAAU,CAAE,UAJd,CADU,CADd,CASEjM,WAAW,CAAE,oBATf,CAUEK,KAAK,CAAE,CACL,cAAeV,GAAG,CAACipF,SAAJ,GAAkB,EAD5B,CAEL,gBAAiBjpF,GAAG,CAACipF,SAAJ,GAAkB,EAF9B,CAVT,CAcE3oF,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACkQ,KAAJ,GACD,CAHC,CAdN,CAFA,CAsBA,CAAClQ,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACipF,SAAX,CAAP,CAAD,CAtBA,CAtB4C,CAA9C,CAPJ,CAnBA,CAD0D,CAArD,CAAT,CA6ED,CAjFD,CAkFA,GAAIC,CAAAA,iDAAiD,CAAG,EAAxD,CACAP,wCAAwC,CAAC9mF,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,GAAIsnF,CAAAA,gBAAgB,CAAG,CACrB,UAAW,iBADU,CAErB,UAAW,iBAFU,CAGrB,QAAS,eAHY,CAAvB,CAKA,4BAA6B,GAAIC,CAAAA,sCAAsC,CAAI,CACzElrF,IAAI,CAAE,SADmE,CAGzE6D,KAAK,CAAE,CACLgL,KAAK,CAAE,CACLnG,IAAI,CAAEU,MADD,CAELT,OAAO,CAAE,EAFJ,CADF,CAKLmiF,WAAW,CAAE,CACXpiF,IAAI,CAAEU,MADK,CAEXT,OAAO,CAAE,EAFE,CALR,CASLD,IAAI,CAAE,CACJA,IAAI,CAAEU,MADF,CAEJT,OAAO,CAAE,MAFL,CATD,CAaLsyB,QAAQ,CAAE,CACRvyB,IAAI,CAAE1E,OADE,CAER2E,OAAO,CAAE,IAFD,CAbL,CAiBLoiF,SAAS,CAAE,CACTriF,IAAI,CAAEU,MADG,CAETT,OAAO,CAAE,EAFA,CAjBN,CAqBLgiF,QAAQ,CAAE3mF,OArBL,CAsBLyK,MAAM,CAAEzK,OAtBH,CAuBLklB,MAAM,CAAE,CACNxgB,IAAI,CAAEU,MADA,CAENT,OAAO,CAAE,OAFH,CAGNG,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmBpI,KAAnB,CAA0B,CACnC,MAAO,CAAC,OAAD,CAAU,MAAV,EAAkBiE,OAAlB,CAA0BjE,KAA1B,IAAqC,CAAC,CAA7C,CACD,CALK,CAvBH,CAHkE,CAmCzEgF,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLyI,OAAO,CAAE,IADJ,CAAP,CAGD,CAvCwE,CA0CzEhK,OAAO,CAAE,CACP6N,KAAK,CAAE,QAASA,CAAAA,KAAT,EAAiB,CACtB,KAAK7D,OAAL,CAAe,KAAf,CACA,KAAKtJ,KAAL,CAAW,OAAX,EACD,CAJM,CA1CgE,CAiDzEE,QAAQ,CAAE,CACR2lF,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,aAAe,KAAKhiF,IAA3B,CACD,CAHO,CAIRm0B,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAOouD,CAAAA,gBAAgB,CAAC,KAAKviF,IAAN,CAAhB,EAA+B,cAAtC,CACD,CANO,CAORkiF,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAKE,WAAL,EAAoB,KAAKvgF,MAAL,CAAY5B,OAAhC,CAA0C,QAA1C,CAAqD,EAA5D,CACD,CATO,CAURkiF,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,MAAO,MAAKC,WAAL,EAAoB,KAAKvgF,MAAL,CAAY5B,OAAhC,CAA0C,SAA1C,CAAsD,EAA7D,CACD,CAZO,CAjD+D,CAA9C,CAgE7B;AACC,4BAA6B,GAAIwiF,CAAAA,+CAA+C,CAAID,sCAAvD,CAC9B;AAMA,yBAEA,GAAIE,CAAAA,wBAAwB,CAAGvlF,kBAAkB,CAC/CslF,+CAD+C,CAE/CV,wCAF+C,CAG/CO,iDAH+C,CAI/C,KAJ+C,CAK/C,IAL+C,CAM/C,IAN+C,CAO/C,IAP+C,CAAjD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIK,CAAAA,kBAAJ,CAAyB,CACtCD,wBAAwB,CAAC/kF,OAAzB,CAAiCyB,MAAjC,CAA0C,6BAA1C,CACA,4BAA6B,GAAIwjF,CAAAA,cAAc,CAAIF,wBAAwB,CAAC/rF,OAA/C,CAC7B;AAGA,0BACAisF,cAAc,CAAC39E,OAAf,CAAyB,SAAUC,GAAV,CAAe,CACtCA,GAAG,CAAChG,SAAJ,CAAc0jF,cAAc,CAACtrF,IAA7B,CAAmCsrF,cAAnC,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,cAAc,CAAID,cAAtB,CAC7B;AACA,GAAIE,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAI1pF,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CAAC,YAAD,CAAe,CAAEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,sBAAR,CAAT,CAAf,CAA4D,CACnEiC,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACqM,OAHb,CAIEC,UAAU,CAAE,SAJd,CADU,CADd,CASE5L,KAAK,CAAE,CAAC,iBAAD,CAAoBV,GAAG,CAAC4M,WAAxB,CAAqC5M,GAAG,CAAC2pF,eAAzC,CATT,CAUE98E,KAAK,CAAE7M,GAAG,CAAC4pF,aAVb,CAWExhF,KAAK,CAAE,CAAE0E,IAAI,CAAE,OAAR,CAXT,CAYExM,EAAE,CAAE,CACFY,UAAU,CAAE,oBAASC,MAAT,CAAiB,CAC3BnB,GAAG,CAAC6pF,UAAJ,GACD,CAHC,CAIFxoF,UAAU,CAAE,oBAASF,MAAT,CAAiB,CAC3BnB,GAAG,CAAC8pF,UAAJ,GACD,CANC,CAOFvpF,KAAK,CAAEP,GAAG,CAACO,KAPT,CAZN,CAFA,CAwBA,CACEP,GAAG,CAAC4G,IAAJ,EAAY5G,GAAG,CAAC+6B,SAAhB,CACI56B,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,uBADP,CAENK,KAAK,CAAE,CAACV,GAAG,CAAC4oF,SAAL,CAAgB5oF,GAAG,CAAC+6B,SAApB,CAFD,CAAN,CADN,CAKI/6B,GAAG,CAACe,EAAJ,EANN,CAOEZ,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,wBADf,CAEEK,KAAK,CAAE,CAAE,eAAgBV,GAAG,CAAC4oF,SAAJ,EAAiB5oF,GAAG,CAAC+6B,SAAvC,CAFT,CAFA,CAMA,CACE56B,EAAE,CAAC,IAAD,CAAO,CACPE,WAAW,CAAE,wBADN,CAEPuxB,QAAQ,CAAE,CAAElvB,WAAW,CAAE1C,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+M,KAAX,CAAf,CAFH,CAAP,CADJ,CAKE5M,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACwpE,OAHb,CAIEl9D,UAAU,CAAE,SAJd,CADU,CADd,CASEjM,WAAW,CAAE,0BATf,CAFA,CAaA,CACEL,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAkB,CAChB,CAAChN,GAAG,CAACypE,wBAAL,CACItpE,EAAE,CAAC,GAAD,CAAM,CAACH,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACwpE,OAAX,CAAP,CAAD,CAAN,CADN,CAEIrpE,EAAE,CAAC,GAAD,CAAM,CAAEyxB,QAAQ,CAAE,CAAE83C,SAAS,CAAE1pE,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACwpE,OAAX,CAAb,CAAZ,CAAN,CAHU,CAAlB,CADF,CAbA,CAoBA,CApBA,CALJ,CA2BExpE,GAAG,CAACiN,SAAJ,CACI9M,EAAE,CAAC,KAAD,CAAQ,CACRE,WAAW,CAAE,yCADL,CAERC,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBA,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAACkQ,KAAJ,CAAU/O,MAAV,CAAP,CACD,CAJC,CAFI,CAAR,CADN,CAUInB,GAAG,CAACe,EAAJ,EArCN,CANA,CAPJ,CAxBA,CADiE,CAA5D,CAAT,CAiFD,CArFD,CAsFA,GAAIgpF,CAAAA,iDAAiD,CAAG,EAAxD,CACAL,wCAAwC,CAAC7nF,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,GAAImoF,CAAAA,mCAAmC,CAAG,CACxCj9D,OAAO,CAAE,SAD+B,CAExCugB,IAAI,CAAE,MAFkC,CAGxC09B,OAAO,CAAE,SAH+B,CAIxC30D,KAAK,CAAE,OAJiC,CAA1C,CAOA,4BAA6B,GAAI4zE,CAAAA,6CAA6C,CAAI,CAChFrmF,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLyI,OAAO,CAAE,KADJ,CAELU,KAAK,CAAE,EAFF,CAGLy8D,OAAO,CAAE,EAHJ,CAIL0gB,QAAQ,CAAE,IAJL,CAKLtjF,IAAI,CAAE,EALD,CAMLqG,SAAS,CAAE,IANN,CAOLL,WAAW,CAAE,EAPR,CAQLmuB,SAAS,CAAE,EARN,CASL0wC,OAAO,CAAE,IATJ,CAULrN,OAAO,CAAE,IAVJ,CAWL5vD,MAAM,CAAE,KAXH,CAYL27E,cAAc,CAAE,CAZX,CAaLC,KAAK,CAAE,IAbF,CAcL3gB,wBAAwB,CAAE,KAdrB,CAeLniD,QAAQ,CAAE,WAfL,CAAP,CAiBD,CAnB+E,CAsBhFrkB,QAAQ,CAAE,CACR2lF,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAKhiF,IAAL,EAAaojF,mCAAmC,CAAC,KAAKpjF,IAAN,CAAhD,CAA8D,WAAaojF,mCAAmC,CAAC,KAAKpjF,IAAN,CAA9G,CAA4H,EAAnI,CACD,CAHO,CAIR+iF,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,MAAO,MAAKriE,QAAL,CAAczkB,OAAd,CAAsB,OAAtB,EAAiC,CAAC,CAAlC,CAAsC,OAAtC,CAAgD,MAAvD,CACD,CANO,CAORwnF,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,MAAQ,SAAQ9sE,IAAR,CAAa,KAAK+J,QAAlB,EAA8B,KAA9B,CAAsC,QAA9C,CAED,CAVO,CAWRsiE,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAIh/E,CAAAA,IAAJ,CAEA,MAAOA,CAAAA,IAAI,CAAG,EAAP,CAAWA,IAAI,CAAC,KAAKy/E,gBAAN,CAAJ,CAA8B,KAAKF,cAAL,CAAsB,IAA/D,CAAqEv/E,IAA5E,CACD,CAfO,CAtBsE,CAwChFzI,KAAK,CAAE,CACLqM,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgB3E,MAAhB,CAAwB,CAC9B,GAAIA,MAAJ,CAAY,CACV,KAAKwC,OAAL,CAAe,KAAf,CACA,KAAKoC,GAAL,CAASC,gBAAT,CAA0B,eAA1B,CAA2C,KAAK47E,cAAhD,EACD,CACF,CANI,CAxCyE,CAiDhFjoF,OAAO,CAAE,CACPioF,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,KAAK77E,GAAL,CAASS,mBAAT,CAA6B,eAA7B,CAA8C,KAAKo7E,cAAnD,EACA,KAAKpzE,QAAL,CAAc,IAAd,EACA,KAAKzI,GAAL,CAASkB,UAAT,CAAoBC,WAApB,CAAgC,KAAKnB,GAArC,EACD,CALM,CAMPlO,KAAK,CAAE,QAASA,CAAAA,KAAT,EAAiB,CACtB,GAAI,MAAO,MAAK69D,OAAZ,GAAwB,UAA5B,CAAwC,CACtC,KAAKA,OAAL,GACD,CACF,CAVM,CAWPluD,KAAK,CAAE,QAASA,CAAAA,KAAT,EAAiB,CACtB,KAAK1B,MAAL,CAAc,IAAd,CACA,GAAI,MAAO,MAAKi9D,OAAZ,GAAwB,UAA5B,CAAwC,CACtC,KAAKA,OAAL,GACD,CACF,CAhBM,CAiBPoe,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChCxwE,YAAY,CAAC,KAAK+wE,KAAN,CAAZ,CACD,CAnBM,CAoBPN,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAI9/E,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI,KAAKkgF,QAAL,CAAgB,CAApB,CAAuB,CACrB,KAAKE,KAAL,CAAa9wE,UAAU,CAAC,UAAY,CAClC,GAAI,CAACtP,KAAK,CAACwE,MAAX,CAAmB,CACjBxE,KAAK,CAACkG,KAAN,GACD,CACF,CAJsB,CAIpB,KAAKg6E,QAJe,CAAvB,CAKD,CACF,CA9BM,CA+BPp5E,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiByF,CAAjB,CAAoB,CAC3B,GAAIA,CAAC,CAAC1L,OAAF,GAAc,EAAd,EAAoB0L,CAAC,CAAC1L,OAAF,GAAc,CAAtC,CAAyC,CACvC,KAAKg/E,UAAL,GAAmB;AACpB,CAFD,IAEO,IAAItzE,CAAC,CAAC1L,OAAF,GAAc,EAAlB,CAAsB,CAC3B;AACA,GAAI,CAAC,KAAK2D,MAAV,CAAkB,CAChB,KAAK0B,KAAL,GACD,CACF,CALM,IAKA,CACL,KAAK45E,UAAL,GAAmB;AACpB,CACF,CA1CM,CAjDuE,CA6FhFt6E,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAI/D,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI,KAAKy+E,QAAL,CAAgB,CAApB,CAAuB,CACrB,KAAKE,KAAL,CAAa9wE,UAAU,CAAC,UAAY,CAClC,GAAI,CAAC7N,MAAM,CAAC+C,MAAZ,CAAoB,CAClB/C,MAAM,CAACyE,KAAP,GACD,CACF,CAJsB,CAIpB,KAAKg6E,QAJe,CAAvB,CAKD,CACDn7E,QAAQ,CAACL,gBAAT,CAA0B,SAA1B,CAAqC,KAAKoC,OAA1C,EACD,CAxG+E,CAyGhFmG,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtClI,QAAQ,CAACG,mBAAT,CAA6B,SAA7B,CAAwC,KAAK4B,OAA7C,EACD,CA3G+E,CAArD,CA6G7B;AACC,4BAA6B,GAAIy5E,CAAAA,sDAAsD,CAAIN,6CAA9D,CAC9B;AAMA,yBAEA,GAAIO,CAAAA,+BAA+B,CAAGzmF,kBAAkB,CACtDwmF,sDADsD,CAEtDb,wCAFsD,CAGtDK,iDAHsD,CAItD,KAJsD,CAKtD,IALsD,CAMtD,IANsD,CAOtD,IAPsD,CAAxD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIU,CAAAA,yBAAJ,CAAgC,CAC7CD,+BAA+B,CAACjmF,OAAhC,CAAwCyB,MAAxC,CAAiD,oCAAjD,CACA,4BAA6B,GAAI0kF,CAAAA,qBAAqB,CAAIF,+BAA+B,CAACjtF,OAA7D,CAC7B;AAMA,GAAIotF,CAAAA,uBAAuB,CAAGniD,oBAAoB,CAAC9+B,CAArB,CAAuB6nC,MAAvB,CAA8Bm5C,qBAA9B,CAA9B,CAEA,GAAIE,CAAAA,iBAAiB,CAAG,IAAK,EAA7B,CACA,GAAIC,CAAAA,SAAS,CAAG,EAAhB,CACA,GAAIC,CAAAA,IAAI,CAAG,CAAX,CAEA,GAAIC,CAAAA,iBAAiB,CAAG,QAASC,CAAAA,YAAT,CAAsBzmF,OAAtB,CAA+B,CACrD,GAAIikC,oBAAoB,CAAC9+B,CAArB,CAAuBjK,SAAvB,CAAiC4tB,SAArC,CAAgD,OAChD9oB,OAAO,CAAGsnB,aAAa,GAAG,EAAH,CAAOtnB,OAAP,CAAvB,CACA,GAAI0mF,CAAAA,WAAW,CAAG1mF,OAAO,CAACknE,OAA1B,CACA,GAAIr7D,CAAAA,EAAE,CAAG,gBAAkB06E,IAAI,EAA/B,CACA,GAAIxjE,CAAAA,QAAQ,CAAG/iB,OAAO,CAAC+iB,QAAR,EAAoB,WAAnC,CAEA/iB,OAAO,CAACknE,OAAR,CAAkB,UAAY,CAC5Buf,YAAY,CAAC96E,KAAb,CAAmBE,EAAnB,CAAuB66E,WAAvB,EACD,CAFD,CAIAL,iBAAiB,CAAG,GAAID,CAAAA,uBAAJ,CAA4B,CAC9C/mF,IAAI,CAAEW,OADwC,CAA5B,CAApB,CAIA,GAAIlG,MAAM,CAACyuE,KAAK,CAAC,SAAD,CAAN,CAAN,CAAyBvoE,OAAO,CAACilE,OAAjC,CAAJ,CAA+C,CAC7CohB,iBAAiB,CAACniF,MAAlB,CAAyB5B,OAAzB,CAAmC,CAACtC,OAAO,CAACilE,OAAT,CAAnC,CACAjlE,OAAO,CAACilE,OAAR,CAAkB,mBAAlB,CACD,CACDohB,iBAAiB,CAACx6E,EAAlB,CAAuBA,EAAvB,CACAw6E,iBAAiB,CAACpnC,MAAlB,GACAz0C,QAAQ,CAACC,IAAT,CAAcC,WAAd,CAA0B27E,iBAAiB,CAACn8E,GAA5C,EACAm8E,iBAAiB,CAACv+E,OAAlB,CAA4B,IAA5B,CACAu+E,iBAAiB,CAACM,GAAlB,CAAwBN,iBAAiB,CAACn8E,GAA1C,CACAm8E,iBAAiB,CAACM,GAAlB,CAAsBr+E,KAAtB,CAA4Bi0C,MAA5B,CAAqCxzC,MAAM,CAAC,cAAD,CAAN,CAAuByzC,UAAvB,EAArC,CAEA,GAAIopC,CAAAA,cAAc,CAAG5lF,OAAO,CAAChB,MAAR,EAAkB,CAAvC,CACAsnF,SAAS,CAACjrE,MAAV,CAAiB,SAAU/W,IAAV,CAAgB,CAC/B,MAAOA,CAAAA,IAAI,CAACye,QAAL,GAAkBA,QAAzB,CACD,CAFD,EAEGpe,OAFH,CAEW,SAAUL,IAAV,CAAgB,CACzBshF,cAAc,EAAIthF,IAAI,CAAC4F,GAAL,CAASmpC,YAAT,CAAwB,EAA1C,CACD,CAJD,EAKAuyC,cAAc,EAAI,EAAlB,CACAS,iBAAiB,CAACT,cAAlB,CAAmCA,cAAnC,CACAU,SAAS,CAACxnF,IAAV,CAAeunF,iBAAf,EACA,MAAOA,CAAAA,iBAAP,CACD,CApCD,CAsCA,CAAC,SAAD,CAAY,SAAZ,CAAuB,MAAvB,CAA+B,OAA/B,EAAwC1hF,OAAxC,CAAgD,SAAUtC,IAAV,CAAgB,CAC9DmkF,iBAAiB,CAACnkF,IAAD,CAAjB,CAA0B,SAAUrC,OAAV,CAAmB,CAC3C,GAAI,MAAOA,CAAAA,OAAP,GAAmB,QAAnB,EAA+BlG,MAAM,CAACyuE,KAAK,CAAC,SAAD,CAAN,CAAN,CAAyBvoE,OAAzB,CAAnC,CAAsE,CACpEA,OAAO,CAAG,CACRilE,OAAO,CAAEjlE,OADD,CAAV,CAGD,CACDA,OAAO,CAACqC,IAAR,CAAeA,IAAf,CACA,MAAOmkF,CAAAA,iBAAiB,CAACxmF,OAAD,CAAxB,CACD,CARD,CASD,CAVD,EAYAwmF,iBAAiB,CAAC76E,KAAlB,CAA0B,SAAUE,EAAV,CAAc66E,WAAd,CAA2B,CACnD,GAAIn5E,CAAAA,KAAK,CAAG,CAAC,CAAb,CACA,GAAI03B,CAAAA,GAAG,CAAGqhD,SAAS,CAAC/0E,MAApB,CACA,GAAIyE,CAAAA,QAAQ,CAAGswE,SAAS,CAACjrE,MAAV,CAAiB,SAAUrF,QAAV,CAAoB3c,CAApB,CAAuB,CACrD,GAAI2c,QAAQ,CAACnK,EAAT,GAAgBA,EAApB,CAAwB,CACtB0B,KAAK,CAAGlU,CAAR,CACA,MAAO,KAAP,CACD,CACD,MAAO,MAAP,CACD,CANc,EAMZ,CANY,CAAf,CAOA,GAAI,CAAC2c,QAAL,CAAe,OAEf,GAAI,MAAO0wE,CAAAA,WAAP,GAAuB,UAA3B,CAAuC,CACrCA,WAAW,CAAC1wE,QAAD,CAAX,CACD,CACDswE,SAAS,CAAC5oE,MAAV,CAAiBnQ,KAAjB,CAAwB,CAAxB,EAEA,GAAI03B,GAAG,EAAI,CAAX,CAAc,OACd,GAAIliB,CAAAA,QAAQ,CAAG/M,QAAQ,CAAC+M,QAAxB,CACA,GAAI6jE,CAAAA,aAAa,CAAG5wE,QAAQ,CAAC2wE,GAAT,CAAatzC,YAAjC,CACA,IAAK,GAAIh6C,CAAAA,CAAC,CAAGkU,KAAb,CAAoBlU,CAAC,CAAG4rC,GAAG,CAAG,CAA9B,CAAiC5rC,CAAC,EAAlC,CAAsC,CACpC,GAAIitF,SAAS,CAACjtF,CAAD,CAAT,CAAa0pB,QAAb,GAA0BA,QAA9B,CAAwC,CACtCujE,SAAS,CAACjtF,CAAD,CAAT,CAAastF,GAAb,CAAiBr+E,KAAjB,CAAuB0N,QAAQ,CAAC8vE,gBAAhC,EAAoD//E,QAAQ,CAACugF,SAAS,CAACjtF,CAAD,CAAT,CAAastF,GAAb,CAAiBr+E,KAAjB,CAAuB0N,QAAQ,CAAC8vE,gBAAhC,CAAD,CAAoD,EAApD,CAAR,CAAkEc,aAAlE,CAAkF,EAAlF,CAAuF,IAA3I,CACD,CACF,CACF,CAzBD,CA2BAJ,iBAAiB,CAACK,QAAlB,CAA6B,UAAY,CACvC,IAAK,GAAIxtF,CAAAA,CAAC,CAAGitF,SAAS,CAAC/0E,MAAV,CAAmB,CAAhC,CAAmClY,CAAC,EAAI,CAAxC,CAA2CA,CAAC,EAA5C,CAAgD,CAC9CitF,SAAS,CAACjtF,CAAD,CAAT,CAAasS,KAAb,GACD,CACF,CAJD,CAMA,4BAA6B,GAAIm7E,CAAAA,8BAA8B,CAAIN,iBAAtC,CAC7B;AAEA,4BAA6B,GAAIO,CAAAA,YAAY,CAAID,8BAApB,CAC7B;AACA,GAAIE,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAIvrF,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,WADf,CAEEK,KAAK,CAAE,CACL,cAAeV,GAAG,CAACwrF,QADd,CAEL,wBAAyBxrF,GAAG,CAAC2pE,SAFxB,CAFT,CAMEvhE,KAAK,CAAE,CACL0E,IAAI,CAAE,QADD,CAEL,gBAAiB9M,GAAG,CAACiL,GAFhB,CAGL,gBAAiBjL,GAAG,CAACkL,GAHhB,CAIL,mBAAoBlL,GAAG,CAACwrF,QAAJ,CAAe,UAAf,CAA4B,YAJ3C,CAKL,gBAAiBxrF,GAAG,CAACyrF,cALhB,CANT,CAFO,CAgBP,CACEzrF,GAAG,CAAC2pE,SAAJ,EAAiB,CAAC3pE,GAAG,CAACu9C,KAAtB,CACIp9C,EAAE,CAAC,iBAAD,CAAoB,CACpBsM,GAAG,CAAE,OADe,CAEpBpM,WAAW,CAAE,kBAFO,CAGpB+H,KAAK,CAAE,CACLynB,IAAI,CAAE7vB,GAAG,CAAC6vB,IADL,CAELhvB,QAAQ,CAAEb,GAAG,CAACyrF,cAFT,CAGLl9D,QAAQ,CAAEvuB,GAAG,CAAC0rF,iBAHT,CAILzgF,GAAG,CAAEjL,GAAG,CAACiL,GAJJ,CAKLC,GAAG,CAAElL,GAAG,CAACkL,GALJ,CAMLuK,QAAQ,CAAEzV,GAAG,CAACyV,QANT,CAOLxL,IAAI,CAAEjK,GAAG,CAAC8oB,SAPL,CAHa,CAYpBxoB,EAAE,CAAE,CAAEiQ,MAAM,CAAEvQ,GAAG,CAACgL,UAAd,CAZgB,CAapB2mB,KAAK,CAAE,CACL/yB,KAAK,CAAEoB,GAAG,CAAC2rF,UADN,CAEL7wD,QAAQ,CAAE,kBAASzF,GAAT,CAAc,CACtBr1B,GAAG,CAAC2rF,UAAJ,CAAiBt2D,GAAjB,CACD,CAJI,CAKL/oB,UAAU,CAAE,YALP,CAba,CAApB,CADN,CAsBItM,GAAG,CAACe,EAAJ,EAvBN,CAwBEZ,EAAE,CACA,KADA,CAEA,CACEsM,GAAG,CAAE,QADP,CAEEpM,WAAW,CAAE,mBAFf,CAGEK,KAAK,CAAE,CAAE,aAAcV,GAAG,CAAC2pE,SAApB,CAA+B9oE,QAAQ,CAAEb,GAAG,CAACyrF,cAA7C,CAHT,CAIE5+E,KAAK,CAAE7M,GAAG,CAAC4rF,WAJb,CAKEtrF,EAAE,CAAE,CAAEC,KAAK,CAAEP,GAAG,CAAC6rF,aAAb,CALN,CAFA,CASA,CACE1rF,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,gBAAf,CAAiCwM,KAAK,CAAE7M,GAAG,CAACq1E,QAA5C,CAAR,CADJ,CAEEl1E,EAAE,CAAC,eAAD,CAAkB,CAClBsM,GAAG,CAAE,SADa,CAElBrE,KAAK,CAAE,CACLojF,QAAQ,CAAExrF,GAAG,CAACwrF,QADT,CAEL,gBAAiBxrF,GAAG,CAAC8rF,YAFhB,CAFW,CAMlBn6D,KAAK,CAAE,CACL/yB,KAAK,CAAEoB,GAAG,CAAC2rF,UADN,CAEL7wD,QAAQ,CAAE,kBAASzF,GAAT,CAAc,CACtBr1B,GAAG,CAAC2rF,UAAJ,CAAiBt2D,GAAjB,CACD,CAJI,CAKL/oB,UAAU,CAAE,YALP,CANW,CAAlB,CAFJ,CAgBEtM,GAAG,CAACu9C,KAAJ,CACIp9C,EAAE,CAAC,eAAD,CAAkB,CAClBsM,GAAG,CAAE,SADa,CAElBrE,KAAK,CAAE,CACLojF,QAAQ,CAAExrF,GAAG,CAACwrF,QADT,CAEL,gBAAiBxrF,GAAG,CAAC8rF,YAFhB,CAFW,CAMlBn6D,KAAK,CAAE,CACL/yB,KAAK,CAAEoB,GAAG,CAAC+rF,WADN,CAELjxD,QAAQ,CAAE,kBAASzF,GAAT,CAAc,CACtBr1B,GAAG,CAAC+rF,WAAJ,CAAkB12D,GAAlB,CACD,CAJI,CAKL/oB,UAAU,CAAE,aALP,CANW,CAAlB,CADN,CAeItM,GAAG,CAACe,EAAJ,EA/BN,CAgCEf,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAACgsF,KAAX,CAAkB,SAASnjF,IAAT,CAAe3J,GAAf,CAAoB,CACpC,MAAOc,CAAAA,GAAG,CAACisF,SAAJ,CACH9rF,EAAE,CAAC,KAAD,CAAQ,CACRjB,GAAG,CAAEA,GADG,CAERmB,WAAW,CAAE,iBAFL,CAGRwM,KAAK,CAAE7M,GAAG,CAACksF,YAAJ,CAAiBrjF,IAAjB,CAHC,CAAR,CADC,CAMH7I,GAAG,CAACe,EAAJ,EANJ,CAOD,CARD,CAhCF,CAyCEf,GAAG,CAACmsF,QAAJ,CAAar2E,MAAb,CAAsB,CAAtB,CACI,CACE3V,EAAE,CACA,KADA,CAEAH,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAACmsF,QAAX,CAAqB,SAAStjF,IAAT,CAAe3J,GAAf,CAAoB,CACvC,MAAOiB,CAAAA,EAAE,CAAC,KAAD,CAAQ,CACfjB,GAAG,CAAEA,GADU,CAEfmB,WAAW,CAAE,uCAFE,CAGfwM,KAAK,CAAE7M,GAAG,CAACksF,YAAJ,CAAiBrjF,IAAI,CAACye,QAAtB,CAHQ,CAAR,CAAT,CAKD,CAND,CAFA,CASA,CATA,CADJ,CAYEnnB,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,kBAAf,CAFA,CAGAL,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAACmsF,QAAX,CAAqB,SAAStjF,IAAT,CAAe3J,GAAf,CAAoB,CACvC,MAAOiB,CAAAA,EAAE,CAAC,eAAD,CAAkB,CACzBjB,GAAG,CAAEA,GADoB,CAEzB2N,KAAK,CAAE7M,GAAG,CAACksF,YAAJ,CAAiBrjF,IAAI,CAACye,QAAtB,CAFkB,CAGzBlf,KAAK,CAAE,CAAEgkF,IAAI,CAAEvjF,IAAI,CAACujF,IAAb,CAHkB,CAAlB,CAAT,CAKD,CAND,CAHA,CAUA,CAVA,CAZJ,CADJ,CA0BIpsF,GAAG,CAACe,EAAJ,EAnEN,CATA,CA8EA,CA9EA,CAxBJ,CAhBO,CAyHP,CAzHO,CAAT,CA2HD,CA/HD,CAgIA,GAAIsrF,CAAAA,iDAAiD,CAAG,EAAxD,CACAd,wCAAwC,CAAC1pF,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA,GAAIyqF,CAAAA,aAAa,CAAG5uF,mBAAmB,CAAC,EAAD,CAAvC,CACA,GAAI6uF,CAAAA,oBAAoB,CAAG,aAAa7uF,mBAAmB,CAAC0B,CAApB,CAAsBktF,aAAtB,CAAxC,CAEA;AACA,GAAIE,CAAAA,0CAA0C,CAAG,QAA7CA,CAAAA,0CAA6C,EAAW,CAC1D,GAAIxsF,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEsM,GAAG,CAAE,QADP,CAEEpM,WAAW,CAAE,2BAFf,CAGEK,KAAK,CAAE,CAAE87B,KAAK,CAAEx8B,GAAG,CAACkpB,QAAb,CAAuBw6B,QAAQ,CAAE1jD,GAAG,CAAC0jD,QAArC,CAHT,CAIE72C,KAAK,CAAE7M,GAAG,CAACysF,YAJb,CAKErkF,KAAK,CAAE,CAAEmQ,QAAQ,CAAE,GAAZ,CALT,CAMEjY,EAAE,CAAE,CACFY,UAAU,CAAElB,GAAG,CAACi+C,gBADd,CAEF58C,UAAU,CAAErB,GAAG,CAACgmC,gBAFd,CAGFhc,SAAS,CAAEhqB,GAAG,CAAC0sF,YAHb,CAIFC,UAAU,CAAE3sF,GAAG,CAAC0sF,YAJd,CAKFl8E,KAAK,CAAExQ,GAAG,CAACi+C,gBALT,CAMFvtC,IAAI,CAAE1Q,GAAG,CAACgmC,gBANR,CAOFl1B,OAAO,CAAE,CACP,SAAS3P,MAAT,CAAiB,CACf,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CAAO5P,MAAM,CAAC0J,OAAd,CAAuB,MAAvB,CAA+B,EAA/B,CAAmC1J,MAAM,CAACjC,GAA1C,CAA+C,CAC7C,MAD6C,CAE7C,WAF6C,CAA/C,CAFF,CAME,CACA,MAAO,KAAP,CACD,CACD,GAAI,UAAYiC,CAAAA,MAAZ,EAAsBA,MAAM,CAACsuB,MAAP,GAAkB,CAA5C,CAA+C,CAC7C,MAAO,KAAP,CACD,CACD,MAAOzvB,CAAAA,GAAG,CAAC4sF,aAAJ,CAAkBzrF,MAAlB,CAAP,CACD,CAfM,CAgBP,SAASA,MAAT,CAAiB,CACf,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CAAO5P,MAAM,CAAC0J,OAAd,CAAuB,OAAvB,CAAgC,EAAhC,CAAoC1J,MAAM,CAACjC,GAA3C,CAAgD,CAC9C,OAD8C,CAE9C,YAF8C,CAAhD,CAFF,CAME,CACA,MAAO,KAAP,CACD,CACD,GAAI,UAAYiC,CAAAA,MAAZ,EAAsBA,MAAM,CAACsuB,MAAP,GAAkB,CAA5C,CAA+C,CAC7C,MAAO,KAAP,CACD,CACD,MAAOzvB,CAAAA,GAAG,CAAC6sF,cAAJ,CAAmB1rF,MAAnB,CAAP,CACD,CA9BM,CA+BP,SAASA,MAAT,CAAiB,CACf,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CAAO5P,MAAM,CAAC0J,OAAd,CAAuB,MAAvB,CAA+B,EAA/B,CAAmC1J,MAAM,CAACjC,GAA1C,CAA+C,CAC7C,MAD6C,CAE7C,WAF6C,CAA/C,CAFF,CAME,CACA,MAAO,KAAP,CACD,CACDiC,MAAM,CAAC6P,cAAP,GACA,MAAOhR,CAAAA,GAAG,CAAC4sF,aAAJ,CAAkBzrF,MAAlB,CAAP,CACD,CA3CM,CA4CP,SAASA,MAAT,CAAiB,CACf,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CAAO5P,MAAM,CAAC0J,OAAd,CAAuB,IAAvB,CAA6B,EAA7B,CAAiC1J,MAAM,CAACjC,GAAxC,CAA6C,CAAC,IAAD,CAAO,SAAP,CAA7C,CAFF,CAGE,CACA,MAAO,KAAP,CACD,CACDiC,MAAM,CAAC6P,cAAP,GACA,MAAOhR,CAAAA,GAAG,CAAC6sF,cAAJ,CAAmB1rF,MAAnB,CAAP,CACD,CArDM,CAPP,CANN,CAFO,CAwEP,CACEhB,EAAE,CACA,YADA,CAEA,CACEsM,GAAG,CAAE,SADP,CAEErE,KAAK,CAAE,CACLwJ,SAAS,CAAE,KADN,CAEL,eAAgB5R,GAAG,CAAC8rF,YAFf,CAGLjrF,QAAQ,CAAE,CAACb,GAAG,CAAC8sF,WAHV,CAFT,CAFA,CAUA,CACE3sF,EAAE,CAAC,MAAD,CAAS,CAAEiI,KAAK,CAAE,CAAEI,IAAI,CAAE,SAAR,CAAT,CAA8BA,IAAI,CAAE,SAApC,CAAT,CAA0D,CAC1DxI,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+sF,WAAX,CAAP,CAD0D,CAA1D,CADJ,CAIE5sF,EAAE,CAAC,KAAD,CAAQ,CACRE,WAAW,CAAE,mBADL,CAERK,KAAK,CAAE,CAAE87B,KAAK,CAAEx8B,GAAG,CAACkpB,QAAb,CAAuBw6B,QAAQ,CAAE1jD,GAAG,CAAC0jD,QAArC,CAFC,CAAR,CAJJ,CAVA,CADJ,CAxEO,CA8FP,CA9FO,CAAT,CAgGD,CApGD,CAqGA,GAAIspC,CAAAA,mDAAmD,CAAG,EAA1D,CACAR,0CAA0C,CAAC3qF,aAA3C,CAA2D,IAA3D,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA,4BAA6B,GAAIorF,CAAAA,yCAAyC,CAAI,CAC5E/uF,IAAI,CAAE,gBADsE,CAG5EwK,UAAU,CAAE,CACVmf,SAAS,CAAEF,eAAe,CAACje,CADjB,CAHgE,CAO5E3H,KAAK,CAAE,CACLnD,KAAK,CAAE,CACLgI,IAAI,CAAE5E,MADD,CAEL6E,OAAO,CAAE,CAFJ,CADF,CAKL2kF,QAAQ,CAAE,CACR5kF,IAAI,CAAE1E,OADE,CAER2E,OAAO,CAAE,KAFD,CALL,CASLilF,YAAY,CAAExkF,MATT,CAPqE,CAmB5E1D,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLslB,QAAQ,CAAE,KADL,CAELw6B,QAAQ,CAAE,KAFL,CAGLwpC,OAAO,CAAE,KAHJ,CAILC,MAAM,CAAE,CAJH,CAKLC,QAAQ,CAAE,CALL,CAMLC,MAAM,CAAE,CANH,CAOLC,QAAQ,CAAE,CAPL,CAQLC,aAAa,CAAE,CARV,CASLC,WAAW,CAAE,IATR,CAUL99C,QAAQ,CAAE,KAAK9wC,KAVV,CAAP,CAYD,CAhC2E,CAmC5EqE,QAAQ,CAAE,CACRpC,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAKyI,OAAL,CAAamiF,cAApB,CACD,CAHO,CAIRvgF,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,MAAO,MAAK5B,OAAL,CAAa4B,GAApB,CACD,CANO,CAORD,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,MAAO,MAAK3B,OAAL,CAAa2B,GAApB,CACD,CATO,CAUR4kB,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,MAAKvmB,OAAL,CAAaumB,IAApB,CACD,CAZO,CAaRi9D,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,MAAO,MAAKxjF,OAAL,CAAawjF,WAApB,CACD,CAfO,CAgBR78D,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAK3mB,OAAL,CAAa2mB,SAApB,CACD,CAlBO,CAmBRw9D,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,MAAO,CAAC,KAAK7uF,KAAL,CAAa,KAAKqM,GAAnB,GAA2B,KAAKC,GAAL,CAAW,KAAKD,GAA3C,EAAkD,GAAlD,CAAwD,GAA/D,CACD,CArBO,CAsBRyiF,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,MAAO,MAAKpkF,OAAL,CAAaqkF,aAAb,WAAsCr/E,CAAAA,QAA7C,CACD,CAxBO,CAyBRy+E,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,MAAO,MAAKW,YAAL,EAAqB,KAAKpkF,OAAL,CAAaqkF,aAAb,CAA2B,KAAK/uF,KAAhC,CAArB,EAA+D,KAAKA,KAA3E,CACD,CA3BO,CA4BR6tF,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,MAAO,MAAKjB,QAAL,CAAgB,CAAEtjC,MAAM,CAAE,KAAKulC,eAAf,CAAhB,CAAmD,CAAEpvE,IAAI,CAAE,KAAKovE,eAAb,CAA1D,CACD,CA9BO,CAnCkE,CAoE5EtrF,KAAK,CAAE,CACLuhD,QAAQ,CAAE,QAASA,CAAAA,QAAT,CAAkBthD,GAAlB,CAAuB,CAC/B,KAAKkH,OAAL,CAAao6C,QAAb,CAAwBthD,GAAxB,CACD,CAHI,CApEqE,CA0E5EC,OAAO,CAAE,CACPurF,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,KAAKh/E,KAAL,CAAWmtC,OAAX,GAAuB,KAAKntC,KAAL,CAAWmtC,OAAX,CAAmBtpC,UAAnB,CAAgC,IAAvD,EACD,CAHM,CAIPo7E,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAKj/E,KAAL,CAAWmtC,OAAX,GAAuB,KAAKntC,KAAL,CAAWmtC,OAAX,CAAmBtpC,UAAnB,CAAgC,KAAvD,EACD,CANM,CAOPwrC,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,KAAK/0B,QAAL,CAAgB,IAAhB,CACA,KAAK0kE,cAAL,GACD,CAVM,CAWP5nD,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,KAAK9c,QAAL,CAAgB,KAAhB,CACA,KAAK2kE,WAAL,GACD,CAdM,CAePnB,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsBpqF,KAAtB,CAA6B,CACzC,GAAI,KAAKzB,QAAT,CAAmB,OACnByB,KAAK,CAAC0O,cAAN,GACA,KAAK88E,WAAL,CAAiBxrF,KAAjB,EACAujB,MAAM,CAACnX,gBAAP,CAAwB,WAAxB,CAAqC,KAAKq/E,UAA1C,EACAloE,MAAM,CAACnX,gBAAP,CAAwB,WAAxB,CAAqC,KAAKq/E,UAA1C,EACAloE,MAAM,CAACnX,gBAAP,CAAwB,SAAxB,CAAmC,KAAKs/E,SAAxC,EACAnoE,MAAM,CAACnX,gBAAP,CAAwB,UAAxB,CAAoC,KAAKs/E,SAAzC,EACAnoE,MAAM,CAACnX,gBAAP,CAAwB,aAAxB,CAAuC,KAAKs/E,SAA5C,EACD,CAxBM,CAyBPpB,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI,KAAK/rF,QAAT,CAAmB,OACnB,KAAK2sF,WAAL,CAAmBviE,UAAU,CAAC,KAAKwiE,eAAN,CAAV,CAAmC,KAAK59D,IAAL,EAAa,KAAK3kB,GAAL,CAAW,KAAKD,GAA7B,EAAoC,GAA1F,CACA,KAAKgjF,WAAL,CAAiB,KAAKT,WAAtB,EACA,KAAKlkF,OAAL,CAAa0B,UAAb,GACD,CA9BM,CA+BP6hF,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,GAAI,KAAKhsF,QAAT,CAAmB,OACnB,KAAK2sF,WAAL,CAAmBviE,UAAU,CAAC,KAAKwiE,eAAN,CAAV,CAAmC,KAAK59D,IAAL,EAAa,KAAK3kB,GAAL,CAAW,KAAKD,GAA7B,EAAoC,GAA1F,CACA,KAAKgjF,WAAL,CAAiB,KAAKT,WAAtB,EACA,KAAKlkF,OAAL,CAAa0B,UAAb,GACD,CApCM,CAqCP8iF,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqBxrF,KAArB,CAA4B,CACvC,KAAKohD,QAAL,CAAgB,IAAhB,CACA,KAAKwpC,OAAL,CAAe,IAAf,CACA,GAAI5qF,KAAK,CAACsE,IAAN,GAAe,YAAnB,CAAiC,CAC/BtE,KAAK,CAAC4lF,OAAN,CAAgB5lF,KAAK,CAAC4rF,OAAN,CAAc,CAAd,EAAiBhG,OAAjC,CACA5lF,KAAK,CAAC4hD,OAAN,CAAgB5hD,KAAK,CAAC4rF,OAAN,CAAc,CAAd,EAAiBhqC,OAAjC,CACD,CACD,GAAI,KAAKsnC,QAAT,CAAmB,CACjB,KAAK6B,MAAL,CAAc/qF,KAAK,CAAC4lF,OAApB,CACD,CAFD,IAEO,CACL,KAAKiF,MAAL,CAAc7qF,KAAK,CAAC4hD,OAApB,CACD,CACD,KAAKqpC,aAAL,CAAqBtiE,UAAU,CAAC,KAAKwiE,eAAN,CAA/B,CACA,KAAKD,WAAL,CAAmB,KAAKD,aAAxB,CACD,CAnDM,CAoDPQ,UAAU,CAAE,QAASA,CAAAA,UAAT,CAAoBzrF,KAApB,CAA2B,CACrC,GAAI,KAAKohD,QAAT,CAAmB,CACjB,KAAKwpC,OAAL,CAAe,KAAf,CACA,KAAKU,cAAL,GACA,KAAKtkF,OAAL,CAAa6kF,SAAb,GACA,GAAIC,CAAAA,IAAI,CAAG,CAAX,CACA,GAAI9rF,KAAK,CAACsE,IAAN,GAAe,WAAnB,CAAgC,CAC9BtE,KAAK,CAAC4lF,OAAN,CAAgB5lF,KAAK,CAAC4rF,OAAN,CAAc,CAAd,EAAiBhG,OAAjC,CACA5lF,KAAK,CAAC4hD,OAAN,CAAgB5hD,KAAK,CAAC4rF,OAAN,CAAc,CAAd,EAAiBhqC,OAAjC,CACD,CACD,GAAI,KAAKsnC,QAAT,CAAmB,CACjB,KAAK8B,QAAL,CAAgBhrF,KAAK,CAAC4lF,OAAtB,CACAkG,IAAI,CAAG,CAAC,KAAKf,MAAL,CAAc,KAAKC,QAApB,EAAgC,KAAKhkF,OAAL,CAAa+kF,UAA7C,CAA0D,GAAjE,CACD,CAHD,IAGO,CACL,KAAKjB,QAAL,CAAgB9qF,KAAK,CAAC4hD,OAAtB,CACAkqC,IAAI,CAAG,CAAC,KAAKhB,QAAL,CAAgB,KAAKD,MAAtB,EAAgC,KAAK7jF,OAAL,CAAa+kF,UAA7C,CAA0D,GAAjE,CACD,CACD,KAAKb,WAAL,CAAmB,KAAKD,aAAL,CAAqBa,IAAxC,CACA,KAAKH,WAAL,CAAiB,KAAKT,WAAtB,EACD,CACF,CAxEM,CAyEPQ,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,GAAIhkF,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI,KAAK05C,QAAT,CAAmB,CACjB;AACR;AACA;AACA,WACQpqC,UAAU,CAAC,UAAY,CACrBtP,KAAK,CAAC05C,QAAN,CAAiB,KAAjB,CACA15C,KAAK,CAAC6jF,WAAN,GACA,GAAI,CAAC7jF,KAAK,CAACkjF,OAAX,CAAoB,CAClBljF,KAAK,CAACikF,WAAN,CAAkBjkF,KAAK,CAACwjF,WAAxB,EACAxjF,KAAK,CAACV,OAAN,CAAc0B,UAAd,GACD,CACF,CAPS,CAOP,CAPO,CAAV,CAQA6a,MAAM,CAAC3W,mBAAP,CAA2B,WAA3B,CAAwC,KAAK6+E,UAA7C,EACAloE,MAAM,CAAC3W,mBAAP,CAA2B,WAA3B,CAAwC,KAAK6+E,UAA7C,EACAloE,MAAM,CAAC3W,mBAAP,CAA2B,SAA3B,CAAsC,KAAK8+E,SAA3C,EACAnoE,MAAM,CAAC3W,mBAAP,CAA2B,UAA3B,CAAuC,KAAK8+E,SAA5C,EACAnoE,MAAM,CAAC3W,mBAAP,CAA2B,aAA3B,CAA0C,KAAK8+E,SAA/C,EACD,CACF,CA/FM,CAgGPC,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqBT,WAArB,CAAkC,CAC7C,GAAI/hF,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI+hF,WAAW,GAAK,IAAhB,EAAwB1qF,KAAK,CAAC0qF,WAAD,CAAjC,CAAgD,OAChD,GAAIA,WAAW,CAAG,CAAlB,CAAqB,CACnBA,WAAW,CAAG,CAAd,CACD,CAFD,IAEO,IAAIA,WAAW,CAAG,GAAlB,CAAuB,CAC5BA,WAAW,CAAG,GAAd,CACD,CACD,GAAIc,CAAAA,aAAa,CAAG,KAAO,CAAC,KAAKpjF,GAAL,CAAW,KAAKD,GAAjB,EAAwB,KAAK4kB,IAApC,CAApB,CACA,GAAI0+D,CAAAA,KAAK,CAAG/qF,IAAI,CAACgf,KAAL,CAAWgrE,WAAW,CAAGc,aAAzB,CAAZ,CACA,GAAI1vF,CAAAA,KAAK,CAAG2vF,KAAK,CAAGD,aAAR,EAAyB,KAAKpjF,GAAL,CAAW,KAAKD,GAAzC,EAAgD,IAAhD,CAAuD,KAAKA,GAAxE,CACArM,KAAK,CAAGqsB,UAAU,CAACrsB,KAAK,CAACgyB,OAAN,CAAc,KAAKX,SAAnB,CAAD,CAAlB,CACA,KAAKltB,KAAL,CAAW,OAAX,CAAoBnE,KAApB,EACA,KAAK8M,SAAL,CAAe,UAAY,CACzBD,MAAM,CAACmiF,cAAP,GACAniF,MAAM,CAACmD,KAAP,CAAamtC,OAAb,EAAwBtwC,MAAM,CAACmD,KAAP,CAAamtC,OAAb,CAAqBptC,YAArB,EAAxB,CACD,CAHD,EAIA,GAAI,CAAC,KAAK+0C,QAAN,EAAkB,KAAK9kD,KAAL,GAAe,KAAK8wC,QAA1C,CAAoD,CAClD,KAAKA,QAAL,CAAgB,KAAK9wC,KAArB,CACD,CACF,CArHM,CA1EmE,CAAjD,CAkM7B;AACC,4BAA6B,GAAI4vF,CAAAA,kDAAkD,CAAIvB,yCAA1D,CAC9B;AAMA,yBAEA,GAAIwB,CAAAA,oBAAoB,CAAG1qF,kBAAkB,CAC3CyqF,kDAD2C,CAE3ChC,0CAF2C,CAG3CQ,mDAH2C,CAI3C,KAJ2C,CAK3C,IAL2C,CAM3C,IAN2C,CAO3C,IAP2C,CAA7C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAI0B,CAAAA,cAAJ,CAAqB,CAClCD,oBAAoB,CAAClqF,OAArB,CAA6ByB,MAA7B,CAAsC,gCAAtC,CACA,4BAA6B,GAAI2oF,CAAAA,iBAAiB,CAAIF,oBAAoB,CAAClxF,OAA9C,CAC7B;AACA,4BAA6B,GAAIqxF,CAAAA,MAAM,CAAI,CACzC1wF,IAAI,CAAE,UADmC,CAGzC6D,KAAK,CAAE,CACLqqF,IAAI,CAAE,CACJxlF,IAAI,CAAE,CAACU,MAAD,CAASjJ,MAAT,CADF,CADD,CAHkC,CAQzC4F,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,GAAIyB,CAAAA,CAAC,CAAGiY,SAAS,CAAC,CAAD,CAAjB,CAEA,GAAIxT,CAAAA,KAAK,CAAG,MAAO,MAAKiiF,IAAZ,GAAqB,QAArB,CAAgC,KAAKA,IAArC,CAA4C,KAAKA,IAAL,CAAUjiF,KAAlE,CAEA,MAAOzE,CAAAA,CAAC,CACN,KADM,CAEN,CAAE,QAAS,uBAAX,CAAoCmH,KAAK,CAAE,KAAKu/E,IAAL,CAAUv/E,KAAV,EAAmB,EAA9D,CAFM,CAGN,CAAC1C,KAAD,CAHM,CAAR,CAKD,CAlBwC,CAAd,CAoB7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA,4BAA6B,GAAI0kF,CAAAA,uCAAuC,CAAI,CAC1E3wF,IAAI,CAAE,UADoE,CAG1EuL,MAAM,CAAE,CAACkE,eAAe,CAACjE,CAAjB,CAHkE,CAK1E2R,MAAM,CAAE,CACN2Q,MAAM,CAAE,CACNnlB,OAAO,CAAE,EADH,CADF,CALkE,CAW1E9E,KAAK,CAAE,CACLkJ,GAAG,CAAE,CACHrE,IAAI,CAAE5E,MADH,CAEH6E,OAAO,CAAE,CAFN,CADA,CAKLqE,GAAG,CAAE,CACHtE,IAAI,CAAE5E,MADH,CAEH6E,OAAO,CAAE,GAFN,CALA,CASLgpB,IAAI,CAAE,CACJjpB,IAAI,CAAE5E,MADF,CAEJ6E,OAAO,CAAE,CAFL,CATD,CAaLjI,KAAK,CAAE,CACLgI,IAAI,CAAE,CAAC5E,MAAD,CAASmF,KAAT,CADD,CAELN,OAAO,CAAE,CAFJ,CAbF,CAiBL8iE,SAAS,CAAE,CACT/iE,IAAI,CAAE1E,OADG,CAET2E,OAAO,CAAE,KAFA,CAjBN,CAqBL6kF,iBAAiB,CAAE,CACjB9kF,IAAI,CAAE1E,OADW,CAEjB2E,OAAO,CAAE,IAFQ,CArBd,CAyBLiiB,SAAS,CAAE,CACTliB,IAAI,CAAEU,MADG,CAETT,OAAO,CAAE,OAFA,CAzBN,CA6BLolF,SAAS,CAAE,CACTrlF,IAAI,CAAE1E,OADG,CAET2E,OAAO,CAAE,KAFA,CA7BN,CAiCLimF,WAAW,CAAE,CACXlmF,IAAI,CAAE1E,OADK,CAEX2E,OAAO,CAAE,IAFE,CAjCR,CAqCL8mF,aAAa,CAAEr/E,QArCV,CAsCLzN,QAAQ,CAAE,CACR+F,IAAI,CAAE1E,OADE,CAER2E,OAAO,CAAE,KAFD,CAtCL,CA0CL02C,KAAK,CAAE,CACL32C,IAAI,CAAE1E,OADD,CAEL2E,OAAO,CAAE,KAFJ,CA1CF,CA8CL2kF,QAAQ,CAAE,CACR5kF,IAAI,CAAE1E,OADE,CAER2E,OAAO,CAAE,KAFD,CA9CL,CAkDL0gB,MAAM,CAAE,CACN3gB,IAAI,CAAEU,MADA,CAlDH,CAqDLmO,QAAQ,CAAE,CACR7O,IAAI,CAAE5E,MADE,CAER6E,OAAO,CAAE,GAFD,CArDL,CAyDLsD,KAAK,CAAE,CACLvD,IAAI,CAAEU,MADD,CAzDF,CA4DLwkF,YAAY,CAAExkF,MA5DT,CA6DLwnF,KAAK,CAAEzwF,MA7DF,CAXmE,CA2E1EqK,UAAU,CAAE,CACVqmF,aAAa,CAAExC,oBAAoB,CAAC7iF,CAD1B,CAEVslF,YAAY,CAAEL,iBAFJ,CAGVM,YAAY,CAAEL,MAHJ,CA3E8D,CAiF1EhrF,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL+nF,UAAU,CAAE,IADP,CAELI,WAAW,CAAE,IAFR,CAGLr8C,QAAQ,CAAE,IAHL,CAILgU,QAAQ,CAAE,KAJL,CAKL2qC,UAAU,CAAE,CALP,CAAP,CAOD,CAzFyE,CA4F1ElsF,KAAK,CAAE,CACLvD,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAewD,GAAf,CAAoB0H,MAApB,CAA4B,CACjC,GAAI,KAAK45C,QAAL,EAAiBv8C,KAAK,CAAC4C,OAAN,CAAc3H,GAAd,GAAsB+E,KAAK,CAAC4C,OAAN,CAAcD,MAAd,CAAtB,EAA+C1H,GAAG,CAAC+8B,KAAJ,CAAU,SAAUt2B,IAAV,CAAgBiJ,KAAhB,CAAuB,CACnG,MAAOjJ,CAAAA,IAAI,GAAKiB,MAAM,CAACgI,KAAD,CAAtB,CACD,CAFmE,CAApE,CAEI,CACF,OACD,CACD,KAAKo9E,SAAL,GACD,CARI,CASLxrC,QAAQ,CAAE,QAASA,CAAAA,QAAT,CAAkBthD,GAAlB,CAAuB,CAC/B,GAAI,CAACA,GAAL,CAAU,CACR,KAAK8sF,SAAL,GACD,CACF,CAbI,CAcLvD,UAAU,CAAE,QAASA,CAAAA,UAAT,CAAoBvpF,GAApB,CAAyB,CACnC,GAAI,KAAKm7C,KAAT,CAAgB,CACd,KAAKx6C,KAAL,CAAW,OAAX,CAAoB,CAAC,KAAKosF,QAAN,CAAgB,KAAKC,QAArB,CAApB,EACD,CAFD,IAEO,CACL,KAAKrsF,KAAL,CAAW,OAAX,CAAoBX,GAApB,EACD,CACF,CApBI,CAqBL2pF,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,GAAI,KAAKxuC,KAAT,CAAgB,CACd,KAAKx6C,KAAL,CAAW,OAAX,CAAoB,CAAC,KAAKosF,QAAN,CAAgB,KAAKC,QAArB,CAApB,EACD,CACF,CAzBI,CA0BLnkF,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,KAAKikF,SAAL,GACD,CA5BI,CA6BLhkF,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,KAAKgkF,SAAL,GACD,CA/BI,CA5FmE,CA8H1E7sF,OAAO,CAAE,CACPgtF,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,GAAIrlF,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI,KAAKuzC,KAAT,CAAgB,CACd,MAAO,CAAC,CAAC,KAAK4xC,QAAN,CAAgB,KAAKC,QAArB,EAA+BjwD,KAA/B,CAAqC,SAAUt2B,IAAV,CAAgBiJ,KAAhB,CAAuB,CAClE,MAAOjJ,CAAAA,IAAI,GAAKmB,KAAK,CAAC0lC,QAAN,CAAe59B,KAAf,CAAhB,CACD,CAFO,CAAR,CAGD,CAJD,IAIO,CACL,MAAO,MAAKlT,KAAL,GAAe,KAAK8wC,QAA3B,CACD,CACF,CAXM,CAYPw/C,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,GAAI,KAAKjkF,GAAL,CAAW,KAAKC,GAApB,CAAyB,CACvBkL,OAAO,CAACC,KAAR,CAAc,4DAAd,EACA,OACD,CACD,GAAIjU,CAAAA,GAAG,CAAG,KAAKxD,KAAf,CACA,GAAI,KAAK2+C,KAAL,EAAcp2C,KAAK,CAAC4C,OAAN,CAAc3H,GAAd,CAAlB,CAAsC,CACpC,GAAIA,GAAG,CAAC,CAAD,CAAH,CAAS,KAAK6I,GAAlB,CAAuB,CACrB,KAAKlI,KAAL,CAAW,OAAX,CAAoB,CAAC,KAAKkI,GAAN,CAAW,KAAKA,GAAhB,CAApB,EACD,CAFD,IAEO,IAAI7I,GAAG,CAAC,CAAD,CAAH,CAAS,KAAK8I,GAAlB,CAAuB,CAC5B,KAAKnI,KAAL,CAAW,OAAX,CAAoB,CAAC,KAAKmI,GAAN,CAAW,KAAKA,GAAhB,CAApB,EACD,CAFM,IAEA,IAAI9I,GAAG,CAAC,CAAD,CAAH,CAAS,KAAK6I,GAAlB,CAAuB,CAC5B,KAAKlI,KAAL,CAAW,OAAX,CAAoB,CAAC,KAAKkI,GAAN,CAAW7I,GAAG,CAAC,CAAD,CAAd,CAApB,EACD,CAFM,IAEA,IAAIA,GAAG,CAAC,CAAD,CAAH,CAAS,KAAK8I,GAAlB,CAAuB,CAC5B,KAAKnI,KAAL,CAAW,OAAX,CAAoB,CAACX,GAAG,CAAC,CAAD,CAAJ,CAAS,KAAK8I,GAAd,CAApB,EACD,CAFM,IAEA,CACL,KAAKygF,UAAL,CAAkBvpF,GAAG,CAAC,CAAD,CAArB,CACA,KAAK2pF,WAAL,CAAmB3pF,GAAG,CAAC,CAAD,CAAtB,CACA,GAAI,KAAKitF,YAAL,EAAJ,CAAyB,CACvB,KAAK97E,QAAL,CAAc,YAAd,CAA4B,gBAA5B,CAA8C,CAAC,KAAK47E,QAAN,CAAgB,KAAKC,QAArB,CAA9C,EACA,KAAK1/C,QAAL,CAAgBttC,GAAG,CAACqY,KAAJ,EAAhB,CACD,CACF,CACF,CAjBD,IAiBO,IAAI,CAAC,KAAK8iC,KAAN,EAAe,MAAOn7C,CAAAA,GAAP,GAAe,QAA9B,EAA0C,CAACU,KAAK,CAACV,GAAD,CAApD,CAA2D,CAChE,GAAIA,GAAG,CAAG,KAAK6I,GAAf,CAAoB,CAClB,KAAKlI,KAAL,CAAW,OAAX,CAAoB,KAAKkI,GAAzB,EACD,CAFD,IAEO,IAAI7I,GAAG,CAAG,KAAK8I,GAAf,CAAoB,CACzB,KAAKnI,KAAL,CAAW,OAAX,CAAoB,KAAKmI,GAAzB,EACD,CAFM,IAEA,CACL,KAAKygF,UAAL,CAAkBvpF,GAAlB,CACA,GAAI,KAAKitF,YAAL,EAAJ,CAAyB,CACvB,KAAK97E,QAAL,CAAc,YAAd,CAA4B,gBAA5B,CAA8CnR,GAA9C,EACA,KAAKstC,QAAL,CAAgBttC,GAAhB,CACD,CACF,CACF,CACF,CAhDM,CAiDP6rF,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqB3rE,OAArB,CAA8B,CACzC,GAAIgtE,CAAAA,WAAW,CAAG,KAAKrkF,GAAL,CAAWqX,OAAO,EAAI,KAAKpX,GAAL,CAAW,KAAKD,GAApB,CAAP,CAAkC,GAA/D,CACA,GAAI,CAAC,KAAKsyC,KAAV,CAAiB,CACf,KAAK3uC,KAAL,CAAW2gF,OAAX,CAAmBtB,WAAnB,CAA+B3rE,OAA/B,EACA,OACD,CACD,GAAImN,CAAAA,MAAM,CAAG,IAAK,EAAlB,CACA,GAAIjsB,IAAI,CAACgjD,GAAL,CAAS,KAAK2oC,QAAL,CAAgBG,WAAzB,EAAwC9rF,IAAI,CAACgjD,GAAL,CAAS,KAAK4oC,QAAL,CAAgBE,WAAzB,CAA5C,CAAmF,CACjF7/D,MAAM,CAAG,KAAKk8D,UAAL,CAAkB,KAAKI,WAAvB,CAAqC,SAArC,CAAiD,SAA1D,CACD,CAFD,IAEO,CACLt8D,MAAM,CAAG,KAAKk8D,UAAL,CAAkB,KAAKI,WAAvB,CAAqC,SAArC,CAAiD,SAA1D,CACD,CACD,KAAKn9E,KAAL,CAAW6gB,MAAX,EAAmBw+D,WAAnB,CAA+B3rE,OAA/B,EACD,CA9DM,CA+DPupE,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBvpF,KAAvB,CAA8B,CAC3C,GAAI,KAAKmpF,cAAL,EAAuB,KAAK/nC,QAAhC,CAA0C,OAC1C,KAAKyqC,SAAL,GACA,GAAI,KAAK3C,QAAT,CAAmB,CACjB,GAAIgE,CAAAA,kBAAkB,CAAG,KAAK5gF,KAAL,CAAW6gF,MAAX,CAAkB5zD,qBAAlB,GAA0CqsB,MAAnE,CACA,KAAK+lC,WAAL,CAAiB,CAACuB,kBAAkB,CAAGltF,KAAK,CAAC4lF,OAA5B,EAAuC,KAAKmG,UAA5C,CAAyD,GAA1E,EACD,CAHD,IAGO,CACL,GAAIqB,CAAAA,gBAAgB,CAAG,KAAK9gF,KAAL,CAAW6gF,MAAX,CAAkB5zD,qBAAlB,GAA0Cxd,IAAjE,CACA,KAAK4vE,WAAL,CAAiB,CAAC3rF,KAAK,CAAC4hD,OAAN,CAAgBwrC,gBAAjB,EAAqC,KAAKrB,UAA1C,CAAuD,GAAxE,EACD,CACD,KAAKrjF,UAAL,GACD,CA1EM,CA2EPmjF,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,GAAI,KAAKv/E,KAAL,CAAW6gF,MAAf,CAAuB,CACrB,KAAKpB,UAAL,CAAkB,KAAKz/E,KAAL,CAAW6gF,MAAX,CAAkB,UAAY,KAAKjE,QAAL,CAAgB,QAAhB,CAA2B,OAAvC,CAAlB,CAAlB,CACD,CACF,CA/EM,CAgFPxgF,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAIS,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAKC,SAAL,CAAe,UAAY,CACzBD,MAAM,CAAC1I,KAAP,CAAa,QAAb,CAAuB0I,MAAM,CAAC8xC,KAAP,CAAe,CAAC9xC,MAAM,CAAC0jF,QAAR,CAAkB1jF,MAAM,CAAC2jF,QAAzB,CAAf,CAAoD3jF,MAAM,CAAC7M,KAAlF,EACD,CAFD,EAGD,CAtFM,CAuFPstF,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsB5kE,QAAtB,CAAgC,CAC5C,MAAO,MAAKkkE,QAAL,CAAgB,CAAE,SAAUlkE,QAAQ,CAAG,GAAvB,CAAhB,CAA+C,CAAE,OAAQA,QAAQ,CAAG,GAArB,CAAtD,CACD,CAzFM,CA9HiE,CA0N1ErkB,QAAQ,CAAE,CACR+oF,KAAK,CAAE,QAASA,CAAAA,KAAT,EAAiB,CACtB,GAAIx1E,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI,CAAC,KAAKy1E,SAAN,EAAmB,KAAKhhF,GAAL,CAAW,KAAKC,GAAvC,CAA4C,MAAO,EAAP,CAC5C,GAAI,KAAK2kB,IAAL,GAAc,CAAlB,CAAqB,CAClB,OAAS,KAAT,CACD,MAAO,EAAP,CACD,CACD,GAAI8/D,CAAAA,SAAS,CAAG,CAAC,KAAKzkF,GAAL,CAAW,KAAKD,GAAjB,EAAwB,KAAK4kB,IAA7C,CACA,GAAI+/D,CAAAA,SAAS,CAAG,IAAM,KAAK//D,IAAX,EAAmB,KAAK3kB,GAAL,CAAW,KAAKD,GAAnC,CAAhB,CACA,GAAIugB,CAAAA,MAAM,CAAG,EAAb,CACA,IAAK,GAAI5tB,CAAAA,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG+xF,SAApB,CAA+B/xF,CAAC,EAAhC,CAAoC,CAClC4tB,MAAM,CAACnoB,IAAP,CAAYzF,CAAC,CAAGgyF,SAAhB,EACD,CACD,GAAI,KAAKryC,KAAT,CAAgB,CACd,MAAO/xB,CAAAA,MAAM,CAAC5L,MAAP,CAAc,SAAUiQ,IAAV,CAAgB,CACnC,MAAOA,CAAAA,IAAI,CAAG,KAAOrZ,MAAM,CAAC24E,QAAP,CAAkB34E,MAAM,CAACvL,GAAhC,GAAwCuL,MAAM,CAACtL,GAAP,CAAasL,MAAM,CAACvL,GAA5D,CAAP,EAA2E4kB,IAAI,CAAG,KAAOrZ,MAAM,CAAC44E,QAAP,CAAkB54E,MAAM,CAACvL,GAAhC,GAAwCuL,MAAM,CAACtL,GAAP,CAAasL,MAAM,CAACvL,GAA5D,CAAzF,CACD,CAFM,CAAP,CAGD,CAJD,IAIO,CACL,MAAOugB,CAAAA,MAAM,CAAC5L,MAAP,CAAc,SAAUiQ,IAAV,CAAgB,CACnC,MAAOA,CAAAA,IAAI,CAAG,KAAOrZ,MAAM,CAACm1E,UAAP,CAAoBn1E,MAAM,CAACvL,GAAlC,GAA0CuL,MAAM,CAACtL,GAAP,CAAasL,MAAM,CAACvL,GAA9D,CAAd,CACD,CAFM,CAAP,CAGD,CACF,CAxBO,CAyBRkhF,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,GAAIn1E,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI,CAAC,KAAK83E,KAAV,CAAiB,CACf,MAAO,EAAP,CACD,CAED,GAAIe,CAAAA,SAAS,CAAGxxF,MAAM,CAAC4f,IAAP,CAAY,KAAK6wE,KAAjB,CAAhB,CACA,MAAOe,CAAAA,SAAS,CAACjnF,GAAV,CAAcqiB,UAAd,EAA0Bwe,IAA1B,CAA+B,SAAU//B,CAAV,CAAa8zB,CAAb,CAAgB,CACpD,MAAO9zB,CAAAA,CAAC,CAAG8zB,CAAX,CACD,CAFM,EAEJ5d,MAFI,CAEG,SAAUkwE,KAAV,CAAiB,CACzB,MAAOA,CAAAA,KAAK,EAAI94E,MAAM,CAAC9L,GAAhB,EAAuB4kF,KAAK,EAAI94E,MAAM,CAAC/L,GAA9C,CACD,CAJM,EAIJrC,GAJI,CAIA,SAAUknF,KAAV,CAAiB,CACtB,MAAO,CACLA,KAAK,CAAEA,KADF,CAELxoE,QAAQ,CAAE,CAACwoE,KAAK,CAAG94E,MAAM,CAAC/L,GAAhB,EAAuB,GAAvB,EAA8B+L,MAAM,CAAC9L,GAAP,CAAa8L,MAAM,CAAC/L,GAAlD,CAFL,CAGLmhF,IAAI,CAAEp1E,MAAM,CAAC83E,KAAP,CAAagB,KAAb,CAHD,CAAP,CAKD,CAVM,CAAP,CAWD,CA5CO,CA6CRX,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO3rF,CAAAA,IAAI,CAACyH,GAAL,CAAS,KAAK0gF,UAAd,CAA0B,KAAKI,WAA/B,CAAP,CACD,CA/CO,CAgDRqD,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO5rF,CAAAA,IAAI,CAAC0H,GAAL,CAAS,KAAKygF,UAAd,CAA0B,KAAKI,WAA/B,CAAP,CACD,CAlDO,CAmDRgE,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,MAAO,MAAKxyC,KAAL,CAAa,KAAO,KAAK6xC,QAAL,CAAgB,KAAKD,QAA5B,GAAyC,KAAKjkF,GAAL,CAAW,KAAKD,GAAzD,EAAgE,GAA7E,CAAmF,KAAO,KAAK0gF,UAAL,CAAkB,KAAK1gF,GAA9B,GAAsC,KAAKC,GAAL,CAAW,KAAKD,GAAtD,EAA6D,GAAvJ,CACD,CArDO,CAsDR+kF,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAKzyC,KAAL,CAAa,KAAO,KAAK4xC,QAAL,CAAgB,KAAKlkF,GAA5B,GAAoC,KAAKC,GAAL,CAAW,KAAKD,GAApD,EAA2D,GAAxE,CAA8E,IAArF,CACD,CAxDO,CAyDRglB,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,GAAIw1B,CAAAA,UAAU,CAAG,CAAC,KAAKx6C,GAAN,CAAW,KAAKC,GAAhB,CAAqB,KAAK2kB,IAA1B,EAAgCjnB,GAAhC,CAAoC,SAAUC,IAAV,CAAgB,CACnE,GAAI88C,CAAAA,OAAO,CAAG,CAAC,GAAK98C,IAAN,EAAYF,KAAZ,CAAkB,GAAlB,EAAuB,CAAvB,CAAd,CACA,MAAOg9C,CAAAA,OAAO,CAAGA,OAAO,CAAC7vC,MAAX,CAAoB,CAAlC,CACD,CAHgB,CAAjB,CAIA,MAAOtS,CAAAA,IAAI,CAAC0H,GAAL,CAAS4S,KAAT,CAAe,IAAf,CAAqB2nC,UAArB,CAAP,CACD,CA/DO,CAgERmmC,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,MAAO,MAAKJ,QAAL,CAAgB,CAAEjkE,MAAM,CAAE,KAAKA,MAAf,CAAhB,CAA0C,EAAjD,CACD,CAlEO,CAmER8tD,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAKmW,QAAL,CAAgB,CACrBjkE,MAAM,CAAE,KAAKwoE,OADQ,CAErB7nC,MAAM,CAAE,KAAK8nC,QAFQ,CAAhB,CAGH,CACF7hF,KAAK,CAAE,KAAK4hF,OADV,CAEF1xE,IAAI,CAAE,KAAK2xE,QAFT,CAHJ,CAOD,CA3EO,CA4ERvE,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,MAAO,MAAK5qF,QAAL,EAAiB,CAAC,KAAKmrB,MAAL,EAAe,EAAhB,EAAoBnrB,QAA5C,CACD,CA9EO,CA1NgE,CA2S1E2O,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIygF,CAAAA,SAAS,CAAG,IAAK,EAArB,CACA,GAAI,KAAK1yC,KAAT,CAAgB,CACd,GAAIp2C,KAAK,CAAC4C,OAAN,CAAc,KAAKnL,KAAnB,CAAJ,CAA+B,CAC7B,KAAK+sF,UAAL,CAAkBnoF,IAAI,CAAC0H,GAAL,CAAS,KAAKD,GAAd,CAAmB,KAAKrM,KAAL,CAAW,CAAX,CAAnB,CAAlB,CACA,KAAKmtF,WAAL,CAAmBvoF,IAAI,CAACyH,GAAL,CAAS,KAAKC,GAAd,CAAmB,KAAKtM,KAAL,CAAW,CAAX,CAAnB,CAAnB,CACD,CAHD,IAGO,CACL,KAAK+sF,UAAL,CAAkB,KAAK1gF,GAAvB,CACA,KAAK8gF,WAAL,CAAmB,KAAK7gF,GAAxB,CACD,CACD,KAAKwkC,QAAL,CAAgB,CAAC,KAAKi8C,UAAN,CAAkB,KAAKI,WAAvB,CAAhB,CACAkE,SAAS,CAAG,KAAKtE,UAAL,CAAkB,GAAlB,CAAwB,KAAKI,WAAzC,CACD,CAVD,IAUO,CACL,GAAI,MAAO,MAAKntF,KAAZ,GAAsB,QAAtB,EAAkCkE,KAAK,CAAC,KAAKlE,KAAN,CAA3C,CAAyD,CACvD,KAAK+sF,UAAL,CAAkB,KAAK1gF,GAAvB,CACD,CAFD,IAEO,CACL,KAAK0gF,UAAL,CAAkBnoF,IAAI,CAACyH,GAAL,CAAS,KAAKC,GAAd,CAAmB1H,IAAI,CAAC0H,GAAL,CAAS,KAAKD,GAAd,CAAmB,KAAKrM,KAAxB,CAAnB,CAAlB,CACD,CACD,KAAK8wC,QAAL,CAAgB,KAAKi8C,UAArB,CACAsE,SAAS,CAAG,KAAKtE,UAAjB,CACD,CACD,KAAKl9E,GAAL,CAASuF,YAAT,CAAsB,gBAAtB,CAAwCi8E,SAAxC,EAEA;AACA,KAAKxhF,GAAL,CAASuF,YAAT,CAAsB,YAAtB,CAAoC,KAAK7J,KAAL,CAAa,KAAKA,KAAlB,CAA0B,kBAAoB,KAAKc,GAAzB,CAA+B,OAA/B,CAAyC,KAAKC,GAA5G,EAEA,KAAKijF,SAAL,GACAtoE,MAAM,CAACnX,gBAAP,CAAwB,QAAxB,CAAkC,KAAKy/E,SAAvC,EACD,CAvUyE,CAwU1El3E,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC4O,MAAM,CAAC3W,mBAAP,CAA2B,QAA3B,CAAqC,KAAKi/E,SAA1C,EACD,CA1UyE,CAA/C,CA4U7B;AACC,4BAA6B,GAAI+B,CAAAA,gDAAgD,CAAIrB,uCAAxD,CAC9B;AAMA,yBAEA,GAAIsB,CAAAA,yBAAyB,CAAGpsF,kBAAkB,CAChDmsF,gDADgD,CAEhD3E,wCAFgD,CAGhDc,iDAHgD,CAIhD,KAJgD,CAKhD,IALgD,CAMhD,IANgD,CAOhD,IAPgD,CAAlD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAI+D,CAAAA,mBAAJ,CAA0B,CACvCD,yBAAyB,CAAC5rF,OAA1B,CAAkCyB,MAAlC,CAA2C,8BAA3C,CACA,4BAA6B,GAAIqqF,CAAAA,eAAe,CAAIF,yBAAyB,CAAC5yF,OAAjD,CAC7B;AAGA,0BACA8yF,eAAe,CAACxkF,OAAhB,CAA0B,SAAUC,GAAV,CAAe,CACvCA,GAAG,CAAChG,SAAJ,CAAcuqF,eAAe,CAACnyF,IAA9B,CAAoCmyF,eAApC,EACD,CAFD,CAIA,4BAA6B,GAAIZ,CAAAA,MAAM,CAAIY,eAAd,CAC7B;AACA,GAAIC,CAAAA,2CAA2C,CAAG,QAA9CA,CAAAA,2CAA8C,EAAW,CAC3D,GAAItwF,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,YADO,CAEP,CACEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,iBAAR,CADT,CAEEoC,EAAE,CAAE,CAAE,cAAeN,GAAG,CAACinE,gBAArB,CAFN,CAFO,CAMP,CACE9mE,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACqM,OAHb,CAIEC,UAAU,CAAE,SAJd,CADU,CADd,CASEjM,WAAW,CAAE,iBATf,CAUEK,KAAK,CAAE,CAACV,GAAG,CAAC4M,WAAL,CAAkB,CAAE,gBAAiB5M,GAAG,CAAC0M,UAAvB,CAAlB,CAVT,CAWEG,KAAK,CAAE,CAAEqT,eAAe,CAAElgB,GAAG,CAACyH,UAAJ,EAAkB,EAArC,CAXT,CAFA,CAeA,CACEtH,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,oBAAf,CAAR,CAA+C,CAC/C,CAACL,GAAG,CAAC+3D,OAAL,CACI53D,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,UADf,CAEE+H,KAAK,CAAE,CAAEmoF,OAAO,CAAE,aAAX,CAFT,CAFA,CAMA,CACEpwF,EAAE,CAAC,QAAD,CAAW,CACXE,WAAW,CAAE,MADF,CAEX+H,KAAK,CAAE,CAAEooF,EAAE,CAAE,IAAN,CAAYC,EAAE,CAAE,IAAhB,CAAsBhyF,CAAC,CAAE,IAAzB,CAA+B60B,IAAI,CAAE,MAArC,CAFI,CAAX,CADJ,CANA,CADN,CAcInzB,EAAE,CAAC,GAAD,CAAM,CAAEO,KAAK,CAAEV,GAAG,CAAC+3D,OAAb,CAAN,CAfyC,CAgB/C/3D,GAAG,CAACstB,IAAJ,CACIntB,EAAE,CAAC,GAAD,CAAM,CAAEE,WAAW,CAAE,iBAAf,CAAN,CAA0C,CAC1CL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACstB,IAAX,CAAP,CAD0C,CAA1C,CADN,CAIIttB,GAAG,CAACe,EAAJ,EApB2C,CAA/C,CADJ,CAfA,CADJ,CANO,CAAT,CAiDD,CArDD,CAsDA,GAAI2vF,CAAAA,oDAAoD,CAAG,EAA3D,CACAJ,2CAA2C,CAACzuF,aAA5C,CAA4D,IAA5D,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAI8uF,CAAAA,+BAA+B,CAAI,CAClE/sF,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL0pB,IAAI,CAAE,IADD,CAELyqC,OAAO,CAAE,IAFJ,CAGLtwD,UAAU,CAAE,IAHP,CAILiF,UAAU,CAAE,IAJP,CAKLL,OAAO,CAAE,KALJ,CAMLO,WAAW,CAAE,EANR,CAAP,CAQD,CAViE,CAalEvK,OAAO,CAAE,CACP4kE,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,KAAKlkE,KAAL,CAAW,aAAX,EACD,CAHM,CAIP6tF,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBtjE,IAAjB,CAAuB,CAC9B,KAAKA,IAAL,CAAYA,IAAZ,CACD,CANM,CAbyD,CAAvC,CAsB7B;AACC,4BAA6B,GAAIujE,CAAAA,mCAAmC,CAAIF,+BAA3C,CAC9B;AAMA,yBAEA,GAAIG,CAAAA,iBAAiB,CAAG/sF,kBAAkB,CACxC8sF,mCADwC,CAExCP,2CAFwC,CAGxCI,oDAHwC,CAIxC,KAJwC,CAKxC,IALwC,CAMxC,IANwC,CAOxC,IAPwC,CAA1C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIK,CAAAA,WAAJ,CAAkB,CAC/BD,iBAAiB,CAACvsF,OAAlB,CAA0ByB,MAA1B,CAAmC,kCAAnC,CACA,4BAA6B,GAAI2M,CAAAA,OAAO,CAAIm+E,iBAAiB,CAACvzF,OAAjC,CAC7B;AACA,GAAIyzF,CAAAA,YAAY,CAAGtzF,mBAAmB,CAAC,EAAD,CAAtC,CACA,GAAIuzF,CAAAA,mBAAmB,CAAG,aAAavzF,mBAAmB,CAAC0B,CAApB,CAAsB4xF,YAAtB,CAAvC,CAEA;AAMA,GAAIE,CAAAA,IAAI,CAAG1oD,oBAAoB,CAAC9+B,CAArB,CAAuB6nC,MAAvB,CAA8B5+B,OAA9B,CAAX,CAEA,GAAIw+E,CAAAA,gBAAgB,CAAG,EAAvB,CACAA,gBAAgB,CAACtlF,OAAjB,CAA2B,SAAUC,GAAV,CAAe,CACxC,GAAIA,GAAG,CAACrM,SAAJ,CAAc4tB,SAAlB,CAA6B,OAC7B,GAAI+jE,CAAAA,aAAa,CAAG,QAASA,CAAAA,aAAT,CAAuBjyE,EAAvB,CAA2B+P,OAA3B,CAAoC,CACtD,GAAIA,OAAO,CAACtwB,KAAZ,CAAmB,CACjBkN,GAAG,CAACyqC,QAAJ,CAAa,UAAY,CACvB,GAAIrnB,OAAO,CAACmiE,SAAR,CAAkB3kF,UAAtB,CAAkC,CAChCyS,EAAE,CAACmyE,gBAAH,CAAsBjzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhR,QAAQ,CAACC,IAAlC,CAAwC,UAAxC,CAAtB,CACAmQ,EAAE,CAACoyE,gBAAH,CAAsBlzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhR,QAAQ,CAACC,IAAlC,CAAwC,UAAxC,CAAtB,CACAmQ,EAAE,CAACqyE,SAAH,CAAa1wC,MAAb,CAAsBxzC,MAAM,CAAC,cAAD,CAAN,CAAuByzC,UAAvB,EAAtB,CAEA1iD,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBZ,EAAE,CAACsyE,IAA5B,CAAkC,eAAlC,EACAC,SAAS,CAAC3iF,QAAQ,CAACC,IAAV,CAAgBmQ,EAAhB,CAAoB+P,OAApB,CAAT,CACD,CAPD,IAOO,CACL7wB,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4BZ,EAAE,CAACsyE,IAA/B,CAAqC,eAArC,EAEA,GAAIviE,OAAO,CAACmiE,SAAR,CAAkBriF,IAAtB,CAA4B,CAC1BmQ,EAAE,CAACmyE,gBAAH,CAAsBjzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhR,QAAQ,CAACC,IAAlC,CAAwC,UAAxC,CAAtB,CAEA,CAAC,KAAD,CAAQ,MAAR,EAAgB9F,OAAhB,CAAwB,SAAU1J,QAAV,CAAoB,CAC1C,GAAImyF,CAAAA,MAAM,CAAGnyF,QAAQ,GAAK,KAAb,CAAqB,WAArB,CAAmC,YAAhD,CACA2f,EAAE,CAACqyE,SAAH,CAAahyF,QAAb,EAAyB2f,EAAE,CAAC0c,qBAAH,GAA2Br8B,QAA3B,EAAuCuP,QAAQ,CAACC,IAAT,CAAc2iF,MAAd,CAAvC,CAA+D5iF,QAAQ,CAAC6iF,eAAT,CAAyBD,MAAzB,CAA/D,CAAkGrnF,QAAQ,CAACjM,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhR,QAAQ,CAACC,IAAlC,CAAwC,UAAYxP,QAApD,CAAD,CAAgE,EAAhE,CAA1G,CAAgL,IAAzM,CACD,CAHD,EAIA,CAAC,QAAD,CAAW,OAAX,EAAoB0J,OAApB,CAA4B,SAAU1J,QAAV,CAAoB,CAC9C2f,EAAE,CAACqyE,SAAH,CAAahyF,QAAb,EAAyB2f,EAAE,CAAC0c,qBAAH,GAA2Br8B,QAA3B,EAAuC,IAAhE,CACD,CAFD,EAIAkyF,SAAS,CAAC3iF,QAAQ,CAACC,IAAV,CAAgBmQ,EAAhB,CAAoB+P,OAApB,CAAT,CACD,CAZD,IAYO,CACL/P,EAAE,CAACmyE,gBAAH,CAAsBjzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBZ,EAAzB,CAA6B,UAA7B,CAAtB,CACAuyE,SAAS,CAACvyE,EAAD,CAAKA,EAAL,CAAS+P,OAAT,CAAT,CACD,CACF,CACF,CA5BD,EA6BD,CA9BD,IA8BO,CACL+hE,mBAAmB,GAAG9xE,EAAE,CAAC5E,QAAN,CAAgB,SAAU9G,CAAV,CAAa,CAC9C,GAAI,CAAC0L,EAAE,CAAC5E,QAAH,CAAYs3E,MAAjB,CAAyB,OACzB1yE,EAAE,CAAC2yE,UAAH,CAAgB,KAAhB,CACA,GAAIvvF,CAAAA,MAAM,CAAG2sB,OAAO,CAACmiE,SAAR,CAAkB3kF,UAAlB,EAAgCwiB,OAAO,CAACmiE,SAAR,CAAkBriF,IAAlD,CAAyDD,QAAQ,CAACC,IAAlE,CAAyEmQ,EAAtF,CACA9gB,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4Bxd,MAA5B,CAAoC,6BAApC,EACAlE,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4Bxd,MAA5B,CAAoC,2BAApC,EACA4c,EAAE,CAAC5E,QAAH,CAAYs3E,MAAZ,CAAqB,KAArB,CACD,CAPkB,CAOhB,GAPgB,CAOX,IAPW,CAAnB,CAQA1yE,EAAE,CAAC5E,QAAH,CAAYlO,OAAZ,CAAsB,KAAtB,CACA8S,EAAE,CAAC5E,QAAH,CAAYs3E,MAAZ,CAAqB,IAArB,CACD,CACF,CA3CD,CA4CA,GAAIH,CAAAA,SAAS,CAAG,QAASA,CAAAA,SAAT,CAAmB3sF,MAAnB,CAA2Boa,EAA3B,CAA+B+P,OAA/B,CAAwC,CACtD,GAAI,CAAC/P,EAAE,CAAC2yE,UAAJ,EAAkBzzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBZ,EAAzB,CAA6B,SAA7B,IAA4C,MAA9D,EAAwE9gB,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBZ,EAAzB,CAA6B,YAA7B,IAA+C,QAA3H,CAAqI,CACnI9gB,MAAM,CAAC4f,IAAP,CAAYkB,EAAE,CAACqyE,SAAf,EAA0BtoF,OAA1B,CAAkC,SAAU1J,QAAV,CAAoB,CACpD2f,EAAE,CAACsyE,IAAH,CAAQ5kF,KAAR,CAAcrN,QAAd,EAA0B2f,EAAE,CAACqyE,SAAH,CAAahyF,QAAb,CAA1B,CACD,CAFD,EAIA,GAAI2f,EAAE,CAACmyE,gBAAH,GAAwB,UAAxB,EAAsCnyE,EAAE,CAACmyE,gBAAH,GAAwB,OAAlE,CAA2E,CACzEjzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhb,MAAzB,CAAiC,6BAAjC,EACD,CACD,GAAImqB,OAAO,CAACmiE,SAAR,CAAkB3kF,UAAlB,EAAgCwiB,OAAO,CAACmiE,SAAR,CAAkBU,IAAtD,CAA4D,CAC1D1zF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhb,MAAzB,CAAiC,2BAAjC,EACD,CACDoa,EAAE,CAAC2yE,UAAH,CAAgB,IAAhB,CAEA/sF,MAAM,CAACkK,WAAP,CAAmBkQ,EAAE,CAACsyE,IAAtB,EACA3lF,GAAG,CAACyqC,QAAJ,CAAa,UAAY,CACvB,GAAIp3B,EAAE,CAAC5E,QAAH,CAAYs3E,MAAhB,CAAwB,CACtB1yE,EAAE,CAAC5E,QAAH,CAAYxX,KAAZ,CAAkB,aAAlB,EACD,CAFD,IAEO,CACLoc,EAAE,CAAC5E,QAAH,CAAYlO,OAAZ,CAAsB,IAAtB,CACD,CACF,CAND,EAOA8S,EAAE,CAAC6yE,WAAH,CAAiB,IAAjB,CACD,CAtBD,IAsBO,IAAI7yE,EAAE,CAAC2yE,UAAH,EAAiB3yE,EAAE,CAAC5E,QAAH,CAAYs3E,MAAZ,GAAuB,IAA5C,CAAkD,CACvD1yE,EAAE,CAAC5E,QAAH,CAAYlO,OAAZ,CAAsB,IAAtB,CACA8S,EAAE,CAAC5E,QAAH,CAAYs3E,MAAZ,CAAqB,KAArB,CACD,CACF,CA3BD,CA6BA/lF,GAAG,CAACq8D,SAAJ,CAAc,SAAd,CAAyB,CACvBhpE,IAAI,CAAE,QAASA,CAAAA,IAAT,CAAcggB,EAAd,CAAkB+P,OAAlB,CAA2BC,KAA3B,CAAkC,CACtC,GAAI8iE,CAAAA,OAAO,CAAG9yE,EAAE,CAAChF,YAAH,CAAgB,sBAAhB,CAAd,CACA,GAAI+3E,CAAAA,UAAU,CAAG/yE,EAAE,CAAChF,YAAH,CAAgB,yBAAhB,CAAjB,CACA,GAAIg4E,CAAAA,aAAa,CAAGhzE,EAAE,CAAChF,YAAH,CAAgB,4BAAhB,CAApB,CACA,GAAIi4E,CAAAA,cAAc,CAAGjzE,EAAE,CAAChF,YAAH,CAAgB,8BAAhB,CAArB,CACA,GAAIk4E,CAAAA,EAAE,CAAGljE,KAAK,CAACvqB,OAAf,CACA,GAAI6sF,CAAAA,IAAI,CAAG,GAAIP,CAAAA,IAAJ,CAAS,CAClB/xE,EAAE,CAAEpQ,QAAQ,CAACsR,aAAT,CAAuB,KAAvB,CADc,CAElBzc,IAAI,CAAE,CACJ0pB,IAAI,CAAE+kE,EAAE,EAAIA,EAAE,CAACJ,OAAD,CAAR,EAAqBA,OADvB,CAEJl6B,OAAO,CAAEs6B,EAAE,EAAIA,EAAE,CAACH,UAAD,CAAR,EAAwBA,UAF7B,CAGJzqF,UAAU,CAAE4qF,EAAE,EAAIA,EAAE,CAACF,aAAD,CAAR,EAA2BA,aAHnC,CAIJvlF,WAAW,CAAEylF,EAAE,EAAIA,EAAE,CAACD,cAAD,CAAR,EAA4BA,cAJrC,CAKJ1lF,UAAU,CAAE,CAAC,CAACwiB,OAAO,CAACmiE,SAAR,CAAkB3kF,UAL5B,CAFY,CAAT,CAAX,CAUAyS,EAAE,CAAC5E,QAAH,CAAck3E,IAAd,CACAtyE,EAAE,CAACsyE,IAAH,CAAUA,IAAI,CAAChjF,GAAf,CACA0Q,EAAE,CAACqyE,SAAH,CAAe,EAAf,CAEAtiE,OAAO,CAACtwB,KAAR,EAAiBwyF,aAAa,CAACjyE,EAAD,CAAK+P,OAAL,CAA9B,CACD,CAtBsB,CAwBvBmpD,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgBl5D,EAAhB,CAAoB+P,OAApB,CAA6B,CACnC/P,EAAE,CAAC5E,QAAH,CAAYq2E,OAAZ,CAAoBzxE,EAAE,CAAChF,YAAH,CAAgB,sBAAhB,CAApB,EACA,GAAI+U,OAAO,CAACwgB,QAAR,GAAqBxgB,OAAO,CAACtwB,KAAjC,CAAwC,CACtCwyF,aAAa,CAACjyE,EAAD,CAAK+P,OAAL,CAAb,CACD,CACF,CA7BsB,CA+BvBojE,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgBnzE,EAAhB,CAAoB+P,OAApB,CAA6B,CACnC,GAAI/P,EAAE,CAAC6yE,WAAP,CAAoB,CAClB7yE,EAAE,CAACsyE,IAAH,EAAWtyE,EAAE,CAACsyE,IAAH,CAAQ9hF,UAAnB,EAAiCwP,EAAE,CAACsyE,IAAH,CAAQ9hF,UAAR,CAAmBC,WAAnB,CAA+BuP,EAAE,CAACsyE,IAAlC,CAAjC,CACAL,aAAa,CAACjyE,EAAD,CAAK,CAAEvgB,KAAK,CAAE,KAAT,CAAgByyF,SAAS,CAAEniE,OAAO,CAACmiE,SAAnC,CAAL,CAAb,CACD,CACDlyE,EAAE,CAAC5E,QAAH,EAAe4E,EAAE,CAAC5E,QAAH,CAAYrD,QAAZ,EAAf,CACD,CArCsB,CAAzB,EAuCD,CAlHD,CAoHA,4BAA6B,GAAIq7E,CAAAA,aAAa,CAAIpB,gBAArB,CAC7B;AAQA,GAAIqB,CAAAA,kBAAkB,CAAGhqD,oBAAoB,CAAC9+B,CAArB,CAAuB6nC,MAAvB,CAA8B5+B,OAA9B,CAAzB,CAEA,GAAI8/E,CAAAA,YAAY,CAAG,CACjBnlE,IAAI,CAAE,IADW,CAEjB5gB,UAAU,CAAE,IAFK,CAGjBsC,IAAI,CAAE,KAHW,CAIjB+iF,IAAI,CAAE,KAJW,CAKjBnlF,WAAW,CAAE,EALI,CAAnB,CAQA,GAAI8lF,CAAAA,iBAAiB,CAAG,IAAK,EAA7B,CAEAF,kBAAkB,CAAC/yF,SAAnB,CAA6B6xF,gBAA7B,CAAgD,EAAhD,CACAkB,kBAAkB,CAAC/yF,SAAnB,CAA6B8xF,gBAA7B,CAAgD,EAAhD,CAEAiB,kBAAkB,CAAC/yF,SAAnB,CAA6ByQ,KAA7B,CAAqC,UAAY,CAC/C,GAAIlG,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI,KAAK0C,UAAT,CAAqB,CACnBgmF,iBAAiB,CAAGlnF,SAApB,CACD,CACDylF,mBAAmB,GAAG,IAAH,CAAS,SAAUx9E,CAAV,CAAa,CACvC,GAAIlR,CAAAA,MAAM,CAAGyH,KAAK,CAAC0C,UAAN,EAAoB1C,KAAK,CAACgF,IAA1B,CAAiCD,QAAQ,CAACC,IAA1C,CAAiDhF,KAAK,CAACzH,MAApE,CACAlE,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4Bxd,MAA5B,CAAoC,6BAApC,EACAlE,MAAM,CAAC0hB,IAAI,CAAC,aAAD,CAAL,CAAN,CAA4Bxd,MAA5B,CAAoC,2BAApC,EACA,GAAIyH,KAAK,CAACyE,GAAN,EAAazE,KAAK,CAACyE,GAAN,CAAUkB,UAA3B,CAAuC,CACrC3F,KAAK,CAACyE,GAAN,CAAUkB,UAAV,CAAqBC,WAArB,CAAiC5F,KAAK,CAACyE,GAAvC,EACD,CACDzE,KAAK,CAACkN,QAAN,GACD,CARkB,CAQhB,GARgB,CAAnB,CASA,KAAK7K,OAAL,CAAe,KAAf,CACD,CAhBD,CAkBA,GAAIsmF,CAAAA,YAAY,CAAG,QAASC,CAAAA,QAAT,CAAkBruF,OAAlB,CAA2BQ,MAA3B,CAAmCwV,QAAnC,CAA6C,CAC9D,GAAIi3E,CAAAA,SAAS,CAAG,EAAhB,CACA,GAAIjtF,OAAO,CAACmI,UAAZ,CAAwB,CACtB6N,QAAQ,CAAC+2E,gBAAT,CAA4BjzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhR,QAAQ,CAACC,IAAlC,CAAwC,UAAxC,CAA5B,CACAuL,QAAQ,CAACg3E,gBAAT,CAA4BlzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhR,QAAQ,CAACC,IAAlC,CAAwC,UAAxC,CAA5B,CACAwiF,SAAS,CAAC1wC,MAAV,CAAmBxzC,MAAM,CAAC,cAAD,CAAN,CAAuByzC,UAAvB,EAAnB,CACD,CAJD,IAIO,IAAIx8C,OAAO,CAACyK,IAAZ,CAAkB,CACvBuL,QAAQ,CAAC+2E,gBAAT,CAA4BjzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhR,QAAQ,CAACC,IAAlC,CAAwC,UAAxC,CAA5B,CACA,CAAC,KAAD,CAAQ,MAAR,EAAgB9F,OAAhB,CAAwB,SAAU1J,QAAV,CAAoB,CAC1C,GAAImyF,CAAAA,MAAM,CAAGnyF,QAAQ,GAAK,KAAb,CAAqB,WAArB,CAAmC,YAAhD,CACAgyF,SAAS,CAAChyF,QAAD,CAAT,CAAsB+E,OAAO,CAAChC,MAAR,CAAes5B,qBAAf,GAAuCr8B,QAAvC,EAAmDuP,QAAQ,CAACC,IAAT,CAAc2iF,MAAd,CAAnD,CAA2E5iF,QAAQ,CAAC6iF,eAAT,CAAyBD,MAAzB,CAA3E,CAA8G,IAApI,CACD,CAHD,EAIA,CAAC,QAAD,CAAW,OAAX,EAAoBzoF,OAApB,CAA4B,SAAU1J,QAAV,CAAoB,CAC9CgyF,SAAS,CAAChyF,QAAD,CAAT,CAAsB+E,OAAO,CAAChC,MAAR,CAAes5B,qBAAf,GAAuCr8B,QAAvC,EAAmD,IAAzE,CACD,CAFD,EAGD,CATM,IASA,CACL+a,QAAQ,CAAC+2E,gBAAT,CAA4BjzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhb,MAAzB,CAAiC,UAAjC,CAA5B,CACD,CACD1G,MAAM,CAAC4f,IAAP,CAAYuzE,SAAZ,EAAuBtoF,OAAvB,CAA+B,SAAU1J,QAAV,CAAoB,CACjD+a,QAAQ,CAAC9L,GAAT,CAAa5B,KAAb,CAAmBrN,QAAnB,EAA+BgyF,SAAS,CAAChyF,QAAD,CAAxC,CACD,CAFD,EAGD,CArBD,CAuBA,GAAIqzF,CAAAA,WAAW,CAAG,QAASC,CAAAA,OAAT,EAAmB,CACnC,GAAIvuF,CAAAA,OAAO,CAAGoZ,SAAS,CAAC7H,MAAV,CAAmB,CAAnB,EAAwB6H,SAAS,CAAC,CAAD,CAAT,GAAiBnS,SAAzC,CAAqDmS,SAAS,CAAC,CAAD,CAA9D,CAAoE,EAAlF,CAEA,GAAI6qB,oBAAoB,CAAC9+B,CAArB,CAAuBjK,SAAvB,CAAiC4tB,SAArC,CAAgD,OAChD9oB,OAAO,CAAGsnB,aAAa,GAAG,EAAH,CAAO4mE,YAAP,CAAqBluF,OAArB,CAAvB,CACA,GAAI,MAAOA,CAAAA,OAAO,CAAChC,MAAf,GAA0B,QAA9B,CAAwC,CACtCgC,OAAO,CAAChC,MAAR,CAAiBwM,QAAQ,CAACgF,aAAT,CAAuBxP,OAAO,CAAChC,MAA/B,CAAjB,CACD,CACDgC,OAAO,CAAChC,MAAR,CAAiBgC,OAAO,CAAChC,MAAR,EAAkBwM,QAAQ,CAACC,IAA5C,CACA,GAAIzK,OAAO,CAAChC,MAAR,GAAmBwM,QAAQ,CAACC,IAAhC,CAAsC,CACpCzK,OAAO,CAACmI,UAAR,CAAqB,KAArB,CACD,CAFD,IAEO,CACLnI,OAAO,CAACyK,IAAR,CAAe,IAAf,CACD,CACD,GAAIzK,OAAO,CAACmI,UAAR,EAAsBgmF,iBAA1B,CAA6C,CAC3C,MAAOA,CAAAA,iBAAP,CACD,CAED,GAAI3tF,CAAAA,MAAM,CAAGR,OAAO,CAACyK,IAAR,CAAeD,QAAQ,CAACC,IAAxB,CAA+BzK,OAAO,CAAChC,MAApD,CACA,GAAIgY,CAAAA,QAAQ,CAAG,GAAIi4E,CAAAA,kBAAJ,CAAuB,CACpCrzE,EAAE,CAAEpQ,QAAQ,CAACsR,aAAT,CAAuB,KAAvB,CADgC,CAEpCzc,IAAI,CAAEW,OAF8B,CAAvB,CAAf,CAKAouF,YAAY,CAACpuF,OAAD,CAAUQ,MAAV,CAAkBwV,QAAlB,CAAZ,CACA,GAAIA,QAAQ,CAAC+2E,gBAAT,GAA8B,UAA9B,EAA4C/2E,QAAQ,CAAC+2E,gBAAT,GAA8B,OAA9E,CAAuF,CACrFjzF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhb,MAAzB,CAAiC,6BAAjC,EACD,CACD,GAAIR,OAAO,CAACmI,UAAR,EAAsBnI,OAAO,CAACwtF,IAAlC,CAAwC,CACtC1zF,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBhb,MAAzB,CAAiC,2BAAjC,EACD,CACDA,MAAM,CAACkK,WAAP,CAAmBsL,QAAQ,CAAC9L,GAA5B,EACA+5B,oBAAoB,CAAC9+B,CAArB,CAAuB6sC,QAAvB,CAAgC,UAAY,CAC1Ch8B,QAAQ,CAAClO,OAAT,CAAmB,IAAnB,CACD,CAFD,EAGA,GAAI9H,OAAO,CAACmI,UAAZ,CAAwB,CACtBgmF,iBAAiB,CAAGn4E,QAApB,CACD,CACD,MAAOA,CAAAA,QAAP,CACD,CAvCD,CAyCA,4BAA6B,GAAIw4E,CAAAA,GAAG,CAAIF,WAAX,CAC7B;AAIA,4BAA6B,GAAIG,CAAAA,gBAAgB,CAAI,CACnDnnF,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBC,GAAjB,CAAsB,CAC7BA,GAAG,CAACmnF,GAAJ,CAAQV,aAAR,EACAzmF,GAAG,CAACrM,SAAJ,CAAcyzF,QAAd,CAAyBH,GAAzB,CACD,CAJkD,CAMnD5qB,SAAS,CAAEoqB,aANwC,CAOnDY,OAAO,CAAEJ,GAP0C,CAAxB,CAS7B;AACA,GAAIK,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAIpzF,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CAAC,GAAD,CAAM,CAAEO,KAAK,CAAE,WAAaV,GAAG,CAAC9B,IAA1B,CAAN,CAAT,CACD,CALD,CAMA,GAAIm1F,CAAAA,iDAAiD,CAAG,EAAxD,CACAD,wCAAwC,CAACvxF,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAIyxF,CAAAA,4BAA4B,CAAI,CAC/Dp1F,IAAI,CAAE,QADyD,CAG/D6D,KAAK,CAAE,CACL7D,IAAI,CAAEoJ,MADD,CAHwD,CAApC,CAO7B;AACC,4BAA6B,GAAIisF,CAAAA,gCAAgC,CAAID,4BAAxC,CAC9B;AAMA,yBAEA,GAAIE,CAAAA,cAAc,CAAGzvF,kBAAkB,CACrCwvF,gCADqC,CAErCH,wCAFqC,CAGrCC,iDAHqC,CAIrC,KAJqC,CAKrC,IALqC,CAMrC,IANqC,CAOrC,IAPqC,CAAvC,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAII,CAAAA,QAAJ,CAAe,CAC5BD,cAAc,CAACjvF,OAAf,CAAuByB,MAAvB,CAAgC,4BAAhC,CACA,4BAA6B,GAAI8V,CAAAA,IAAI,CAAI03E,cAAc,CAACj2F,OAA3B,CAC7B;AAGA,0BACAue,IAAI,CAACjQ,OAAL,CAAe,SAAUC,GAAV,CAAe,CAC5BA,GAAG,CAAChG,SAAJ,CAAcgW,IAAI,CAAC5d,IAAnB,CAAyB4d,IAAzB,EACD,CAFD,CAIA,4BAA6B,GAAI43E,CAAAA,aAAa,CAAI53E,IAArB,CAC7B;AACA,4BAA6B,GAAI63E,CAAAA,OAAO,CAAI,CAC1Cz1F,IAAI,CAAE,OADoC,CAG1CmV,aAAa,CAAE,OAH2B,CAK1CtR,KAAK,CAAE,CACL8Q,GAAG,CAAE,CACHjM,IAAI,CAAEU,MADH,CAEHT,OAAO,CAAE,KAFN,CADA,CAKL+sF,MAAM,CAAE5xF,MALH,CAML4E,IAAI,CAAEU,MAND,CAOLusF,OAAO,CAAE,CACPjtF,IAAI,CAAEU,MADC,CAEPT,OAAO,CAAE,OAFF,CAPJ,CAWLk2C,KAAK,CAAE,CACLn2C,IAAI,CAAEU,MADD,CAELT,OAAO,CAAE,KAFJ,CAXF,CALmC,CAsB1C5D,QAAQ,CAAE,CACR4J,KAAK,CAAE,QAASA,CAAAA,KAAT,EAAiB,CACtB,GAAI+mE,CAAAA,GAAG,CAAG,EAAV,CAEA,GAAI,KAAKggB,MAAT,CAAiB,CACfhgB,GAAG,CAACf,UAAJ,CAAiB,IAAM,KAAK+gB,MAAL,CAAc,CAApB,CAAwB,IAAzC,CACAhgB,GAAG,CAACkgB,WAAJ,CAAkBlgB,GAAG,CAACf,UAAtB,CACD,CAED,MAAOe,CAAAA,GAAP,CACD,CAVO,CAtBgC,CAmC1C3vE,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,MAAOA,CAAAA,CAAC,CAAC,KAAKmN,GAAN,CAAW,CACjBnS,KAAK,CAAE,CAAC,QAAD,CAAW,KAAKmzF,OAAL,GAAiB,OAAjB,CAA2B,cAAgB,KAAKA,OAAhD,CAA0D,EAArE,CAAyE,KAAK92C,KAAL,GAAe,KAAf,CAAuB,YAAc,KAAKA,KAA1C,CAAkD,EAA3H,CAA+H,CAAE,eAAgB,KAAKn2C,IAAL,GAAc,MAAhC,CAA/H,CADU,CAEjBiG,KAAK,CAAE,KAAKA,KAFK,CAAX,CAGL,KAAKpE,MAAL,CAAY5B,OAHP,CAAR,CAID,CAxCyC,CAAf,CA0C7B;AAGA,0BACA8sF,OAAO,CAAC9nF,OAAR,CAAkB,SAAUC,GAAV,CAAe,CAC/BA,GAAG,CAAChG,SAAJ,CAAc6tF,OAAO,CAACz1F,IAAtB,CAA4By1F,OAA5B,EACD,CAFD,CAIA,4BAA6B,GAAII,CAAAA,YAAY,CAAIJ,OAApB,CAC7B;AACA,GAAIK,CAAAA,UAAU,CAAG,MAAOt1F,CAAAA,MAAP,GAAkB,UAAlB,EAAgC,SAAOA,MAAM,CAACm+B,QAAd,IAA2B,QAA3D,CAAsE,SAAUC,GAAV,CAAe,CAAE,gBAAcA,GAAd,EAAoB,CAA3G,CAA8G,SAAUA,GAAV,CAAe,CAAE,MAAOA,CAAAA,GAAG,EAAI,MAAOp+B,CAAAA,MAAP,GAAkB,UAAzB,EAAuCo+B,GAAG,CAACC,WAAJ,GAAoBr+B,MAA3D,EAAqEo+B,GAAG,GAAKp+B,MAAM,CAACe,SAApF,CAAgG,QAAhG,UAAkHq9B,GAAlH,CAAP,CAA+H,CAA/Q,CAEA,4BAA6B,GAAIiX,CAAAA,GAAG,CAAI,CACtC71C,IAAI,CAAE,OADgC,CAGtC6D,KAAK,CAAE,CACLkyF,IAAI,CAAE,CACJrtF,IAAI,CAAE5E,MADF,CAEJ6E,OAAO,CAAE,EAFL,CADD,CAKLgM,GAAG,CAAE,CACHjM,IAAI,CAAEU,MADH,CAEHT,OAAO,CAAE,KAFN,CALA,CASLtD,MAAM,CAAEvB,MATH,CAULkyF,IAAI,CAAElyF,MAVD,CAWLqB,IAAI,CAAErB,MAXD,CAYLmyF,EAAE,CAAE,CAACnyF,MAAD,CAAS3D,MAAT,CAZC,CAaL+1F,EAAE,CAAE,CAACpyF,MAAD,CAAS3D,MAAT,CAbC,CAcLg2F,EAAE,CAAE,CAACryF,MAAD,CAAS3D,MAAT,CAdC,CAeLi2F,EAAE,CAAE,CAACtyF,MAAD,CAAS3D,MAAT,CAfC,CAgBLk2F,EAAE,CAAE,CAACvyF,MAAD,CAAS3D,MAAT,CAhBC,CAH+B,CAsBtC4E,QAAQ,CAAE,CACR2wF,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,GAAI7uF,CAAAA,MAAM,CAAG,KAAKuE,OAAlB,CACA,MAAOvE,MAAM,EAAIA,MAAM,CAACM,QAAP,CAAgBgO,aAAhB,GAAkC,OAAnD,CAA4D,CAC1DtO,MAAM,CAAGA,MAAM,CAACuE,OAAhB,CACD,CACD,MAAOvE,CAAAA,MAAM,CAAGA,MAAM,CAAC6uF,MAAV,CAAmB,CAAhC,CACD,CAPO,CAtB4B,CA+BtC3vF,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,GAAIsE,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAIwqF,CAAAA,SAAS,CAAG,EAAhB,CACA,GAAI3nF,CAAAA,KAAK,CAAG,EAAZ,CAEA,GAAI,KAAK+mF,MAAT,CAAiB,CACf/mF,KAAK,CAAC8X,WAAN,CAAoB,KAAKivE,MAAL,CAAc,CAAd,CAAkB,IAAtC,CACA/mF,KAAK,CAACopE,YAAN,CAAqBppE,KAAK,CAAC8X,WAA3B,CACD,CAED,CAAC,MAAD,CAAS,QAAT,CAAmB,MAAnB,CAA2B,MAA3B,EAAmCzb,OAAnC,CAA2C,SAAU+qC,IAAV,CAAgB,CACzD,GAAIjqC,KAAK,CAACiqC,IAAD,CAAL,EAAejqC,KAAK,CAACiqC,IAAD,CAAL,GAAgB,CAAnC,CAAsC,CACpCugD,SAAS,CAACnxF,IAAV,CAAe4wC,IAAI,GAAK,MAAT,CAAkB,UAAYA,IAAZ,CAAmB,GAAnB,CAAyBjqC,KAAK,CAACiqC,IAAD,CAAhD,CAAyD,UAAYjqC,KAAK,CAACiqC,IAAD,CAAzF,EACD,CACF,CAJD,EAMA,CAAC,IAAD,CAAO,IAAP,CAAa,IAAb,CAAmB,IAAnB,CAAyB,IAAzB,EAA+B/qC,OAA/B,CAAuC,SAAUe,IAAV,CAAgB,CACrD,GAAI,MAAOD,CAAAA,KAAK,CAACC,IAAD,CAAZ,GAAuB,QAA3B,CAAqC,CACnCuqF,SAAS,CAACnxF,IAAV,CAAe,UAAY4G,IAAZ,CAAmB,GAAnB,CAAyBD,KAAK,CAACC,IAAD,CAA7C,EACD,CAFD,IAEO,IAAI+pF,UAAU,CAAChqF,KAAK,CAACC,IAAD,CAAN,CAAV,GAA4B,QAAhC,CAA0C,CAC/C,GAAIlI,CAAAA,KAAK,CAAGiI,KAAK,CAACC,IAAD,CAAjB,CACA5L,MAAM,CAAC4f,IAAP,CAAYlc,KAAZ,EAAmBmH,OAAnB,CAA2B,SAAU+qC,IAAV,CAAgB,CACzCugD,SAAS,CAACnxF,IAAV,CAAe4wC,IAAI,GAAK,MAAT,CAAkB,UAAYhqC,IAAZ,CAAmB,GAAnB,CAAyBgqC,IAAzB,CAAgC,GAAhC,CAAsClyC,KAAK,CAACkyC,IAAD,CAA7D,CAAsE,UAAYhqC,IAAZ,CAAmB,GAAnB,CAAyBlI,KAAK,CAACkyC,IAAD,CAAnH,EACD,CAFD,EAGD,CACF,CATD,EAWA,MAAOvuC,CAAAA,CAAC,CAAC,KAAKmN,GAAN,CAAW,CACjBnS,KAAK,CAAE,CAAC,QAAD,CAAW8zF,SAAX,CADU,CAEjB3nF,KAAK,CAAEA,KAFU,CAAX,CAGL,KAAKpE,MAAL,CAAY5B,OAHP,CAAR,CAID,CA/DqC,CAAX,CAiE7B;AAGA,0BACAktC,GAAG,CAACloC,OAAJ,CAAc,SAAUC,GAAV,CAAe,CAC3BA,GAAG,CAAChG,SAAJ,CAAciuC,GAAG,CAAC71C,IAAlB,CAAwB61C,GAAxB,EACD,CAFD,CAIA,4BAA6B,GAAI0gD,CAAAA,YAAY,CAAI1gD,GAApB,CAC7B;AACA,GAAI2gD,CAAAA,+CAA+C,CAAG,QAAlDA,CAAAA,+CAAkD,EAAW,CAC/D,GAAI10F,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,kBADO,CAEP,CACEO,KAAK,CAAE,CACL,gBADK,CAEL,mBAAqBV,GAAG,CAAC20F,QAFpB,CAGL,CAAE,cAAe30F,GAAG,CAACa,QAArB,CAHK,CADT,CAMEuH,KAAK,CAAE,CAAEyK,GAAG,CAAE,IAAP,CAAa3U,IAAI,CAAE,SAAnB,CANT,CAFO,CAUP8B,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAAC40F,KAAX,CAAkB,SAASC,IAAT,CAAe,CAC/B,MAAO10F,CAAAA,EAAE,CACP,IADO,CAEP,CACEjB,GAAG,CAAE21F,IAAI,CAACtpB,GADZ,CAEE7qE,KAAK,CAAE,CACL,sBADK,CAEL,MAAQm0F,IAAI,CAACC,MAFR,CAGL90F,GAAG,CAAC6Y,QAAJ,CAAe,UAAf,CAA4B,EAHvB,CAFT,CAOEzQ,KAAK,CAAE,CAAEmQ,QAAQ,CAAE,GAAZ,CAPT,CAQEjY,EAAE,CAAE,CACFwQ,OAAO,CAAE,iBAAS3P,MAAT,CAAiB,CACxB,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CAAO5P,MAAM,CAAC0J,OAAd,CAAuB,QAAvB,CAAiC,CAAC,CAAD,CAAI,EAAJ,CAAjC,CAA0C1J,MAAM,CAACjC,GAAjD,CAAsD,CACpD,WADoD,CAEpD,QAFoD,CAGpD,KAHoD,CAAtD,CAFF,CAOE,CACA,MAAO,KAAP,CACD,CACD,CAACc,GAAG,CAACa,QAAL,EAAiBb,GAAG,CAAC+C,KAAJ,CAAU,QAAV,CAAoB8xF,IAApB,CAAjB,CACD,CAbC,CAcFrkF,KAAK,CAAE,eAASrP,MAAT,CAAiB,CACtBnB,GAAG,CAAC6Y,QAAJ,CAAe,IAAf,CACD,CAhBC,CAiBFnI,IAAI,CAAE,cAASvP,MAAT,CAAiB,CACrBnB,GAAG,CAAC6Y,QAAJ,CAAe,KAAf,CACD,CAnBC,CAoBFtY,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAAC6Y,QAAJ,CAAe,KAAf,CACD,CAtBC,CARN,CAFO,CAmCP,CACE7Y,GAAG,CAACgN,EAAJ,CACE,SADF,CAEE,CACE6nF,IAAI,CAACC,MAAL,GAAgB,WAAhB,EACA,CAAC,cAAD,CAAiB,SAAjB,EAA4BjyF,OAA5B,CAAoC7C,GAAG,CAAC20F,QAAxC,EAAoD,CAAC,CADrD,CAEIx0F,EAAE,CAAC,KAAD,CAAQ,CACRE,WAAW,CAAE,gCADL,CAER+H,KAAK,CAAE,CAAE2qF,GAAG,CAAE8B,IAAI,CAACE,GAAZ,CAAiBC,GAAG,CAAE,EAAtB,CAFC,CAAR,CAFN,CAMIh1F,GAAG,CAACe,EAAJ,EAPN,CAQEZ,EAAE,CACA,GADA,CAEA,CACEE,WAAW,CAAE,2BADf,CAEEC,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACyZ,WAAJ,CAAgBo7E,IAAhB,EACD,CAHC,CAFN,CAFA,CAUA,CACE10F,EAAE,CAAC,GAAD,CAAM,CAAEE,WAAW,CAAE,kBAAf,CAAN,CADJ,CAEEL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOozF,IAAI,CAAC32F,IAAZ,EAAoB,UAA3B,CAFF,CAVA,CARJ,CAuBEiC,EAAE,CACA,OADA,CAEA,CAAEE,WAAW,CAAE,mCAAf,CAFA,CAGA,CACEF,EAAE,CAAC,GAAD,CAAM,CACNO,KAAK,CAAE,CACL,yBAA0B,IADrB,CAEL,uBAAwBV,GAAG,CAAC20F,QAAJ,GAAiB,MAFpC,CAGL,gBACE,CAAC,cAAD,CAAiB,SAAjB,EAA4B9xF,OAA5B,CAAoC7C,GAAG,CAAC20F,QAAxC,EAAoD,CAAC,CAJlD,CADD,CAAN,CADJ,CAHA,CAvBJ,CAqCE,CAAC30F,GAAG,CAACa,QAAL,CACIV,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,eADP,CAENC,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAAC+C,KAAJ,CAAU,QAAV,CAAoB8xF,IAApB,EACD,CAHC,CAFE,CAAN,CADN,CASI70F,GAAG,CAACe,EAAJ,EA9CN,CA+CE,CAACf,GAAG,CAACa,QAAL,CACIV,EAAE,CAAC,GAAD,CAAM,CAAEE,WAAW,CAAE,mBAAf,CAAN,CAA4C,CAC5CL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACnB,CAAJ,CAAM,qBAAN,CAAP,CAAP,CAD4C,CAA5C,CADN,CAIImB,GAAG,CAACe,EAAJ,EAnDN,CAoDE8zF,IAAI,CAACC,MAAL,GAAgB,WAAhB,CACI30F,EAAE,CAAC,aAAD,CAAgB,CAChBiI,KAAK,CAAE,CACLxB,IAAI,CAAE5G,GAAG,CAAC20F,QAAJ,GAAiB,cAAjB,CAAkC,QAAlC,CAA6C,MAD9C,CAEL,eAAgB30F,GAAG,CAAC20F,QAAJ,GAAiB,cAAjB,CAAkC,CAAlC,CAAsC,CAFjD,CAGLM,UAAU,CAAEj1F,GAAG,CAACk1F,eAAJ,CAAoBL,IAAI,CAACI,UAAzB,CAHP,CADS,CAAhB,CADN,CAQIj1F,GAAG,CAACe,EAAJ,EA5DN,CA6DEf,GAAG,CAAC20F,QAAJ,GAAiB,cAAjB,CACIx0F,EAAE,CAAC,MAAD,CAAS,CAAEE,WAAW,CAAE,8BAAf,CAAT,CAA0D,CAC1DL,GAAG,CAACm1F,aAAJ,EAAqBn1F,GAAG,CAAC20F,QAAJ,GAAiB,cAAtC,CACIx0F,EAAE,CACA,MADA,CAEA,CACEE,WAAW,CAAE,8BADf,CAEEC,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACm1F,aAAJ,CAAkBN,IAAlB,EACD,CAHC,CAFN,CAFA,CAUA,CAAC10F,EAAE,CAAC,GAAD,CAAM,CAAEE,WAAW,CAAE,iBAAf,CAAN,CAAH,CAVA,CADN,CAaIL,GAAG,CAACe,EAAJ,EAdsD,CAe1D,CAACf,GAAG,CAACa,QAAL,CACIV,EAAE,CACA,MADA,CAEA,CACEE,WAAW,CAAE,6BADf,CAEEC,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAAC+C,KAAJ,CAAU,QAAV,CAAoB8xF,IAApB,EACD,CAHC,CAFN,CAFA,CAUA,CAAC10F,EAAE,CAAC,GAAD,CAAM,CAAEE,WAAW,CAAE,gBAAf,CAAN,CAAH,CAVA,CADN,CAaIL,GAAG,CAACe,EAAJ,EA5BsD,CAA1D,CADN,CA+BIf,GAAG,CAACe,EAAJ,EA5FN,CAFF,CAgGE,CAAE8zF,IAAI,CAAEA,IAAR,CAhGF,CADF,CAnCO,CAuIP,CAvIO,CAAT,CAyID,CA1ID,CAVO,CAqJP,CArJO,CAAT,CAuJD,CA3JD,CA4JA,GAAIO,CAAAA,wDAAwD,CAAG,EAA/D,CACAV,+CAA+C,CAAC7yF,aAAhD,CAAgE,IAAhE,CAGA;AAEA;AACA,GAAIwzF,CAAAA,SAAS,CAAG33F,mBAAmB,CAAC,EAAD,CAAnC,CACA,GAAI43F,CAAAA,gBAAgB,CAAG,aAAa53F,mBAAmB,CAAC0B,CAApB,CAAsBi2F,SAAtB,CAApC,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA,4BAA6B,GAAIE,CAAAA,mCAAmC,CAAI,CAEtEr3F,IAAI,CAAE,cAFgE,CAItEuL,MAAM,CAAE,CAACjD,cAAc,CAACkD,CAAhB,CAJ8D,CAMtE9F,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLiV,QAAQ,CAAE,KADL,CAAP,CAGD,CAVqE,CAYtEnQ,UAAU,CAAE,CAAE8sF,UAAU,CAAEF,gBAAgB,CAAC5rF,CAA/B,CAZ0D,CActE3H,KAAK,CAAE,CACL6yF,KAAK,CAAE,CACLhuF,IAAI,CAAEO,KADD,CAELN,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,EAAP,CACD,CAJI,CADF,CAOLvG,QAAQ,CAAE,CACR+F,IAAI,CAAE1E,OADE,CAER2E,OAAO,CAAE,KAFD,CAPL,CAWLsuF,aAAa,CAAE7mF,QAXV,CAYLqmF,QAAQ,CAAErtF,MAZL,CAd+D,CA4BtEjF,OAAO,CAAE,CACP6yF,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyB9yF,GAAzB,CAA8B,CAC7C,MAAOkI,CAAAA,QAAQ,CAAClI,GAAD,CAAM,EAAN,CAAf,CACD,CAHM,CAIPqX,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqBo7E,IAArB,CAA2B,CACtC,KAAKM,aAAL,EAAsB,KAAKA,aAAL,CAAmBN,IAAnB,CAAtB,CACD,CANM,CA5B6D,CAA3C,CAqC7B;AACC,4BAA6B,GAAIY,CAAAA,uCAAuC,CAAIF,mCAA/C,CAC9B;AAMA,yBAEA,GAAIG,CAAAA,qBAAqB,CAAG3xF,kBAAkB,CAC5C0xF,uCAD4C,CAE5Cf,+CAF4C,CAG5CU,wDAH4C,CAI5C,KAJ4C,CAK5C,IAL4C,CAM5C,IAN4C,CAO5C,IAP4C,CAA9C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIO,CAAAA,eAAJ,CAAsB,CACnCD,qBAAqB,CAACnxF,OAAtB,CAA8ByB,MAA9B,CAAuC,qCAAvC,CACA,4BAA6B,GAAI4vF,CAAAA,WAAW,CAAIF,qBAAqB,CAACn4F,OAAzC,CAC7B;AACA,GAAIs4F,CAAAA,0CAA0C,CAAGn4F,mBAAmB,CAAC,EAAD,CAApE,CACA,GAAIo4F,CAAAA,iDAAiD,CAAG,aAAap4F,mBAAmB,CAAC0B,CAApB,CAAsBy2F,0CAAtB,CAArE,CAEA;AACA,QAASE,CAAAA,QAAT,CAAkBlqB,MAAlB,CAA0B3sC,MAA1B,CAAkC82D,GAAlC,CAAuC,CACrC,GAAIC,CAAAA,GAAG,CAAG,IAAK,EAAf,CACA,GAAID,GAAG,CAACE,QAAR,CAAkB,CAChBD,GAAG,CAAG,IAAMD,GAAG,CAACE,QAAJ,CAAa7/E,KAAb,EAAsB2/E,GAAG,CAACE,QAAhC,CAAN,CACD,CAFD,IAEO,IAAIF,GAAG,CAACG,YAAR,CAAsB,CAC3BF,GAAG,CAAG,GAAKD,GAAG,CAACG,YAAf,CACD,CAFM,IAEA,CACLF,GAAG,CAAG,gBAAkBpqB,MAAlB,CAA2B,GAA3B,CAAiCmqB,GAAG,CAAClB,MAA3C,CACD,CAED,GAAIsB,CAAAA,GAAG,CAAG,GAAI5rD,CAAAA,KAAJ,CAAUyrD,GAAV,CAAV,CACAG,GAAG,CAACtB,MAAJ,CAAakB,GAAG,CAAClB,MAAjB,CACAsB,GAAG,CAACC,MAAJ,CAAa,MAAb,CACAD,GAAG,CAACrB,GAAJ,CAAUlpB,MAAV,CACA,MAAOuqB,CAAAA,GAAP,CACD,CAED,QAASE,CAAAA,OAAT,CAAiBN,GAAjB,CAAsB,CACpB,GAAI1oE,CAAAA,IAAI,CAAG0oE,GAAG,CAACG,YAAJ,EAAoBH,GAAG,CAACE,QAAnC,CACA,GAAI,CAAC5oE,IAAL,CAAW,CACT,MAAOA,CAAAA,IAAP,CACD,CAED,GAAI,CACF,MAAOipE,CAAAA,IAAI,CAACC,KAAL,CAAWlpE,IAAX,CAAP,CACD,CAAC,MAAO/W,CAAP,CAAU,CACV,MAAO+W,CAAAA,IAAP,CACD,CACF,CAED,QAASmpE,CAAAA,MAAT,CAAgBv3D,MAAhB,CAAwB,CACtB,GAAI,MAAOw3D,CAAAA,cAAP,GAA0B,WAA9B,CAA2C,CACzC,OACD,CAED,GAAIV,CAAAA,GAAG,CAAG,GAAIU,CAAAA,cAAJ,EAAV,CACA,GAAI7qB,CAAAA,MAAM,CAAG3sC,MAAM,CAAC2sC,MAApB,CAEA,GAAImqB,GAAG,CAACS,MAAR,CAAgB,CACdT,GAAG,CAACS,MAAJ,CAAWE,UAAX,CAAwB,QAASC,CAAAA,QAAT,CAAkBrgF,CAAlB,CAAqB,CAC3C,GAAIA,CAAC,CAACxP,KAAF,CAAU,CAAd,CAAiB,CACfwP,CAAC,CAAC+L,OAAF,CAAY/L,CAAC,CAACs5B,MAAF,CAAWt5B,CAAC,CAACxP,KAAb,CAAqB,GAAjC,CACD,CACDm4B,MAAM,CAAC23D,UAAP,CAAkBtgF,CAAlB,EACD,CALD,CAMD,CAED,GAAIugF,CAAAA,QAAQ,CAAG,GAAIC,CAAAA,QAAJ,EAAf,CAEA,GAAI73D,MAAM,CAACt7B,IAAX,CAAiB,CACfvF,MAAM,CAAC4f,IAAP,CAAYihB,MAAM,CAACt7B,IAAnB,EAAyBsF,OAAzB,CAAiC,SAAUhK,GAAV,CAAe,CAC9C43F,QAAQ,CAACvlF,MAAT,CAAgBrS,GAAhB,CAAqBggC,MAAM,CAACt7B,IAAP,CAAY1E,GAAZ,CAArB,EACD,CAFD,EAGD,CAED43F,QAAQ,CAACvlF,MAAT,CAAgB2tB,MAAM,CAAC83D,QAAvB,CAAiC93D,MAAM,CAAC21D,IAAxC,CAA8C31D,MAAM,CAAC21D,IAAP,CAAY32F,IAA1D,EAEA83F,GAAG,CAACiB,OAAJ,CAAc,QAAS5gF,CAAAA,KAAT,CAAeE,CAAf,CAAkB,CAC9B2oB,MAAM,CAAC1b,OAAP,CAAejN,CAAf,EACD,CAFD,CAIAy/E,GAAG,CAACkB,MAAJ,CAAa,QAASA,CAAAA,MAAT,EAAkB,CAC7B,GAAIlB,GAAG,CAAClB,MAAJ,CAAa,GAAb,EAAoBkB,GAAG,CAAClB,MAAJ,EAAc,GAAtC,CAA2C,CACzC,MAAO51D,CAAAA,MAAM,CAAC1b,OAAP,CAAeuyE,QAAQ,CAAClqB,MAAD,CAAS3sC,MAAT,CAAiB82D,GAAjB,CAAvB,CAAP,CACD,CAED92D,MAAM,CAACi4D,SAAP,CAAiBb,OAAO,CAACN,GAAD,CAAxB,EACD,CAND,CAQAA,GAAG,CAACvmF,IAAJ,CAAS,MAAT,CAAiBo8D,MAAjB,CAAyB,IAAzB,EAEA,GAAI3sC,MAAM,CAACk4D,eAAP,EAA0B,mBAAqBpB,CAAAA,GAAnD,CAAwD,CACtDA,GAAG,CAACoB,eAAJ,CAAsB,IAAtB,CACD,CAED,GAAIC,CAAAA,OAAO,CAAGn4D,MAAM,CAACm4D,OAAP,EAAkB,EAAhC,CAEA,IAAK,GAAIxuF,CAAAA,IAAT,GAAiBwuF,CAAAA,OAAjB,CAA0B,CACxB,GAAIA,OAAO,CAAC33F,cAAR,CAAuBmJ,IAAvB,GAAgCwuF,OAAO,CAACxuF,IAAD,CAAP,GAAkB,IAAtD,CAA4D,CAC1DmtF,GAAG,CAACsB,gBAAJ,CAAqBzuF,IAArB,CAA2BwuF,OAAO,CAACxuF,IAAD,CAAlC,EACD,CACF,CACDmtF,GAAG,CAACuB,IAAJ,CAAST,QAAT,EACA,MAAOd,CAAAA,GAAP,CACD,CACD;AACA,GAAIwB,CAAAA,kDAAkD,CAAG,QAArDA,CAAAA,kDAAqD,EAAW,CAClE,GAAIx3F,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,mBADf,CAEEK,KAAK,CAAE,CACL,cAAeV,GAAG,CAACmkF,QADd,CAFT,CAKE7jF,EAAE,CAAE,CACFikF,IAAI,CAAE,cAASpjF,MAAT,CAAiB,CACrBA,MAAM,CAAC6P,cAAP,GACA,MAAOhR,CAAAA,GAAG,CAACy3F,MAAJ,CAAWt2F,MAAX,CAAP,CACD,CAJC,CAKFgjF,QAAQ,CAAE,kBAAShjF,MAAT,CAAiB,CACzBA,MAAM,CAAC6P,cAAP,GACA,MAAOhR,CAAAA,GAAG,CAAC03F,UAAJ,CAAev2F,MAAf,CAAP,CACD,CARC,CASFw2F,SAAS,CAAE,mBAASx2F,MAAT,CAAiB,CAC1BA,MAAM,CAAC6P,cAAP,GACAhR,GAAG,CAACmkF,QAAJ,CAAe,KAAf,CACD,CAZC,CALN,CAFO,CAsBP,CAACnkF,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAD,CAtBO,CAuBP,CAvBO,CAAT,CAyBD,CA7BD,CA8BA,GAAI4qF,CAAAA,2DAA2D,CAAG,EAAlE,CACAJ,kDAAkD,CAAC31F,aAAnD,CAAmE,IAAnE,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAIg2F,CAAAA,sCAAsC,CAAI,CACzE35F,IAAI,CAAE,cADmE,CAEzE6D,KAAK,CAAE,CACLlB,QAAQ,CAAEqB,OADL,CAFkE,CAKzEmZ,MAAM,CAAE,CACNy8E,QAAQ,CAAE,CACRjxF,OAAO,CAAE,EADD,CADJ,CALiE,CAUzEjD,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLugF,QAAQ,CAAE,KADL,CAAP,CAGD,CAdwE,CAgBzE9hF,OAAO,CAAE,CACPq1F,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAI,CAAC,KAAK72F,QAAV,CAAoB,CAClB,KAAKsjF,QAAL,CAAgB,IAAhB,CACD,CACF,CALM,CAMPsT,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgBlhF,CAAhB,CAAmB,CACzB,GAAI,KAAK1V,QAAL,EAAiB,CAAC,KAAKi3F,QAA3B,CAAqC,OACrC,GAAIC,CAAAA,MAAM,CAAG,KAAKD,QAAL,CAAcC,MAA3B,CACA,KAAK5T,QAAL,CAAgB,KAAhB,CACA,GAAI,CAAC4T,MAAL,CAAa,CACX,KAAKh1F,KAAL,CAAW,MAAX,CAAmBwT,CAAC,CAAC2wE,YAAF,CAAe0N,KAAlC,EACA,OACD,CACD,KAAK7xF,KAAL,CAAW,MAAX,CAAmB,GAAG0X,KAAH,CAAS3c,IAAT,CAAcyY,CAAC,CAAC2wE,YAAF,CAAe0N,KAA7B,EAAoCh1E,MAApC,CAA2C,SAAUi1E,IAAV,CAAgB,CAC5E,GAAIjuF,CAAAA,IAAI,CAAGiuF,IAAI,CAACjuF,IAAhB,CACI1I,IAAI,CAAG22F,IAAI,CAAC32F,IADhB,CAGA,GAAI85F,CAAAA,SAAS,CAAG95F,IAAI,CAAC2E,OAAL,CAAa,GAAb,EAAoB,CAAC,CAArB,CAAyB,IAAM3E,IAAI,CAACyK,KAAL,CAAW,GAAX,EAAgBm5B,GAAhB,EAA/B,CAAuD,EAAvE,CACA,GAAIm2D,CAAAA,QAAQ,CAAGrxF,IAAI,CAACuS,OAAL,CAAa,OAAb,CAAsB,EAAtB,CAAf,CACA,MAAO4+E,CAAAA,MAAM,CAACpvF,KAAP,CAAa,GAAb,EAAkBC,GAAlB,CAAsB,SAAUhC,IAAV,CAAgB,CAC3C,MAAOA,CAAAA,IAAI,CAACkC,IAAL,EAAP,CACD,CAFM,EAEJ8W,MAFI,CAEG,SAAUhZ,IAAV,CAAgB,CACxB,MAAOA,CAAAA,IAAP,CACD,CAJM,EAIJ6sB,IAJI,CAIC,SAAUykE,YAAV,CAAwB,CAC9B,GAAI,QAAQ36E,IAAR,CAAa26E,YAAb,CAAJ,CAAgC,CAC9B,MAAOF,CAAAA,SAAS,GAAKE,YAArB,CACD,CACD,GAAI,QAAQ36E,IAAR,CAAa26E,YAAb,CAAJ,CAAgC,CAC9B,MAAOD,CAAAA,QAAQ,GAAKC,YAAY,CAAC/+E,OAAb,CAAqB,OAArB,CAA8B,EAA9B,CAApB,CACD,CACD,GAAI,mBAAmBoE,IAAnB,CAAwB26E,YAAxB,CAAJ,CAA2C,CACzC,MAAOtxF,CAAAA,IAAI,GAAKsxF,YAAhB,CACD,CACD,MAAO,MAAP,CACD,CAfM,CAAP,CAgBD,CAtBkB,CAAnB,EAuBD,CArCM,CAhBgE,CAA9C,CAwD7B;AACC,4BAA6B,GAAIC,CAAAA,0CAA0C,CAAIN,sCAAlD,CAC9B;AAMA,yBAEA,GAAIO,CAAAA,wBAAwB,CAAGr0F,kBAAkB,CAC/Co0F,0CAD+C,CAE/CX,kDAF+C,CAG/CI,2DAH+C,CAI/C,KAJ+C,CAK/C,IAL+C,CAM/C,IAN+C,CAO/C,IAP+C,CAAjD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIS,CAAAA,kBAAJ,CAAyB,CACtCD,wBAAwB,CAAC7zF,OAAzB,CAAiCyB,MAAjC,CAA0C,wCAA1C,CACA,4BAA6B,GAAIsyF,CAAAA,cAAc,CAAIF,wBAAwB,CAAC76F,OAA/C,CAC7B;AAMA,4BAA6B,GAAIg7F,CAAAA,8BAA8B,CAAI,CACjEl9E,MAAM,CAAE,CAAC,UAAD,CADyD,CAEjE3S,UAAU,CAAE,CACV8vF,aAAa,CAAEF,cADL,CAFqD,CAKjEv2F,KAAK,CAAE,CACL6E,IAAI,CAAEU,MADD,CAELukE,MAAM,CAAE,CACNjlE,IAAI,CAAEU,MADA,CAEN4d,QAAQ,CAAE,IAFJ,CAFH,CAMLhnB,IAAI,CAAE,CACJ0I,IAAI,CAAEU,MADF,CAEJT,OAAO,CAAE,MAFL,CAND,CAULjD,IAAI,CAAEvF,MAVD,CAWLg5F,OAAO,CAAEh5F,MAXJ,CAYL+4F,eAAe,CAAEl1F,OAZZ,CAaL82B,QAAQ,CAAE92B,OAbL,CAcL61F,MAAM,CAAEzwF,MAdH,CAeLmxF,OAAO,CAAEnqF,QAfJ,CAgBLuoF,UAAU,CAAEvoF,QAhBP,CAiBL6oF,SAAS,CAAE7oF,QAjBN,CAkBLkV,OAAO,CAAElV,QAlBJ,CAmBLoqF,YAAY,CAAEpqF,QAnBT,CAoBLqqF,IAAI,CAAEz2F,OApBD,CAqBL02F,SAAS,CAAE,CACThyF,IAAI,CAAE0H,QADG,CAETzH,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAAE,CAFtB,CArBN,CAyBLyxF,QAAQ,CAAE,CACRjyF,IAAI,CAAE0H,QADE,CAERzH,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAAE,CAFvB,CAzBL,CA6BL0xF,QAAQ,CAAE3xF,KA7BL,CA8BL4xF,UAAU,CAAE72F,OA9BP,CA+BLyyF,QAAQ,CAAErtF,MA/BL,CAgCL0xF,WAAW,CAAE,CACXpyF,IAAI,CAAE0H,QADK,CAEXzH,OAAO,CAAE4vF,MAFE,CAhCR,CAoCL51F,QAAQ,CAAEqB,OApCL,CAqCL+2F,KAAK,CAAEj3F,MArCF,CAsCLk3F,QAAQ,CAAE5qF,QAtCL,CAL0D,CA8CjE1K,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLu1F,SAAS,CAAE,KADN,CAELC,IAAI,CAAE,EAFD,CAAP,CAID,CAnDgE,CAsDjE/2F,OAAO,CAAE,CACPg3F,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBxjB,GAAjB,CAAsB,CAC7B,MAAOA,CAAAA,GAAG,CAAChzE,OAAJ,CAAY,OAAZ,IAAyB,CAAC,CAAjC,CACD,CAHM,CAIPqH,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsByP,EAAtB,CAA0B,CACtC,GAAIi7E,CAAAA,KAAK,CAAGj7E,EAAE,CAACpX,MAAH,CAAUqyF,KAAtB,CAEA,GAAI,CAACA,KAAL,CAAY,OACZ,KAAK0E,WAAL,CAAiB1E,KAAjB,EACD,CATM,CAUP0E,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqB1E,KAArB,CAA4B,CACvC,GAAI5qF,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI,KAAKivF,KAAL,EAAc,KAAKH,QAAL,CAAchjF,MAAd,CAAuB8+E,KAAK,CAAC9+E,MAA7B,CAAsC,KAAKmjF,KAA7D,CAAoE,CAClE,KAAKC,QAAL,EAAiB,KAAKA,QAAL,CAActE,KAAd,CAAqB,KAAKkE,QAA1B,CAAjB,CACA,OACD,CAED,GAAIS,CAAAA,SAAS,CAAGpyF,KAAK,CAAC1H,SAAN,CAAgBgb,KAAhB,CAAsB3c,IAAtB,CAA2B82F,KAA3B,CAAhB,CACA,GAAI,CAAC,KAAK57D,QAAV,CAAoB,CAClBugE,SAAS,CAAGA,SAAS,CAAC9+E,KAAV,CAAgB,CAAhB,CAAmB,CAAnB,CAAZ,CACD,CAED,GAAI8+E,SAAS,CAACzjF,MAAV,GAAqB,CAAzB,CAA4B,CAC1B,OACD,CAEDyjF,SAAS,CAACrwF,OAAV,CAAkB,SAAUswF,OAAV,CAAmB,CACnCxvF,KAAK,CAACyuF,OAAN,CAAce,OAAd,EACA,GAAIxvF,KAAK,CAAC+uF,UAAV,CAAsB/uF,KAAK,CAACysF,MAAN,CAAa+C,OAAb,EACvB,CAHD,EAID,CA/BM,CAgCP/C,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgB+C,OAAhB,CAAyB,CAC/B,GAAI/tF,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAKmD,KAAL,CAAW0B,KAAX,CAAiB1R,KAAjB,CAAyB,IAAzB,CAEA,GAAI,CAAC,KAAK85F,YAAV,CAAwB,CACtB,MAAO,MAAKe,IAAL,CAAUD,OAAV,CAAP,CACD,CAED,GAAI1zC,CAAAA,MAAM,CAAG,KAAK4yC,YAAL,CAAkBc,OAAlB,CAAb,CACA,GAAI1zC,MAAM,EAAIA,MAAM,CAAC60B,IAArB,CAA2B,CACzB70B,MAAM,CAAC60B,IAAP,CAAY,SAAU+e,aAAV,CAAyB,CACnC,GAAIC,CAAAA,QAAQ,CAAGt7F,MAAM,CAACoB,SAAP,CAAiBkkB,QAAjB,CAA0B7lB,IAA1B,CAA+B47F,aAA/B,CAAf,CAEA,GAAIC,QAAQ,GAAK,eAAb,EAAgCA,QAAQ,GAAK,eAAjD,CAAkE,CAChE,GAAIA,QAAQ,GAAK,eAAjB,CAAkC,CAChCD,aAAa,CAAG,GAAIE,CAAAA,IAAJ,CAAS,CAACF,aAAD,CAAT,CAA0BF,OAAO,CAACt7F,IAAlC,CAAwC,CACtD0I,IAAI,CAAE4yF,OAAO,CAAC5yF,IADwC,CAAxC,CAAhB,CAGD,CACD,IAAK,GAAIjH,CAAAA,CAAT,GAAc65F,CAAAA,OAAd,CAAuB,CACrB,GAAIA,OAAO,CAAC95F,cAAR,CAAuBC,CAAvB,CAAJ,CAA+B,CAC7B+5F,aAAa,CAAC/5F,CAAD,CAAb,CAAmB65F,OAAO,CAAC75F,CAAD,CAA1B,CACD,CACF,CACD8L,MAAM,CAACguF,IAAP,CAAYC,aAAZ,EACD,CAZD,IAYO,CACLjuF,MAAM,CAACguF,IAAP,CAAYD,OAAZ,EACD,CACF,CAlBD,CAkBG,UAAY,CACb/tF,MAAM,CAACotF,QAAP,CAAgB,IAAhB,CAAsBW,OAAtB,EACD,CApBD,EAqBD,CAtBD,IAsBO,IAAI1zC,MAAM,GAAK,KAAf,CAAsB,CAC3B,KAAK2zC,IAAL,CAAUD,OAAV,EACD,CAFM,IAEA,CACL,KAAKX,QAAL,CAAc,IAAd,CAAoBW,OAApB,EACD,CACF,CArEM,CAsEPK,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAehF,IAAf,CAAqB,CAC1B,GAAIuE,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CAEA,GAAIvE,IAAJ,CAAU,CACR,GAAItpB,CAAAA,GAAG,CAAGspB,IAAV,CACA,GAAIA,IAAI,CAACtpB,GAAT,CAAcA,GAAG,CAAGspB,IAAI,CAACtpB,GAAX,CACd,GAAI6tB,IAAI,CAAC7tB,GAAD,CAAR,CAAe,CACb6tB,IAAI,CAAC7tB,GAAD,CAAJ,CAAUsuB,KAAV,GACD,CACF,CAND,IAMO,CACLx7F,MAAM,CAAC4f,IAAP,CAAYm7E,IAAZ,EAAkBlwF,OAAlB,CAA0B,SAAUqiE,GAAV,CAAe,CACvC,GAAI6tB,IAAI,CAAC7tB,GAAD,CAAR,CAAe6tB,IAAI,CAAC7tB,GAAD,CAAJ,CAAUsuB,KAAV,GACf,MAAOT,CAAAA,IAAI,CAAC7tB,GAAD,CAAX,CACD,CAHD,EAID,CACF,CArFM,CAsFPkuB,IAAI,CAAE,QAASA,CAAAA,IAAT,CAAcD,OAAd,CAAuB,CAC3B,GAAIhjF,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI+0D,CAAAA,GAAG,CAAGiuB,OAAO,CAACjuB,GAAlB,CAEA,GAAIhnE,CAAAA,OAAO,CAAG,CACZ8yF,OAAO,CAAE,KAAKA,OADF,CAEZD,eAAe,CAAE,KAAKA,eAFV,CAGZvC,IAAI,CAAE2E,OAHM,CAIZ51F,IAAI,CAAE,KAAKA,IAJC,CAKZozF,QAAQ,CAAE,KAAK94F,IALH,CAMZ2tE,MAAM,CAAE,KAAKA,MAND,CAOZgrB,UAAU,CAAE,QAASA,CAAAA,UAAT,CAAoBtgF,CAApB,CAAuB,CACjCC,MAAM,CAACqgF,UAAP,CAAkBtgF,CAAlB,CAAqBijF,OAArB,EACD,CATW,CAUZrC,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmBjoD,GAAnB,CAAwB,CACjC14B,MAAM,CAAC2gF,SAAP,CAAiBjoD,GAAjB,CAAsBsqD,OAAtB,EACA,MAAOhjF,CAAAA,MAAM,CAAC4iF,IAAP,CAAY7tB,GAAZ,CAAP,CACD,CAbW,CAcZ/nD,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiB4yE,GAAjB,CAAsB,CAC7B5/E,MAAM,CAACgN,OAAP,CAAe4yE,GAAf,CAAoBoD,OAApB,EACA,MAAOhjF,CAAAA,MAAM,CAAC4iF,IAAP,CAAY7tB,GAAZ,CAAP,CACD,CAjBW,CAAd,CAmBA,GAAIuuB,CAAAA,GAAG,CAAG,KAAKd,WAAL,CAAiBz0F,OAAjB,CAAV,CACA,KAAK60F,IAAL,CAAU7tB,GAAV,EAAiBuuB,GAAjB,CACA,GAAIA,GAAG,EAAIA,GAAG,CAACnf,IAAf,CAAqB,CACnBmf,GAAG,CAACnf,IAAJ,CAASp2E,OAAO,CAAC4yF,SAAjB,CAA4B5yF,OAAO,CAACif,OAApC,EACD,CACF,CAnHM,CAoHP/J,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,GAAI,CAAC,KAAK5Y,QAAV,CAAoB,CAClB,KAAK+N,KAAL,CAAW0B,KAAX,CAAiB1R,KAAjB,CAAyB,IAAzB,CACA,KAAKgQ,KAAL,CAAW0B,KAAX,CAAiB/P,KAAjB,GACD,CACF,CAzHM,CA0HPuyB,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBvc,CAAvB,CAA0B,CACvC,GAAIA,CAAC,CAAChU,MAAF,GAAagU,CAAC,CAAChK,aAAnB,CAAkC,OAClC,GAAIgK,CAAC,CAAC1L,OAAF,GAAc,EAAd,EAAoB0L,CAAC,CAAC1L,OAAF,GAAc,EAAtC,CAA0C,CACxC,KAAK4O,WAAL,GACD,CACF,CA/HM,CAtDwD,CAwLjExV,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,GAAI+T,CAAAA,WAAW,CAAG,KAAKA,WAAvB,CACIk/E,IAAI,CAAG,KAAKA,IADhB,CAEIz6F,IAAI,CAAG,KAAKA,IAFhB,CAGIgM,YAAY,CAAG,KAAKA,YAHxB,CAII8uB,QAAQ,CAAG,KAAKA,QAJpB,CAKI++D,MAAM,CAAG,KAAKA,MALlB,CAMIpD,QAAQ,CAAG,KAAKA,QANpB,CAOI2E,WAAW,CAAG,KAAKA,WAPvB,CAQIz4F,QAAQ,CAAG,KAAKA,QARpB,CASIiyB,aAAa,CAAG,KAAKA,aATzB,CAWA,GAAIlvB,CAAAA,IAAI,CAAG,CACTlD,KAAK,CAAE,CACL,YAAa,IADR,CADE,CAITJ,EAAE,CAAE,CACFC,KAAK,CAAEkZ,WADL,CAEF3I,OAAO,CAAEgiB,aAFP,CAJK,CAAX,CASAlvB,IAAI,CAAClD,KAAL,CAAW,cAAgBi0F,QAA3B,EAAuC,IAAvC,CACA,MAAOjvF,CAAAA,CAAC,CACN,KADM,CAENowF,iDAAiD,GAAG,CAAClyF,IAAD,CAAO,CACzDwE,KAAK,CAAE,CAAEmQ,QAAQ,CAAE,GAAZ,CADkD,CAAP,CAAH,CAF3C,CAKN,CAACogF,IAAI,CAAGjzF,CAAC,CACP,gBADO,CAEP,CACE0C,KAAK,CAAE,CAAEvH,QAAQ,CAAEA,QAAZ,CADT,CAEEP,EAAE,CAAE,CACF,OAAQg5F,WADN,CAFN,CAFO,CAQP,CAAC,KAAK7wF,MAAL,CAAY5B,OAAb,CARO,CAAJ,CASD,KAAK4B,MAAL,CAAY5B,OAThB,CASyBnB,CAAC,CAAC,OAAD,CAAU,CAAE,QAAS,kBAAX,CAA+B0C,KAAK,CAAE,CAAExB,IAAI,CAAE,MAAR,CAAgB1I,IAAI,CAAEA,IAAtB,CAA4B86B,QAAQ,CAAEA,QAAtC,CAAgD++D,MAAM,CAAEA,MAAxD,CAAtC,CAClCtrF,GAAG,CAAE,OAD6B,CACpBnM,EAAE,CAAE,CAChB,SAAU4J,YADM,CADgB,CAAV,CAT1B,CALM,CAAR,CAoBD,CAlOgE,CAAtC,CAoO7B;AACC,4BAA6B,GAAI6vF,CAAAA,kCAAkC,CAAIxB,8BAA1C,CAC9B;AACA,GAAIyB,CAAAA,aAAJ,CAAmBC,sBAAnB,CAKA,yBAEA,GAAIC,CAAAA,gBAAgB,CAAGn2F,kBAAkB,CACvCg2F,kCADuC,CAEvCC,aAFuC,CAGvCC,sBAHuC,CAIvC,KAJuC,CAKvC,IALuC,CAMvC,IANuC,CAOvC,IAPuC,CAAzC,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIE,CAAAA,UAAJ,CAAiB,CAC9BD,gBAAgB,CAAC31F,OAAjB,CAAyByB,MAAzB,CAAkC,gCAAlC,CACA,4BAA6B,GAAIo0F,CAAAA,UAAU,CAAIF,gBAAgB,CAAC38F,OAAnC,CAC7B;AAOA,QAAS88F,CAAAA,+BAAT,EAA2C,CAAE,CAE7C,4BAA6B,GAAIC,CAAAA,2BAA2B,CAAI,CAC9Dp8F,IAAI,CAAE,UADwD,CAG9DuL,MAAM,CAAE,CAACgE,iBAAiB,CAAC/D,CAAnB,CAHsD,CAK9DhB,UAAU,CAAE,CACV8sF,UAAU,CAAEF,gBAAgB,CAAC5rF,CADnB,CAEV6wF,UAAU,CAAE3E,WAFF,CAGV4E,MAAM,CAAEJ,UAHE,CALkD,CAW9DriF,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,MAAO,CACL+/E,QAAQ,CAAE,IADL,CAAP,CAGD,CAf6D,CAkB9Dz8E,MAAM,CAAE,CACN2Q,MAAM,CAAE,CACNnlB,OAAO,CAAE,EADH,CADF,CAlBsD,CAwB9D9E,KAAK,CAAE,CACL8pE,MAAM,CAAE,CACNjlE,IAAI,CAAEU,MADA,CAEN4d,QAAQ,CAAE,IAFJ,CADH,CAKLmyE,OAAO,CAAE,CACPzwF,IAAI,CAAEvI,MADC,CAEPwI,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,EAAP,CACD,CAJM,CALJ,CAWLxD,IAAI,CAAEvF,MAXD,CAYL26B,QAAQ,CAAE92B,OAZL,CAaLhE,IAAI,CAAE,CACJ0I,IAAI,CAAEU,MADF,CAEJT,OAAO,CAAE,MAFL,CAbD,CAiBL8xF,IAAI,CAAEz2F,OAjBD,CAkBLu4F,OAAO,CAAEv4F,OAlBJ,CAmBLk1F,eAAe,CAAEl1F,OAnBZ,CAoBLw4F,YAAY,CAAE,CACZ9zF,IAAI,CAAE1E,OADM,CAEZ2E,OAAO,CAAE,IAFG,CApBT,CAwBLkxF,MAAM,CAAEzwF,MAxBH,CAyBLV,IAAI,CAAE,CACJA,IAAI,CAAEU,MADF,CAEJT,OAAO,CAAE,QAFL,CAzBD,CA6BL6xF,YAAY,CAAEpqF,QA7BT,CA8BLqsF,YAAY,CAAErsF,QA9BT,CA+BLuqF,QAAQ,CAAE,CACRjyF,IAAI,CAAE0H,QADE,CAERzH,OAAO,CAAEwzF,+BAFD,CA/BL,CAmCLO,QAAQ,CAAE,CACRh0F,IAAI,CAAE0H,QADE,CAERzH,OAAO,CAAEwzF,+BAFD,CAnCL,CAuCLzB,SAAS,CAAE,CACThyF,IAAI,CAAE0H,QADG,CAvCN,CA0CL6oF,SAAS,CAAE,CACTvwF,IAAI,CAAE0H,QADG,CAETzH,OAAO,CAAEwzF,+BAFA,CA1CN,CA8CLxD,UAAU,CAAE,CACVjwF,IAAI,CAAE0H,QADI,CAEVzH,OAAO,CAAEwzF,+BAFC,CA9CP,CAkDL72E,OAAO,CAAE,CACP5c,IAAI,CAAE0H,QADC,CAEPzH,OAAO,CAAEwzF,+BAFF,CAlDJ,CAsDLvB,QAAQ,CAAE,CACRlyF,IAAI,CAAEO,KADE,CAERN,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,EAAP,CACD,CAJO,CAtDL,CA4DL2xF,UAAU,CAAE,CACVnyF,IAAI,CAAE1E,OADI,CAEV2E,OAAO,CAAE,IAFC,CA5DP,CAgEL8tF,QAAQ,CAAE,CACR/tF,IAAI,CAAEU,MADE,CAERT,OAAO,CAAE,MAAO;AAFR,CAhEL,CAoELmyF,WAAW,CAAE1qF,QApER,CAqELzN,QAAQ,CAAEqB,OArEL,CAsEL+2F,KAAK,CAAEj3F,MAtEF,CAuELk3F,QAAQ,CAAE,CACRtyF,IAAI,CAAE0H,QADE,CAERzH,OAAO,CAAEwzF,+BAFD,CAvEL,CAxBuD,CAqG9Dz2F,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL01F,WAAW,CAAE,EADR,CAELuB,QAAQ,CAAE,KAFL,CAGLC,OAAO,CAAE,KAHJ,CAILC,SAAS,CAAE,CAJN,CAAP,CAMD,CA5G6D,CA+G9D93F,QAAQ,CAAE,CACR+3F,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,MAAO,MAAKn6F,QAAL,EAAiB,CAAC,KAAKmrB,MAAL,EAAe,EAAhB,EAAoBnrB,QAA5C,CACD,CAHO,CA/GoD,CAqH9DsB,KAAK,CAAE,CACLwyF,QAAQ,CAAE,QAASA,CAAAA,QAAT,CAAkB/tF,IAAlB,CAAwB,CAChC,GAAIA,IAAI,GAAK,cAAT,EAA2BA,IAAI,GAAK,SAAxC,CAAmD,CACjD,KAAK0yF,WAAL,CAAmB,KAAKA,WAAL,CAAiB1wF,GAAjB,CAAqB,SAAUisF,IAAV,CAAgB,CACtD,GAAI,CAACA,IAAI,CAACE,GAAN,EAAaF,IAAI,CAACoG,GAAtB,CAA2B,CACzB,GAAI,CACFpG,IAAI,CAACE,GAAL,CAAWmG,GAAG,CAACC,eAAJ,CAAoBtG,IAAI,CAACoG,GAAzB,CAAX,CACD,CAAC,MAAO7E,GAAP,CAAY,CACZhgF,OAAO,CAACC,KAAR,CAAc,yBAAd,CAAyC+/E,GAAzC,EACD,CACF,CACD,MAAOvB,CAAAA,IAAP,CACD,CATkB,CAAnB,CAUD,CACF,CAdI,CAgBLiE,QAAQ,CAAE,CACRnvF,SAAS,CAAE,IADH,CAERC,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiBkvF,QAAjB,CAA2B,CAClC,GAAI9uF,CAAAA,KAAK,CAAG,IAAZ,CAEA,KAAKsvF,WAAL,CAAmBR,QAAQ,CAAClwF,GAAT,CAAa,SAAUC,IAAV,CAAgB,CAC9CA,IAAI,CAAC0iE,GAAL,CAAW1iE,IAAI,CAAC0iE,GAAL,EAAYj8C,IAAI,CAACC,GAAL,GAAavlB,KAAK,CAAC+wF,SAAN,EAApC,CACAlyF,IAAI,CAACisF,MAAL,CAAcjsF,IAAI,CAACisF,MAAL,EAAe,SAA7B,CACA,MAAOjsF,CAAAA,IAAP,CACD,CAJkB,CAAnB,CAKD,CAVO,CAhBL,CArHuD,CAmJ9DxG,OAAO,CAAE,CACP+4F,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqB5B,OAArB,CAA8B,CACzCA,OAAO,CAACjuB,GAAR,CAAcj8C,IAAI,CAACC,GAAL,GAAa,KAAKwrE,SAAL,EAA3B,CACA,GAAIlG,CAAAA,IAAI,CAAG,CACTC,MAAM,CAAE,OADC,CAET52F,IAAI,CAAEs7F,OAAO,CAACt7F,IAFL,CAGT+L,IAAI,CAAEuvF,OAAO,CAACvvF,IAHL,CAITgrF,UAAU,CAAE,CAJH,CAKT1pB,GAAG,CAAEiuB,OAAO,CAACjuB,GALJ,CAMT0vB,GAAG,CAAEzB,OANI,CAAX,CASA,GAAI,KAAK7E,QAAL,GAAkB,cAAlB,EAAoC,KAAKA,QAAL,GAAkB,SAA1D,CAAqE,CACnE,GAAI,CACFE,IAAI,CAACE,GAAL,CAAWmG,GAAG,CAACC,eAAJ,CAAoB3B,OAApB,CAAX,CACD,CAAC,MAAOpD,GAAP,CAAY,CACZhgF,OAAO,CAACC,KAAR,CAAc,yBAAd,CAAyC+/E,GAAzC,EACA,OACD,CACF,CAED,KAAKkD,WAAL,CAAiBj2F,IAAjB,CAAsBwxF,IAAtB,EACA,KAAK+F,QAAL,CAAc/F,IAAd,CAAoB,KAAKyE,WAAzB,EACD,CAvBM,CAwBP+B,cAAc,CAAE,QAASA,CAAAA,cAAT,CAAwB1hF,EAAxB,CAA4B6/E,OAA5B,CAAqC,CACnD,GAAI3E,CAAAA,IAAI,CAAG,KAAKyG,OAAL,CAAa9B,OAAb,CAAX,CACA,KAAK3C,UAAL,CAAgBl9E,EAAhB,CAAoBk7E,IAApB,CAA0B,KAAKyE,WAA/B,EACAzE,IAAI,CAACC,MAAL,CAAc,WAAd,CACAD,IAAI,CAACI,UAAL,CAAkBt7E,EAAE,CAAC2I,OAAH,EAAc,CAAhC,CACD,CA7BM,CA8BPi5E,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBrsD,GAAvB,CAA4BsqD,OAA5B,CAAqC,CAClD,GAAI3E,CAAAA,IAAI,CAAG,KAAKyG,OAAL,CAAa9B,OAAb,CAAX,CAEA,GAAI3E,IAAJ,CAAU,CACRA,IAAI,CAACC,MAAL,CAAc,SAAd,CACAD,IAAI,CAACqB,QAAL,CAAgBhnD,GAAhB,CAEA,KAAKioD,SAAL,CAAejoD,GAAf,CAAoB2lD,IAApB,CAA0B,KAAKyE,WAA/B,EACA,KAAKsB,QAAL,CAAc/F,IAAd,CAAoB,KAAKyE,WAAzB,EACD,CACF,CAxCM,CAyCPkC,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqBpF,GAArB,CAA0BoD,OAA1B,CAAmC,CAC9C,GAAI3E,CAAAA,IAAI,CAAG,KAAKyG,OAAL,CAAa9B,OAAb,CAAX,CACA,GAAIV,CAAAA,QAAQ,CAAG,KAAKQ,WAApB,CAEAzE,IAAI,CAACC,MAAL,CAAc,MAAd,CAEAgE,QAAQ,CAAC72E,MAAT,CAAgB62E,QAAQ,CAACj2F,OAAT,CAAiBgyF,IAAjB,CAAhB,CAAwC,CAAxC,EAEA,KAAKrxE,OAAL,CAAa4yE,GAAb,CAAkBvB,IAAlB,CAAwB,KAAKyE,WAA7B,EACA,KAAKsB,QAAL,CAAc/F,IAAd,CAAoB,KAAKyE,WAAzB,EACD,CAnDM,CAoDPmC,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsB5G,IAAtB,CAA4BoG,GAA5B,CAAiC,CAC7C,GAAIxvF,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAIwvF,GAAJ,CAAS,CACPpG,IAAI,CAAG,KAAKyG,OAAL,CAAaL,GAAb,CAAP,CACD,CACD,GAAIS,CAAAA,QAAQ,CAAG,QAASA,CAAAA,QAAT,EAAoB,CACjCjwF,MAAM,CAACouF,KAAP,CAAahF,IAAb,EACA,GAAIiE,CAAAA,QAAQ,CAAGrtF,MAAM,CAAC6tF,WAAtB,CACAR,QAAQ,CAAC72E,MAAT,CAAgB62E,QAAQ,CAACj2F,OAAT,CAAiBgyF,IAAjB,CAAhB,CAAwC,CAAxC,EACAppF,MAAM,CAACotF,QAAP,CAAgBhE,IAAhB,CAAsBiE,QAAtB,EACD,CALD,CAOA,GAAI,CAAC,KAAK6B,YAAV,CAAwB,CACtBe,QAAQ,GACT,CAFD,IAEO,IAAI,MAAO,MAAKf,YAAZ,GAA6B,UAAjC,CAA6C,CAClD,GAAI70C,CAAAA,MAAM,CAAG,KAAK60C,YAAL,CAAkB9F,IAAlB,CAAwB,KAAKyE,WAA7B,CAAb,CACA,GAAIxzC,MAAM,EAAIA,MAAM,CAAC60B,IAArB,CAA2B,CACzB70B,MAAM,CAAC60B,IAAP,CAAY,UAAY,CACtB+gB,QAAQ,GACT,CAFD,CAEGrB,+BAFH,EAGD,CAJD,IAIO,IAAIv0C,MAAM,GAAK,KAAf,CAAsB,CAC3B41C,QAAQ,GACT,CACF,CACF,CA7EM,CA8EPJ,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiB9B,OAAjB,CAA0B,CACjC,GAAIV,CAAAA,QAAQ,CAAG,KAAKQ,WAApB,CACA,GAAI/2F,CAAAA,MAAM,CAAG,IAAK,EAAlB,CACAu2F,QAAQ,CAAC35D,KAAT,CAAe,SAAUt2B,IAAV,CAAgB,CAC7BtG,MAAM,CAAGi3F,OAAO,CAACjuB,GAAR,GAAgB1iE,IAAI,CAAC0iE,GAArB,CAA2B1iE,IAA3B,CAAkC,IAA3C,CACA,MAAO,CAACtG,MAAR,CACD,CAHD,EAIA,MAAOA,CAAAA,MAAP,CACD,CAtFM,CAuFPs3F,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAehF,IAAf,CAAqB,CAC1B,KAAKjmF,KAAL,CAAW,cAAX,EAA2BirF,KAA3B,CAAiChF,IAAjC,EACD,CAzFM,CA0FP8G,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,KAAKrC,WAAL,CAAmB,EAAnB,CACD,CA5FM,CA6FPsC,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,GAAIplF,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAK8iF,WAAL,CAAiB15E,MAAjB,CAAwB,SAAUi1E,IAAV,CAAgB,CACtC,MAAOA,CAAAA,IAAI,CAACC,MAAL,GAAgB,OAAvB,CACD,CAFD,EAEG5rF,OAFH,CAEW,SAAU2rF,IAAV,CAAgB,CACzBr+E,MAAM,CAAC5H,KAAP,CAAa,cAAb,EAA6B6nF,MAA7B,CAAoC5B,IAAI,CAACoG,GAAzC,EACD,CAJD,EAKD,CArGM,CAsGP7rF,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,EAA8B,CAChD,MAAO,CACLrN,KAAK,CAAE,CACL,oBAAqB,4CADhB,CAEL,mBAAoB,gDAFf,CAGL,iBAAkB,8KAHb,CADF,CAAP,CAOD,CA9GM,CAnJqD,CAoQ9DkV,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,KAAKqiF,WAAL,CAAiBpwF,OAAjB,CAAyB,SAAU2rF,IAAV,CAAgB,CACvC,GAAIA,IAAI,CAACE,GAAL,EAAYF,IAAI,CAACE,GAAL,CAASlyF,OAAT,CAAiB,OAAjB,IAA8B,CAA9C,CAAiD,CAC/Cq4F,GAAG,CAACW,eAAJ,CAAoBhH,IAAI,CAACE,GAAzB,EACD,CACF,CAJD,EAKD,CA1Q6D,CA2Q9D9wF,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,GAAIsR,CAAAA,MAAM,CAAG,IAAb,CAEA,GAAI8kF,CAAAA,UAAU,CAAG,IAAK,EAAtB,CAEA,GAAI,KAAKpB,YAAT,CAAuB,CACrBoB,UAAU,CAAGp2F,CAAC,CACZkwF,WADY,CAEZ,CACExtF,KAAK,CAAE,CACLvH,QAAQ,CAAE,KAAKm6F,cADV,CAELrG,QAAQ,CAAE,KAAKA,QAFV,CAGLC,KAAK,CAAE,KAAK0E,WAHP,CAKLnE,aAAa,CAAE,KAAKyD,SALf,CADT,CAOEt4F,EAAE,CAAE,CACF,SAAU,KAAKm7F,YADb,CAPN,CAFY,CAaZ,CAAC,SAAU15F,KAAV,CAAiB,CAChB,GAAIiV,MAAM,CAAC2zC,YAAP,CAAoBkqC,IAAxB,CAA8B,CAC5B,MAAO79E,CAAAA,MAAM,CAAC2zC,YAAP,CAAoBkqC,IAApB,CAAyB,CAC9BA,IAAI,CAAE9yF,KAAK,CAAC8yF,IADkB,CAAzB,CAAP,CAGD,CACF,CAND,CAbY,CAAd,CAqBD,CAED,GAAIkH,CAAAA,UAAU,CAAG,CACfh6F,KAAK,CAAE,CACL6E,IAAI,CAAE,KAAKA,IADN,CAEL+xF,IAAI,CAAE,KAAKA,IAFN,CAGL9sB,MAAM,CAAE,KAAKA,MAHR,CAIL7yC,QAAQ,CAAE,KAAKA,QAJV,CAKL,gBAAiB,KAAK0/D,YALjB,CAML,mBAAoB,KAAKtB,eANpB,CAOLC,OAAO,CAAE,KAAKA,OAPT,CAQLn5F,IAAI,CAAE,KAAKA,IARN,CASL0F,IAAI,CAAE,KAAKA,IATN,CAULm0F,MAAM,CAAE,KAAKA,MAVR,CAWLe,QAAQ,CAAE,KAAKQ,WAXV,CAYLP,UAAU,CAAE,KAAKA,UAZZ,CAaLpE,QAAQ,CAAE,KAAKA,QAbV,CAcL9zF,QAAQ,CAAE,KAAKm6F,cAdV,CAeL/B,KAAK,CAAE,KAAKA,KAfP,CAgBL,YAAa,KAAKC,QAhBb,CAiBL,WAAY,KAAKkC,WAjBZ,CAkBL,cAAe,KAAKC,cAlBf,CAmBL,aAAc,KAAKE,aAnBd,CAoBL,WAAY,KAAKC,WApBZ,CAqBL,aAAc,KAAK5C,SArBd,CAsBL,YAAa,KAAK6C,YAtBb,CAuBL,eAAgB,KAAKzC,WAvBhB,CADQ,CA0BfvsF,GAAG,CAAE,cA1BU,CAAjB,CA6BA,GAAIwL,CAAAA,OAAO,CAAG,KAAKxP,MAAL,CAAYwP,OAAZ,EAAuB,KAAKxP,MAAL,CAAY5B,OAAjD,CACA,GAAIm1F,CAAAA,eAAe,CAAGt2F,CAAC,CACrB,QADqB,CAErBq2F,UAFqB,CAGrB,CAAC9jF,OAAD,CAHqB,CAAvB,CAMA,MAAOvS,CAAAA,CAAC,CAAC,KAAD,CAAQ,CAAC,KAAKivF,QAAL,GAAkB,cAAlB,CAAmCmH,UAAnC,CAAgD,EAAjD,CAAqD,KAAKrzF,MAAL,CAAYwP,OAAZ,CAAsB,CAAC+jF,eAAD,CAAkB,KAAKvzF,MAAL,CAAY5B,OAA9B,CAAtB,CAA+Dm1F,eAApH,CAAqI,KAAKvzF,MAAL,CAAYwzF,GAAjJ,CAAsJ,KAAKtH,QAAL,GAAkB,cAAlB,CAAmCmH,UAAnC,CAAgD,EAAtM,CAAR,CAAR,CACD,CA7U6D,CAAnC,CA+U7B;AACC,4BAA6B,GAAII,CAAAA,kCAAkC,CAAI5B,2BAA1C,CAC9B;AACA,GAAI6B,CAAAA,UAAJ,CAAgBC,mBAAhB,CAKA,yBAEA,GAAIC,CAAAA,oBAAoB,CAAGt4F,kBAAkB,CAC3Cm4F,kCAD2C,CAE3CC,UAF2C,CAG3CC,mBAH2C,CAI3C,KAJ2C,CAK3C,IAL2C,CAM3C,IAN2C,CAO3C,IAP2C,CAA7C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIE,CAAAA,OAAJ,CAAc,CAC3BD,oBAAoB,CAAC93F,OAArB,CAA6ByB,MAA7B,CAAsC,+BAAtC,CACA,4BAA6B,GAAIu2F,CAAAA,UAAU,CAAIF,oBAAoB,CAAC9+F,OAAvC,CAC7B;AAGA,0BACAg/F,UAAU,CAAC1wF,OAAX,CAAqB,SAAUC,GAAV,CAAe,CAClCA,GAAG,CAAChG,SAAJ,CAAcy2F,UAAU,CAACr+F,IAAzB,CAA+Bq+F,UAA/B,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,eAAe,CAAID,UAAvB,CAC7B;AACA,GAAIE,CAAAA,4CAA4C,CAAG,QAA/CA,CAAAA,4CAA+C,EAAW,CAC5D,GAAIz8F,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,aADf,CAEEK,KAAK,CAAE,CACL,gBAAkBV,GAAG,CAAC4G,IADjB,CAEL5G,GAAG,CAAC80F,MAAJ,CAAa,MAAQ90F,GAAG,CAAC80F,MAAzB,CAAkC,EAF7B,CAGL,CACE,4BAA6B,CAAC90F,GAAG,CAAC08F,QADpC,CAEE,2BAA4B18F,GAAG,CAAC28F,UAFlC,CAHK,CAFT,CAUEv0F,KAAK,CAAE,CACL0E,IAAI,CAAE,aADD,CAEL,gBAAiB9M,GAAG,CAACi1F,UAFhB,CAGL,gBAAiB,GAHZ,CAIL,gBAAiB,KAJZ,CAVT,CAFO,CAmBP,CACEj1F,GAAG,CAAC4G,IAAJ,GAAa,MAAb,CACIzG,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,iBAAf,CAAR,CAA4C,CAC5CF,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,wBADf,CAEEwM,KAAK,CAAE,CAAE0a,MAAM,CAAEvnB,GAAG,CAAC48F,WAAJ,CAAkB,IAA5B,CAFT,CAFA,CAMA,CACEz8F,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,wBADf,CAEEwM,KAAK,CAAE7M,GAAG,CAACq1E,QAFb,CAFA,CAMA,CACEr1E,GAAG,CAAC08F,QAAJ,EAAgB18F,GAAG,CAAC28F,UAApB,CACIx8F,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,4BAAf,CAFA,CAGA,CAACL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+6C,OAAX,CAAP,CAAD,CAHA,CADN,CAMI/6C,GAAG,CAACe,EAAJ,EAPN,CANA,CADJ,CANA,CAD0C,CAA5C,CADN,CA4BIZ,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,oBADf,CAEEwM,KAAK,CAAE,CAAE0a,MAAM,CAAEvnB,GAAG,CAACmO,KAAJ,CAAY,IAAtB,CAA4BA,KAAK,CAAEnO,GAAG,CAACmO,KAAJ,CAAY,IAA/C,CAFT,CAFA,CAMA,CACEhO,EAAE,CAAC,KAAD,CAAQ,CAAEiI,KAAK,CAAE,CAAEmoF,OAAO,CAAE,aAAX,CAAT,CAAR,CAA+C,CAC/CpwF,EAAE,CAAC,MAAD,CAAS,CACTE,WAAW,CAAE,2BADJ,CAETwM,KAAK,CAAE7M,GAAG,CAAC68F,cAFF,CAGTz0F,KAAK,CAAE,CACLnK,CAAC,CAAE+B,GAAG,CAAC88F,SADF,CAELC,MAAM,CAAE,SAFH,CAGL,eAAgB/8F,GAAG,CAACg9F,mBAHf,CAIL1pE,IAAI,CAAE,MAJD,CAHE,CAAT,CAD6C,CAW/CnzB,EAAE,CAAC,MAAD,CAAS,CACTE,WAAW,CAAE,0BADJ,CAETwM,KAAK,CAAE7M,GAAG,CAACi9F,eAFF,CAGT70F,KAAK,CAAE,CACLnK,CAAC,CAAE+B,GAAG,CAAC88F,SADF,CAELC,MAAM,CAAE/8F,GAAG,CAAC+8F,MAFP,CAGLzpE,IAAI,CAAE,MAHD,CAIL,iBAAkBtzB,GAAG,CAACk9F,aAJjB,CAKL,eAAgBl9F,GAAG,CAACi1F,UAAJ,CAAiBj1F,GAAG,CAACg9F,mBAArB,CAA2C,CALtD,CAHE,CAAT,CAX6C,CAA/C,CADJ,CANA,CA7BR,CA6DEh9F,GAAG,CAAC08F,QAAJ,EAAgB,CAAC18F,GAAG,CAAC28F,UAArB,CACIx8F,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,mBADf,CAEEwM,KAAK,CAAE,CAAEswF,QAAQ,CAAEn9F,GAAG,CAACo9F,gBAAJ,CAAuB,IAAnC,CAFT,CAFA,CAMA,CACE,CAACp9F,GAAG,CAAC80F,MAAL,CACI,CAAC90F,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+6C,OAAX,CAAP,CAAD,CADJ,CAEI56C,EAAE,CAAC,GAAD,CAAM,CAAEO,KAAK,CAAEV,GAAG,CAAC+6B,SAAb,CAAN,CAHR,CANA,CAWA,CAXA,CADN,CAcI/6B,GAAG,CAACe,EAAJ,EA3EN,CAnBO,CAAT,CAiGD,CArGD,CAsGA,GAAIs8F,CAAAA,qDAAqD,CAAG,EAA5D,CACAZ,4CAA4C,CAAC56F,aAA7C,CAA6D,IAA7D,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAIy7F,CAAAA,gCAAgC,CAAI,CACnEp/F,IAAI,CAAE,YAD6D,CAEnE6D,KAAK,CAAE,CACL6E,IAAI,CAAE,CACJA,IAAI,CAAEU,MADF,CAEJT,OAAO,CAAE,MAFL,CAGJG,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmB5E,GAAnB,CAAwB,CACjC,MAAO,CAAC,MAAD,CAAS,QAAT,CAAmB,WAAnB,EAAgCS,OAAhC,CAAwCT,GAAxC,EAA+C,CAAC,CAAvD,CACD,CALG,CADD,CAQL6yF,UAAU,CAAE,CACVruF,IAAI,CAAE5E,MADI,CAEV6E,OAAO,CAAE,CAFC,CAGVqe,QAAQ,CAAE,IAHA,CAIVle,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmB5E,GAAnB,CAAwB,CACjC,MAAOA,CAAAA,GAAG,EAAI,CAAP,EAAYA,GAAG,EAAI,GAA1B,CACD,CANS,CARP,CAgBL0yF,MAAM,CAAE,CACNluF,IAAI,CAAEU,MADA,CAENN,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmB5E,GAAnB,CAAwB,CACjC,MAAO,CAAC,SAAD,CAAY,WAAZ,CAAyB,SAAzB,EAAoCS,OAApC,CAA4CT,GAA5C,EAAmD,CAAC,CAA3D,CACD,CAJK,CAhBH,CAsBLw6F,WAAW,CAAE,CACXh2F,IAAI,CAAE5E,MADK,CAEX6E,OAAO,CAAE,CAFE,CAtBR,CA0BLq2F,aAAa,CAAE,CACbt2F,IAAI,CAAEU,MADO,CAEbT,OAAO,CAAE,OAFI,CA1BV,CA8BL81F,UAAU,CAAE,CACV/1F,IAAI,CAAE1E,OADI,CAEV2E,OAAO,CAAE,KAFC,CA9BP,CAkCLsH,KAAK,CAAE,CACLvH,IAAI,CAAE5E,MADD,CAEL6E,OAAO,CAAE,GAFJ,CAlCF,CAsCL61F,QAAQ,CAAE,CACR91F,IAAI,CAAE1E,OADE,CAER2E,OAAO,CAAE,IAFD,CAtCL,CA0CLmb,KAAK,CAAE,CACLpb,IAAI,CAAE,CAACU,MAAD,CAASH,KAAT,CAAgBmH,QAAhB,CADD,CAELzH,OAAO,CAAE,EAFJ,CA1CF,CA8CLknD,MAAM,CAAEz/C,QA9CH,CAF4D,CAkDnErL,QAAQ,CAAE,CACRoyE,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,GAAIxoE,CAAAA,KAAK,CAAG,EAAZ,CACAA,KAAK,CAACsB,KAAN,CAAc,KAAK8mF,UAAL,CAAkB,GAAhC,CACApoF,KAAK,CAACqT,eAAN,CAAwB,KAAKq9E,eAAL,CAAqB,KAAKtI,UAA1B,CAAxB,CACA,MAAOpoF,CAAAA,KAAP,CACD,CANO,CAORmwF,mBAAmB,CAAE,QAASA,CAAAA,mBAAT,EAA+B,CAClD,MAAO,CAAC,KAAKJ,WAAL,CAAmB,KAAKzuF,KAAxB,CAAgC,GAAjC,EAAsCyiB,OAAtC,CAA8C,CAA9C,CAAP,CACD,CATO,CAUR4sE,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,GAAI,KAAK52F,IAAL,GAAc,QAAd,EAA0B,KAAKA,IAAL,GAAc,WAA5C,CAAyD,CACvD,MAAO0D,CAAAA,QAAQ,CAAC,GAAK2gB,UAAU,CAAC,KAAK+xE,mBAAN,CAAV,CAAuC,CAA7C,CAAgD,EAAhD,CAAf,CACD,CAFD,IAEO,CACL,MAAO,EAAP,CACD,CACF,CAhBO,CAiBRF,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,GAAIU,CAAAA,MAAM,CAAG,KAAKA,MAAlB,CACA,GAAIC,CAAAA,WAAW,CAAG,KAAK72F,IAAL,GAAc,WAAhC,CACA,MAAO,mCAAqC62F,WAAW,CAAG,EAAH,CAAQ,GAAxD,EAA+DD,MAA/D,CAAwE,cAAxE,CAAyFA,MAAzF,CAAkG,GAAlG,CAAwGA,MAAxG,CAAiH,WAAjH,EAAgIC,WAAW,CAAG,GAAH,CAAS,EAApJ,EAA0JD,MAAM,CAAG,CAAnK,CAAuK,cAAvK,CAAwLA,MAAxL,CAAiM,GAAjM,CAAuMA,MAAvM,CAAgN,WAAhN,EAA+NC,WAAW,CAAG,EAAH,CAAQ,GAAlP,EAAyPD,MAAM,CAAG,CAAlQ,CAAsQ,YAA7Q,CACD,CArBO,CAsBRE,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,GAAIl6F,IAAI,CAACm6F,EAAT,CAAc,KAAKH,MAA1B,CACD,CAxBO,CAyBRI,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,MAAKh3F,IAAL,GAAc,WAAd,CAA4B,IAA5B,CAAmC,CAA1C,CACD,CA3BO,CA4BRi3F,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,GAAIt6F,CAAAA,MAAM,CAAG,CAAC,CAAD,CAAK,KAAKm6F,SAAV,EAAuB,EAAI,KAAKE,IAAhC,EAAwC,CAArD,CACA,MAAOr6F,CAAAA,MAAM,CAAG,IAAhB,CACD,CA/BO,CAgCRs5F,cAAc,CAAE,QAASA,CAAAA,cAAT,EAA0B,CACxC,MAAO,CACLiB,eAAe,CAAE,KAAKJ,SAAL,CAAiB,KAAKE,IAAtB,CAA6B,MAA7B,CAAsC,KAAKF,SAA3C,CAAuD,IADnE,CAELG,gBAAgB,CAAE,KAAKA,gBAFlB,CAAP,CAID,CArCO,CAsCRZ,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,MAAO,CACLa,eAAe,CAAE,KAAKJ,SAAL,CAAiB,KAAKE,IAAtB,EAA8B,KAAK3I,UAAL,CAAkB,GAAhD,EAAuD,MAAvD,CAAgE,KAAKyI,SAArE,CAAiF,IAD7F,CAELG,gBAAgB,CAAE,KAAKA,gBAFlB,CAGL92B,UAAU,CAAE,iDAHP,CAAP,CAKD,CA5CO,CA6CRg2B,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,GAAInpB,CAAAA,GAAG,CAAG,IAAK,EAAf,CACA,GAAI,KAAK5xD,KAAT,CAAgB,CACd4xD,GAAG,CAAG,KAAK2pB,eAAL,CAAqB,KAAKtI,UAA1B,CAAN,CACD,CAFD,IAEO,CACL,OAAQ,KAAKH,MAAb,EACE,IAAK,SAAL,CACElhB,GAAG,CAAG,SAAN,CACA,MACF,IAAK,WAAL,CACEA,GAAG,CAAG,SAAN,CACA,MACF,IAAK,SAAL,CACEA,GAAG,CAAG,SAAN,CACA,MACF,QACEA,GAAG,CAAG,SAAN,CAXJ,CAaD,CACD,MAAOA,CAAAA,GAAP,CACD,CAjEO,CAkER74C,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,GAAI,KAAK+5D,MAAL,GAAgB,SAApB,CAA+B,CAC7B,MAAO,iBAAP,CACD,CACD,GAAI,KAAKluF,IAAL,GAAc,MAAlB,CAA0B,CACxB,MAAO,MAAKkuF,MAAL,GAAgB,SAAhB,CAA4B,sBAA5B,CAAqD,sBAA5D,CACD,CAFD,IAEO,CACL,MAAO,MAAKA,MAAL,GAAgB,SAAhB,CAA4B,eAA5B,CAA8C,eAArD,CACD,CACF,CA3EO,CA4ERsI,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,MAAO,MAAKx2F,IAAL,GAAc,MAAd,CAAuB,GAAK,KAAKg2F,WAAL,CAAmB,GAA/C,CAAqD,KAAKzuF,KAAL,CAAa,QAAb,CAAwB,CAApF,CACD,CA9EO,CA+ER4sC,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAI,MAAO,MAAKgT,MAAZ,GAAuB,UAA3B,CAAuC,CACrC,MAAO,MAAKA,MAAL,CAAY,KAAKknC,UAAjB,GAAgC,EAAvC,CACD,CAFD,IAEO,CACL,MAAO,MAAKA,UAAL,CAAkB,GAAzB,CACD,CACF,CArFO,CAlDyD,CAyInE5yF,OAAO,CAAE,CACPk7F,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBtI,UAAzB,CAAqC,CACpD,GAAI,MAAO,MAAKjzE,KAAZ,GAAsB,UAA1B,CAAsC,CACpC,MAAO,MAAKA,KAAL,CAAWizE,UAAX,CAAP,CACD,CAFD,IAEO,IAAI,MAAO,MAAKjzE,KAAZ,GAAsB,QAA1B,CAAoC,CACzC,MAAO,MAAKA,KAAZ,CACD,CAFM,IAEA,CACL,MAAO,MAAK+7E,aAAL,CAAmB9I,UAAnB,CAAP,CACD,CACF,CATM,CAUP8I,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuB9I,UAAvB,CAAmC,CAChD,GAAI+I,CAAAA,UAAU,CAAG,KAAKC,aAAL,GAAqBx0D,IAArB,CAA0B,SAAU//B,CAAV,CAAa8zB,CAAb,CAAgB,CACzD,MAAO9zB,CAAAA,CAAC,CAACurF,UAAF,CAAez3D,CAAC,CAACy3D,UAAxB,CACD,CAFgB,CAAjB,CAIA,IAAK,GAAIr3F,CAAAA,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGogG,UAAU,CAACloF,MAA/B,CAAuClY,CAAC,EAAxC,CAA4C,CAC1C,GAAIogG,UAAU,CAACpgG,CAAD,CAAV,CAAcq3F,UAAd,CAA2BA,UAA/B,CAA2C,CACzC,MAAO+I,CAAAA,UAAU,CAACpgG,CAAD,CAAV,CAAcokB,KAArB,CACD,CACF,CACD,MAAOg8E,CAAAA,UAAU,CAACA,UAAU,CAACloF,MAAX,CAAoB,CAArB,CAAV,CAAkCkM,KAAzC,CACD,CArBM,CAsBPi8E,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAIj8E,CAAAA,KAAK,CAAG,KAAKA,KAAjB,CACA,GAAIiyE,CAAAA,IAAI,CAAG,IAAMjyE,KAAK,CAAClM,MAAvB,CACA,MAAOkM,CAAAA,KAAK,CAACpZ,GAAN,CAAU,SAAUs1F,WAAV,CAAuBpsF,KAAvB,CAA8B,CAC7C,GAAI,MAAOosF,CAAAA,WAAP,GAAuB,QAA3B,CAAqC,CACnC,MAAO,CACLl8E,KAAK,CAAEk8E,WADF,CAELjJ,UAAU,CAAE,CAACnjF,KAAK,CAAG,CAAT,EAAcmiF,IAFrB,CAAP,CAID,CACD,MAAOiK,CAAAA,WAAP,CACD,CARM,CAAP,CASD,CAlCM,CAzI0D,CAAxC,CA8K7B;AACC,4BAA6B,GAAIC,CAAAA,oCAAoC,CAAIb,gCAA5C,CAC9B;AAMA,yBAEA,GAAIc,CAAAA,kBAAkB,CAAGr6F,kBAAkB,CACzCo6F,oCADyC,CAEzC1B,4CAFyC,CAGzCY,qDAHyC,CAIzC,KAJyC,CAKzC,IALyC,CAMzC,IANyC,CAOzC,IAPyC,CAA3C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIgB,CAAAA,YAAJ,CAAmB,CAChCD,kBAAkB,CAAC75F,OAAnB,CAA2ByB,MAA3B,CAAoC,oCAApC,CACA,4BAA6B,GAAI4wF,CAAAA,QAAQ,CAAIwH,kBAAkB,CAAC7gG,OAAnC,CAC7B;AAGA,0BACAq5F,QAAQ,CAAC/qF,OAAT,CAAmB,SAAUC,GAAV,CAAe,CAChCA,GAAG,CAAChG,SAAJ,CAAc8wF,QAAQ,CAAC14F,IAAvB,CAA6B04F,QAA7B,EACD,CAFD,CAIA,4BAA6B,GAAI0H,CAAAA,iBAAiB,CAAI1H,QAAzB,CAC7B;AACA,GAAI2H,CAAAA,2CAA2C,CAAG,QAA9CA,CAAAA,2CAA8C,EAAW,CAC3D,GAAIv+F,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CAAC,MAAD,CAAS,CAAEE,WAAW,CAAE,YAAf,CAAT,CAAwC,CAC/CF,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,kBADf,CAEEwM,KAAK,CAAE,CAAEsB,KAAK,CAAEnO,GAAG,CAACw9F,MAAJ,CAAa,CAAb,CAAiB,IAA1B,CAAgCj2E,MAAM,CAAEvnB,GAAG,CAACw9F,MAAJ,CAAa,CAAb,CAAiB,IAAzD,CAFT,CAGEp1F,KAAK,CAAE,CAAEmoF,OAAO,CAAE,WAAX,CAHT,CAFA,CAOA,CACEpwF,EAAE,CAAC,QAAD,CAAW,CACXE,WAAW,CAAE,MADF,CAEX+H,KAAK,CAAE,CACLooF,EAAE,CAAE,IADC,CAELC,EAAE,CAAE,IAFC,CAGLhyF,CAAC,CAAE,IAHE,CAIL60B,IAAI,CAAE,MAJD,CAKLypE,MAAM,CAAE/8F,GAAG,CAACw+F,WALP,CAML,eAAgBx+F,GAAG,CAAC48F,WANf,CAFI,CAAX,CADJ,CAPA,CAD6C,CAAxC,CAAT,CAuBD,CA3BD,CA4BA,GAAI6B,CAAAA,oDAAoD,CAAG,EAA3D,CACAF,2CAA2C,CAAC18F,aAA5C,CAA4D,IAA5D,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAI68F,CAAAA,+BAA+B,CAAI,CAClExgG,IAAI,CAAE,WAD4D,CAElE6D,KAAK,CAAE,CACL6E,IAAI,CAAEU,MADD,CAELk2F,MAAM,CAAE,CACN52F,IAAI,CAAE5E,MADA,CAEN6E,OAAO,CAAE,GAFH,CAFH,CAML+1F,WAAW,CAAE,CACXh2F,IAAI,CAAE5E,MADK,CAEX6E,OAAO,CAAE,CAFE,CANR,CAUL23F,WAAW,CAAE,CACX53F,IAAI,CAAEU,MADK,CAEXT,OAAO,CAAE,SAFE,CAVR,CAF2D,CAAvC,CAkB7B;AACC,4BAA6B,GAAI83F,CAAAA,mCAAmC,CAAID,+BAA3C,CAC9B;AAMA,yBAEA,GAAIE,CAAAA,iBAAiB,CAAG76F,kBAAkB,CACxC46F,mCADwC,CAExCJ,2CAFwC,CAGxCE,oDAHwC,CAIxC,KAJwC,CAKxC,IALwC,CAMxC,IANwC,CAOxC,IAPwC,CAA1C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAII,CAAAA,WAAJ,CAAkB,CAC/BD,iBAAiB,CAACr6F,OAAlB,CAA0ByB,MAA1B,CAAmC,kCAAnC,CACA,4BAA6B,GAAI+xD,CAAAA,OAAO,CAAI6mC,iBAAiB,CAACrhG,OAAjC,CAC7B;AAGA,0BACAw6D,OAAO,CAAClsD,OAAR,CAAkB,SAAUC,GAAV,CAAe,CAC/BA,GAAG,CAAChG,SAAJ,CAAciyD,OAAO,CAAC75D,IAAtB,CAA4B65D,OAA5B,EACD,CAFD,CAIA,4BAA6B,GAAI+mC,CAAAA,gBAAgB,CAAI/mC,OAAxB,CAC7B;AACA,GAAIgnC,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAI/+F,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,YADO,CAEP,CACEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,iBAAR,CADT,CAEEoC,EAAE,CAAE,CAAE,cAAeN,GAAG,CAACinE,gBAArB,CAFN,CAFO,CAMP,CACE9mE,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACqM,OAHb,CAIEC,UAAU,CAAE,SAJd,CADU,CADd,CASE5L,KAAK,CAAE,CACL,YADK,CAELV,GAAG,CAAC4G,IAAJ,EAAY,CAAC5G,GAAG,CAAC+6B,SAAjB,CAA6B,eAAiB/6B,GAAG,CAAC4G,IAAlD,CAAyD,EAFpD,CAGL5G,GAAG,CAAC2M,MAAJ,CAAa,WAAb,CAA2B,EAHtB,CAIL3M,GAAG,CAACiN,SAAJ,CAAgB,aAAhB,CAAgC,EAJ3B,CAKLjN,GAAG,CAAC4M,WALC,CATT,CAgBEC,KAAK,CAAE7M,GAAG,CAAC4pF,aAhBb,CAiBExhF,KAAK,CAAE,CAAE0E,IAAI,CAAE,OAAR,CAjBT,CAkBExM,EAAE,CAAE,CAAEY,UAAU,CAAElB,GAAG,CAAC6pF,UAAlB,CAA8BxoF,UAAU,CAAErB,GAAG,CAAC8pF,UAA9C,CAlBN,CAFA,CAsBA,CACE9pF,GAAG,CAAC+6B,SAAJ,CACI56B,EAAE,CAAC,GAAD,CAAM,CAAEO,KAAK,CAAEV,GAAG,CAAC+6B,SAAb,CAAN,CADN,CAEI56B,EAAE,CAAC,GAAD,CAAM,CAAEO,KAAK,CAAEV,GAAG,CAAC4oF,SAAb,CAAN,CAHR,CAIE5oF,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAkB,CAChB,CAAChN,GAAG,CAACypE,wBAAL,CACItpE,EAAE,CAAC,GAAD,CAAM,CAAEE,WAAW,CAAE,qBAAf,CAAN,CAA8C,CAC9CL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACwpE,OAAX,CAAP,CAD8C,CAA9C,CADN,CAIIrpE,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,qBADP,CAENuxB,QAAQ,CAAE,CAAE83C,SAAS,CAAE1pE,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACwpE,OAAX,CAAb,CAFJ,CAAN,CALU,CAAlB,CAJF,CAcExpE,GAAG,CAACiN,SAAJ,CACI9M,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,oCADP,CAENC,EAAE,CAAE,CAAEC,KAAK,CAAEP,GAAG,CAACkQ,KAAb,CAFE,CAAN,CADN,CAKIlQ,GAAG,CAACe,EAAJ,EAnBN,CAtBA,CA2CA,CA3CA,CADJ,CANO,CAAT,CAsDD,CA1DD,CA2DA,GAAIi+F,CAAAA,iDAAiD,CAAG,EAAxD,CACAD,wCAAwC,CAACl9F,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,GAAIo9F,CAAAA,uCAAuC,CAAG,CAC5ClyE,OAAO,CAAE,SADmC,CAE5CugB,IAAI,CAAE,MAFsC,CAG5C09B,OAAO,CAAE,SAHmC,CAI5C30D,KAAK,CAAE,OAJqC,CAA9C,CAOA,4BAA6B,GAAI6oF,CAAAA,wCAAwC,CAAI,CAC3Et7F,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLyI,OAAO,CAAE,KADJ,CAELm9D,OAAO,CAAE,EAFJ,CAGL0gB,QAAQ,CAAE,IAHL,CAILtjF,IAAI,CAAE,MAJD,CAKLm0B,SAAS,CAAE,EALN,CAMLnuB,WAAW,CAAE,EANR,CAOL6+D,OAAO,CAAE,IAPJ,CAQLx+D,SAAS,CAAE,KARN,CASLuB,MAAM,CAAE,KATH,CAUL27E,cAAc,CAAE,EAVX,CAWLC,KAAK,CAAE,IAXF,CAYL3gB,wBAAwB,CAAE,KAZrB,CAaL98D,MAAM,CAAE,KAbH,CAAP,CAeD,CAjB0E,CAoB3E1J,QAAQ,CAAE,CACR2lF,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAKhiF,IAAL,EAAa,CAAC,KAAKm0B,SAAnB,CAA+B,4BAA8BkkE,uCAAuC,CAAC,KAAKr4F,IAAN,CAApG,CAAkH,EAAzH,CACD,CAHO,CAIRgjF,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,MAAO,CACL,MAAO,KAAKO,cAAL,CAAsB,IADxB,CAAP,CAGD,CARO,CApBiE,CA+B3EhoF,KAAK,CAAE,CACLqM,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgB3E,MAAhB,CAAwB,CAC9B,GAAIA,MAAJ,CAAY,CACV,KAAKwC,OAAL,CAAe,KAAf,CACD,CACF,CALI,CA/BoE,CAuC3EhK,OAAO,CAAE,CACP4kE,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,KAAK/vD,QAAL,CAAc,IAAd,EACA,KAAKzI,GAAL,CAASkB,UAAT,CAAoBC,WAApB,CAAgC,KAAKnB,GAArC,EACD,CAJM,CAKPyB,KAAK,CAAE,QAASA,CAAAA,KAAT,EAAiB,CACtB,KAAK1B,MAAL,CAAc,IAAd,CACA,GAAI,MAAO,MAAKi9D,OAAZ,GAAwB,UAA5B,CAAwC,CACtC,KAAKA,OAAL,CAAa,IAAb,EACD,CACF,CAVM,CAWPoe,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChCxwE,YAAY,CAAC,KAAK+wE,KAAN,CAAZ,CACD,CAbM,CAcPN,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAI9/E,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI,KAAKkgF,QAAL,CAAgB,CAApB,CAAuB,CACrB,KAAKE,KAAL,CAAa9wE,UAAU,CAAC,UAAY,CAClC,GAAI,CAACtP,KAAK,CAACwE,MAAX,CAAmB,CACjBxE,KAAK,CAACkG,KAAN,GACD,CACF,CAJsB,CAIpB,KAAKg6E,QAJe,CAAvB,CAKD,CACF,CAxBM,CAyBPp5E,OAAO,CAAE,QAASA,CAAAA,OAAT,CAAiByF,CAAjB,CAAoB,CAC3B,GAAIA,CAAC,CAAC1L,OAAF,GAAc,EAAlB,CAAsB,CACpB;AACA,GAAI,CAAC,KAAK2D,MAAV,CAAkB,CAChB,KAAK0B,KAAL,GACD,CACF,CACF,CAhCM,CAvCkE,CAyE3EV,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAKs6E,UAAL,GACA/6E,QAAQ,CAACL,gBAAT,CAA0B,SAA1B,CAAqC,KAAKoC,OAA1C,EACD,CA5E0E,CA6E3EmG,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtClI,QAAQ,CAACG,mBAAT,CAA6B,SAA7B,CAAwC,KAAK4B,OAA7C,EACD,CA/E0E,CAAhD,CAiF7B;AACC,4BAA6B,GAAIquF,CAAAA,iDAAiD,CAAID,wCAAzD,CAC9B;AAMA,yBAEA,GAAIE,CAAAA,0BAA0B,CAAGr7F,kBAAkB,CACjDo7F,iDADiD,CAEjDJ,wCAFiD,CAGjDC,iDAHiD,CAIjD,KAJiD,CAKjD,IALiD,CAMjD,IANiD,CAOjD,IAPiD,CAAnD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIK,CAAAA,oBAAJ,CAA2B,CACxCD,0BAA0B,CAAC76F,OAA3B,CAAmCyB,MAAnC,CAA4C,+BAA5C,CACA,4BAA6B,GAAIs5F,CAAAA,gBAAgB,CAAIF,0BAA0B,CAAC7hG,OAAnD,CAC7B;AAKA,GAAIgiG,CAAAA,kBAAkB,CAAG/2D,oBAAoB,CAAC9+B,CAArB,CAAuB6nC,MAAvB,CAA8B+tD,gBAA9B,CAAzB,CAEA,GAAIE,CAAAA,yBAAyB,CAAG,IAAK,EAArC,CACA,GAAIC,CAAAA,cAAc,CAAG,EAArB,CACA,GAAIC,CAAAA,SAAS,CAAG,CAAhB,CAEA,GAAIC,CAAAA,YAAY,CAAG,QAASC,CAAAA,OAAT,CAAiBr7F,OAAjB,CAA0B,CAC3C,GAAIikC,oBAAoB,CAAC9+B,CAArB,CAAuBjK,SAAvB,CAAiC4tB,SAArC,CAAgD,OAChD9oB,OAAO,CAAGA,OAAO,EAAI,EAArB,CACA,GAAI,MAAOA,CAAAA,OAAP,GAAmB,QAAvB,CAAiC,CAC/BA,OAAO,CAAG,CACRilE,OAAO,CAAEjlE,OADD,CAAV,CAGD,CACD,GAAI0mF,CAAAA,WAAW,CAAG1mF,OAAO,CAACknE,OAA1B,CACA,GAAIr7D,CAAAA,EAAE,CAAG,WAAasvF,SAAS,EAA/B,CAEAn7F,OAAO,CAACknE,OAAR,CAAkB,UAAY,CAC5Bm0B,OAAO,CAAC1vF,KAAR,CAAcE,EAAd,CAAkB66E,WAAlB,EACD,CAFD,CAGAuU,yBAAyB,CAAG,GAAID,CAAAA,kBAAJ,CAAuB,CACjD37F,IAAI,CAAEW,OAD2C,CAAvB,CAA5B,CAGAi7F,yBAAyB,CAACpvF,EAA1B,CAA+BA,EAA/B,CACA,GAAI/R,MAAM,CAACyuE,KAAK,CAAC,SAAD,CAAN,CAAN,CAAyB0yB,yBAAyB,CAACh2B,OAAnD,CAAJ,CAAiE,CAC/Dg2B,yBAAyB,CAAC/2F,MAA1B,CAAiC5B,OAAjC,CAA2C,CAAC24F,yBAAyB,CAACh2B,OAA3B,CAA3C,CACAg2B,yBAAyB,CAACh2B,OAA1B,CAAoC,IAApC,CACD,CACDg2B,yBAAyB,CAACh8C,MAA1B,GACAz0C,QAAQ,CAACC,IAAT,CAAcC,WAAd,CAA0BuwF,yBAAyB,CAAC/wF,GAApD,EACA,GAAI07E,CAAAA,cAAc,CAAG5lF,OAAO,CAAChB,MAAR,EAAkB,EAAvC,CACAk8F,cAAc,CAACv2F,OAAf,CAAuB,SAAUL,IAAV,CAAgB,CACrCshF,cAAc,EAAIthF,IAAI,CAAC4F,GAAL,CAASmpC,YAAT,CAAwB,EAA1C,CACD,CAFD,EAGA4nD,yBAAyB,CAACrV,cAA1B,CAA2CA,cAA3C,CACAqV,yBAAyB,CAACnzF,OAA1B,CAAoC,IAApC,CACAmzF,yBAAyB,CAAC/wF,GAA1B,CAA8B5B,KAA9B,CAAoCi0C,MAApC,CAA6CxzC,MAAM,CAAC,cAAD,CAAN,CAAuByzC,UAAvB,EAA7C,CACA0+C,cAAc,CAACp8F,IAAf,CAAoBm8F,yBAApB,EACA,MAAOA,CAAAA,yBAAP,CACD,CAjCD,CAmCA,CAAC,SAAD,CAAY,SAAZ,CAAuB,MAAvB,CAA+B,OAA/B,EAAwCt2F,OAAxC,CAAgD,SAAUtC,IAAV,CAAgB,CAC9D+4F,YAAY,CAAC/4F,IAAD,CAAZ,CAAqB,SAAUrC,OAAV,CAAmB,CACtC,GAAI,MAAOA,CAAAA,OAAP,GAAmB,QAAvB,CAAiC,CAC/BA,OAAO,CAAG,CACRilE,OAAO,CAAEjlE,OADD,CAAV,CAGD,CACDA,OAAO,CAACqC,IAAR,CAAeA,IAAf,CACA,MAAO+4F,CAAAA,YAAY,CAACp7F,OAAD,CAAnB,CACD,CARD,CASD,CAVD,EAYAo7F,YAAY,CAACzvF,KAAb,CAAqB,SAAUE,EAAV,CAAc66E,WAAd,CAA2B,CAC9C,GAAIzhD,CAAAA,GAAG,CAAGi2D,cAAc,CAAC3pF,MAAzB,CACA,GAAIhE,CAAAA,KAAK,CAAG,CAAC,CAAb,CACA,GAAIq5E,CAAAA,aAAa,CAAG,IAAK,EAAzB,CACA,IAAK,GAAIvtF,CAAAA,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG4rC,GAApB,CAAyB5rC,CAAC,EAA1B,CAA8B,CAC5B,GAAIwS,EAAE,GAAKqvF,cAAc,CAAC7hG,CAAD,CAAd,CAAkBwS,EAA7B,CAAiC,CAC/B+6E,aAAa,CAAGsU,cAAc,CAAC7hG,CAAD,CAAd,CAAkB6Q,GAAlB,CAAsBmpC,YAAtC,CACA9lC,KAAK,CAAGlU,CAAR,CACA,GAAI,MAAOqtF,CAAAA,WAAP,GAAuB,UAA3B,CAAuC,CACrCA,WAAW,CAACwU,cAAc,CAAC7hG,CAAD,CAAf,CAAX,CACD,CACD6hG,cAAc,CAACx9E,MAAf,CAAsBrkB,CAAtB,CAAyB,CAAzB,EACA,MACD,CACF,CACD,GAAI4rC,GAAG,EAAI,CAAP,EAAY13B,KAAK,GAAK,CAAC,CAAvB,EAA4BA,KAAK,CAAG2tF,cAAc,CAAC3pF,MAAf,CAAwB,CAAhE,CAAmE,OACnE,IAAK,GAAIxS,CAAAA,EAAE,CAAGwO,KAAd,CAAqBxO,EAAE,CAAGkmC,GAAG,CAAG,CAAhC,CAAmClmC,EAAE,EAArC,CAAyC,CACvC,GAAI4nF,CAAAA,GAAG,CAAGuU,cAAc,CAACn8F,EAAD,CAAd,CAAmBmL,GAA7B,CACAy8E,GAAG,CAACr+E,KAAJ,CAAU,KAAV,EAAmBvC,QAAQ,CAAC4gF,GAAG,CAACr+E,KAAJ,CAAU,KAAV,CAAD,CAAmB,EAAnB,CAAR,CAAiCs+E,aAAjC,CAAiD,EAAjD,CAAsD,IAAzE,CACD,CACF,CApBD,CAsBAwU,YAAY,CAACvU,QAAb,CAAwB,UAAY,CAClC,IAAK,GAAIxtF,CAAAA,CAAC,CAAG6hG,cAAc,CAAC3pF,MAAf,CAAwB,CAArC,CAAwClY,CAAC,EAAI,CAA7C,CAAgDA,CAAC,EAAjD,CAAqD,CACnD6hG,cAAc,CAAC7hG,CAAD,CAAd,CAAkBsS,KAAlB,GACD,CACF,CAJD,CAMA,4BAA6B,GAAI2vF,CAAAA,yBAAyB,CAAIF,YAAjC,CAC7B;AAEA,4BAA6B,GAAIG,CAAAA,gBAAgB,CAAID,yBAAxB,CAC7B;AACA,GAAIE,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAI//F,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CAAEE,WAAW,CAAE,UAAf,CAFO,CAGP,CACEL,GAAG,CAACgN,EAAJ,CAAO,SAAP,CADF,CAEE7M,EAAE,CAAC,YAAD,CAAe,CAAEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,mBAAR,CAAT,CAAf,CAAyD,CACzDiC,EAAE,CAAC,KAAD,CAAQ,CACRgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CACH,CAACoB,GAAG,CAACggG,MAAL,GAAgBhgG,GAAG,CAAC+6C,OAAJ,EAAe/6C,GAAG,CAAC+6C,OAAJ,GAAgB,CAA/B,EAAoC/6C,GAAG,CAACigG,KAAxD,CAJJ,CAKE3zF,UAAU,CAAE,gDALd,CADU,CADJ,CAURjM,WAAW,CAAE,mBAVL,CAWRK,KAAK,CAAE,CACL,sBAAwBV,GAAG,CAAC4G,IADvB,CAEL,CACE,WAAY5G,GAAG,CAACyI,MAAJ,CAAW5B,OADzB,CAEE,SAAU7G,GAAG,CAACigG,KAFhB,CAFK,CAXC,CAkBRruE,QAAQ,CAAE,CAAElvB,WAAW,CAAE1C,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+6C,OAAX,CAAf,CAlBF,CAAR,CADuD,CAAzD,CAFJ,CAHO,CA4BP,CA5BO,CAAT,CA8BD,CAlCD,CAmCA,GAAImlD,CAAAA,iDAAiD,CAAG,EAAxD,CACAH,wCAAwC,CAACl+F,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAIs+F,CAAAA,sCAAsC,CAAI,CACzEjiG,IAAI,CAAE,SADmE,CAGzE6D,KAAK,CAAE,CACLnD,KAAK,CAAE,CAAC0I,MAAD,CAAStF,MAAT,CADF,CAELkJ,GAAG,CAAElJ,MAFA,CAGLi+F,KAAK,CAAE/9F,OAHF,CAIL89F,MAAM,CAAE99F,OAJH,CAKL0E,IAAI,CAAE,CACJA,IAAI,CAAEU,MADF,CAEJN,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmB5E,GAAnB,CAAwB,CACjC,MAAO,CAAC,SAAD,CAAY,SAAZ,CAAuB,SAAvB,CAAkC,MAAlC,CAA0C,QAA1C,EAAoDS,OAApD,CAA4DT,GAA5D,EAAmE,CAAC,CAA3E,CACD,CAJG,CALD,CAHkE,CAgBzEa,QAAQ,CAAE,CACR83C,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAI,KAAKklD,KAAT,CAAgB,OAEhB,GAAIrhG,CAAAA,KAAK,CAAG,KAAKA,KAAjB,CACA,GAAIsM,CAAAA,GAAG,CAAG,KAAKA,GAAf,CAEA,GAAI,MAAOtM,CAAAA,KAAP,GAAiB,QAAjB,EAA6B,MAAOsM,CAAAA,GAAP,GAAe,QAAhD,CAA0D,CACxD,MAAOA,CAAAA,GAAG,CAAGtM,KAAN,CAAcsM,GAAG,CAAG,GAApB,CAA0BtM,KAAjC,CACD,CAED,MAAOA,CAAAA,KAAP,CACD,CAZO,CAhB+D,CAA9C,CA+B7B;AACC,4BAA6B,GAAIwhG,CAAAA,+CAA+C,CAAID,sCAAvD,CAC9B;AAMA,yBAEA,GAAIE,CAAAA,wBAAwB,CAAGt8F,kBAAkB,CAC/Cq8F,+CAD+C,CAE/CL,wCAF+C,CAG/CG,iDAH+C,CAI/C,KAJ+C,CAK/C,IAL+C,CAM/C,IAN+C,CAO/C,IAP+C,CAAjD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAII,CAAAA,kBAAJ,CAAyB,CACtCD,wBAAwB,CAAC97F,OAAzB,CAAiCyB,MAAjC,CAA0C,6BAA1C,CACA,4BAA6B,GAAIu6F,CAAAA,cAAc,CAAIF,wBAAwB,CAAC9iG,OAA/C,CAC7B;AAGA,0BACAgjG,cAAc,CAAC10F,OAAf,CAAyB,SAAUC,GAAV,CAAe,CACtCA,GAAG,CAAChG,SAAJ,CAAcy6F,cAAc,CAACriG,IAA7B,CAAmCqiG,cAAnC,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,KAAK,CAAID,cAAb,CAC7B;AACA,GAAIE,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAIzgG,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,SADf,CAEEK,KAAK,CAAEV,GAAG,CAAC0gG,MAAJ,CAAa,MAAQ1gG,GAAG,CAAC0gG,MAAZ,CAAqB,SAAlC,CAA8C,kBAFvD,CAFO,CAMP,CACE1gG,GAAG,CAACyI,MAAJ,CAAWmiD,MAAX,EAAqB5qD,GAAG,CAAC4qD,MAAzB,CACIzqD,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,iBAAf,CAFA,CAGA,CAACL,GAAG,CAACgN,EAAJ,CAAO,QAAP,CAAiB,CAAChN,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC4qD,MAAX,CAAP,CAAD,CAAjB,CAAD,CAHA,CAIA,CAJA,CADN,CAOI5qD,GAAG,CAACe,EAAJ,EARN,CASEZ,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,eAAf,CAAgCwM,KAAK,CAAE7M,GAAG,CAACilD,SAA3C,CAFA,CAGA,CAACjlD,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAD,CAHA,CAIA,CAJA,CATJ,CANO,CAAT,CAuBD,CA3BD,CA4BA,GAAI2zF,CAAAA,iDAAiD,CAAG,EAAxD,CACAF,wCAAwC,CAAC5+F,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAI++F,CAAAA,qCAAqC,CAAI,CACxE1iG,IAAI,CAAE,QADkE,CAExE6D,KAAK,CAAE,CACL6oD,MAAM,CAAE,EADH,CAEL3F,SAAS,CAAE,EAFN,CAGLy7C,MAAM,CAAE,CACN95F,IAAI,CAAEU,MADA,CAHH,CAFiE,CAA7C,CAU7B;AACC,4BAA6B,GAAIu5F,CAAAA,8CAA8C,CAAID,qCAAtD,CAC9B;AAMA,yBAEA,GAAIE,CAAAA,uBAAuB,CAAG/8F,kBAAkB,CAC9C88F,8CAD8C,CAE9CJ,wCAF8C,CAG9CE,iDAH8C,CAI9C,KAJ8C,CAK9C,IAL8C,CAM9C,IAN8C,CAO9C,IAP8C,CAAhD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAII,CAAAA,iBAAJ,CAAwB,CACrCD,uBAAuB,CAACv8F,OAAxB,CAAgCyB,MAAhC,CAAyC,4BAAzC,CACA,4BAA6B,GAAIg7F,CAAAA,aAAa,CAAIF,uBAAuB,CAACvjG,OAA7C,CAC7B;AAGA,0BACAyjG,aAAa,CAACn1F,OAAd,CAAwB,SAAUC,GAAV,CAAe,CACrCA,GAAG,CAAChG,SAAJ,CAAck7F,aAAa,CAAC9iG,IAA5B,CAAkC8iG,aAAlC,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,IAAI,CAAID,aAAZ,CAC7B;AACA,GAAIE,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAIlhG,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,SADf,CAEE+H,KAAK,CAAE,CACL0E,IAAI,CAAE,QADD,CAEL,gBAAiB9M,GAAG,CAACkwB,YAFhB,CAGL,iBAAkBlwB,GAAG,CAACstB,IAHjB,CAIL,gBAAiB,GAJZ,CAKL,gBAAiBttB,GAAG,CAACkL,GALhB,CAMLqN,QAAQ,CAAE,GANL,CAFT,CAUEjY,EAAE,CAAE,CAAEwQ,OAAO,CAAE9Q,GAAG,CAACmhG,SAAf,CAVN,CAFO,CAcP,CACEnhG,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAACkL,GAAX,CAAgB,SAASrC,IAAT,CAAe3J,GAAf,CAAoB,CAClC,MAAOiB,CAAAA,EAAE,CACP,MADO,CAEP,CACEjB,GAAG,CAAEA,GADP,CAEEmB,WAAW,CAAE,eAFf,CAGEwM,KAAK,CAAE,CAAEi4C,MAAM,CAAE9kD,GAAG,CAACohG,YAAJ,CAAmB,MAAnB,CAA4B,SAAtC,CAHT,CAIE9gG,EAAE,CAAE,CACF2hD,SAAS,CAAE,mBAAS9gD,MAAT,CAAiB,CAC1BnB,GAAG,CAACgxB,eAAJ,CAAoBnoB,IAApB,CAA0B1H,MAA1B,EACD,CAHC,CAIFE,UAAU,CAAErB,GAAG,CAACqhG,iBAJd,CAKF9gG,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACshG,WAAJ,CAAgBz4F,IAAhB,EACD,CAPC,CAJN,CAFO,CAgBP,CACE1I,EAAE,CACA,GADA,CAEA,CACEE,WAAW,CAAE,eADf,CAEEK,KAAK,CAAE,CACLV,GAAG,CAAC28C,OAAJ,CAAY9zC,IAAI,CAAG,CAAnB,CADK,CAEL,CAAE2zB,KAAK,CAAEx8B,GAAG,CAAC29B,UAAJ,GAAmB90B,IAA5B,CAFK,CAFT,CAMEgE,KAAK,CAAE7M,GAAG,CAACuhG,YAAJ,CAAiB14F,IAAjB,CANT,CAFA,CAUA,CACE7I,GAAG,CAACwhG,eAAJ,CAAoB34F,IAApB,EACI1I,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,kBADP,CAENK,KAAK,CAAEV,GAAG,CAACyhG,gBAFL,CAGN50F,KAAK,CAAE7M,GAAG,CAAC0hG,YAHL,CAAN,CADN,CAMI1hG,GAAG,CAACe,EAAJ,EAPN,CAVA,CADJ,CAhBO,CAAT,CAuCD,CAxCD,CADF,CA0CEf,GAAG,CAAC08F,QAAJ,EAAgB18F,GAAG,CAAC2hG,SAApB,CACIxhG,EAAE,CACA,MADA,CAEA,CAAEE,WAAW,CAAE,eAAf,CAAgCwM,KAAK,CAAE,CAAEmV,KAAK,CAAEhiB,GAAG,CAACohB,SAAb,CAAvC,CAFA,CAGA,CAACphB,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACstB,IAAX,CAAP,CAAD,CAHA,CADN,CAMIttB,GAAG,CAACe,EAAJ,EAhDN,CAdO,CAgEP,CAhEO,CAAT,CAkED,CAtED,CAuEA,GAAI6gG,CAAAA,iDAAiD,CAAG,EAAxD,CACAV,wCAAwC,CAACr/F,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA,GAAIggG,CAAAA,MAAM,CAAGnkG,mBAAmB,CAAC,EAAD,CAAhC,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA,4BAA6B,GAAIokG,CAAAA,qCAAqC,CAAI,CACxE5jG,IAAI,CAAE,QADkE,CAGxEuL,MAAM,CAAE,CAACgE,iBAAiB,CAAC/D,CAAnB,CAHgE,CAKxE2R,MAAM,CAAE,CACN2Q,MAAM,CAAE,CACNnlB,OAAO,CAAE,EADH,CADF,CALgE,CAWxEjD,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLm+F,iBAAiB,CAAE,IADd,CAEL7xE,YAAY,CAAE,KAAKtxB,KAFd,CAGL++B,UAAU,CAAE,CAAC,CAHR,CAAP,CAKD,CAjBuE,CAoBxE57B,KAAK,CAAE,CACLnD,KAAK,CAAE,CACLgI,IAAI,CAAE5E,MADD,CAEL6E,OAAO,CAAE,CAFJ,CADF,CAKLm7F,YAAY,CAAE,CACZp7F,IAAI,CAAE5E,MADM,CAEZ6E,OAAO,CAAE,CAFG,CALT,CASLo7F,aAAa,CAAE,CACbr7F,IAAI,CAAE5E,MADO,CAEb6E,OAAO,CAAE,CAFI,CATV,CAaLqE,GAAG,CAAE,CACHtE,IAAI,CAAE5E,MADH,CAEH6E,OAAO,CAAE,CAFN,CAbA,CAiBLq7F,MAAM,CAAE,CACNt7F,IAAI,CAAE,CAACO,KAAD,CAAQ9I,MAAR,CADA,CAENwI,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,CAAC,SAAD,CAAY,SAAZ,CAAuB,SAAvB,CAAP,CACD,CAJK,CAjBH,CAuBL+6F,SAAS,CAAE,CACTv7F,IAAI,CAAEU,MADG,CAETT,OAAO,CAAE,SAFA,CAvBN,CA2BLu7F,iBAAiB,CAAE,CACjBx7F,IAAI,CAAEU,MADW,CAEjBT,OAAO,CAAE,SAFQ,CA3Bd,CA+BL4iD,WAAW,CAAE,CACX7iD,IAAI,CAAE,CAACO,KAAD,CAAQ9I,MAAR,CADK,CAEXwI,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,CAAC,iBAAD,CAAoB,iBAApB,CAAuC,iBAAvC,CAAP,CACD,CAJU,CA/BR,CAqCLi7F,aAAa,CAAE,CACbz7F,IAAI,CAAEU,MADO,CAEbT,OAAO,CAAE,kBAFI,CArCV,CAyCLy7F,qBAAqB,CAAE,CACrB17F,IAAI,CAAEU,MADe,CAErBT,OAAO,CAAE,iBAFY,CAzClB,CA6CLhG,QAAQ,CAAE,CACR+F,IAAI,CAAE1E,OADE,CAER2E,OAAO,CAAE,KAFD,CA7CL,CAiDL07F,SAAS,CAAE,CACT37F,IAAI,CAAE1E,OADG,CAET2E,OAAO,CAAE,KAFA,CAjDN,CAqDL61F,QAAQ,CAAE,CACR91F,IAAI,CAAE1E,OADE,CAER2E,OAAO,CAAE,KAFD,CArDL,CAyDL86F,SAAS,CAAE,CACT/6F,IAAI,CAAE1E,OADG,CAET2E,OAAO,CAAE,KAFA,CAzDN,CA6DLua,SAAS,CAAE,CACTxa,IAAI,CAAEU,MADG,CAETT,OAAO,CAAE,SAFA,CA7DN,CAiEL27F,KAAK,CAAE,CACL57F,IAAI,CAAEO,KADD,CAELN,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,CAAC,IAAD,CAAO,IAAP,CAAa,IAAb,CAAmB,IAAnB,CAAyB,IAAzB,CAAP,CACD,CAJI,CAjEF,CAuELq7F,aAAa,CAAE,CACb77F,IAAI,CAAEU,MADO,CAEbT,OAAO,CAAE,SAFI,CAvEV,CApBiE,CAiGxE5D,QAAQ,CAAE,CACRqqB,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,GAAI9B,CAAAA,MAAM,CAAG,EAAb,CACA,GAAI,KAAKm2E,SAAT,CAAoB,CAClBn2E,MAAM,CAAG,KAAKi3E,aAAL,CAAmBtpF,OAAnB,CAA2B,iBAA3B,CAA8C,KAAKioF,YAAL,CAAoB,KAAKxiG,KAAzB,CAAiC,KAAKsxB,YAApF,CAAT,CACD,CAFD,IAEO,IAAI,KAAKwsE,QAAT,CAAmB,CACxBlxE,MAAM,CAAG,KAAKg3E,KAAL,CAAWh/F,IAAI,CAACmI,IAAL,CAAU,KAAKukB,YAAf,EAA+B,CAA1C,CAAT,CACD,CACD,MAAO1E,CAAAA,MAAP,CACD,CATO,CAURk2E,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,GAAIvzF,CAAAA,KAAK,CAAG,EAAZ,CACA,GAAI,KAAKizF,YAAT,CAAuB,CACrBjzF,KAAK,CAAG,KAAKu0F,YAAL,CAAoB,GAA5B,CACD,CAFD,IAEO,IAAI,KAAKH,SAAT,CAAoB,CACzBp0F,KAAK,CAAG,KAAR,CACD,CACD,MAAO,CACL6T,KAAK,CAAE,KAAKmW,WADP,CAELhqB,KAAK,CAAEA,KAFF,CAAP,CAID,CArBO,CAsBRu0F,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,MAAO,MAAK9jG,KAAL,CAAa,GAAb,CAAmB4E,IAAI,CAACC,KAAL,CAAW,KAAK7E,KAAhB,EAAyB,GAAnD,CACD,CAxBO,CAyBR+jG,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,GAAI/3F,CAAAA,IAAJ,CAEA,MAAOzD,CAAAA,KAAK,CAAC4C,OAAN,CAAc,KAAK0/C,WAAnB,GAAmC7+C,IAAI,CAAG,EAAP,CAAWA,IAAI,CAAC,KAAKo3F,YAAN,CAAJ,CAA0B,KAAKv4C,WAAL,CAAiB,CAAjB,CAArC,CAA0D7+C,IAAI,CAAC,KAAKq3F,aAAN,CAAJ,CAA2B,CAAErjG,KAAK,CAAE,KAAK6qD,WAAL,CAAiB,CAAjB,CAAT,CAA8Bm5C,QAAQ,CAAE,IAAxC,CAArF,CAAqIh4F,IAAI,CAAC,KAAKM,GAAN,CAAJ,CAAiB,KAAKu+C,WAAL,CAAiB,CAAjB,CAAtJ,CAA2K7+C,IAA9M,EAAsN,KAAK6+C,WAAlO,CACD,CA7BO,CA8BRg4C,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,MAAO,MAAKoB,eAAL,CAAqB,KAAKjkG,KAA1B,CAAiC,KAAK+jG,QAAtC,CAAP,CACD,CAhCO,CAiCRG,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,MAAO,MAAK1B,YAAL,CAAoB,KAAKkB,qBAAzB,CAAiD,KAAKD,aAA7D,CACD,CAnCO,CAoCRU,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,MAAO,MAAKF,eAAL,CAAqB,KAAK3yE,YAA1B,CAAwC,KAAKyyE,QAA7C,CAAP,CACD,CAtCO,CAuCRK,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,GAAI/yD,CAAAA,KAAJ,CAEA,MAAO9oC,CAAAA,KAAK,CAAC4C,OAAN,CAAc,KAAKm4F,MAAnB,GAA8BjyD,KAAK,CAAG,EAAR,CAAYA,KAAK,CAAC,KAAK+xD,YAAN,CAAL,CAA2B,KAAKE,MAAL,CAAY,CAAZ,CAAvC,CAAuDjyD,KAAK,CAAC,KAAKgyD,aAAN,CAAL,CAA4B,CAAErjG,KAAK,CAAE,KAAKsjG,MAAL,CAAY,CAAZ,CAAT,CAAyBU,QAAQ,CAAE,IAAnC,CAAnF,CAA8H3yD,KAAK,CAAC,KAAK/kC,GAAN,CAAL,CAAkB,KAAKg3F,MAAL,CAAY,CAAZ,CAAhJ,CAAgKjyD,KAA9L,EAAuM,KAAKiyD,MAAnN,CACD,CA3CO,CA4CR/pE,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,MAAO,MAAK0qE,eAAL,CAAqB,KAAK3yE,YAA1B,CAAwC,KAAK8yE,QAA7C,CAAP,CACD,CA9CO,CA+CRrmD,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAInxB,CAAAA,MAAM,CAAG,EAAb,CACA,GAAI5tB,CAAAA,CAAC,CAAG,CAAR,CACA,GAAIqlG,CAAAA,SAAS,CAAG,KAAK/yE,YAArB,CACA,GAAI,KAAKqyE,SAAL,EAAkB,KAAKryE,YAAL,GAAsB1sB,IAAI,CAACC,KAAL,CAAW,KAAKysB,YAAhB,CAA5C,CAA2E,CACzE+yE,SAAS,GACV,CACD,KAAOrlG,CAAC,CAAGqlG,SAAX,CAAsBrlG,CAAC,EAAvB,CAA2B,CACzB4tB,MAAM,CAACnoB,IAAP,CAAY,KAAK0/F,WAAjB,EACD,CACD,KAAOnlG,CAAC,CAAG,KAAKsN,GAAhB,CAAqBtN,CAAC,EAAtB,CAA0B,CACxB4tB,MAAM,CAACnoB,IAAP,CAAY,KAAKy/F,SAAjB,EACD,CACD,MAAOt3E,CAAAA,MAAP,CACD,CA7DO,CA8DR41E,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,MAAO,MAAKvgG,QAAL,EAAiB,CAAC,KAAKmrB,MAAL,EAAe,EAAhB,EAAoBnrB,QAA5C,CACD,CAhEO,CAjG8D,CAoKxEsB,KAAK,CAAE,CACLvD,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAewD,GAAf,CAAoB,CACzB,KAAK8tB,YAAL,CAAoB9tB,GAApB,CACA,KAAK2/F,iBAAL,CAAyB,KAAKnjG,KAAL,GAAe4E,IAAI,CAACC,KAAL,CAAW,KAAK7E,KAAhB,CAAxC,CACD,CAJI,CApKiE,CA2KxEyD,OAAO,CAAE,CACP+M,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,EAA8B,CAChD,MAAO,CACLrN,KAAK,CAAE,CACL,gBAAiB,6CADZ,CADF,CAAP,CAKD,CAPM,CAQP8gG,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBjkG,KAAzB,CAAgCgK,GAAhC,CAAqC,CACpD,GAAIs6F,CAAAA,WAAW,CAAG7kG,MAAM,CAAC4f,IAAP,CAAYrV,GAAZ,EAAiBgX,MAAjB,CAAwB,SAAU1gB,GAAV,CAAe,CACvD,GAAIkD,CAAAA,GAAG,CAAGwG,GAAG,CAAC1J,GAAD,CAAb,CACA,GAAI0jG,CAAAA,QAAQ,CAAGvkG,MAAM,CAACwjG,MAAM,CAAC,UAAD,CAAP,CAAN,CAA2Bz/F,GAA3B,EAAkCA,GAAG,CAACwgG,QAAtC,CAAiD,KAAhE,CACA,MAAOA,CAAAA,QAAQ,CAAGhkG,KAAK,CAAGM,GAAX,CAAiBN,KAAK,EAAIM,GAAzC,CACD,CAJiB,EAIfuqC,IAJe,CAIV,SAAU//B,CAAV,CAAa8zB,CAAb,CAAgB,CACtB,MAAO9zB,CAAAA,CAAC,CAAG8zB,CAAX,CACD,CANiB,CAAlB,CAOA,GAAI2lE,CAAAA,YAAY,CAAGv6F,GAAG,CAACs6F,WAAW,CAAC,CAAD,CAAZ,CAAtB,CACA,MAAO7kG,CAAAA,MAAM,CAACwjG,MAAM,CAAC,UAAD,CAAP,CAAN,CAA2BsB,YAA3B,EAA2CA,YAAY,CAACvkG,KAAxD,CAAgEukG,YAAY,EAAI,EAAvF,CACD,CAlBM,CAmBP3B,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyB34F,IAAzB,CAA+B,CAC9C,GAAIu6F,CAAAA,gBAAgB,CAAG,KAAKhC,YAAL,EAAqB,KAAKsB,YAAL,CAAoB,CAAzC,EAA8C75F,IAAI,CAAG,CAAP,CAAW,KAAKjK,KAA9D,EAAuEiK,IAAI,CAAG,KAAKjK,KAA1G,CACA,0BACA,GAAIykG,CAAAA,iBAAiB,CAAG,KAAKd,SAAL,EAAkB,KAAKR,iBAAvB,EAA4Cl5F,IAAI,CAAG,GAAP,EAAc,KAAKqnB,YAA/D,EAA+ErnB,IAAI,CAAG,KAAKqnB,YAAnH,CACA,MAAOkzE,CAAAA,gBAAgB,EAAIC,iBAA3B,CACD,CAxBM,CAyBP9B,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsB14F,IAAtB,CAA4B,CACxC,GAAIs5F,CAAAA,SAAS,CAAG,KAAKf,YAAL,CAAoB,KAAKgB,iBAAzB,CAA6C,KAAKD,SAAlE,CACA,MAAO,CACLngF,KAAK,CAAEnZ,IAAI,EAAI,KAAKqnB,YAAb,CAA4B,KAAKiI,WAAjC,CAA+CgqE,SADjD,CAAP,CAGD,CA9BM,CA+BPb,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqB1iG,KAArB,CAA4B,CACvC,GAAI,KAAKwiG,YAAT,CAAuB,CACrB,OACD,CACD,GAAI,KAAKmB,SAAL,EAAkB,KAAKR,iBAA3B,CAA8C,CAC5C,KAAKh/F,KAAL,CAAW,OAAX,CAAoB,KAAKmtB,YAAzB,EACA,KAAKntB,KAAL,CAAW,QAAX,CAAqB,KAAKmtB,YAA1B,EACD,CAHD,IAGO,CACL,KAAKntB,KAAL,CAAW,OAAX,CAAoBnE,KAApB,EACA,KAAKmE,KAAL,CAAW,QAAX,CAAqBnE,KAArB,EACD,CACF,CA1CM,CA2CPuiG,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmB5qF,CAAnB,CAAsB,CAC/B,GAAI,KAAK6qF,YAAT,CAAuB,CACrB,OACD,CACD,GAAIlxE,CAAAA,YAAY,CAAG,KAAKA,YAAxB,CACA,GAAIrlB,CAAAA,OAAO,CAAG0L,CAAC,CAAC1L,OAAhB,CACA,GAAIA,OAAO,GAAK,EAAZ,EAAkBA,OAAO,GAAK,EAAlC,CAAsC,CACpC;AACA,GAAI,KAAK03F,SAAT,CAAoB,CAClBryE,YAAY,EAAI,GAAhB,CACD,CAFD,IAEO,CACLA,YAAY,EAAI,CAAhB,CACD,CACD3Z,CAAC,CAACqD,eAAF,GACArD,CAAC,CAACvF,cAAF,GACD,CATD,IASO,IAAInG,OAAO,GAAK,EAAZ,EAAkBA,OAAO,GAAK,EAAlC,CAAsC,CAC3C,GAAI,KAAK03F,SAAT,CAAoB,CAClBryE,YAAY,EAAI,GAAhB,CACD,CAFD,IAEO,CACLA,YAAY,EAAI,CAAhB,CACD,CACD3Z,CAAC,CAACqD,eAAF,GACArD,CAAC,CAACvF,cAAF,GACD,CACDkf,YAAY,CAAGA,YAAY,CAAG,CAAf,CAAmB,CAAnB,CAAuBA,YAAtC,CACAA,YAAY,CAAGA,YAAY,CAAG,KAAKhlB,GAApB,CAA0B,KAAKA,GAA/B,CAAqCglB,YAApD,CAEA,KAAKntB,KAAL,CAAW,OAAX,CAAoBmtB,YAApB,EACA,KAAKntB,KAAL,CAAW,QAAX,CAAqBmtB,YAArB,EACD,CAxEM,CAyEPc,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBpyB,KAAzB,CAAgC0D,KAAhC,CAAuC,CACtD,GAAI,KAAK8+F,YAAT,CAAuB,CACrB,OACD,CACD,wBACA,GAAI,KAAKmB,SAAT,CAAoB,CAClB,GAAIhgG,CAAAA,MAAM,CAAGD,KAAK,CAACC,MAAnB,CACA,GAAIlE,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBxd,MAAzB,CAAiC,eAAjC,CAAJ,CAAuD,CACrDA,MAAM,CAAGA,MAAM,CAACwR,aAAP,CAAqB,gBAArB,CAAT,CACD,CACD,GAAI1V,MAAM,CAAC0hB,IAAI,CAAC,UAAD,CAAL,CAAN,CAAyBxd,MAAzB,CAAiC,kBAAjC,CAAJ,CAA0D,CACxDA,MAAM,CAAGA,MAAM,CAACoN,UAAhB,CACD,CACD,KAAKoyF,iBAAL,CAAyBz/F,KAAK,CAACghG,OAAN,CAAgB,CAAhB,EAAqB/gG,MAAM,CAACse,WAArD,CACA,KAAKqP,YAAL,CAAoB,KAAK6xE,iBAAL,CAAyBnjG,KAAK,CAAG,GAAjC,CAAuCA,KAA3D,CACD,CAVD,IAUO,CACL,KAAKsxB,YAAL,CAAoBtxB,KAApB,CACD,CACD,KAAK++B,UAAL,CAAkB/+B,KAAlB,CACD,CA5FM,CA6FPyiG,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,EAA6B,CAC9C,GAAI,KAAKD,YAAT,CAAuB,CACrB,OACD,CACD,GAAI,KAAKmB,SAAT,CAAoB,CAClB,KAAKR,iBAAL,CAAyB,KAAKnjG,KAAL,GAAe4E,IAAI,CAACC,KAAL,CAAW,KAAK7E,KAAhB,CAAxC,CACD,CACD,KAAKsxB,YAAL,CAAoB,KAAKtxB,KAAzB,CACA,KAAK++B,UAAL,CAAkB,CAAC,CAAnB,CACD,CAtGM,CA3K+D,CAoRxE1pB,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAI,CAAC,KAAKrV,KAAV,CAAiB,CACf,KAAKmE,KAAL,CAAW,OAAX,CAAoB,CAApB,EACD,CACF,CAxRuE,CAA7C,CA0R7B;AACC,4BAA6B,GAAIwgG,CAAAA,8CAA8C,CAAIzB,qCAAtD,CAC9B;AAMA,yBAEA,GAAI0B,CAAAA,uBAAuB,CAAGz/F,kBAAkB,CAC9Cw/F,8CAD8C,CAE9CrC,wCAF8C,CAG9CU,iDAH8C,CAI9C,KAJ8C,CAK9C,IAL8C,CAM9C,IAN8C,CAO9C,IAP8C,CAAhD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAI6B,CAAAA,iBAAJ,CAAwB,CACrCD,uBAAuB,CAACj/F,OAAxB,CAAgCyB,MAAhC,CAAyC,4BAAzC,CACA,4BAA6B,GAAI09F,CAAAA,aAAa,CAAIF,uBAAuB,CAACjmG,OAA7C,CAC7B;AAGA,0BACAmmG,aAAa,CAAC73F,OAAd,CAAwB,SAAUC,GAAV,CAAe,CACrCA,GAAG,CAAChG,SAAJ,CAAc49F,aAAa,CAACxlG,IAA5B,CAAkCwlG,aAAlC,EACD,CAFD,CAIA,4BAA6B,GAAI9F,CAAAA,IAAI,CAAI8F,aAAZ,CAC7B;AACA,GAAIC,CAAAA,yCAAyC,CAAG,QAA5CA,CAAAA,yCAA4C,EAAW,CACzD,GAAI3jG,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,UADf,CAEEK,KAAK,CAAE,CACL,CAACV,GAAG,CAAC4jG,MAAL,EAAe,aAAe5jG,GAAG,CAACgD,SAD7B,CAELhD,GAAG,CAAC4jG,MAAJ,EAAc,kBAFT,CAFT,CAFO,CASP,CAAC5jG,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAD,CATO,CAUP,CAVO,CAAT,CAYD,CAhBD,CAiBA,GAAI62F,CAAAA,kDAAkD,CAAG,EAAzD,CACAF,yCAAyC,CAAC9hG,aAA1C,CAA0D,IAA1D,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA,4BAA6B,GAAIiiG,CAAAA,6BAA6B,CAAI,CAChE5lG,IAAI,CAAE,SAD0D,CAGhEuL,MAAM,CAAE,CAACgE,iBAAiB,CAAC/D,CAAnB,CAHwD,CAKhE3H,KAAK,CAAE,CACLqc,KAAK,CAAE,CAACpc,MAAD,CAASsF,MAAT,CADF,CAEL3G,MAAM,CAAEqB,MAFH,CAGLgB,SAAS,CAAE,CACT4D,IAAI,CAAEU,MADG,CAETT,OAAO,CAAE,YAFA,CAHN,CAOLk9F,WAAW,CAAE7hG,OAPR,CAQL0hG,MAAM,CAAE1hG,OARH,CASL8hG,YAAY,CAAE,CACZp9F,IAAI,CAAEU,MADM,CAEZT,OAAO,CAAE,QAFG,CATT,CAaLo9F,aAAa,CAAE,CACbr9F,IAAI,CAAEU,MADO,CAEbT,OAAO,CAAE,SAFI,CAbV,CALyD,CAwBhEjD,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL2qF,KAAK,CAAE,EADF,CAEL2V,UAAU,CAAE,CAFP,CAAP,CAID,CA7B+D,CAgChE7hG,OAAO,CAAE,CACP+M,kBAAkB,CAAE,QAASA,CAAAA,kBAAT,EAA8B,CAChD,MAAO,CACLrN,KAAK,CAAE,CACL,SAAU,oBADL,CADF,CAAP,CAKD,CAPM,CAhCuD,CA0ChEI,KAAK,CAAE,CACLxB,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgBkJ,MAAhB,CAAwBC,MAAxB,CAAgC,CACtC,KAAK/G,KAAL,CAAW,QAAX,CAAqB8G,MAArB,CAA6BC,MAA7B,EACD,CAHI,CAILykF,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAe4V,MAAf,CAAuB,CAC5BA,MAAM,CAACj7F,OAAP,CAAe,SAAUyT,KAAV,CAAiB7K,KAAjB,CAAwB,CACrC6K,KAAK,CAAC7K,KAAN,CAAcA,KAAd,CACD,CAFD,EAGD,CARI,CA1CyD,CAArC,CAqD7B;AACC,4BAA6B,GAAIsyF,CAAAA,iCAAiC,CAAIN,6BAAzC,CAC9B;AAMA,yBAEA,GAAIO,CAAAA,eAAe,CAAGtgG,kBAAkB,CACtCqgG,iCADsC,CAEtCT,yCAFsC,CAGtCE,kDAHsC,CAItC,KAJsC,CAKtC,IALsC,CAMtC,IANsC,CAOtC,IAPsC,CAAxC,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIS,CAAAA,SAAJ,CAAgB,CAC7BD,eAAe,CAAC9/F,OAAhB,CAAwByB,MAAxB,CAAiC,8BAAjC,CACA,4BAA6B,GAAIuoF,CAAAA,KAAK,CAAI8V,eAAe,CAAC9mG,OAA7B,CAC7B;AAGA,0BACAgxF,KAAK,CAAC1iF,OAAN,CAAgB,SAAUC,GAAV,CAAe,CAC7BA,GAAG,CAAChG,SAAJ,CAAcyoF,KAAK,CAACrwF,IAApB,CAA0BqwF,KAA1B,EACD,CAFD,CAIA,4BAA6B,GAAIgW,CAAAA,cAAc,CAAIhW,KAAtB,CAC7B;AACA,GAAIiW,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAIxkG,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,SADf,CAEEK,KAAK,CAAE,CACL,CAACV,GAAG,CAACykG,QAAL,EAAiB,MAAQzkG,GAAG,CAACsJ,OAAJ,CAAYtG,SADhC,CAELhD,GAAG,CAACykG,QAAJ,EAAgB,WAFX,CAGLzkG,GAAG,CAAC0kG,MAAJ,EAAc,CAAC1kG,GAAG,CAACoe,KAAnB,EAA4B,CAACpe,GAAG,CAAC2kG,QAAjC,EAA6C,SAHxC,CAIL3kG,GAAG,CAAC2kG,QAAJ,EAAgB,CAAC3kG,GAAG,CAAC4kG,UAArB,EAAmC,CAAC5kG,GAAG,CAACykG,QAAxC,EAAoD,WAJ/C,CAFT,CAQE53F,KAAK,CAAE7M,GAAG,CAAC6M,KARb,CAFO,CAYP,CACE1M,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,eAAf,CAAgCK,KAAK,CAAE,MAAQV,GAAG,CAAC6kG,aAAnD,CAFA,CAGA,CACE1kG,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,eADf,CAEEwM,KAAK,CAAE7M,GAAG,CAAC0kG,MAAJ,CACH,EADG,CAEH,CAAE5Q,WAAW,CAAE9zF,GAAG,CAACsJ,OAAJ,CAAY46F,UAAZ,CAAyB,IAAxC,CAJN,CAFA,CAQA,CACE/jG,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,qBADP,CAENwM,KAAK,CAAE7M,GAAG,CAAC8kG,SAFL,CAAN,CADJ,CARA,CADJ,CAgBE3kG,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,eADf,CAEEK,KAAK,CAAE,OAASV,GAAG,CAAC8b,IAAJ,CAAW,MAAX,CAAoB,MAA7B,CAFT,CAFA,CAMA,CACE9b,GAAG,CAAC6kG,aAAJ,GAAsB,SAAtB,EAAmC7kG,GAAG,CAAC6kG,aAAJ,GAAsB,OAAzD,CACI7kG,GAAG,CAACgN,EAAJ,CAAO,MAAP,CAAe,CACbhN,GAAG,CAAC8b,IAAJ,CACI3b,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,qBADP,CAENK,KAAK,CAAE,CAACV,GAAG,CAAC8b,IAAL,CAFD,CAAN,CADN,CAKI9b,GAAG,CAACe,EAAJ,EANS,CAOb,CAACf,GAAG,CAAC8b,IAAL,EAAa,CAAC9b,GAAG,CAACykG,QAAlB,CACItkG,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,qBAAf,CAAR,CAAgD,CAChDL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC8R,KAAJ,CAAY,CAAnB,CAAP,CADgD,CAAhD,CADN,CAII9R,GAAG,CAACe,EAAJ,EAXS,CAAf,CADJ,CAcIZ,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,+BADP,CAENK,KAAK,CAAE,CACL,YACGV,GAAG,CAAC6kG,aAAJ,GAAsB,SAAtB,CAAkC,OAAlC,CAA4C,OAD/C,CADK,CAFD,CAAN,CAfR,CANA,CA6BA,CA7BA,CAhBJ,CAHA,CADJ,CAqDE1kG,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,eAAf,CAAR,CAA0C,CAC1CF,EAAE,CACA,KADA,CAEA,CACEsM,GAAG,CAAE,OADP,CAEEpM,WAAW,CAAE,gBAFf,CAGEK,KAAK,CAAE,CAAC,MAAQV,GAAG,CAAC6kG,aAAb,CAHT,CAFA,CAOA,CAAC7kG,GAAG,CAACgN,EAAJ,CAAO,OAAP,CAAgB,CAAChN,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+M,KAAX,CAAP,CAAD,CAAhB,CAAD,CAPA,CAQA,CARA,CADwC,CAW1C/M,GAAG,CAACykG,QAAJ,CACItkG,EAAE,CAAC,KAAD,CAAQ,CAAEE,WAAW,CAAE,gBAAf,CAAR,CADN,CAEIF,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,sBADf,CAEEK,KAAK,CAAE,CAAC,MAAQV,GAAG,CAAC6kG,aAAb,CAFT,CAFA,CAMA,CAAC7kG,GAAG,CAACgN,EAAJ,CAAO,aAAP,CAAsB,CAAChN,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACgpF,WAAX,CAAP,CAAD,CAAtB,CAAD,CANA,CAOA,CAPA,CAboC,CAA1C,CArDJ,CAZO,CAAT,CA0FD,CA9FD,CA+FA,GAAI+b,CAAAA,iDAAiD,CAAG,EAAxD,CACAP,wCAAwC,CAAC3iG,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAImjG,CAAAA,4BAA4B,CAAI,CAC/D9mG,IAAI,CAAE,QADyD,CAG/D6D,KAAK,CAAE,CACLgL,KAAK,CAAEzF,MADF,CAELwU,IAAI,CAAExU,MAFD,CAGL0hF,WAAW,CAAE1hF,MAHR,CAILwtF,MAAM,CAAExtF,MAJH,CAHwD,CAU/D1D,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLkO,KAAK,CAAE,CAAC,CADH,CAELgzF,SAAS,CAAE,EAFN,CAGLG,cAAc,CAAE,EAHX,CAAP,CAKD,CAhB8D,CAiB/Dr/F,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,KAAK0D,OAAL,CAAailF,KAAb,CAAmBlrF,IAAnB,CAAwB,IAAxB,EACD,CAnB8D,CAoB/D4T,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAIs3E,CAAAA,KAAK,CAAG,KAAKjlF,OAAL,CAAailF,KAAzB,CACA,GAAIz8E,CAAAA,KAAK,CAAGy8E,KAAK,CAAC1rF,OAAN,CAAc,IAAd,CAAZ,CACA,GAAIiP,KAAK,EAAI,CAAb,CAAgB,CACdy8E,KAAK,CAACtsE,MAAN,CAAanQ,KAAb,CAAoB,CAApB,EACD,CACF,CA1B8D,CA6B/D7O,QAAQ,CAAE,CACR4hG,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,MAAO,MAAK/P,MAAL,EAAe,KAAKmQ,cAA3B,CACD,CAHO,CAIRC,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAIC,CAAAA,QAAQ,CAAG,KAAK77F,OAAL,CAAailF,KAAb,CAAmB,KAAKz8E,KAAL,CAAa,CAAhC,CAAf,CACA,MAAOqzF,CAAAA,QAAQ,CAAGA,QAAQ,CAACN,aAAZ,CAA4B,MAA3C,CACD,CAPO,CAQRF,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAKr7F,OAAL,CAAay6F,WAApB,CACD,CAVO,CAWRa,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,MAAO,MAAKt7F,OAAL,CAAatG,SAAb,GAA2B,UAAlC,CACD,CAbO,CAcRyhG,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAKn7F,OAAL,CAAas6F,MAApB,CACD,CAhBO,CAiBRc,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,GAAI3/F,CAAAA,MAAM,CAAG,KAAKuE,OAAlB,CACA,MAAOvE,CAAAA,MAAM,CAACwpF,KAAP,CAAaxpF,MAAM,CAACwpF,KAAP,CAAaz4E,MAAb,CAAsB,CAAnC,IAA0C,IAAjD,CACD,CApBO,CAqBRsvF,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,MAAO,MAAK97F,OAAL,CAAailF,KAAb,CAAmBz4E,MAA1B,CACD,CAvBO,CAwBRsI,KAAK,CAAE,QAASA,CAAAA,KAAT,EAAiB,CACtB,GAAIqmF,CAAAA,QAAQ,CAAG,KAAKA,QAApB,CACIrmF,KAAK,CAAG,KAAK9U,OAAL,CAAa8U,KADzB,CAGA,MAAOqmF,CAAAA,QAAQ,CAAG,EAAH,CAAQrmF,KAAvB,CACD,CA7BO,CA+BRvR,KAAK,CAAE,QAASA,CAAAA,KAAT,EAAiB,CACtB,GAAIA,CAAAA,KAAK,CAAG,EAAZ,CACA,GAAI9H,CAAAA,MAAM,CAAG,KAAKuE,OAAlB,CACA,GAAIkgC,CAAAA,GAAG,CAAGzkC,MAAM,CAACwpF,KAAP,CAAaz4E,MAAvB,CAEA,GAAIsI,CAAAA,KAAK,CAAG,MAAO,MAAKA,KAAZ,GAAsB,QAAtB,CAAiC,KAAKA,KAAL,CAAa,IAA9C,CAAqD,KAAKA,KAAL,CAAa,KAAKA,KAAlB,CAA0B,KAAOorB,GAAG,EAAI,KAAKm7D,QAAL,CAAgB,CAAhB,CAAoB,CAAxB,CAAV,EAAwC,GAAnI,CACA93F,KAAK,CAACw4F,SAAN,CAAkBjnF,KAAlB,CACA,GAAI,KAAKwmF,UAAT,CAAqB,MAAO/3F,CAAAA,KAAP,CACrB,GAAI,KAAK63F,MAAT,CAAiB,CACf73F,KAAK,CAACy4F,QAAN,CAAiB,IAAM,KAAKF,UAAX,CAAwB,GAAzC,CACD,CAFD,IAEO,CACLv4F,KAAK,CAACinF,WAAN,CAAoB,CAAC,KAAKxqF,OAAL,CAAa46F,UAAd,CAA2B,IAA/C,CACD,CAED,MAAOr3F,CAAAA,KAAP,CACD,CA9CO,CA7BqD,CA8E/DxK,OAAO,CAAE,CACPkjG,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsBnjG,GAAtB,CAA2B,CACvC,GAAIojG,CAAAA,SAAS,CAAG,KAAKl8F,OAAL,CAAas6B,SAAb,CAAuB,KAAK9xB,KAAL,CAAa,CAApC,CAAhB,CAEA,GAAI1P,GAAG,CAAG,KAAK0P,KAAf,CAAsB,CACpB,KAAKmzF,cAAL,CAAsB,KAAK37F,OAAL,CAAa06F,YAAnC,CACD,CAFD,IAEO,IAAI5hG,GAAG,GAAK,KAAK0P,KAAb,EAAsB,KAAKozF,UAAL,GAAoB,OAA9C,CAAuD,CAC5D,KAAKD,cAAL,CAAsB,KAAK37F,OAAL,CAAa26F,aAAnC,CACD,CAFM,IAEA,CACL,KAAKgB,cAAL,CAAsB,MAAtB,CACD,CAED,GAAIO,SAAJ,CAAeA,SAAS,CAACC,YAAV,CAAuB,KAAKR,cAA5B,EAChB,CAbM,CAcPQ,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsB3Q,MAAtB,CAA8B,CAC1C,GAAIjlE,CAAAA,IAAI,CAAG,GAAX,CACA,GAAIhjB,CAAAA,KAAK,CAAG,EAAZ,CAEAA,KAAK,CAAC64F,eAAN,CAAwB,IAAM,KAAK5zF,KAAX,CAAmB,IAA3C,CACA,GAAIgjF,MAAM,GAAK,KAAKxrF,OAAL,CAAa26F,aAA5B,CAA2C,CACzCp0E,IAAI,CAAG,KAAKg1E,aAAL,GAAuB,OAAvB,CAAiC,CAAjC,CAAqC,CAA5C,CACD,CAFD,IAEO,IAAI/P,MAAM,GAAK,MAAf,CAAuB,CAC5BjlE,IAAI,CAAG,CAAP,CACAhjB,KAAK,CAAC64F,eAAN,CAAwB,CAAC,GAAD,CAAO,KAAK5zF,KAAZ,CAAoB,IAA5C,CACD,CAEDjF,KAAK,CAAC84F,WAAN,CAAoB91E,IAAI,EAAI,CAAC,KAAK40E,QAAd,CAAyB,KAAzB,CAAiC,CAArD,CACA,KAAKn7F,OAAL,CAAatG,SAAb,GAA2B,UAA3B,CAAwC6J,KAAK,CAAC0a,MAAN,CAAesI,IAAI,CAAG,GAA9D,CAAoEhjB,KAAK,CAACsB,KAAN,CAAc0hB,IAAI,CAAG,GAAzF,CAEA,KAAKi1E,SAAL,CAAiBj4F,KAAjB,CACD,CA9BM,CA9EsD,CA+G/D2C,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIxF,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI47F,CAAAA,OAAO,CAAG,KAAKhiF,MAAL,CAAY,OAAZ,CAAqB,SAAUxhB,GAAV,CAAe,CAChD4H,KAAK,CAAC4Z,MAAN,CAAa,gBAAb,CAA+B5Z,KAAK,CAACu7F,YAArC,CAAmD,CAAE57F,SAAS,CAAE,IAAb,CAAnD,EACAK,KAAK,CAAC4Z,MAAN,CAAa,uBAAb,CAAsC,UAAY,CAChD,GAAItC,CAAAA,WAAW,CAAGtX,KAAK,CAACV,OAAN,CAAc3I,MAAhC,CACAqJ,KAAK,CAACu7F,YAAN,CAAmBjkF,WAAnB,EACD,CAHD,CAGG,CAAE3X,SAAS,CAAE,IAAb,CAHH,EAIAi8F,OAAO,GACR,CAPa,CAAd,CAQD,CA1H8D,CAApC,CA4H7B;AACC,4BAA6B,GAAIC,CAAAA,gCAAgC,CAAIb,4BAAxC,CAC9B;AAMA,yBAEA,GAAIc,CAAAA,cAAc,CAAG/hG,kBAAkB,CACrC8hG,gCADqC,CAErCrB,wCAFqC,CAGrCO,iDAHqC,CAIrC,KAJqC,CAKrC,IALqC,CAMrC,IANqC,CAOrC,IAPqC,CAAvC,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIgB,CAAAA,QAAJ,CAAe,CAC5BD,cAAc,CAACvhG,OAAf,CAAuByB,MAAvB,CAAgC,6BAAhC,CACA,4BAA6B,GAAI6pB,CAAAA,IAAI,CAAIi2E,cAAc,CAACvoG,OAA3B,CAC7B;AAGA,0BACAsyB,IAAI,CAAChkB,OAAL,CAAe,SAAUC,GAAV,CAAe,CAC5BA,GAAG,CAAChG,SAAJ,CAAc+pB,IAAI,CAAC3xB,IAAnB,CAAyB2xB,IAAzB,EACD,CAFD,CAIA,4BAA6B,GAAIm2E,CAAAA,aAAa,CAAIn2E,IAArB,CAC7B;AACA,GAAIo2E,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAIjmG,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEO,KAAK,CAAEV,GAAG,CAACkmG,eADb,CAEE5lG,EAAE,CAAE,CACFY,UAAU,CAAE,oBAASC,MAAT,CAAiB,CAC3BA,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAACi+C,gBAAJ,CAAqB98C,MAArB,CAAP,CACD,CAJC,CAKFE,UAAU,CAAE,oBAASF,MAAT,CAAiB,CAC3BA,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAACgmC,gBAAJ,CAAqB7kC,MAArB,CAAP,CACD,CARC,CAFN,CAFO,CAeP,CACEhB,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,wBADf,CAEEwM,KAAK,CAAE,CAAE0a,MAAM,CAAEvnB,GAAG,CAACunB,MAAd,CAFT,CAFA,CAMA,CACEvnB,GAAG,CAACmmG,YAAJ,CACIhmG,EAAE,CAAC,YAAD,CAAe,CAAEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,qBAAR,CAAT,CAAf,CAA2D,CAC3DiC,EAAE,CACA,QADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CACH,CAACoB,GAAG,CAAComG,KAAJ,GAAc,QAAd,EAA0BpmG,GAAG,CAACw8B,KAA/B,IACCx8B,GAAG,CAACqmG,IAAJ,EAAYrmG,GAAG,CAACshB,WAAJ,CAAkB,CAD/B,CAJJ,CAMEhV,UAAU,CACR,4DAPJ,CADU,CADd,CAYEjM,WAAW,CAAE,6CAZf,CAaE+H,KAAK,CAAE,CAAExB,IAAI,CAAE,QAAR,CAbT,CAcEtG,EAAE,CAAE,CACFY,UAAU,CAAE,oBAASC,MAAT,CAAiB,CAC3BnB,GAAG,CAACsmG,iBAAJ,CAAsB,MAAtB,EACD,CAHC,CAIFjlG,UAAU,CAAErB,GAAG,CAACumG,iBAJd,CAKFhmG,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBA,MAAM,CAACyY,eAAP,GACA5Z,GAAG,CAACwmG,mBAAJ,CAAwBxmG,GAAG,CAACshB,WAAJ,CAAkB,CAA1C,EACD,CARC,CAdN,CAFA,CA2BA,CAACnhB,EAAE,CAAC,GAAD,CAAM,CAAEE,WAAW,CAAE,oBAAf,CAAN,CAAH,CA3BA,CADyD,CAA3D,CADN,CAgCIL,GAAG,CAACe,EAAJ,EAjCN,CAkCEf,GAAG,CAACmmG,YAAJ,CACIhmG,EAAE,CAAC,YAAD,CAAe,CAAEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,sBAAR,CAAT,CAAf,CAA4D,CAC5DiC,EAAE,CACA,QADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CACH,CAACoB,GAAG,CAAComG,KAAJ,GAAc,QAAd,EAA0BpmG,GAAG,CAACw8B,KAA/B,IACCx8B,GAAG,CAACqmG,IAAJ,EAAYrmG,GAAG,CAACshB,WAAJ,CAAkBthB,GAAG,CAACwhB,KAAJ,CAAU1L,MAAV,CAAmB,CADlD,CAJJ,CAMExJ,UAAU,CACR,2EAPJ,CADU,CADd,CAYEjM,WAAW,CAAE,8CAZf,CAaE+H,KAAK,CAAE,CAAExB,IAAI,CAAE,QAAR,CAbT,CAcEtG,EAAE,CAAE,CACFY,UAAU,CAAE,oBAASC,MAAT,CAAiB,CAC3BnB,GAAG,CAACsmG,iBAAJ,CAAsB,OAAtB,EACD,CAHC,CAIFjlG,UAAU,CAAErB,GAAG,CAACumG,iBAJd,CAKFhmG,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBA,MAAM,CAACyY,eAAP,GACA5Z,GAAG,CAACwmG,mBAAJ,CAAwBxmG,GAAG,CAACshB,WAAJ,CAAkB,CAA1C,EACD,CARC,CAdN,CAFA,CA2BA,CAACnhB,EAAE,CAAC,GAAD,CAAM,CAAEE,WAAW,CAAE,qBAAf,CAAN,CAAH,CA3BA,CAD0D,CAA5D,CADN,CAgCIL,GAAG,CAACe,EAAJ,EAlEN,CAmEEf,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAnEF,CANA,CA2EA,CA3EA,CADJ,CA8EEhN,GAAG,CAACymG,iBAAJ,GAA0B,MAA1B,CACItmG,EAAE,CACA,IADA,CAEA,CAAEO,KAAK,CAAEV,GAAG,CAAC0mG,iBAAb,CAFA,CAGA1mG,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAACwhB,KAAX,CAAkB,SAAS3Y,IAAT,CAAeiJ,KAAf,CAAsB,CACtC,MAAO3R,CAAAA,EAAE,CACP,IADO,CAEP,CACEjB,GAAG,CAAE4S,KADP,CAEEpR,KAAK,CAAE,CACL,wBADK,CAEL,2BAA6BV,GAAG,CAACgD,SAF5B,CAGL,CAAE,YAAa8O,KAAK,GAAK9R,GAAG,CAACshB,WAA7B,CAHK,CAFT,CAOEhhB,EAAE,CAAE,CACFY,UAAU,CAAE,oBAASC,MAAT,CAAiB,CAC3BnB,GAAG,CAAC2mG,uBAAJ,CAA4B70F,KAA5B,EACD,CAHC,CAIFvR,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBA,MAAM,CAACyY,eAAP,GACA5Z,GAAG,CAAC4mG,oBAAJ,CAAyB90F,KAAzB,EACD,CAPC,CAPN,CAFO,CAmBP,CACE3R,EAAE,CAAC,QAAD,CAAW,CAAEE,WAAW,CAAE,qBAAf,CAAX,CAAmD,CACnDL,GAAG,CAAC6mG,QAAJ,CACI1mG,EAAE,CAAC,MAAD,CAAS,CAACH,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOoH,IAAI,CAACsB,KAAZ,CAAP,CAAD,CAAT,CADN,CAEInK,GAAG,CAACe,EAAJ,EAH+C,CAAnD,CADJ,CAnBO,CAAT,CA2BD,CA5BD,CAHA,CAgCA,CAhCA,CADN,CAmCIf,GAAG,CAACe,EAAJ,EAjHN,CAfO,CAAT,CAmID,CAvID,CAwIA,GAAI+lG,CAAAA,iDAAiD,CAAG,EAAxD,CACAb,wCAAwC,CAACpkG,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA,GAAIklG,CAAAA,SAAS,CAAGrpG,mBAAmB,CAAC,EAAD,CAAnC,CACA,GAAIspG,CAAAA,gBAAgB,CAAG,aAAatpG,mBAAmB,CAAC0B,CAApB,CAAsB2nG,SAAtB,CAApC,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA,4BAA6B,GAAIE,CAAAA,yCAAyC,CAAI,CAC5E/oG,IAAI,CAAE,YADsE,CAG5E6D,KAAK,CAAE,CACLmlG,YAAY,CAAE,CACZtgG,IAAI,CAAE5E,MADM,CAEZ6E,OAAO,CAAE,CAFG,CADT,CAKL0gB,MAAM,CAAEjgB,MALH,CAML2Q,OAAO,CAAE,CACPrR,IAAI,CAAEU,MADC,CAEPT,OAAO,CAAE,OAFF,CANJ,CAULsgG,QAAQ,CAAE,CACRvgG,IAAI,CAAE1E,OADE,CAER2E,OAAO,CAAE,IAFD,CAVL,CAcLuoB,QAAQ,CAAE,CACRxoB,IAAI,CAAE5E,MADE,CAER6E,OAAO,CAAE,IAFD,CAdL,CAkBL4/F,iBAAiB,CAAEn/F,MAlBd,CAmBL8/F,SAAS,CAAE,CACTxgG,IAAI,CAAE1E,OADG,CAET2E,OAAO,CAAE,IAFA,CAnBN,CAuBLu/F,KAAK,CAAE,CACLx/F,IAAI,CAAEU,MADD,CAELT,OAAO,CAAE,OAFJ,CAvBF,CA2BLD,IAAI,CAAEU,MA3BD,CA4BL++F,IAAI,CAAE,CACJz/F,IAAI,CAAE1E,OADF,CAEJ2E,OAAO,CAAE,IAFL,CA5BD,CAgCL7D,SAAS,CAAE,CACT4D,IAAI,CAAEU,MADG,CAETT,OAAO,CAAE,YAFA,CAGTG,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmB5E,GAAnB,CAAwB,CACjC,MAAO,CAAC,YAAD,CAAe,UAAf,EAA2BS,OAA3B,CAAmCT,GAAnC,IAA4C,CAAC,CAApD,CACD,CALQ,CAhCN,CAHqE,CA4C5EwB,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL4d,KAAK,CAAE,EADF,CAELF,WAAW,CAAE,CAAC,CAFT,CAGL+lF,cAAc,CAAE,CAHX,CAILjd,KAAK,CAAE,IAJF,CAKL5tD,KAAK,CAAE,KALF,CAAP,CAOD,CApD2E,CAuD5Ev5B,QAAQ,CAAE,CACRkjG,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,MAAO,MAAKC,KAAL,GAAe,OAAf,EAA0B,KAAKpjG,SAAL,GAAmB,UAApD,CACD,CAHO,CAIR6jG,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAKrlF,KAAL,CAAWiS,IAAX,CAAgB,SAAU5qB,IAAV,CAAgB,CACrC,MAAOA,CAAAA,IAAI,CAACsB,KAAL,CAAWwZ,QAAX,GAAsB7N,MAAtB,CAA+B,CAAtC,CACD,CAFM,CAAP,CAGD,CARO,CASRowF,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,GAAIvpD,CAAAA,OAAO,CAAG,CAAC,aAAD,CAAgB,gBAAkB,KAAK35C,SAAvC,CAAd,CACA,GAAI,KAAK4D,IAAL,GAAc,MAAlB,CAA0B,CACxB+1C,OAAO,CAACt5C,IAAR,CAAa,mBAAb,EACD,CACD,MAAOs5C,CAAAA,OAAP,CACD,CAfO,CAgBR+pD,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,EAA6B,CAC9C,GAAI/pD,CAAAA,OAAO,CAAG,CAAC,yBAAD,CAA4B,4BAA8B,KAAK35C,SAA/D,CAAd,CACA,GAAI,KAAK6jG,QAAT,CAAmB,CACjBlqD,OAAO,CAACt5C,IAAR,CAAa,iCAAb,EACD,CACD,GAAI,KAAKojG,iBAAL,GAA2B,SAA3B,EAAwC,KAAK7/F,IAAL,GAAc,MAA1D,CAAkE,CAChE+1C,OAAO,CAACt5C,IAAR,CAAa,kCAAb,EACD,CACD,MAAOs5C,CAAAA,OAAP,CACD,CAzBO,CAvDkE,CAmF5Ex6C,KAAK,CAAE,CACLqf,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAepf,GAAf,CAAoB,CACzB,GAAIA,GAAG,CAAC0T,MAAJ,CAAa,CAAjB,CAAoB,KAAKwxF,aAAL,CAAmB,KAAKJ,YAAxB,EACrB,CAHI,CAIL5lF,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqBlf,GAArB,CAA0B0H,MAA1B,CAAkC,CAC7C,KAAKy9F,iBAAL,CAAuBz9F,MAAvB,EACA,GAAIA,MAAM,CAAG,CAAC,CAAd,CAAiB,CACf,KAAK/G,KAAL,CAAW,QAAX,CAAqBX,GAArB,CAA0B0H,MAA1B,EACD,CACF,CATI,CAULq9F,QAAQ,CAAE,QAASA,CAAAA,QAAT,CAAkB/kG,GAAlB,CAAuB,CAC/BA,GAAG,CAAG,KAAK0nF,UAAL,EAAH,CAAuB,KAAK0d,UAAL,EAA1B,CACD,CAZI,CAaLnB,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,KAAKiB,aAAL,CAAmB,KAAKhmF,WAAxB,EACD,CAfI,CAnFqE,CAqG5Ejf,OAAO,CAAE,CACP47C,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,KAAKzhB,KAAL,CAAa,IAAb,CACA,KAAKgrE,UAAL,GACD,CAJM,CAKPxhE,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,KAAKxJ,KAAL,CAAa,KAAb,CACA,KAAKstD,UAAL,GACD,CARM,CASP2d,WAAW,CAAE,QAASA,CAAAA,WAAT,CAAqB5+F,IAArB,CAA2BiJ,KAA3B,CAAkC,CAC7C,GAAIgE,CAAAA,MAAM,CAAG,KAAK0L,KAAL,CAAW1L,MAAxB,CACA,GAAIhE,KAAK,GAAKgE,MAAM,CAAG,CAAnB,EAAwBjN,IAAI,CAAC6+F,OAA7B,EAAwC,KAAKlmF,KAAL,CAAW,CAAX,EAAc7gB,MAAtD,EAAgEkI,IAAI,CAAC6+F,OAAL,EAAgB,KAAKlmF,KAAL,CAAW1P,KAAK,CAAG,CAAnB,CAAhB,EAAyC,KAAK0P,KAAL,CAAW1P,KAAK,CAAG,CAAnB,EAAsBnR,MAAnI,CAA2I,CACzI,MAAO,MAAP,CACD,CAFD,IAEO,IAAImR,KAAK,GAAK,CAAV,EAAejJ,IAAI,CAAC6+F,OAApB,EAA+B,KAAKlmF,KAAL,CAAW1L,MAAM,CAAG,CAApB,EAAuBnV,MAAtD,EAAgEkI,IAAI,CAAC6+F,OAAL,EAAgB,KAAKlmF,KAAL,CAAW1P,KAAK,CAAG,CAAnB,CAAhB,EAAyC,KAAK0P,KAAL,CAAW1P,KAAK,CAAG,CAAnB,EAAsBnR,MAAnI,CAA2I,CAChJ,MAAO,OAAP,CACD,CACD,MAAO,MAAP,CACD,CAjBM,CAkBP2lG,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2BF,KAA3B,CAAkC,CACnD,GAAIp8F,CAAAA,KAAK,CAAG,IAAZ,CAEA,GAAI,KAAKhH,SAAL,GAAmB,UAAvB,CAAmC,OACnC,KAAKwe,KAAL,CAAWtY,OAAX,CAAmB,SAAUL,IAAV,CAAgBiJ,KAAhB,CAAuB,CACxC,GAAIs0F,KAAK,GAAKp8F,KAAK,CAACy9F,WAAN,CAAkB5+F,IAAlB,CAAwBiJ,KAAxB,CAAd,CAA8C,CAC5CjJ,IAAI,CAAC2zB,KAAL,CAAa,IAAb,CACD,CACF,CAJD,EAKD,CA3BM,CA4BP+pE,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,EAA6B,CAC9C,GAAI,KAAKvjG,SAAL,GAAmB,UAAvB,CAAmC,OACnC,KAAKwe,KAAL,CAAWtY,OAAX,CAAmB,SAAUL,IAAV,CAAgB,CACjCA,IAAI,CAAC2zB,KAAL,CAAa,KAAb,CACD,CAFD,EAGD,CAjCM,CAkCPmrE,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,KAAKnmF,KAAL,CAAa,KAAKoiB,SAAL,CAAehkB,MAAf,CAAsB,SAAUjD,KAAV,CAAiB,CAClD,MAAOA,CAAAA,KAAK,CAACtX,QAAN,CAAenH,IAAf,GAAwB,gBAA/B,CACD,CAFY,CAAb,CAGD,CAtCM,CAuCPqpG,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2BK,QAA3B,CAAqC,CACtD,GAAIn8F,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAK+V,KAAL,CAAWtY,OAAX,CAAmB,SAAUL,IAAV,CAAgBiJ,KAAhB,CAAuB,CACxCjJ,IAAI,CAACg/F,aAAL,CAAmB/1F,KAAnB,CAA0BrG,MAAM,CAAC6V,WAAjC,CAA8CsmF,QAA9C,EACD,CAFD,EAGD,CA7CM,CA8CPE,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAI,KAAKxmF,WAAL,CAAmB,KAAKE,KAAL,CAAW1L,MAAX,CAAoB,CAA3C,CAA8C,CAC5C,KAAKwL,WAAL,GACD,CAFD,IAEO,IAAI,KAAK+kF,IAAT,CAAe,CACpB,KAAK/kF,WAAL,CAAmB,CAAnB,CACD,CACF,CApDM,CAqDPkmF,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAI,KAAKpd,KAAT,CAAgB,CACd56D,aAAa,CAAC,KAAK46D,KAAN,CAAb,CACA,KAAKA,KAAL,CAAa,IAAb,CACD,CACF,CA1DM,CA2DPN,UAAU,CAAE,QAASA,CAAAA,UAAT,EAAsB,CAChC,GAAI,KAAK16D,QAAL,EAAiB,CAAjB,EAAsB,CAAC,KAAK+3E,QAA5B,EAAwC,KAAK/c,KAAjD,CAAwD,OACxD,KAAKA,KAAL,CAAa16D,WAAW,CAAC,KAAKo4E,UAAN,CAAkB,KAAK14E,QAAvB,CAAxB,CACD,CA9DM,CA+DPk4E,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuBx1F,KAAvB,CAA8B,CAC3C,GAAI,MAAOA,CAAAA,KAAP,GAAiB,QAArB,CAA+B,CAC7B,GAAIi2F,CAAAA,aAAa,CAAG,KAAKvmF,KAAL,CAAW5B,MAAX,CAAkB,SAAU/W,IAAV,CAAgB,CACpD,MAAOA,CAAAA,IAAI,CAAC3K,IAAL,GAAc4T,KAArB,CACD,CAFmB,CAApB,CAGA,GAAIi2F,aAAa,CAACjyF,MAAd,CAAuB,CAA3B,CAA8B,CAC5BhE,KAAK,CAAG,KAAK0P,KAAL,CAAW3e,OAAX,CAAmBklG,aAAa,CAAC,CAAD,CAAhC,CAAR,CACD,CACF,CACDj2F,KAAK,CAAG9P,MAAM,CAAC8P,KAAD,CAAd,CACA,GAAIhP,KAAK,CAACgP,KAAD,CAAL,EAAgBA,KAAK,GAAKtO,IAAI,CAACC,KAAL,CAAWqO,KAAX,CAA9B,CAAiD,CAC/CsE,OAAO,CAACua,IAAR,CAAa,mDAAb,EACA,OACD,CACD,GAAI7a,CAAAA,MAAM,CAAG,KAAK0L,KAAL,CAAW1L,MAAxB,CACA,GAAI8xF,CAAAA,QAAQ,CAAG,KAAKtmF,WAApB,CACA,GAAIxP,KAAK,CAAG,CAAZ,CAAe,CACb,KAAKwP,WAAL,CAAmB,KAAK+kF,IAAL,CAAYvwF,MAAM,CAAG,CAArB,CAAyB,CAA5C,CACD,CAFD,IAEO,IAAIhE,KAAK,EAAIgE,MAAb,CAAqB,CAC1B,KAAKwL,WAAL,CAAmB,KAAK+kF,IAAL,CAAY,CAAZ,CAAgBvwF,MAAM,CAAG,CAA5C,CACD,CAFM,IAEA,CACL,KAAKwL,WAAL,CAAmBxP,KAAnB,CACD,CACD,GAAI81F,QAAQ,GAAK,KAAKtmF,WAAtB,CAAmC,CACjC,KAAKimF,iBAAL,CAAuBK,QAAvB,EACD,CACF,CAzFM,CA0FP1/F,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,KAAKo/F,aAAL,CAAmB,KAAKhmF,WAAL,CAAmB,CAAtC,EACD,CA5FM,CA6FPhZ,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,KAAKg/F,aAAL,CAAmB,KAAKhmF,WAAL,CAAmB,CAAtC,EACD,CA/FM,CAgGPslF,oBAAoB,CAAE,QAASA,CAAAA,oBAAT,CAA8B90F,KAA9B,CAAqC,CACzD,KAAKwP,WAAL,CAAmBxP,KAAnB,CACD,CAlGM,CAmGPk2F,oBAAoB,CAAE,QAASA,CAAAA,oBAAT,CAA8Bl2F,KAA9B,CAAqC,CACzD,GAAI,KAAKmG,OAAL,GAAiB,OAAjB,EAA4BnG,KAAK,GAAK,KAAKwP,WAA/C,CAA4D,CAC1D,KAAKA,WAAL,CAAmBxP,KAAnB,CACD,CACF,CAvGM,CArGmE,CA+M5EmC,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIuC,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAKgwF,mBAAL,CAA2BQ,gBAAgB,GAAG,GAAH,CAAQ,IAAR,CAAc,SAAUl1F,KAAV,CAAiB,CACxE0E,MAAM,CAAC8wF,aAAP,CAAqBx1F,KAArB,EACD,CAF0C,CAA3C,CAGA,KAAK60F,uBAAL,CAA+BK,gBAAgB,GAAG,GAAH,CAAQ,SAAUl1F,KAAV,CAAiB,CACtE0E,MAAM,CAACwxF,oBAAP,CAA4Bl2F,KAA5B,EACD,CAF8C,CAA/C,CAGD,CAxN2E,CAyN5EtC,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAIwH,CAAAA,MAAM,CAAG,IAAb,CAEA,KAAK2wF,WAAL,GACA,KAAKj8F,SAAL,CAAe,UAAY,CACzBrN,MAAM,CAACqgC,aAAa,CAAC,mBAAD,CAAd,CAAN,CAA2C1nB,MAAM,CAACvI,GAAlD,CAAuDuI,MAAM,CAACuwF,iBAA9D,EACA,GAAIvwF,MAAM,CAACkwF,YAAP,CAAsBlwF,MAAM,CAACwK,KAAP,CAAa1L,MAAnC,EAA6CkB,MAAM,CAACkwF,YAAP,EAAuB,CAAxE,CAA2E,CACzElwF,MAAM,CAACsK,WAAP,CAAqBtK,MAAM,CAACkwF,YAA5B,CACD,CACDlwF,MAAM,CAAC8yE,UAAP,GACD,CAND,EAOD,CApO2E,CAqO5E7yE,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI,KAAKxI,GAAT,CAAcpQ,MAAM,CAACqgC,aAAa,CAAC,sBAAD,CAAd,CAAN,CAA8C,KAAKjwB,GAAnD,CAAwD,KAAK84F,iBAA7D,EACd,KAAKC,UAAL,GACD,CAxO2E,CAAjD,CA0O7B;AACC,4BAA6B,GAAIS,CAAAA,kDAAkD,CAAIhB,yCAA1D,CAC9B;AAMA,yBAEA,GAAIiB,CAAAA,2BAA2B,CAAGnkG,kBAAkB,CAClDkkG,kDADkD,CAElDhC,wCAFkD,CAGlDa,iDAHkD,CAIlD,KAJkD,CAKlD,IALkD,CAMlD,IANkD,CAOlD,IAPkD,CAApD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIqB,CAAAA,qBAAJ,CAA4B,CACzCD,2BAA2B,CAAC3jG,OAA5B,CAAoCyB,MAApC,CAA6C,gCAA7C,CACA,4BAA6B,GAAIoiG,CAAAA,iBAAiB,CAAIF,2BAA2B,CAAC3qG,OAArD,CAC7B;AAGA,0BACA6qG,iBAAiB,CAACv8F,OAAlB,CAA4B,SAAUC,GAAV,CAAe,CACzCA,GAAG,CAAChG,SAAJ,CAAcsiG,iBAAiB,CAAClqG,IAAhC,CAAsCkqG,iBAAtC,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,QAAQ,CAAID,iBAAhB,CAC7B;AACA,GAAIE,CAAAA,OAAO,CAAG,CACZ9c,QAAQ,CAAE,CACRjoF,MAAM,CAAE,cADA,CAERouF,MAAM,CAAE,WAFA,CAGR4W,UAAU,CAAE,cAHJ,CAIRt+F,IAAI,CAAE,QAJE,CAKR/K,GAAG,CAAE,UALG,CAMRspG,IAAI,CAAE,GANE,CAORC,MAAM,CAAE,SAPA,CAQRzlG,SAAS,CAAE,KARH,CADE,CAWZ0lG,UAAU,CAAE,CACVnlG,MAAM,CAAE,aADE,CAEVouF,MAAM,CAAE,YAFE,CAGV4W,UAAU,CAAE,aAHF,CAIVt+F,IAAI,CAAE,OAJI,CAKV/K,GAAG,CAAE,YALK,CAMVspG,IAAI,CAAE,GANI,CAOVC,MAAM,CAAE,SAPE,CAQVzlG,SAAS,CAAE,MARD,CAXA,CAAd,CAuBA,QAAS2lG,CAAAA,gBAAT,CAA0B/9F,IAA1B,CAAgC,CAC9B,GAAIg+F,CAAAA,IAAI,CAAGh+F,IAAI,CAACg+F,IAAhB,CACI3+F,IAAI,CAAGW,IAAI,CAACX,IADhB,CAEI4+F,GAAG,CAAGj+F,IAAI,CAACi+F,GAFf,CAIA,GAAIh8F,CAAAA,KAAK,CAAG,EAAZ,CACA,GAAIi8F,CAAAA,SAAS,CAAG,YAAcD,GAAG,CAACL,IAAlB,CAAyB,GAAzB,CAA+BI,IAA/B,CAAsC,IAAtD,CAEA/7F,KAAK,CAACg8F,GAAG,CAAC5+F,IAAL,CAAL,CAAkBA,IAAlB,CACA4C,KAAK,CAACghB,SAAN,CAAkBi7E,SAAlB,CACAj8F,KAAK,CAACqpE,WAAN,CAAoB4yB,SAApB,CACAj8F,KAAK,CAACspE,eAAN,CAAwB2yB,SAAxB,CAEA,MAAOj8F,CAAAA,KAAP,CACD,EACD;AAIA,0BAln+BkE,CAmn+BlE,4BAA6B,GAAIk8F,CAAAA,OAAO,CAAI,CAC1C7qG,IAAI,CAAE,KADoC,CAG1C6D,KAAK,CAAE,CACLypF,QAAQ,CAAEtpF,OADL,CAEL+H,IAAI,CAAE3C,MAFD,CAGLshG,IAAI,CAAE5mG,MAHD,CAHmC,CAS1CiB,QAAQ,CAAE,CACR4lG,GAAG,CAAE,QAASA,CAAAA,GAAT,EAAe,CAClB,MAAOP,CAAAA,OAAO,CAAC,KAAK9c,QAAL,CAAgB,UAAhB,CAA6B,YAA9B,CAAd,CACD,CAHO,CAIRr0B,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,MAAK7tD,OAAL,CAAa6tD,IAApB,CACD,CANO,CATgC,CAkB1ClzD,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,GAAIuE,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CACI2+F,IAAI,CAAG,KAAKA,IADhB,CAEIC,GAAG,CAAG,KAAKA,GAFf,CAKA,MAAOnjG,CAAAA,CAAC,CACN,KADM,CAEN,CACE,QAAS,CAAC,mBAAD,CAAsB,MAAQmjG,GAAG,CAAC3pG,GAAlC,CADX,CAEEoB,EAAE,CAAE,CACF,YAAa,KAAK0oG,iBADhB,CAFN,CAFM,CAQN,CAACtjG,CAAC,CAAC,KAAD,CAAQ,CACR+G,GAAG,CAAE,OADG,CAER,QAAS,qBAFD,CAGRnM,EAAE,CAAE,CACF,YAAa,KAAK2oG,iBADhB,CAHI,CAORp8F,KAAK,CAAE87F,gBAAgB,CAAC,CAAE1+F,IAAI,CAAEA,IAAR,CAAc2+F,IAAI,CAAEA,IAApB,CAA0BC,GAAG,CAAEA,GAA/B,CAAD,CAPf,CAAR,CAAF,CARM,CAAR,CAiBD,CAzCyC,CA4C1CxmG,OAAO,CAAE,CACP4mG,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2B1yF,CAA3B,CAA8B,CAC/C;AACA,GAAIA,CAAC,CAAC2yF,OAAF,EAAa3yF,CAAC,CAACkZ,MAAF,GAAa,CAA9B,CAAiC,CAC/B,OACD,CACD,KAAK05E,SAAL,CAAe5yF,CAAf,EACA,KAAK,KAAKsyF,GAAL,CAASL,IAAd,EAAsBjyF,CAAC,CAAChK,aAAF,CAAgB,KAAKs8F,GAAL,CAAStlG,MAAzB,GAAoCgT,CAAC,CAAC,KAAKsyF,GAAL,CAASJ,MAAV,CAAD,CAAqBlyF,CAAC,CAAChK,aAAF,CAAgBsvB,qBAAhB,GAAwC,KAAKgtE,GAAL,CAAS7lG,SAAjD,CAAzD,CAAtB,CACD,CARM,CASPgmG,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2BzyF,CAA3B,CAA8B,CAC/C,GAAIhT,CAAAA,MAAM,CAAGC,IAAI,CAACgjD,GAAL,CAASjwC,CAAC,CAAChU,MAAF,CAASs5B,qBAAT,GAAiC,KAAKgtE,GAAL,CAAS7lG,SAA1C,EAAuDuT,CAAC,CAAC,KAAKsyF,GAAL,CAASJ,MAAV,CAAjE,CAAb,CACA,GAAIW,CAAAA,SAAS,CAAG,KAAKx6F,KAAL,CAAWy6F,KAAX,CAAiB,KAAKR,GAAL,CAAStlG,MAA1B,EAAoC,CAApD,CACA,GAAI+lG,CAAAA,uBAAuB,CAAG,CAAC/lG,MAAM,CAAG6lG,SAAV,EAAuB,GAAvB,CAA6B,KAAK36F,GAAL,CAAS,KAAKo6F,GAAL,CAAStlG,MAAlB,CAA3D,CAEA,KAAK4zD,IAAL,CAAU,KAAK0xC,GAAL,CAASlX,MAAnB,EAA6B2X,uBAAuB,CAAG,KAAKnyC,IAAL,CAAU,KAAK0xC,GAAL,CAASN,UAAnB,CAA1B,CAA2D,GAAxF,CACD,CAfM,CAgBPY,SAAS,CAAE,QAASA,CAAAA,SAAT,CAAmB5yF,CAAnB,CAAsB,CAC/BA,CAAC,CAACgzF,wBAAF,GACA,KAAKC,UAAL,CAAkB,IAAlB,CAEAnrG,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmBhR,QAAnB,CAA6B,WAA7B,CAA0C,KAAK06F,wBAA/C,EACAprG,MAAM,CAAC0hB,IAAI,CAAC,IAAD,CAAL,CAAN,CAAmBhR,QAAnB,CAA6B,SAA7B,CAAwC,KAAK26F,sBAA7C,EACA36F,QAAQ,CAACu1C,aAAT,CAAyB,UAAY,CACnC,MAAO,MAAP,CACD,CAFD,CAGD,CAzBM,CA0BPmlD,wBAAwB,CAAE,QAASA,CAAAA,wBAAT,CAAkClzF,CAAlC,CAAqC,CAC7D,GAAI,KAAKizF,UAAL,GAAoB,KAAxB,CAA+B,OAC/B,GAAIG,CAAAA,QAAQ,CAAG,KAAK,KAAKd,GAAL,CAASL,IAAd,CAAf,CAEA,GAAI,CAACmB,QAAL,CAAe,OAEf,GAAIpmG,CAAAA,MAAM,CAAG,CAAC,KAAKkL,GAAL,CAASotB,qBAAT,GAAiC,KAAKgtE,GAAL,CAAS7lG,SAA1C,EAAuDuT,CAAC,CAAC,KAAKsyF,GAAL,CAASJ,MAAV,CAAzD,EAA8E,CAAC,CAA5F,CACA,GAAImB,CAAAA,kBAAkB,CAAG,KAAKh7F,KAAL,CAAWy6F,KAAX,CAAiB,KAAKR,GAAL,CAAStlG,MAA1B,EAAoComG,QAA7D,CACA,GAAIL,CAAAA,uBAAuB,CAAG,CAAC/lG,MAAM,CAAGqmG,kBAAV,EAAgC,GAAhC,CAAsC,KAAKn7F,GAAL,CAAS,KAAKo6F,GAAL,CAAStlG,MAAlB,CAApE,CAEA,KAAK4zD,IAAL,CAAU,KAAK0xC,GAAL,CAASlX,MAAnB,EAA6B2X,uBAAuB,CAAG,KAAKnyC,IAAL,CAAU,KAAK0xC,GAAL,CAASN,UAAnB,CAA1B,CAA2D,GAAxF,CACD,CArCM,CAsCPmB,sBAAsB,CAAE,QAASA,CAAAA,sBAAT,CAAgCnzF,CAAhC,CAAmC,CACzD,KAAKizF,UAAL,CAAkB,KAAlB,CACA,KAAK,KAAKX,GAAL,CAASL,IAAd,EAAsB,CAAtB,CACAnqG,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoBhR,QAApB,CAA8B,WAA9B,CAA2C,KAAK06F,wBAAhD,EACA16F,QAAQ,CAACu1C,aAAT,CAAyB,IAAzB,CACD,CA3CM,CA5CiC,CA0F1C50C,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9BrR,MAAM,CAAC0hB,IAAI,CAAC,KAAD,CAAL,CAAN,CAAoBhR,QAApB,CAA8B,SAA9B,CAAyC,KAAK26F,sBAA9C,EACD,CA5FyC,CAAf,CA8F7B;AACA;AAOA,0BAzt+BkE,CA0t+BlE,4BAA6B,GAAIG,CAAAA,kBAAkB,CAAI,CACrD3rG,IAAI,CAAE,aAD+C,CAGrDwK,UAAU,CAAE,CAAEohG,GAAG,CAAEf,OAAP,CAHyC,CAKrDhnG,KAAK,CAAE,CACLgoG,MAAM,CAAE7nG,OADH,CAEL8nG,SAAS,CAAE,EAFN,CAGLC,SAAS,CAAE,EAHN,CAILC,SAAS,CAAE,EAJN,CAKLC,SAAS,CAAE,EALN,CAML30C,QAAQ,CAAEtzD,OANL,CAMc;AACnB2Q,GAAG,CAAE,CACHjM,IAAI,CAAEU,MADH,CAEHT,OAAO,CAAE,KAFN,CAPA,CAL8C,CAkBrDjD,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLwmG,SAAS,CAAE,GADN,CAELC,UAAU,CAAE,GAFP,CAGLC,KAAK,CAAE,CAHF,CAILC,KAAK,CAAE,CAJF,CAAP,CAMD,CAzBoD,CA4BrDtnG,QAAQ,CAAE,CACRk0D,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,MAAKvoD,KAAL,CAAWuoD,IAAlB,CACD,CAHO,CA5B2C,CAkCrDlzD,MAAM,CAAE,QAASA,CAAAA,MAAT,CAAgByB,CAAhB,CAAmB,CACzB,GAAIkuF,CAAAA,MAAM,CAAG58C,uBAAuB,IAApC,CACA,GAAInqC,CAAAA,KAAK,CAAG,KAAKm9F,SAAjB,CAEA,GAAIpW,MAAJ,CAAY,CACV,GAAI4W,CAAAA,UAAU,CAAG,IAAM5W,MAAN,CAAe,IAAhC,CACA,GAAI6W,CAAAA,WAAW,CAAG,kBAAoBD,UAApB,CAAiC,kBAAjC,CAAsDA,UAAtD,CAAmE,GAArF,CAEA,GAAIrjG,KAAK,CAAC4C,OAAN,CAAc,KAAKigG,SAAnB,CAAJ,CAAmC,CACjCn9F,KAAK,CAAGxO,MAAM,CAACoI,KAAK,CAAC,UAAD,CAAN,CAAN,CAA0B,KAAKujG,SAA/B,CAAR,CACAn9F,KAAK,CAACinF,WAAN,CAAoBjnF,KAAK,CAAC69F,YAAN,CAAqBF,UAAzC,CACD,CAHD,IAGO,IAAI,MAAO,MAAKR,SAAZ,GAA0B,QAA9B,CAAwC,CAC7Cn9F,KAAK,EAAI49F,WAAT,CACD,CAFM,IAEA,CACL59F,KAAK,CAAG49F,WAAR,CACD,CACF,CACD,GAAIE,CAAAA,IAAI,CAAGjlG,CAAC,CAAC,KAAKmN,GAAN,CAAW,CACrBnS,KAAK,CAAE,CAAC,oBAAD,CAAuB,KAAKwpG,SAA5B,CADc,CAErBr9F,KAAK,CAAE,KAAKs9F,SAFS,CAGrB19F,GAAG,CAAE,QAHgB,CAAX,CAIT,KAAKhE,MAAL,CAAY5B,OAJH,CAAZ,CAKA,GAAIswD,CAAAA,IAAI,CAAGzxD,CAAC,CACV,KADU,CAEV,CACE+G,GAAG,CAAE,MADP,CAEEI,KAAK,CAAEA,KAFT,CAGEvM,EAAE,CAAE,CACF,SAAU,KAAK6gC,YADb,CAHN,CAOE,QAAS,CAAC,KAAK8oE,SAAN,CAAiB,oBAAjB,CAAuCrW,MAAM,CAAG,EAAH,CAAQ,oCAArD,CAPX,CAFU,CAUV,CAAC,CAAC+W,IAAD,CAAD,CAVU,CAAZ,CAYA,GAAI/qD,CAAAA,KAAK,CAAG,IAAK,EAAjB,CAEA,GAAI,CAAC,KAAKmqD,MAAV,CAAkB,CAChBnqD,KAAK,CAAG,CAACuX,IAAD,CAAOzxD,CAAC,CAACqjG,OAAD,CAAU,CACxB3gG,KAAK,CAAE,CACLwgG,IAAI,CAAE,KAAK0B,KADN,CAELrgG,IAAI,CAAE,KAAKmgG,SAFN,CADiB,CAAV,CAAR,CAIJ1kG,CAAC,CAACqjG,OAAD,CAAU,CACb3gG,KAAK,CAAE,CACLojF,QAAQ,CAAE,IADL,CAELod,IAAI,CAAE,KAAK2B,KAFN,CAGLtgG,IAAI,CAAE,KAAKogG,UAHN,CADM,CAAV,CAJG,CAAR,CAUD,CAXD,IAWO,CACLzqD,KAAK,CAAG,CAACl6C,CAAC,CACR,KADQ,CAER,CACE+G,GAAG,CAAE,MADP,CAEE,QAAS,CAAC,KAAKw9F,SAAN,CAAiB,oBAAjB,CAFX,CAGEp9F,KAAK,CAAEA,KAHT,CAFQ,CAMR,CAAC,CAAC89F,IAAD,CAAD,CANQ,CAAF,CAAR,CAQD,CACD,MAAOjlG,CAAAA,CAAC,CAAC,KAAD,CAAQ,CAAEhF,KAAK,CAAE,cAAT,CAAR,CAAmCk/C,KAAnC,CAAR,CACD,CA5FoD,CA+FrDv9C,OAAO,CAAE,CACP8+B,YAAY,CAAE,QAASA,CAAAA,YAAT,EAAwB,CACpC,GAAIg2B,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CAEA,KAAKozC,KAAL,CAAapzC,IAAI,CAACroD,SAAL,CAAiB,GAAjB,CAAuBqoD,IAAI,CAACpgD,YAAzC,CACA,KAAKuzF,KAAL,CAAanzC,IAAI,CAACvQ,UAAL,CAAkB,GAAlB,CAAwBuQ,IAAI,CAACt2C,WAA1C,CACD,CANM,CAOPw3D,MAAM,CAAE,QAASA,CAAAA,MAAT,EAAkB,CACxB,GAAIuyB,CAAAA,gBAAgB,CAAG,IAAK,EAA5B,CACIC,eAAe,CAAG,IAAK,EAD3B,CAEA,GAAI1zC,CAAAA,IAAI,CAAG,KAAKA,IAAhB,CACA,GAAI,CAACA,IAAL,CAAW,OAEXyzC,gBAAgB,CAAGzzC,IAAI,CAACpgD,YAAL,CAAoB,GAApB,CAA0BogD,IAAI,CAACrgD,YAAlD,CACA+zF,eAAe,CAAG1zC,IAAI,CAACt2C,WAAL,CAAmB,GAAnB,CAAyBs2C,IAAI,CAACv2C,WAAhD,CAEA,KAAKypF,UAAL,CAAkBO,gBAAgB,CAAG,GAAnB,CAAyBA,gBAAgB,CAAG,GAA5C,CAAkD,EAApE,CACA,KAAKR,SAAL,CAAiBS,eAAe,CAAG,GAAlB,CAAwBA,eAAe,CAAG,GAA1C,CAAgD,EAAjE,CACD,CAlBM,CA/F4C,CAoHrDr7F,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,GAAI,KAAKu6F,MAAT,CAAiB,OACjB,KAAKr+F,SAAL,CAAe,KAAK2sE,MAApB,EACA,CAAC,KAAK7iB,QAAN,EAAkBn3D,MAAM,CAACqgC,aAAa,CAAC,mBAAD,CAAd,CAAN,CAA2C,KAAK9vB,KAAL,CAAWyd,MAAtD,CAA8D,KAAKgsD,MAAnE,CAAlB,CACD,CAxHoD,CAyHrDphE,aAAa,CAAE,QAASA,CAAAA,aAAT,EAAyB,CACtC,GAAI,KAAK8yF,MAAT,CAAiB,OACjB,CAAC,KAAKv0C,QAAN,EAAkBn3D,MAAM,CAACqgC,aAAa,CAAC,sBAAD,CAAd,CAAN,CAA8C,KAAK9vB,KAAL,CAAWyd,MAAzD,CAAiE,KAAKgsD,MAAtE,CAAlB,CACD,CA5HoD,CAA1B,CA8H7B;AAGA,0BACAwxB,kBAAkB,CAACh+F,OAAnB,CAA6B,SAAUC,GAAV,CAAe,CAC1CA,GAAG,CAAChG,SAAJ,CAAc+jG,kBAAkB,CAAC3rG,IAAjC,CAAuC2rG,kBAAvC,EACD,CAFD,CAIA,4BAA6B,GAAI3oE,CAAAA,SAAS,CAAI2oE,kBAAjB,CAC7B;AACA,GAAIiB,CAAAA,wCAAwC,CAAG,QAA3CA,CAAAA,wCAA2C,EAAW,CACxD,GAAI9qG,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAAC+qG,KAHb,CAIEz+F,UAAU,CAAE,OAJd,CADU,CADd,CASEjM,WAAW,CAAE,mBATf,CAUEK,KAAK,CAAE,CACL,YAAaV,GAAG,CAACW,MADZ,CAEL,0BAA2BX,GAAG,CAACsJ,OAAJ,CAAY1C,IAAZ,GAAqB,MAF3C,CAGL,cAAe5G,GAAG,CAAC0nG,OAHd,CAIL,WAAY1nG,GAAG,CAACw8B,KAJX,CAKL,eAAgBx8B,GAAG,CAACgrG,SALf,CAVT,CAiBEn+F,KAAK,CAAE7M,GAAG,CAACinB,SAjBb,CAkBE3mB,EAAE,CAAE,CAAEC,KAAK,CAAEP,GAAG,CAACmjB,eAAb,CAlBN,CAFO,CAsBP,CACEnjB,GAAG,CAACsJ,OAAJ,CAAY1C,IAAZ,GAAqB,MAArB,CACIzG,EAAE,CAAC,KAAD,CAAQ,CACRgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAE,CAACoB,GAAG,CAACW,MAHd,CAIE2L,UAAU,CAAE,SAJd,CADU,CADJ,CASRjM,WAAW,CAAE,mBATL,CAAR,CADN,CAYIL,GAAG,CAACe,EAAJ,EAbN,CAcEf,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAdF,CAtBO,CAsCP,CAtCO,CAAT,CAwCD,CA5CD,CA6CA,GAAIi+F,CAAAA,iDAAiD,CAAG,EAAxD,CACAH,wCAAwC,CAACjpG,aAAzC,CAAyD,IAAzD,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,GAAIqpG,CAAAA,UAAU,CAAG,IAAjB,CACA,4BAA6B,GAAIC,CAAAA,4BAA4B,CAAI,CAC/DjtG,IAAI,CAAE,gBADyD,CAG/D6D,KAAK,CAAE,CACL7D,IAAI,CAAEoJ,MADD,CAEL6C,KAAK,CAAE,CACLvD,IAAI,CAAE,CAACU,MAAD,CAAStF,MAAT,CADD,CAEL6E,OAAO,CAAE,EAFJ,CAFF,CAHwD,CAW/DjD,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACL44B,KAAK,CAAE,KADF,CAELssE,SAAS,CAAE,CAFN,CAGLsC,KAAK,CAAE,CAHF,CAILzqG,MAAM,CAAE,KAJH,CAKLoqG,KAAK,CAAE,KALF,CAMLrD,OAAO,CAAE,KANJ,CAOLsD,SAAS,CAAE,KAPN,CAAP,CASD,CArB8D,CAwB/D3oG,OAAO,CAAE,CACPgpG,YAAY,CAAE,QAASA,CAAAA,YAAT,CAAsBv5F,KAAtB,CAA6BwP,WAA7B,CAA0CxL,MAA1C,CAAkD,CAC9D,GAAIwL,WAAW,GAAK,CAAhB,EAAqBxP,KAAK,GAAKgE,MAAM,CAAG,CAA5C,CAA+C,CAC7C,MAAO,CAAC,CAAR,CACD,CAFD,IAEO,IAAIwL,WAAW,GAAKxL,MAAM,CAAG,CAAzB,EAA8BhE,KAAK,GAAK,CAA5C,CAA+C,CACpD,MAAOgE,CAAAA,MAAP,CACD,CAFM,IAEA,IAAIhE,KAAK,CAAGwP,WAAW,CAAG,CAAtB,EAA2BA,WAAW,CAAGxP,KAAd,EAAuBgE,MAAM,CAAG,CAA/D,CAAkE,CACvE,MAAOA,CAAAA,MAAM,CAAG,CAAhB,CACD,CAFM,IAEA,IAAIhE,KAAK,CAAGwP,WAAW,CAAG,CAAtB,EAA2BxP,KAAK,CAAGwP,WAAR,EAAuBxL,MAAM,CAAG,CAA/D,CAAkE,CACvE,MAAO,CAAC,CAAR,CACD,CACD,MAAOhE,CAAAA,KAAP,CACD,CAZM,CAaPw5F,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,CAA2Bx5F,KAA3B,CAAkCwP,WAAlC,CAA+C,CAChE,GAAIiqF,CAAAA,WAAW,CAAG,KAAKjiG,OAAL,CAAamF,GAAb,CAAiBwH,WAAnC,CACA,GAAI,KAAKyxF,OAAT,CAAkB,CAChB,MAAO6D,CAAAA,WAAW,EAAI,CAAC,EAAIL,UAAL,GAAoBp5F,KAAK,CAAGwP,WAA5B,EAA2C,CAA/C,CAAX,CAA+D,CAAtE,CACD,CAFD,IAEO,IAAIxP,KAAK,CAAGwP,WAAZ,CAAyB,CAC9B,MAAO,EAAE,EAAI4pF,UAAN,EAAoBK,WAApB,CAAkC,CAAzC,CACD,CAFM,IAEA,CACL,MAAO,CAAC,EAAIL,UAAL,EAAmBK,WAAnB,CAAiC,CAAxC,CACD,CACF,CAtBM,CAuBPC,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuB15F,KAAvB,CAA8BwP,WAA9B,CAA2CsjF,UAA3C,CAAuD,CACpE,GAAI3c,CAAAA,QAAQ,CAAG,KAAK3+E,OAAL,CAAamF,GAAb,CAAiBm2F,UAAU,CAAG,cAAH,CAAoB,aAA/C,CAAf,CACA,MAAO3c,CAAAA,QAAQ,EAAIn2E,KAAK,CAAGwP,WAAZ,CAAf,CACD,CA1BM,CA2BPumF,aAAa,CAAE,QAASA,CAAAA,aAAT,CAAuB/1F,KAAvB,CAA8BwP,WAA9B,CAA2CsmF,QAA3C,CAAqD,CAClE,GAAI6D,CAAAA,UAAU,CAAG,KAAKniG,OAAL,CAAa1C,IAA9B,CACA,GAAI8kG,CAAAA,eAAe,CAAG,KAAKA,eAA3B,CACA,GAAI51F,CAAAA,MAAM,CAAG,KAAKxM,OAAL,CAAakY,KAAb,CAAmB1L,MAAhC,CACA,GAAI21F,UAAU,GAAK,MAAf,EAAyB7D,QAAQ,GAAKp8F,SAA1C,CAAqD,CACnD,KAAKw/F,SAAL,CAAiBl5F,KAAK,GAAKwP,WAAV,EAAyBxP,KAAK,GAAK81F,QAApD,CACD,CACD,GAAI91F,KAAK,GAAKwP,WAAV,EAAyBxL,MAAM,CAAG,CAAlC,EAAuC,KAAKxM,OAAL,CAAa+8F,IAAxD,CAA8D,CAC5Dv0F,KAAK,CAAG,KAAKu5F,YAAL,CAAkBv5F,KAAlB,CAAyBwP,WAAzB,CAAsCxL,MAAtC,CAAR,CACD,CACD,GAAI21F,UAAU,GAAK,MAAnB,CAA2B,CACzB,GAAIC,eAAe,GAAK,UAAxB,CAAoC,CAClCt1F,OAAO,CAACua,IAAR,CAAa,0EAAb,EACD,CACD,KAAK+2E,OAAL,CAAelkG,IAAI,CAACgf,KAAL,CAAWhf,IAAI,CAACgjD,GAAL,CAAS10C,KAAK,CAAGwP,WAAjB,CAAX,GAA6C,CAA5D,CACA,KAAK3gB,MAAL,CAAcmR,KAAK,GAAKwP,WAAxB,CACA,KAAKwnF,SAAL,CAAiB,KAAKwC,iBAAL,CAAuBx5F,KAAvB,CAA8BwP,WAA9B,CAAjB,CACA,KAAK8pF,KAAL,CAAa,KAAKzqG,MAAL,CAAc,CAAd,CAAkBuqG,UAA/B,CACD,CARD,IAQO,CACL,KAAKvqG,MAAL,CAAcmR,KAAK,GAAKwP,WAAxB,CACA,GAAIsjF,CAAAA,UAAU,CAAG8G,eAAe,GAAK,UAArC,CACA,KAAK5C,SAAL,CAAiB,KAAK0C,aAAL,CAAmB15F,KAAnB,CAA0BwP,WAA1B,CAAuCsjF,UAAvC,CAAjB,CACD,CACD,KAAKmG,KAAL,CAAa,IAAb,CACD,CAnDM,CAoDP5nF,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,GAAIpe,CAAAA,MAAM,CAAG,KAAKuE,OAAlB,CACA,GAAIvE,MAAM,EAAIA,MAAM,CAAC6B,IAAP,GAAgB,MAA9B,CAAsC,CACpC,GAAIkL,CAAAA,KAAK,CAAG/M,MAAM,CAACyc,KAAP,CAAa3e,OAAb,CAAqB,IAArB,CAAZ,CACAkC,MAAM,CAACuiG,aAAP,CAAqBx1F,KAArB,EACD,CACF,CA1DM,CAxBsD,CAqF/D7O,QAAQ,CAAE,CACRyoG,eAAe,CAAE,QAASA,CAAAA,eAAT,EAA2B,CAC1C,MAAO,MAAKpiG,OAAL,CAAatG,SAApB,CACD,CAHO,CAIRikB,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,GAAI0kF,CAAAA,aAAa,CAAG,KAAKD,eAAL,GAAyB,UAAzB,CAAsC,YAAtC,CAAqD,YAAzE,CACA,GAAI9sG,CAAAA,KAAK,CAAG+sG,aAAa,CAAG,GAAhB,CAAsB,KAAK7C,SAA3B,CAAuC,YAAvC,CAAsD,KAAKsC,KAA3D,CAAmE,GAA/E,CACA,GAAIv+F,CAAAA,KAAK,CAAG,CACVghB,SAAS,CAAEjvB,KADD,CAAZ,CAGA,MAAOP,CAAAA,MAAM,CAACoI,KAAK,CAAC,cAAD,CAAN,CAAN,CAA8BoG,KAA9B,CAAP,CACD,CAXO,CArFqD,CAmG/DoH,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAK3K,OAAL,EAAgB,KAAKA,OAAL,CAAaq+F,WAAb,EAAhB,CACD,CArG8D,CAsG/Dj4F,SAAS,CAAE,QAASA,CAAAA,SAAT,EAAqB,CAC9B,KAAKpG,OAAL,EAAgB,KAAKA,OAAL,CAAaq+F,WAAb,EAAhB,CACD,CAxG8D,CAApC,CA0G7B;AACC,4BAA6B,GAAIiE,CAAAA,gCAAgC,CAAIT,4BAAxC,CAC9B;AAMA,yBAEA,GAAIU,CAAAA,cAAc,CAAG9nG,kBAAkB,CACrC6nG,gCADqC,CAErCd,wCAFqC,CAGrCG,iDAHqC,CAIrC,KAJqC,CAKrC,IALqC,CAMrC,IANqC,CAOrC,IAPqC,CAAvC,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIa,CAAAA,QAAJ,CAAe,CAC5BD,cAAc,CAACtnG,OAAf,CAAuByB,MAAvB,CAAgC,gCAAhC,CACA,4BAA6B,GAAI+lG,CAAAA,QAAQ,CAAIF,cAAc,CAACtuG,OAA/B,CAC7B;AAGA,0BACAwuG,QAAQ,CAAClgG,OAAT,CAAmB,SAAUC,GAAV,CAAe,CAChCA,GAAG,CAAChG,SAAJ,CAAcimG,QAAQ,CAAC7tG,IAAvB,CAA6B6tG,QAA7B,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,aAAa,CAAID,QAArB,CAC7B;AACA,GAAIE,CAAAA,4CAA4C,CAAG,QAA/CA,CAAAA,4CAA+C,EAAW,CAC5D,GAAIjsG,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,aADf,CAEE+H,KAAK,CAAE,CAAE0E,IAAI,CAAE,SAAR,CAAmB,uBAAwB,MAA3C,CAFT,CAFO,CAMP,CAAC9M,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAD,CANO,CAOP,CAPO,CAAT,CASD,CAbD,CAcA,GAAIk/F,CAAAA,qDAAqD,CAAG,EAA5D,CACAD,4CAA4C,CAACpqG,aAA7C,CAA6D,IAA7D,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA,4BAA6B,GAAIsqG,CAAAA,gCAAgC,CAAI,CACnEjuG,IAAI,CAAE,YAD6D,CAGnEmV,aAAa,CAAE,YAHoD,CAKnEtR,KAAK,CAAE,CACL8jF,SAAS,CAAE3jF,OADN,CAELtD,KAAK,CAAE,CACLgI,IAAI,CAAE,CAACO,KAAD,CAAQG,MAAR,CAAgBtF,MAAhB,CADD,CAEL6E,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,EAAP,CACD,CAJI,CAFF,CAL4D,CAenExD,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLwoG,WAAW,CAAE,GAAGvmG,MAAH,CAAU,KAAKjH,KAAf,CADR,CAAP,CAGD,CAnBkE,CAoBnEmZ,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,MAAO,CACLkI,QAAQ,CAAE,IADL,CAAP,CAGD,CAxBkE,CA2BnE9d,KAAK,CAAE,CACLvD,KAAK,CAAE,QAASA,CAAAA,KAAT,CAAe+0B,MAAf,CAAuB,CAC5B,KAAKy4E,WAAL,CAAmB,GAAGvmG,MAAH,CAAU8tB,MAAV,CAAnB,CACD,CAHI,CA3B4D,CAiCnEtxB,OAAO,CAAE,CACPgqG,cAAc,CAAE,QAASA,CAAAA,cAAT,CAAwBD,WAAxB,CAAqC,CACnDA,WAAW,CAAG,GAAGvmG,MAAH,CAAUumG,WAAV,CAAd,CACA,GAAIxtG,CAAAA,KAAK,CAAG,KAAKinF,SAAL,CAAiBumB,WAAW,CAAC,CAAD,CAA5B,CAAkCA,WAA9C,CACA,KAAKA,WAAL,CAAmBA,WAAnB,CACA,KAAKrpG,KAAL,CAAW,OAAX,CAAoBnE,KAApB,EACA,KAAKmE,KAAL,CAAW,QAAX,CAAqBnE,KAArB,EACD,CAPM,CAQPukB,eAAe,CAAE,QAASA,CAAAA,eAAT,CAAyBta,IAAzB,CAA+B,CAC9C,GAAI,KAAKg9E,SAAT,CAAoB,CAClB,KAAKwmB,cAAL,CAAoB,CAAC,KAAKD,WAAL,CAAiB,CAAjB,GAAuB,KAAKA,WAAL,CAAiB,CAAjB,IAAwB,CAAhD,GAAsD,KAAKA,WAAL,CAAiB,CAAjB,IAAwBvjG,IAAI,CAAC3K,IAAnF,CAA0F,EAA1F,CAA+F2K,IAAI,CAAC3K,IAAxH,EACD,CAFD,IAEO,CACL,GAAIkuG,CAAAA,WAAW,CAAG,KAAKA,WAAL,CAAiB3xF,KAAjB,CAAuB,CAAvB,CAAlB,CACA,GAAI3I,CAAAA,KAAK,CAAGs6F,WAAW,CAACvpG,OAAZ,CAAoBgG,IAAI,CAAC3K,IAAzB,CAAZ,CAEA,GAAI4T,KAAK,CAAG,CAAC,CAAb,CAAgB,CACds6F,WAAW,CAACnqF,MAAZ,CAAmBnQ,KAAnB,CAA0B,CAA1B,EACD,CAFD,IAEO,CACLs6F,WAAW,CAAC/oG,IAAZ,CAAiBwF,IAAI,CAAC3K,IAAtB,EACD,CACD,KAAKmuG,cAAL,CAAoBD,WAApB,EACD,CACF,CAtBM,CAjC0D,CA0DnEn4F,OAAO,CAAE,QAASA,CAAAA,OAAT,EAAmB,CAC1B,KAAKC,GAAL,CAAS,YAAT,CAAuB,KAAKiP,eAA5B,EACD,CA5DkE,CAAxC,CA8D7B;AACC,4BAA6B,GAAImpF,CAAAA,oCAAoC,CAAIH,gCAA5C,CAC9B;AAMA,yBAEA,GAAII,CAAAA,kBAAkB,CAAGxoG,kBAAkB,CACzCuoG,oCADyC,CAEzCL,4CAFyC,CAGzCC,qDAHyC,CAIzC,KAJyC,CAKzC,IALyC,CAMzC,IANyC,CAOzC,IAPyC,CAA3C,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIM,CAAAA,YAAJ,CAAmB,CAChCD,kBAAkB,CAAChoG,OAAnB,CAA2ByB,MAA3B,CAAoC,oCAApC,CACA,4BAA6B,GAAIia,CAAAA,QAAQ,CAAIssF,kBAAkB,CAAChvG,OAAnC,CAC7B;AAGA,0BACA0iB,QAAQ,CAACpU,OAAT,CAAmB,SAAUC,GAAV,CAAe,CAChCA,GAAG,CAAChG,SAAJ,CAAcma,QAAQ,CAAC/hB,IAAvB,CAA6B+hB,QAA7B,EACD,CAFD,CAIA,4BAA6B,GAAIwsF,CAAAA,iBAAiB,CAAIxsF,QAAzB,CAC7B;AACA,GAAIysF,CAAAA,iDAAiD,CAAG,QAApDA,CAAAA,iDAAoD,EAAW,CACjE,GAAI1sG,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEE,WAAW,CAAE,kBADf,CAEEK,KAAK,CAAE,CAAE,YAAaV,GAAG,CAACulB,QAAnB,CAA6B,cAAevlB,GAAG,CAACa,QAAhD,CAFT,CAFO,CAMP,CACEV,EAAE,CACA,KADA,CAEA,CACEiI,KAAK,CAAE,CACL0E,IAAI,CAAE,KADD,CAEL,gBAAiB9M,GAAG,CAACulB,QAFhB,CAGL,gBAAiB,uBAAyBvlB,GAAG,CAACoQ,EAHzC,CAIL,mBAAoB,uBAAyBpQ,GAAG,CAACoQ,EAJ5C,CADT,CAFA,CAUA,CACEjQ,EAAE,CACA,KADA,CAEA,CACEE,WAAW,CAAE,0BADf,CAEEK,KAAK,CAAE,CACLmY,QAAQ,CAAE7Y,GAAG,CAAC6Y,QADT,CAEL,YAAa7Y,GAAG,CAACulB,QAFZ,CAFT,CAMEnd,KAAK,CAAE,CACL0E,IAAI,CAAE,QADD,CAELsD,EAAE,CAAE,oBAAsBpQ,GAAG,CAACoQ,EAFzB,CAGLmI,QAAQ,CAAEvY,GAAG,CAACa,QAAJ,CAAe2K,SAAf,CAA2B,CAHhC,CANT,CAWElL,EAAE,CAAE,CACFC,KAAK,CAAEP,GAAG,CAACqiD,iBADT,CAEFroB,KAAK,CAAE,eAAS74B,MAAT,CAAiB,CACtB,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CAAO5P,MAAM,CAAC0J,OAAd,CAAuB,OAAvB,CAAgC,EAAhC,CAAoC1J,MAAM,CAACjC,GAA3C,CAAgD,CAC9C,GAD8C,CAE9C,UAF8C,CAAhD,CADA,EAKAc,GAAG,CAAC+Q,EAAJ,CAAO5P,MAAM,CAAC0J,OAAd,CAAuB,OAAvB,CAAgC,EAAhC,CAAoC1J,MAAM,CAACjC,GAA3C,CAAgD,OAAhD,CANF,CAOE,CACA,MAAO,KAAP,CACD,CACDiC,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAAC2sG,gBAAJ,CAAqBxrG,MAArB,CAAP,CACD,CAfC,CAgBFqP,KAAK,CAAExQ,GAAG,CAACyQ,WAhBT,CAiBFC,IAAI,CAAE,cAASvP,MAAT,CAAiB,CACrBnB,GAAG,CAAC6Y,QAAJ,CAAe,KAAf,CACD,CAnBC,CAXN,CAFA,CAmCA,CACE7Y,GAAG,CAACgN,EAAJ,CAAO,OAAP,CAAgB,CAAChN,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAAC+M,KAAX,CAAP,CAAD,CAAhB,CADF,CAEE5M,EAAE,CAAC,GAAD,CAAM,CACNE,WAAW,CAAE,6CADP,CAENK,KAAK,CAAE,CAAE,YAAaV,GAAG,CAACulB,QAAnB,CAFD,CAAN,CAFJ,CAnCA,CA0CA,CA1CA,CADJ,CAVA,CADJ,CA0DEplB,EAAE,CAAC,wBAAD,CAA2B,CAC3BA,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACulB,QAHb,CAIEjZ,UAAU,CAAE,UAJd,CADU,CADd,CASEjM,WAAW,CAAE,wBATf,CAUE+H,KAAK,CAAE,CACL0E,IAAI,CAAE,UADD,CAEL,cAAe,CAAC9M,GAAG,CAACulB,QAFf,CAGL,kBAAmB,oBAAsBvlB,GAAG,CAACoQ,EAHxC,CAILA,EAAE,CAAE,uBAAyBpQ,GAAG,CAACoQ,EAJ5B,CAVT,CAFA,CAmBA,CACEjQ,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,2BAAf,CAFA,CAGA,CAACL,GAAG,CAACgN,EAAJ,CAAO,SAAP,CAAD,CAHA,CAIA,CAJA,CADJ,CAnBA,CADyB,CAA3B,CA1DJ,CANO,CA+FP,CA/FO,CAAT,CAiGD,CArGD,CAsGA,GAAI4/F,CAAAA,0DAA0D,CAAG,EAAjE,CACAF,iDAAiD,CAAC7qG,aAAlD,CAAkE,IAAlE,CAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA,4BAA6B,GAAIgrG,CAAAA,qCAAqC,CAAI,CACxE3uG,IAAI,CAAE,gBADkE,CAGxEmV,aAAa,CAAE,gBAHyD,CAKxE5J,MAAM,CAAE,CAACkE,eAAe,CAACjE,CAAjB,CALgE,CAOxEhB,UAAU,CAAE,CAAEuc,oBAAoB,CAAEZ,2BAA2B,CAAC3a,CAApD,CAP4D,CASxE9F,IAAI,CAAE,QAASA,CAAAA,IAAT,EAAgB,CACpB,MAAO,CACLkpG,gBAAgB,CAAE,CAChBvlF,MAAM,CAAE,MADQ,CAEhBC,OAAO,CAAE,OAFO,CADb,CAKLulF,aAAa,CAAE,CALV,CAMLl0F,QAAQ,CAAE,KANL,CAOLq0E,OAAO,CAAE,KAPJ,CAQL98E,EAAE,CAAE/R,MAAM,CAACoI,KAAK,CAAC,YAAD,CAAN,CAAN,EARC,CAAP,CAUD,CApBuE,CAuBxE4U,MAAM,CAAE,CAAC,UAAD,CAvBgE,CAyBxEtZ,KAAK,CAAE,CACLgL,KAAK,CAAEzF,MADF,CAELpJ,IAAI,CAAE,CACJ0I,IAAI,CAAE,CAACU,MAAD,CAAStF,MAAT,CADF,CAEJ6E,OAAO,CAAE,QAASO,CAAAA,QAAT,EAAoB,CAC3B,MAAO,MAAK4lG,IAAZ,CACD,CAJG,CAFD,CAQLnsG,QAAQ,CAAEqB,OARL,CAzBiE,CAoCxEe,QAAQ,CAAE,CACRsiB,QAAQ,CAAE,QAASA,CAAAA,QAAT,EAAoB,CAC5B,MAAO,MAAKtF,QAAL,CAAcmsF,WAAd,CAA0BvpG,OAA1B,CAAkC,KAAK3E,IAAvC,EAA+C,CAAC,CAAvD,CACD,CAHO,CApC8D,CA0CxEmE,OAAO,CAAE,CACPoO,WAAW,CAAE,QAASA,CAAAA,WAAT,EAAuB,CAClC,GAAIzG,CAAAA,KAAK,CAAG,IAAZ,CAEAsP,UAAU,CAAC,UAAY,CACrB,GAAI,CAACtP,KAAK,CAACkjF,OAAX,CAAoB,CAClBljF,KAAK,CAAC6O,QAAN,CAAiB,IAAjB,CACD,CAFD,IAEO,CACL7O,KAAK,CAACkjF,OAAN,CAAgB,KAAhB,CACD,CACF,CANS,CAMP,EANO,CAAV,CAOD,CAXM,CAYP7qC,iBAAiB,CAAE,QAASA,CAAAA,iBAAT,EAA6B,CAC9C,GAAI,KAAKxhD,QAAT,CAAmB,OACnB,KAAK0S,QAAL,CAAc,YAAd,CAA4B,YAA5B,CAA0C,IAA1C,EACA,KAAKsF,QAAL,CAAgB,KAAhB,CACA,KAAKq0E,OAAL,CAAe,IAAf,CACD,CAjBM,CAkBPyf,gBAAgB,CAAE,QAASA,CAAAA,gBAAT,EAA4B,CAC5C,KAAKp5F,QAAL,CAAc,YAAd,CAA4B,YAA5B,CAA0C,IAA1C,EACD,CApBM,CA1C+D,CAA7C,CAiE7B;AACC,4BAA6B,GAAI05F,CAAAA,yCAAyC,CAAIJ,qCAAjD,CAC9B;AAMA,yBAEA,GAAIK,CAAAA,uBAAuB,CAAGnpG,kBAAkB,CAC9CkpG,yCAD8C,CAE9CP,iDAF8C,CAG9CE,0DAH8C,CAI9C,KAJ8C,CAK9C,IAL8C,CAM9C,IAN8C,CAO9C,IAP8C,CAAhD,CAWA,gBACA,GAAI,KAAJ,CAAW,CAAE,GAAIO,CAAAA,iBAAJ,CAAwB,CACrCD,uBAAuB,CAAC3oG,OAAxB,CAAgCyB,MAAhC,CAAyC,yCAAzC,CACA,4BAA6B,GAAIonG,CAAAA,aAAa,CAAIF,uBAAuB,CAAC3vG,OAA7C,CAC7B;AAGA,0BACA6vG,aAAa,CAACvhG,OAAd,CAAwB,SAAUC,GAAV,CAAe,CACrCA,GAAG,CAAChG,SAAJ,CAAcsnG,aAAa,CAAClvG,IAA5B,CAAkCkvG,aAAlC,EACD,CAFD,CAIA,4BAA6B,GAAIC,CAAAA,sBAAsB,CAAID,aAA9B,CAC7B;AACA,GAAIE,CAAAA,4CAA4C,CAAG,QAA/CA,CAAAA,4CAA+C,EAAW,CAC5D,GAAIttG,CAAAA,GAAG,CAAG,IAAV,CACA,GAAIC,CAAAA,EAAE,CAAGD,GAAG,CAACE,cAAb,CACA,GAAIC,CAAAA,EAAE,CAAGH,GAAG,CAACI,KAAJ,CAAUD,EAAV,EAAgBF,EAAzB,CACA,MAAOE,CAAAA,EAAE,CACP,KADO,CAEP,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,cADR,CAEEkO,OAAO,CAAE,gBAFX,CAGExN,KAAK,CAAE,gBAAW,CAChB,MAAOoB,CAAAA,GAAG,CAACutG,qBAAJ,CAA0B,KAA1B,CAAP,CACD,CALH,CAMEjhG,UAAU,CAAE,oCANd,CADU,CADd,CAWEG,GAAG,CAAE,WAXP,CAYE/L,KAAK,CAAE,CACL,aADK,CAELV,GAAG,CAACwtG,QAAJ,EAAgB,gBAAkBxtG,GAAG,CAACwtG,QAFjC,CAGL,CAAE,cAAextG,GAAG,CAAC0xB,UAArB,CAHK,CAZT,CAiBEpxB,EAAE,CAAE,CACFY,UAAU,CAAE,oBAASC,MAAT,CAAiB,CAC3BnB,GAAG,CAACytG,UAAJ,CAAiB,IAAjB,CACD,CAHC,CAIFpsG,UAAU,CAAE,oBAASF,MAAT,CAAiB,CAC3BnB,GAAG,CAACytG,UAAJ,CAAiB,KAAjB,CACD,CANC,CAOFltG,KAAK,CAAE,gBAAW,CAChB,MAAOP,CAAAA,GAAG,CAACutG,qBAAJ,CAA0BvtG,GAAG,CAACopB,QAAJ,CAAe5d,SAAf,CAA2B,IAArD,CAAP,CACD,CATC,CAUFsF,OAAO,CAAE9Q,GAAG,CAAC0tG,aAVX,CAjBN,CAFO,CAgCP,CACEvtG,EAAE,CACA,UADA,CAEA,CACEsM,GAAG,CAAE,OADP,CAEE/L,KAAK,CAAE,CAAE,WAAYV,GAAG,CAAC2tG,eAAlB,CAFT,CAGEvlG,KAAK,CAAE,CACL6B,IAAI,CAAEjK,GAAG,CAACwtG,QADL,CAEL14F,WAAW,CAAE9U,GAAG,CAAC8U,WAFZ,CAGLsU,QAAQ,CAAEppB,GAAG,CAACopB,QAHT,CAILvoB,QAAQ,CAAEb,GAAG,CAAC0xB,UAJT,CAKL,iBAAkB,KALb,CAHT,CAUEpxB,EAAE,CAAE,CACFkQ,KAAK,CAAExQ,GAAG,CAACyQ,WADT,CAEFC,IAAI,CAAE1Q,GAAG,CAAC2Q,UAFR,CAGFL,KAAK,CAAEtQ,GAAG,CAAC8K,WAHT,CAVN,CAeE6mB,KAAK,CAAE,CACL/yB,KAAK,CAAEoB,GAAG,CAACg5B,QAAJ,CAAeh5B,GAAG,CAAC4tG,WAAnB,CAAiC5tG,GAAG,CAAC+pE,UADvC,CAELjvC,QAAQ,CAAE,kBAASzF,GAAT,CAAc,CACtBr1B,GAAG,CAACg5B,QAAJ,CAAeh5B,GAAG,CAAC4tG,WAAnB,CAAkC5tG,GAAG,CAAC+pE,UAAJ,CAAiB10C,GAAnD,CACD,CAJI,CAKL/oB,UAAU,CAAE,qCALP,CAfT,CAFA,CAyBA,CACEnM,EAAE,CAAC,UAAD,CAAa,CAAEqI,IAAI,CAAE,QAAR,CAAb,CAAiC,CACjCxI,GAAG,CAAC6tG,eAAJ,CACI1tG,EAAE,CAAC,GAAD,CAAM,CACNjB,GAAG,CAAE,OADC,CAENmB,WAAW,CAAE,qCAFP,CAGNC,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBA,MAAM,CAACyY,eAAP,GACA,MAAO5Z,CAAAA,GAAG,CAAC6Q,WAAJ,CAAgB1P,MAAhB,CAAP,CACD,CAJC,CAHE,CAAN,CADN,CAWIhB,EAAE,CAAC,GAAD,CAAM,CACNjB,GAAG,CAAE,YADC,CAENwB,KAAK,CAAE,CACL,gBADK,CAEL,oBAFK,CAGLV,GAAG,CAAC2tG,eAAJ,EAAuB,YAHlB,CAFD,CAONrtG,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBA,MAAM,CAACyY,eAAP,GACA5Z,GAAG,CAACutG,qBAAJ,GACD,CAJC,CAPE,CAAN,CAZ2B,CAAjC,CADJ,CAzBA,CAsDA,CAtDA,CADJ,CAyDEvtG,GAAG,CAACg5B,QAAJ,CACI74B,EAAE,CACA,KADA,CAEA,CAAEE,WAAW,CAAE,mBAAf,CAFA,CAGA,CACEL,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAAC8tG,WAAX,CAAwB,SAASj7F,GAAT,CAAcf,KAAd,CAAqB,CAC3C,MAAO3R,CAAAA,EAAE,CACP,QADO,CAEP,CACEjB,GAAG,CAAE2T,GAAG,CAAC3T,GADX,CAEEkJ,KAAK,CAAE,CACLxB,IAAI,CAAE,MADD,CAELqD,IAAI,CAAEjK,GAAG,CAAC+7E,OAFL,CAGLziD,GAAG,CAAEzmB,GAAG,CAAC0mB,QAHJ,CAILJ,QAAQ,CAAEtmB,GAAG,CAACsmB,QAJT,CAKL,sBAAuB,EALlB,CAFT,CASE74B,EAAE,CAAE,CACF4P,KAAK,CAAE,eAAS/O,MAAT,CAAiB,CACtBnB,GAAG,CAACw5B,SAAJ,CAAc1nB,KAAd,EACD,CAHC,CATN,CAFO,CAiBP,CAAC3R,EAAE,CAAC,MAAD,CAAS,CAACH,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOoR,GAAG,CAACya,IAAX,CAAP,CAAD,CAAT,CAAH,CAjBO,CAAT,CAmBD,CApBD,CADF,CAsBEttB,GAAG,CAAC45B,UAAJ,EAAkB,CAAC55B,GAAG,CAAC0xB,UAAvB,CACIvxB,EAAE,CAAC,OAAD,CAAU,CACVgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,OADR,CAEEkO,OAAO,CAAE,cAFX,CAGExN,KAAK,CAAEoB,GAAG,CAAC+pE,UAHb,CAIEz9D,UAAU,CAAE,YAJd,CAKE+kF,SAAS,CAAE,CAAEvoF,IAAI,CAAE,IAAR,CALb,CADU,CADF,CAUVzI,WAAW,CAAE,2BAVH,CAWV+H,KAAK,CAAE,CACLxB,IAAI,CAAE,MADD,CAELkO,WAAW,CAAE9U,GAAG,CAAC8tG,WAAJ,CAAgBh4F,MAAhB,CAAyB,EAAzB,CAA8B9V,GAAG,CAAC8U,WAF1C,CAXG,CAeV8c,QAAQ,CAAE,CAAEhzB,KAAK,CAAEoB,GAAG,CAAC+pE,UAAb,CAfA,CAgBVzpE,EAAE,CAAE,CACFgQ,KAAK,CAAE,CACL,SAASnP,MAAT,CAAiB,CACf,GAAIA,MAAM,CAACoB,MAAP,CAAcg4B,SAAlB,CAA6B,CAC3B,OACD,CACDv6B,GAAG,CAAC+pE,UAAJ,CAAiB5oE,MAAM,CAACoB,MAAP,CAAc3D,KAAd,CAAoBkK,IAApB,EAAjB,CACD,CANI,CAOL,SAASyN,CAAT,CAAY,CACV,MAAOvW,CAAAA,GAAG,CAAC8K,WAAJ,CAAgB9K,GAAG,CAAC+pE,UAApB,CAAgCxzD,CAAhC,CAAP,CACD,CATI,CADL,CAYFhW,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBA,MAAM,CAACyY,eAAP,GACA5Z,GAAG,CAACutG,qBAAJ,CAA0B,IAA1B,EACD,CAfC,CAgBFz8F,OAAO,CAAE,iBAAS3P,MAAT,CAAiB,CACxB,GACE,EAAE,UAAYA,CAAAA,MAAd,GACAnB,GAAG,CAAC+Q,EAAJ,CACE5P,MAAM,CAAC0J,OADT,CAEE,QAFF,CAGE,CAAC,CAAD,CAAI,EAAJ,CAHF,CAIE1J,MAAM,CAACjC,GAJT,CAKE,CAAC,WAAD,CAAc,QAAd,CAAwB,KAAxB,CALF,CAFF,CASE,CACA,MAAO,KAAP,CACD,CACD,MAAOc,CAAAA,GAAG,CAAC+tG,YAAJ,CAAiB5sG,MAAjB,CAAP,CACD,CA9BC,CA+BFuP,IAAI,CAAE,cAASvP,MAAT,CAAiB,CACrBnB,GAAG,CAACguG,YAAJ,GACD,CAjCC,CAhBM,CAAV,CADN,CAqDIhuG,GAAG,CAACe,EAAJ,EA3EN,CAHA,CAgFA,CAhFA,CADN,CAmFIf,GAAG,CAACe,EAAJ,EA5IN,CA6IEZ,EAAE,CACA,YADA,CAEA,CACEiI,KAAK,CAAE,CAAElK,IAAI,CAAE,gBAAR,CADT,CAEEoC,EAAE,CAAE,CAAE,cAAeN,GAAG,CAACiuG,mBAArB,CAFN,CAFA,CAMA,CACE9tG,EAAE,CACA,KADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAAC2tG,eAHb,CAIErhG,UAAU,CAAE,iBAJd,CADU,CADd,CASEG,GAAG,CAAE,QATP,CAUE/L,KAAK,CAAE,CAAC,WAAD,CAAc,uBAAd,CAAuCV,GAAG,CAACqH,WAA3C,CAVT,CAFA,CAcA,CACElH,EAAE,CAAC,mBAAD,CAAsB,CACtBgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAE,CAACoB,GAAG,CAACkuG,SAHd,CAIE5hG,UAAU,CAAE,YAJd,CADU,CADU,CAStBG,GAAG,CAAE,OATiB,CAUtBrE,KAAK,CAAE,CACL7D,OAAO,CAAEvE,GAAG,CAACuE,OADR,CAELxC,KAAK,CAAE/B,GAAG,CAAC8qC,MAFN,CAGLtZ,MAAM,CAAE,KAHH,CAIL,eAAgBxxB,GAAG,CAAC2qD,YAAJ,CAAiB9jD,OAJ5B,CAVe,CAgBtBvG,EAAE,CAAE,CACF,gBAAiBN,GAAG,CAACmuG,kBADnB,CAEFj+F,KAAK,CAAE,eAAS/O,MAAT,CAAiB,CACtBnB,GAAG,CAACutG,qBAAJ,CAA0B,KAA1B,EACD,CAJC,CAhBkB,CAsBtB57E,KAAK,CAAE,CACL/yB,KAAK,CAAEoB,GAAG,CAACouG,YADN,CAELtzE,QAAQ,CAAE,kBAASzF,GAAT,CAAc,CACtBr1B,GAAG,CAACouG,YAAJ,CAAmB/4E,GAAnB,CACD,CAJI,CAKL/oB,UAAU,CAAE,cALP,CAtBe,CAAtB,CADJ,CA+BEtM,GAAG,CAAC45B,UAAJ,CACIz5B,EAAE,CACA,cADA,CAEA,CACEgM,UAAU,CAAE,CACV,CACEjO,IAAI,CAAE,MADR,CAEEkO,OAAO,CAAE,QAFX,CAGExN,KAAK,CAAEoB,GAAG,CAACkuG,SAHb,CAIE5hG,UAAU,CAAE,WAJd,CADU,CADd,CASEG,GAAG,CAAE,iBATP,CAUEpM,WAAW,CAAE,+BAVf,CAWE+H,KAAK,CAAE,CACLyK,GAAG,CAAE,IADA,CAEL,aAAc,8BAFT,CAXT,CAeE1H,QAAQ,CAAE,CACR2F,OAAO,CAAE,iBAAS3P,MAAT,CAAiB,CACxB,MAAOnB,CAAAA,GAAG,CAACquG,uBAAJ,CAA4BltG,MAA5B,CAAP,CACD,CAHO,CAfZ,CAFA,CAuBA,CACEnB,GAAG,CAAC6R,WAAJ,CAAgBiE,MAAhB,CACI9V,GAAG,CAACsB,EAAJ,CAAOtB,GAAG,CAAC6R,WAAX,CAAwB,SAAShJ,IAAT,CAAeiJ,KAAf,CAAsB,CAC5C,MAAO3R,CAAAA,EAAE,CACP,IADO,CAEP,CACEjB,GAAG,CAAE2J,IAAI,CAAC0iE,GADZ,CAEE7qE,KAAK,CAAE,CACL,8BADK,CAELmI,IAAI,CAACgpB,OAAL,EAAgB,YAFX,CAFT,CAMEzpB,KAAK,CAAE,CAAEmQ,QAAQ,CAAE,CAAC,CAAb,CANT,CAOEjY,EAAE,CAAE,CACFC,KAAK,CAAE,eAASY,MAAT,CAAiB,CACtBnB,GAAG,CAACsuG,qBAAJ,CAA0Bx8F,KAA1B,EACD,CAHC,CAPN,CAFO,CAeP,CACE3R,EAAE,CAAC,MAAD,CAAS,CAACH,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOoH,IAAI,CAACykB,IAAZ,CAAP,CAAD,CAAT,CADJ,CAEEzkB,IAAI,CAACgpB,OAAL,CACI1xB,EAAE,CAAC,GAAD,CAAM,CAAEE,WAAW,CAAE,eAAf,CAAN,CADN,CAEIL,GAAG,CAACe,EAAJ,EAJN,CAfO,CAAT,CAsBD,CAvBD,CADJ,CAyBIf,GAAG,CAACgN,EAAJ,CAAO,OAAP,CAAgB,CACd7M,EAAE,CACA,IADA,CAEA,CAAEE,WAAW,CAAE,yBAAf,CAFA,CAGA,CAACL,GAAG,CAACc,EAAJ,CAAOd,GAAG,CAACyB,EAAJ,CAAOzB,GAAG,CAACnB,CAAJ,CAAM,qBAAN,CAAP,CAAP,CAAD,CAHA,CADY,CAAhB,CA1BN,CAvBA,CAyDA,CAzDA,CADN,CA4DImB,GAAG,CAACe,EAAJ,EA3FN,CAdA,CA2GA,CA3GA,CADJ,CANA,CA7IJ,CAhCO,CAoSP,CApSO,CAAT,CAsSD,CA1SD,CA2SA,GAAIwtG,CAAAA,qDAAqD,CAAG,EAA5D,CACAjB,4CAA4C,CAACzrG,aAA7C,CAA6D,IAA7D,CAGA;AAEA;AACA,GAAI2sG,CAAAA,eAAe,CAAG9wG,mBAAmB,CAAC,EAAD,CAAzC,CACA,GAAI+wG,CAAAA,sBAAsB,CAAG,aAAa/wG,mBAAmB,CAAC0B,CAApB,CAAsBovG,eAAtB,CAA1C,CAEA;AACA,GAAIE,CAAAA,WAAW,CAAGhxG,mBAAmB,CAAC,EAAD,CAArC,CACA,GAAIixG,CAAAA,kBAAkB,CAAG,aAAajxG,mBAAmB,CAAC0B,CAApB,CAAsBsvG,WAAtB,CAAtC,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmBA,GAAIE,CAAAA,OAAO,CAAGD,kBAAkB,CAACjlG,CAAnB,CAAqBuU,IAAnC,CAEA,GAAI4wF,CAAAA,cAAc,CAAG,CACnBC,aAAa,CAAE,CACbC,OAAO,CAAE,eADI,CAEbnoG,IAAI,CAAEU,MAFO,CADI,CAKnB0nG,cAAc,CAAE,CACdD,OAAO,CAAE,eADK,CAEdnoG,IAAI,CAAE1E,OAFQ,CALG,CASnB+sG,cAAc,CAAE,CACdF,OAAO,CAAE,gBADK,CAEdnoG,IAAI,CAAE5E,MAFQ,CATG,CAArB,CAeA,GAAIktG,CAAAA,WAAW,CAAG,CAChBntG,KAAK,CAAE,CACL6P,SAAS,CAAE,CACThL,IAAI,CAAEU,MADG,CAETT,OAAO,CAAE,cAFA,CADN,CAKLkH,YAAY,CAAEiF,kBAAkB,CAACtJ,CAAnB,CAAqB3H,KAArB,CAA2BgM,YALpC,CAMLqK,YAAY,CAAE,CACZxR,IAAI,CAAE1E,OADM,CAEZ2E,OAAO,CAAE,IAFG,CANT,CAULuU,WAAW,CAAEpI,kBAAkB,CAACtJ,CAAnB,CAAqB3H,KAArB,CAA2BqZ,WAVnC,CAWL7X,MAAM,CAAEyP,kBAAkB,CAACtJ,CAAnB,CAAqB3H,KAArB,CAA2BwB,MAX9B,CAYLuhB,iBAAiB,CAAE9R,kBAAkB,CAACtJ,CAAnB,CAAqB3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","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 45);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/date-util\");\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/dom\");\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/util\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/mixins/emitter\");\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/mixins/locale\");\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/vue-popper\");\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"vue\");\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/merge\");\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/input\");\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/mixins/migrating\");\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/clickoutside\");\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/locale\");\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/button\");\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/resize-event\");\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/popup\");\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"throttle-debounce/debounce\");\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/checkbox\");\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/scrollbar\");\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/types\");\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/shared\");\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/date\");\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/transitions/collapse-transition\");\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/mixins/focus\");\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/vdom\");\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"babel-helper-vue-jsx-merge-props\");\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"throttle-debounce/throttle\");\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/tooltip\");\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/scroll-into-view\");\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/aria-utils\");\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/button-group\");\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/tag\");\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/scrollbar-width\");\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/checkbox-group\");\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/after-leave\");\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/progress\");\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"throttle-debounce\");\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/select\");\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/option\");\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"normalize-wheel\");\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/utils/aria-dialog\");\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"async-validator\");\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/input-number\");\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/cascader-panel\");\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/radio\");\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/popover\");\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(46);\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/pagination/src/pager.vue?vue&type=template&id=7274f267&\nvar pagervue_type_template_id_7274f267_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"ul\",\n { staticClass: \"el-pager\", on: { click: _vm.onPagerClick } },\n [\n _vm.pageCount > 0\n ? _c(\n \"li\",\n {\n staticClass: \"number\",\n class: { active: _vm.currentPage === 1, disabled: _vm.disabled }\n },\n [_vm._v(\"1\")]\n )\n : _vm._e(),\n _vm.showPrevMore\n ? _c(\"li\", {\n staticClass: \"el-icon more btn-quickprev\",\n class: [_vm.quickprevIconClass, { disabled: _vm.disabled }],\n on: {\n mouseenter: function($event) {\n _vm.onMouseenter(\"left\")\n },\n mouseleave: function($event) {\n _vm.quickprevIconClass = \"el-icon-more\"\n }\n }\n })\n : _vm._e(),\n _vm._l(_vm.pagers, function(pager) {\n return _c(\n \"li\",\n {\n key: pager,\n staticClass: \"number\",\n class: { active: _vm.currentPage === pager, disabled: _vm.disabled }\n },\n [_vm._v(_vm._s(pager))]\n )\n }),\n _vm.showNextMore\n ? _c(\"li\", {\n staticClass: \"el-icon more btn-quicknext\",\n class: [_vm.quicknextIconClass, { disabled: _vm.disabled }],\n on: {\n mouseenter: function($event) {\n _vm.onMouseenter(\"right\")\n },\n mouseleave: function($event) {\n _vm.quicknextIconClass = \"el-icon-more\"\n }\n }\n })\n : _vm._e(),\n _vm.pageCount > 1\n ? _c(\n \"li\",\n {\n staticClass: \"number\",\n class: {\n active: _vm.currentPage === _vm.pageCount,\n disabled: _vm.disabled\n }\n },\n [_vm._v(_vm._s(_vm.pageCount))]\n )\n : _vm._e()\n ],\n 2\n )\n}\nvar staticRenderFns = []\npagervue_type_template_id_7274f267_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/pagination/src/pager.vue?vue&type=template&id=7274f267&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/pagination/src/pager.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var pagervue_type_script_lang_js_ = ({\n name: 'ElPager',\n\n props: {\n currentPage: Number,\n\n pageCount: Number,\n\n pagerCount: Number,\n\n disabled: Boolean\n },\n\n watch: {\n showPrevMore: function showPrevMore(val) {\n if (!val) this.quickprevIconClass = 'el-icon-more';\n },\n showNextMore: function showNextMore(val) {\n if (!val) this.quicknextIconClass = 'el-icon-more';\n }\n },\n\n methods: {\n onPagerClick: function onPagerClick(event) {\n var target = event.target;\n if (target.tagName === 'UL' || this.disabled) {\n return;\n }\n\n var newPage = Number(event.target.textContent);\n var pageCount = this.pageCount;\n var currentPage = this.currentPage;\n var pagerCountOffset = this.pagerCount - 2;\n\n if (target.className.indexOf('more') !== -1) {\n if (target.className.indexOf('quickprev') !== -1) {\n newPage = currentPage - pagerCountOffset;\n } else if (target.className.indexOf('quicknext') !== -1) {\n newPage = currentPage + pagerCountOffset;\n }\n }\n\n /* istanbul ignore if */\n if (!isNaN(newPage)) {\n if (newPage < 1) {\n newPage = 1;\n }\n\n if (newPage > pageCount) {\n newPage = pageCount;\n }\n }\n\n if (newPage !== currentPage) {\n this.$emit('change', newPage);\n }\n },\n onMouseenter: function onMouseenter(direction) {\n if (this.disabled) return;\n if (direction === 'left') {\n this.quickprevIconClass = 'el-icon-d-arrow-left';\n } else {\n this.quicknextIconClass = 'el-icon-d-arrow-right';\n }\n }\n },\n\n computed: {\n pagers: function pagers() {\n var pagerCount = this.pagerCount;\n var halfPagerCount = (pagerCount - 1) / 2;\n\n var currentPage = Number(this.currentPage);\n var pageCount = Number(this.pageCount);\n\n var showPrevMore = false;\n var showNextMore = false;\n\n if (pageCount > pagerCount) {\n if (currentPage > pagerCount - halfPagerCount) {\n showPrevMore = true;\n }\n\n if (currentPage < pageCount - halfPagerCount) {\n showNextMore = true;\n }\n }\n\n var array = [];\n\n if (showPrevMore && !showNextMore) {\n var startPage = pageCount - (pagerCount - 2);\n for (var i = startPage; i < pageCount; i++) {\n array.push(i);\n }\n } else if (!showPrevMore && showNextMore) {\n for (var _i = 2; _i < pagerCount; _i++) {\n array.push(_i);\n }\n } else if (showPrevMore && showNextMore) {\n var offset = Math.floor(pagerCount / 2) - 1;\n for (var _i2 = currentPage - offset; _i2 <= currentPage + offset; _i2++) {\n array.push(_i2);\n }\n } else {\n for (var _i3 = 2; _i3 < pageCount; _i3++) {\n array.push(_i3);\n }\n }\n\n this.showPrevMore = showPrevMore;\n this.showNextMore = showNextMore;\n\n return array;\n }\n },\n\n data: function data() {\n return {\n current: null,\n showPrevMore: false,\n showNextMore: false,\n quicknextIconClass: 'el-icon-more',\n quickprevIconClass: 'el-icon-more'\n };\n }\n});\n// CONCATENATED MODULE: ./packages/pagination/src/pager.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_pagervue_type_script_lang_js_ = (pagervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n// CONCATENATED MODULE: ./packages/pagination/src/pager.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n src_pagervue_type_script_lang_js_,\n pagervue_type_template_id_7274f267_render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/pagination/src/pager.vue\"\n/* harmony default export */ var pager = (component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/select\"\nvar select_ = __webpack_require__(36);\nvar select_default = /*#__PURE__*/__webpack_require__.n(select_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/option\"\nvar option_ = __webpack_require__(37);\nvar option_default = /*#__PURE__*/__webpack_require__.n(option_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/input\"\nvar input_ = __webpack_require__(8);\nvar input_default = /*#__PURE__*/__webpack_require__.n(input_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/locale\"\nvar locale_ = __webpack_require__(4);\nvar locale_default = /*#__PURE__*/__webpack_require__.n(locale_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __webpack_require__(2);\n\n// CONCATENATED MODULE: ./packages/pagination/src/pagination.js\n\n\n\n\n\n\n\n/* harmony default export */ var pagination = ({\n name: 'ElPagination',\n\n props: {\n pageSize: {\n type: Number,\n default: 10\n },\n\n small: Boolean,\n\n total: Number,\n\n pageCount: Number,\n\n pagerCount: {\n type: Number,\n validator: function validator(value) {\n return (value | 0) === value && value > 4 && value < 22 && value % 2 === 1;\n },\n\n default: 7\n },\n\n currentPage: {\n type: Number,\n default: 1\n },\n\n layout: {\n default: 'prev, pager, next, jumper, ->, total'\n },\n\n pageSizes: {\n type: Array,\n default: function _default() {\n return [10, 20, 30, 40, 50, 100];\n }\n },\n\n popperClass: String,\n\n prevText: String,\n\n nextText: String,\n\n background: Boolean,\n\n disabled: Boolean,\n\n hideOnSinglePage: Boolean\n },\n\n data: function data() {\n return {\n internalCurrentPage: 1,\n internalPageSize: 0,\n lastEmittedPage: -1,\n userChangePageSize: false\n };\n },\n render: function render(h) {\n var layout = this.layout;\n if (!layout) return null;\n if (this.hideOnSinglePage && (!this.internalPageCount || this.internalPageCount === 1)) return null;\n\n var template = h('div', { 'class': ['el-pagination', {\n 'is-background': this.background,\n 'el-pagination--small': this.small\n }] });\n var TEMPLATE_MAP = {\n prev: h('prev'),\n jumper: h('jumper'),\n pager: h('pager', {\n attrs: { currentPage: this.internalCurrentPage, pageCount: this.internalPageCount, pagerCount: this.pagerCount, disabled: this.disabled },\n on: {\n 'change': this.handleCurrentChange\n }\n }),\n next: h('next'),\n sizes: h('sizes', {\n attrs: { pageSizes: this.pageSizes }\n }),\n slot: h('slot', [this.$slots.default ? this.$slots.default : '']),\n total: h('total')\n };\n var components = layout.split(',').map(function (item) {\n return item.trim();\n });\n var rightWrapper = h('div', { 'class': 'el-pagination__rightwrapper' });\n var haveRightWrapper = false;\n\n template.children = template.children || [];\n rightWrapper.children = rightWrapper.children || [];\n components.forEach(function (compo) {\n if (compo === '->') {\n haveRightWrapper = true;\n return;\n }\n\n if (!haveRightWrapper) {\n template.children.push(TEMPLATE_MAP[compo]);\n } else {\n rightWrapper.children.push(TEMPLATE_MAP[compo]);\n }\n });\n\n if (haveRightWrapper) {\n template.children.unshift(rightWrapper);\n }\n\n return template;\n },\n\n\n components: {\n Prev: {\n render: function render(h) {\n return h(\n 'button',\n {\n attrs: {\n type: 'button',\n\n disabled: this.$parent.disabled || this.$parent.internalCurrentPage <= 1\n },\n 'class': 'btn-prev', on: {\n 'click': this.$parent.prev\n }\n },\n [this.$parent.prevText ? h('span', [this.$parent.prevText]) : h('i', { 'class': 'el-icon el-icon-arrow-left' })]\n );\n }\n },\n\n Next: {\n render: function render(h) {\n return h(\n 'button',\n {\n attrs: {\n type: 'button',\n\n disabled: this.$parent.disabled || this.$parent.internalCurrentPage === this.$parent.internalPageCount || this.$parent.internalPageCount === 0\n },\n 'class': 'btn-next', on: {\n 'click': this.$parent.next\n }\n },\n [this.$parent.nextText ? h('span', [this.$parent.nextText]) : h('i', { 'class': 'el-icon el-icon-arrow-right' })]\n );\n }\n },\n\n Sizes: {\n mixins: [locale_default.a],\n\n props: {\n pageSizes: Array\n },\n\n watch: {\n pageSizes: {\n immediate: true,\n handler: function handler(newVal, oldVal) {\n if (Object(util_[\"valueEquals\"])(newVal, oldVal)) return;\n if (Array.isArray(newVal)) {\n this.$parent.internalPageSize = newVal.indexOf(this.$parent.pageSize) > -1 ? this.$parent.pageSize : this.pageSizes[0];\n }\n }\n }\n },\n\n render: function render(h) {\n var _this = this;\n\n return h(\n 'span',\n { 'class': 'el-pagination__sizes' },\n [h(\n 'el-select',\n {\n attrs: {\n value: this.$parent.internalPageSize,\n popperClass: this.$parent.popperClass || '',\n size: 'mini',\n\n disabled: this.$parent.disabled },\n on: {\n 'input': this.handleChange\n }\n },\n [this.pageSizes.map(function (item) {\n return h('el-option', {\n attrs: {\n value: item,\n label: item + _this.t('el.pagination.pagesize') }\n });\n })]\n )]\n );\n },\n\n\n components: {\n ElSelect: select_default.a,\n ElOption: option_default.a\n },\n\n methods: {\n handleChange: function handleChange(val) {\n if (val !== this.$parent.internalPageSize) {\n this.$parent.internalPageSize = val = parseInt(val, 10);\n this.$parent.userChangePageSize = true;\n this.$parent.$emit('update:pageSize', val);\n this.$parent.$emit('size-change', val);\n }\n }\n }\n },\n\n Jumper: {\n mixins: [locale_default.a],\n\n components: { ElInput: input_default.a },\n\n data: function data() {\n return {\n userInput: null\n };\n },\n\n\n watch: {\n '$parent.internalCurrentPage': function $parentInternalCurrentPage() {\n this.userInput = null;\n }\n },\n\n methods: {\n handleKeyup: function handleKeyup(_ref) {\n var keyCode = _ref.keyCode,\n target = _ref.target;\n\n // Chrome, Safari, Firefox triggers change event on Enter\n // Hack for IE: https://github.com/ElemeFE/element/issues/11710\n // Drop this method when we no longer supports IE\n if (keyCode === 13) {\n this.handleChange(target.value);\n }\n },\n handleInput: function handleInput(value) {\n this.userInput = value;\n },\n handleChange: function handleChange(value) {\n this.$parent.internalCurrentPage = this.$parent.getValidCurrentPage(value);\n this.$parent.emitChange();\n this.userInput = null;\n }\n },\n\n render: function render(h) {\n return h(\n 'span',\n { 'class': 'el-pagination__jump' },\n [this.t('el.pagination.goto'), h('el-input', {\n 'class': 'el-pagination__editor is-in-pagination',\n attrs: { min: 1,\n max: this.$parent.internalPageCount,\n value: this.userInput !== null ? this.userInput : this.$parent.internalCurrentPage,\n type: 'number',\n disabled: this.$parent.disabled\n },\n nativeOn: {\n 'keyup': this.handleKeyup\n },\n on: {\n 'input': this.handleInput,\n 'change': this.handleChange\n }\n }), this.t('el.pagination.pageClassifier')]\n );\n }\n },\n\n Total: {\n mixins: [locale_default.a],\n\n render: function render(h) {\n return typeof this.$parent.total === 'number' ? h(\n 'span',\n { 'class': 'el-pagination__total' },\n [this.t('el.pagination.total', { total: this.$parent.total })]\n ) : '';\n }\n },\n\n Pager: pager\n },\n\n methods: {\n handleCurrentChange: function handleCurrentChange(val) {\n this.internalCurrentPage = this.getValidCurrentPage(val);\n this.userChangePageSize = true;\n this.emitChange();\n },\n prev: function prev() {\n if (this.disabled) return;\n var newVal = this.internalCurrentPage - 1;\n this.internalCurrentPage = this.getValidCurrentPage(newVal);\n this.$emit('prev-click', this.internalCurrentPage);\n this.emitChange();\n },\n next: function next() {\n if (this.disabled) return;\n var newVal = this.internalCurrentPage + 1;\n this.internalCurrentPage = this.getValidCurrentPage(newVal);\n this.$emit('next-click', this.internalCurrentPage);\n this.emitChange();\n },\n getValidCurrentPage: function getValidCurrentPage(value) {\n value = parseInt(value, 10);\n\n var havePageCount = typeof this.internalPageCount === 'number';\n\n var resetValue = void 0;\n if (!havePageCount) {\n if (isNaN(value) || value < 1) resetValue = 1;\n } else {\n if (value < 1) {\n resetValue = 1;\n } else if (value > this.internalPageCount) {\n resetValue = this.internalPageCount;\n }\n }\n\n if (resetValue === undefined && isNaN(value)) {\n resetValue = 1;\n } else if (resetValue === 0) {\n resetValue = 1;\n }\n\n return resetValue === undefined ? value : resetValue;\n },\n emitChange: function emitChange() {\n var _this2 = this;\n\n this.$nextTick(function () {\n if (_this2.internalCurrentPage !== _this2.lastEmittedPage || _this2.userChangePageSize) {\n _this2.$emit('current-change', _this2.internalCurrentPage);\n _this2.lastEmittedPage = _this2.internalCurrentPage;\n _this2.userChangePageSize = false;\n }\n });\n }\n },\n\n computed: {\n internalPageCount: function internalPageCount() {\n if (typeof this.total === 'number') {\n return Math.max(1, Math.ceil(this.total / this.internalPageSize));\n } else if (typeof this.pageCount === 'number') {\n return Math.max(1, this.pageCount);\n }\n return null;\n }\n },\n\n watch: {\n currentPage: {\n immediate: true,\n handler: function handler(val) {\n this.internalCurrentPage = this.getValidCurrentPage(val);\n }\n },\n\n pageSize: {\n immediate: true,\n handler: function handler(val) {\n this.internalPageSize = isNaN(val) ? 10 : val;\n }\n },\n\n internalCurrentPage: {\n immediate: true,\n handler: function handler(newVal) {\n this.$emit('update:currentPage', newVal);\n this.lastEmittedPage = -1;\n }\n },\n\n internalPageCount: function internalPageCount(newVal) {\n /* istanbul ignore if */\n var oldPage = this.internalCurrentPage;\n if (newVal > 0 && oldPage === 0) {\n this.internalCurrentPage = 1;\n } else if (oldPage > newVal) {\n this.internalCurrentPage = newVal === 0 ? 1 : newVal;\n this.userChangePageSize && this.emitChange();\n }\n this.userChangePageSize = false;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/pagination/index.js\n\n\n/* istanbul ignore next */\npagination.install = function (Vue) {\n Vue.component(pagination.name, pagination);\n};\n\n/* harmony default export */ var packages_pagination = (pagination);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/dialog/src/component.vue?vue&type=template&id=60140e62&\nvar componentvue_type_template_id_60140e62_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"dialog-fade\" },\n on: { \"after-enter\": _vm.afterEnter, \"after-leave\": _vm.afterLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-dialog__wrapper\",\n on: {\n click: function($event) {\n if ($event.target !== $event.currentTarget) {\n return null\n }\n return _vm.handleWrapperClick($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n key: _vm.key,\n ref: \"dialog\",\n class: [\n \"el-dialog\",\n {\n \"is-fullscreen\": _vm.fullscreen,\n \"el-dialog--center\": _vm.center\n },\n _vm.customClass\n ],\n style: _vm.style,\n attrs: {\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": _vm.title || \"dialog\"\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-dialog__header\" },\n [\n _vm._t(\"title\", [\n _c(\"span\", { staticClass: \"el-dialog__title\" }, [\n _vm._v(_vm._s(_vm.title))\n ])\n ]),\n _vm.showClose\n ? _c(\n \"button\",\n {\n staticClass: \"el-dialog__headerbtn\",\n attrs: { type: \"button\", \"aria-label\": \"Close\" },\n on: { click: _vm.handleClose }\n },\n [\n _c(\"i\", {\n staticClass:\n \"el-dialog__close el-icon el-icon-close\"\n })\n ]\n )\n : _vm._e()\n ],\n 2\n ),\n _vm.rendered\n ? _c(\n \"div\",\n { staticClass: \"el-dialog__body\" },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e(),\n _vm.$slots.footer\n ? _c(\n \"div\",\n { staticClass: \"el-dialog__footer\" },\n [_vm._t(\"footer\")],\n 2\n )\n : _vm._e()\n ]\n )\n ]\n )\n ]\n )\n}\nvar componentvue_type_template_id_60140e62_staticRenderFns = []\ncomponentvue_type_template_id_60140e62_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/dialog/src/component.vue?vue&type=template&id=60140e62&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/popup\"\nvar popup_ = __webpack_require__(14);\nvar popup_default = /*#__PURE__*/__webpack_require__.n(popup_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/migrating\"\nvar migrating_ = __webpack_require__(9);\nvar migrating_default = /*#__PURE__*/__webpack_require__.n(migrating_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __webpack_require__(3);\nvar emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dialog/src/component.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var componentvue_type_script_lang_js_ = ({\n name: 'ElDialog',\n\n mixins: [popup_default.a, emitter_default.a, migrating_default.a],\n\n props: {\n title: {\n type: String,\n default: ''\n },\n\n modal: {\n type: Boolean,\n default: true\n },\n\n modalAppendToBody: {\n type: Boolean,\n default: true\n },\n\n appendToBody: {\n type: Boolean,\n default: false\n },\n\n lockScroll: {\n type: Boolean,\n default: true\n },\n\n closeOnClickModal: {\n type: Boolean,\n default: true\n },\n\n closeOnPressEscape: {\n type: Boolean,\n default: true\n },\n\n showClose: {\n type: Boolean,\n default: true\n },\n\n width: String,\n\n fullscreen: Boolean,\n\n customClass: {\n type: String,\n default: ''\n },\n\n top: {\n type: String,\n default: '15vh'\n },\n beforeClose: Function,\n center: {\n type: Boolean,\n default: false\n },\n\n destroyOnClose: Boolean\n },\n\n data: function data() {\n return {\n closed: false,\n key: 0\n };\n },\n\n\n watch: {\n visible: function visible(val) {\n var _this = this;\n\n if (val) {\n this.closed = false;\n this.$emit('open');\n this.$el.addEventListener('scroll', this.updatePopper);\n this.$nextTick(function () {\n _this.$refs.dialog.scrollTop = 0;\n });\n if (this.appendToBody) {\n document.body.appendChild(this.$el);\n }\n } else {\n this.$el.removeEventListener('scroll', this.updatePopper);\n if (!this.closed) this.$emit('close');\n if (this.destroyOnClose) {\n this.$nextTick(function () {\n _this.key++;\n });\n }\n }\n }\n },\n\n computed: {\n style: function style() {\n var style = {};\n if (!this.fullscreen) {\n style.marginTop = this.top;\n if (this.width) {\n style.width = this.width;\n }\n }\n return style;\n }\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'size': 'size is removed.'\n }\n };\n },\n handleWrapperClick: function handleWrapperClick() {\n if (!this.closeOnClickModal) return;\n this.handleClose();\n },\n handleClose: function handleClose() {\n if (typeof this.beforeClose === 'function') {\n this.beforeClose(this.hide);\n } else {\n this.hide();\n }\n },\n hide: function hide(cancel) {\n if (cancel !== false) {\n this.$emit('update:visible', false);\n this.$emit('close');\n this.closed = true;\n }\n },\n updatePopper: function updatePopper() {\n this.broadcast('ElSelectDropdown', 'updatePopper');\n this.broadcast('ElDropdownMenu', 'updatePopper');\n },\n afterEnter: function afterEnter() {\n this.$emit('opened');\n },\n afterLeave: function afterLeave() {\n this.$emit('closed');\n }\n },\n\n mounted: function mounted() {\n if (this.visible) {\n this.rendered = true;\n this.open();\n if (this.appendToBody) {\n document.body.appendChild(this.$el);\n }\n }\n },\n destroyed: function destroyed() {\n // if appendToBody is true, remove DOM node after destroy\n if (this.appendToBody && this.$el && this.$el.parentNode) {\n this.$el.parentNode.removeChild(this.$el);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/dialog/src/component.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_componentvue_type_script_lang_js_ = (componentvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dialog/src/component.vue\n\n\n\n\n\n/* normalize component */\n\nvar component_component = normalizeComponent(\n src_componentvue_type_script_lang_js_,\n componentvue_type_template_id_60140e62_render,\n componentvue_type_template_id_60140e62_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var component_api; }\ncomponent_component.options.__file = \"packages/dialog/src/component.vue\"\n/* harmony default export */ var src_component = (component_component.exports);\n// CONCATENATED MODULE: ./packages/dialog/index.js\n\n\n/* istanbul ignore next */\nsrc_component.install = function (Vue) {\n Vue.component(src_component.name, src_component);\n};\n\n/* harmony default export */ var dialog = (src_component);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete.vue?vue&type=template&id=152f2ee6&\nvar autocompletevue_type_template_id_152f2ee6_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.close,\n expression: \"close\"\n }\n ],\n staticClass: \"el-autocomplete\",\n attrs: {\n \"aria-haspopup\": \"listbox\",\n role: \"combobox\",\n \"aria-expanded\": _vm.suggestionVisible,\n \"aria-owns\": _vm.id\n }\n },\n [\n _c(\n \"el-input\",\n _vm._b(\n {\n ref: \"input\",\n on: {\n input: _vm.handleInput,\n change: _vm.handleChange,\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n clear: _vm.handleClear\n },\n nativeOn: {\n keydown: [\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\n \"Up\",\n \"ArrowUp\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n _vm.highlight(_vm.highlightedIndex - 1)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n _vm.highlight(_vm.highlightedIndex + 1)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.handleKeyEnter($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n ) {\n return null\n }\n return _vm.close($event)\n }\n ]\n }\n },\n \"el-input\",\n [_vm.$props, _vm.$attrs],\n false\n ),\n [\n _vm.$slots.prepend\n ? _c(\"template\", { slot: \"prepend\" }, [_vm._t(\"prepend\")], 2)\n : _vm._e(),\n _vm.$slots.append\n ? _c(\"template\", { slot: \"append\" }, [_vm._t(\"append\")], 2)\n : _vm._e(),\n _vm.$slots.prefix\n ? _c(\"template\", { slot: \"prefix\" }, [_vm._t(\"prefix\")], 2)\n : _vm._e(),\n _vm.$slots.suffix\n ? _c(\"template\", { slot: \"suffix\" }, [_vm._t(\"suffix\")], 2)\n : _vm._e()\n ],\n 2\n ),\n _c(\n \"el-autocomplete-suggestions\",\n {\n ref: \"suggestions\",\n class: [_vm.popperClass ? _vm.popperClass : \"\"],\n attrs: {\n \"visible-arrow\": \"\",\n \"popper-options\": _vm.popperOptions,\n \"append-to-body\": _vm.popperAppendToBody,\n placement: _vm.placement,\n id: _vm.id\n }\n },\n _vm._l(_vm.suggestions, function(item, index) {\n return _c(\n \"li\",\n {\n key: index,\n class: { highlighted: _vm.highlightedIndex === index },\n attrs: {\n id: _vm.id + \"-item-\" + index,\n role: \"option\",\n \"aria-selected\": _vm.highlightedIndex === index\n },\n on: {\n click: function($event) {\n _vm.select(item)\n }\n }\n },\n [\n _vm._t(\n \"default\",\n [\n _vm._v(\"\\n \" + _vm._s(item[_vm.valueKey]) + \"\\n \")\n ],\n { item: item }\n )\n ],\n 2\n )\n }),\n 0\n )\n ],\n 1\n )\n}\nvar autocompletevue_type_template_id_152f2ee6_staticRenderFns = []\nautocompletevue_type_template_id_152f2ee6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete.vue?vue&type=template&id=152f2ee6&\n\n// EXTERNAL MODULE: external \"throttle-debounce/debounce\"\nvar debounce_ = __webpack_require__(15);\nvar debounce_default = /*#__PURE__*/__webpack_require__.n(debounce_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/clickoutside\"\nvar clickoutside_ = __webpack_require__(10);\nvar clickoutside_default = /*#__PURE__*/__webpack_require__.n(clickoutside_);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=template&id=cd10dcf0&\nvar autocomplete_suggestionsvue_type_template_id_cd10dcf0_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { name: \"el-zoom-in-top\" }, on: { \"after-leave\": _vm.doDestroy } },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPopper,\n expression: \"showPopper\"\n }\n ],\n staticClass: \"el-autocomplete-suggestion el-popper\",\n class: {\n \"is-loading\": !_vm.parent.hideLoading && _vm.parent.loading\n },\n style: { width: _vm.dropdownWidth },\n attrs: { role: \"region\" }\n },\n [\n _c(\n \"el-scrollbar\",\n {\n attrs: {\n tag: \"ul\",\n \"wrap-class\": \"el-autocomplete-suggestion__wrap\",\n \"view-class\": \"el-autocomplete-suggestion__list\"\n }\n },\n [\n !_vm.parent.hideLoading && _vm.parent.loading\n ? _c(\"li\", [_c(\"i\", { staticClass: \"el-icon-loading\" })])\n : _vm._t(\"default\")\n ],\n 2\n )\n ],\n 1\n )\n ]\n )\n}\nvar autocomplete_suggestionsvue_type_template_id_cd10dcf0_staticRenderFns = []\nautocomplete_suggestionsvue_type_template_id_cd10dcf0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=template&id=cd10dcf0&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vue-popper\"\nvar vue_popper_ = __webpack_require__(5);\nvar vue_popper_default = /*#__PURE__*/__webpack_require__.n(vue_popper_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/scrollbar\"\nvar scrollbar_ = __webpack_require__(17);\nvar scrollbar_default = /*#__PURE__*/__webpack_require__.n(scrollbar_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var autocomplete_suggestionsvue_type_script_lang_js_ = ({\n components: { ElScrollbar: scrollbar_default.a },\n mixins: [vue_popper_default.a, emitter_default.a],\n\n componentName: 'ElAutocompleteSuggestions',\n\n data: function data() {\n return {\n parent: this.$parent,\n dropdownWidth: ''\n };\n },\n\n\n props: {\n options: {\n default: function _default() {\n return {\n gpuAcceleration: false\n };\n }\n },\n id: String\n },\n\n methods: {\n select: function select(item) {\n this.dispatch('ElAutocomplete', 'item-click', item);\n }\n },\n\n updated: function updated() {\n var _this = this;\n\n this.$nextTick(function (_) {\n _this.popperJS && _this.updatePopper();\n });\n },\n mounted: function mounted() {\n this.$parent.popperElm = this.popperElm = this.$el;\n this.referenceElm = this.$parent.$refs.input.$refs.input || this.$parent.$refs.input.$refs.textarea;\n this.referenceList = this.$el.querySelector('.el-autocomplete-suggestion__list');\n this.referenceList.setAttribute('role', 'listbox');\n this.referenceList.setAttribute('id', this.id);\n },\n created: function created() {\n var _this2 = this;\n\n this.$on('visible', function (val, inputWidth) {\n _this2.dropdownWidth = inputWidth + 'px';\n _this2.showPopper = val;\n });\n }\n});\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_autocomplete_suggestionsvue_type_script_lang_js_ = (autocomplete_suggestionsvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete-suggestions.vue\n\n\n\n\n\n/* normalize component */\n\nvar autocomplete_suggestions_component = normalizeComponent(\n src_autocomplete_suggestionsvue_type_script_lang_js_,\n autocomplete_suggestionsvue_type_template_id_cd10dcf0_render,\n autocomplete_suggestionsvue_type_template_id_cd10dcf0_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var autocomplete_suggestions_api; }\nautocomplete_suggestions_component.options.__file = \"packages/autocomplete/src/autocomplete-suggestions.vue\"\n/* harmony default export */ var autocomplete_suggestions = (autocomplete_suggestions_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/focus\"\nvar focus_ = __webpack_require__(22);\nvar focus_default = /*#__PURE__*/__webpack_require__.n(focus_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var autocompletevue_type_script_lang_js_ = ({\n name: 'ElAutocomplete',\n\n mixins: [emitter_default.a, focus_default()('input'), migrating_default.a],\n\n inheritAttrs: false,\n\n componentName: 'ElAutocomplete',\n\n components: {\n ElInput: input_default.a,\n ElAutocompleteSuggestions: autocomplete_suggestions\n },\n\n directives: { Clickoutside: clickoutside_default.a },\n\n props: {\n valueKey: {\n type: String,\n default: 'value'\n },\n popperClass: String,\n popperOptions: Object,\n placeholder: String,\n clearable: {\n type: Boolean,\n default: false\n },\n disabled: Boolean,\n name: String,\n size: String,\n value: String,\n maxlength: Number,\n minlength: Number,\n autofocus: Boolean,\n fetchSuggestions: Function,\n triggerOnFocus: {\n type: Boolean,\n default: true\n },\n customItem: String,\n selectWhenUnmatched: {\n type: Boolean,\n default: false\n },\n prefixIcon: String,\n suffixIcon: String,\n label: String,\n debounce: {\n type: Number,\n default: 300\n },\n placement: {\n type: String,\n default: 'bottom-start'\n },\n hideLoading: Boolean,\n popperAppendToBody: {\n type: Boolean,\n default: true\n },\n highlightFirstItem: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n activated: false,\n suggestions: [],\n loading: false,\n highlightedIndex: -1,\n suggestionDisabled: false\n };\n },\n\n computed: {\n suggestionVisible: function suggestionVisible() {\n var suggestions = this.suggestions;\n var isValidData = Array.isArray(suggestions) && suggestions.length > 0;\n return (isValidData || this.loading) && this.activated;\n },\n id: function id() {\n return 'el-autocomplete-' + Object(util_[\"generateId\"])();\n }\n },\n watch: {\n suggestionVisible: function suggestionVisible(val) {\n var $input = this.getInput();\n if ($input) {\n this.broadcast('ElAutocompleteSuggestions', 'visible', [val, $input.offsetWidth]);\n }\n }\n },\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'custom-item': 'custom-item is removed, use scoped slot instead.',\n 'props': 'props is removed, use value-key instead.'\n }\n };\n },\n getData: function getData(queryString) {\n var _this = this;\n\n if (this.suggestionDisabled) {\n return;\n }\n this.loading = true;\n this.fetchSuggestions(queryString, function (suggestions) {\n _this.loading = false;\n if (_this.suggestionDisabled) {\n return;\n }\n if (Array.isArray(suggestions)) {\n _this.suggestions = suggestions;\n _this.highlightedIndex = _this.highlightFirstItem ? 0 : -1;\n } else {\n console.error('[Element Error][Autocomplete]autocomplete suggestions must be an array');\n }\n });\n },\n handleInput: function handleInput(value) {\n this.$emit('input', value);\n this.suggestionDisabled = false;\n if (!this.triggerOnFocus && !value) {\n this.suggestionDisabled = true;\n this.suggestions = [];\n return;\n }\n this.debouncedGetData(value);\n },\n handleChange: function handleChange(value) {\n this.$emit('change', value);\n },\n handleFocus: function handleFocus(event) {\n this.activated = true;\n this.$emit('focus', event);\n if (this.triggerOnFocus) {\n this.debouncedGetData(this.value);\n }\n },\n handleBlur: function handleBlur(event) {\n this.$emit('blur', event);\n },\n handleClear: function handleClear() {\n this.activated = false;\n this.$emit('clear');\n },\n close: function close(e) {\n this.activated = false;\n },\n handleKeyEnter: function handleKeyEnter(e) {\n var _this2 = this;\n\n if (this.suggestionVisible && this.highlightedIndex >= 0 && this.highlightedIndex < this.suggestions.length) {\n e.preventDefault();\n this.select(this.suggestions[this.highlightedIndex]);\n } else if (this.selectWhenUnmatched) {\n this.$emit('select', { value: this.value });\n this.$nextTick(function (_) {\n _this2.suggestions = [];\n _this2.highlightedIndex = -1;\n });\n }\n },\n select: function select(item) {\n var _this3 = this;\n\n this.$emit('input', item[this.valueKey]);\n this.$emit('select', item);\n this.$nextTick(function (_) {\n _this3.suggestions = [];\n _this3.highlightedIndex = -1;\n });\n },\n highlight: function highlight(index) {\n if (!this.suggestionVisible || this.loading) {\n return;\n }\n if (index < 0) {\n this.highlightedIndex = -1;\n return;\n }\n if (index >= this.suggestions.length) {\n index = this.suggestions.length - 1;\n }\n var suggestion = this.$refs.suggestions.$el.querySelector('.el-autocomplete-suggestion__wrap');\n var suggestionList = suggestion.querySelectorAll('.el-autocomplete-suggestion__list li');\n\n var highlightItem = suggestionList[index];\n var scrollTop = suggestion.scrollTop;\n var offsetTop = highlightItem.offsetTop;\n\n if (offsetTop + highlightItem.scrollHeight > scrollTop + suggestion.clientHeight) {\n suggestion.scrollTop += highlightItem.scrollHeight;\n }\n if (offsetTop < scrollTop) {\n suggestion.scrollTop -= highlightItem.scrollHeight;\n }\n this.highlightedIndex = index;\n var $input = this.getInput();\n $input.setAttribute('aria-activedescendant', this.id + '-item-' + this.highlightedIndex);\n },\n getInput: function getInput() {\n return this.$refs.input.getInput();\n }\n },\n mounted: function mounted() {\n var _this4 = this;\n\n this.debouncedGetData = debounce_default()(this.debounce, this.getData);\n this.$on('item-click', function (item) {\n _this4.select(item);\n });\n var $input = this.getInput();\n $input.setAttribute('role', 'textbox');\n $input.setAttribute('aria-autocomplete', 'list');\n $input.setAttribute('aria-controls', 'id');\n $input.setAttribute('aria-activedescendant', this.id + '-item-' + this.highlightedIndex);\n },\n beforeDestroy: function beforeDestroy() {\n this.$refs.suggestions.$destroy();\n }\n});\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_autocompletevue_type_script_lang_js_ = (autocompletevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete.vue\n\n\n\n\n\n/* normalize component */\n\nvar autocomplete_component = normalizeComponent(\n src_autocompletevue_type_script_lang_js_,\n autocompletevue_type_template_id_152f2ee6_render,\n autocompletevue_type_template_id_152f2ee6_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var autocomplete_api; }\nautocomplete_component.options.__file = \"packages/autocomplete/src/autocomplete.vue\"\n/* harmony default export */ var autocomplete = (autocomplete_component.exports);\n// CONCATENATED MODULE: ./packages/autocomplete/index.js\n\n\n/* istanbul ignore next */\nautocomplete.install = function (Vue) {\n Vue.component(autocomplete.name, autocomplete);\n};\n\n/* harmony default export */ var packages_autocomplete = (autocomplete);\n// EXTERNAL MODULE: external \"element-ui/lib/button\"\nvar button_ = __webpack_require__(12);\nvar button_default = /*#__PURE__*/__webpack_require__.n(button_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/button-group\"\nvar button_group_ = __webpack_require__(29);\nvar button_group_default = /*#__PURE__*/__webpack_require__.n(button_group_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n\n\n/* harmony default export */ var dropdownvue_type_script_lang_js_ = ({\n name: 'ElDropdown',\n\n componentName: 'ElDropdown',\n\n mixins: [emitter_default.a, migrating_default.a],\n\n directives: { Clickoutside: clickoutside_default.a },\n\n components: {\n ElButton: button_default.a,\n ElButtonGroup: button_group_default.a\n },\n\n provide: function provide() {\n return {\n dropdown: this\n };\n },\n\n\n props: {\n trigger: {\n type: String,\n default: 'hover'\n },\n type: String,\n size: {\n type: String,\n default: ''\n },\n splitButton: Boolean,\n hideOnClick: {\n type: Boolean,\n default: true\n },\n placement: {\n type: String,\n default: 'bottom-end'\n },\n visibleArrow: {\n default: true\n },\n showTimeout: {\n type: Number,\n default: 250\n },\n hideTimeout: {\n type: Number,\n default: 150\n },\n tabindex: {\n type: Number,\n default: 0\n }\n },\n\n data: function data() {\n return {\n timeout: null,\n visible: false,\n triggerElm: null,\n menuItems: null,\n menuItemsArray: null,\n dropdownElm: null,\n focusing: false,\n listId: 'dropdown-menu-' + Object(util_[\"generateId\"])()\n };\n },\n\n\n computed: {\n dropdownSize: function dropdownSize() {\n return this.size || (this.$ELEMENT || {}).size;\n }\n },\n\n mounted: function mounted() {\n this.$on('menu-item-click', this.handleMenuItemClick);\n },\n\n\n watch: {\n visible: function visible(val) {\n this.broadcast('ElDropdownMenu', 'visible', val);\n this.$emit('visible-change', val);\n },\n focusing: function focusing(val) {\n var selfDefine = this.$el.querySelector('.el-dropdown-selfdefine');\n if (selfDefine) {\n // 自定义\n if (val) {\n selfDefine.className += ' focusing';\n } else {\n selfDefine.className = selfDefine.className.replace('focusing', '');\n }\n }\n }\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'menu-align': 'menu-align is renamed to placement.'\n }\n };\n },\n show: function show() {\n var _this = this;\n\n if (this.triggerElm.disabled) return;\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n _this.visible = true;\n }, this.trigger === 'click' ? 0 : this.showTimeout);\n },\n hide: function hide() {\n var _this2 = this;\n\n if (this.triggerElm.disabled) return;\n this.removeTabindex();\n if (this.tabindex >= 0) {\n this.resetTabindex(this.triggerElm);\n }\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n _this2.visible = false;\n }, this.trigger === 'click' ? 0 : this.hideTimeout);\n },\n handleClick: function handleClick() {\n if (this.triggerElm.disabled) return;\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n },\n handleTriggerKeyDown: function handleTriggerKeyDown(ev) {\n var keyCode = ev.keyCode;\n if ([38, 40].indexOf(keyCode) > -1) {\n // up/down\n this.removeTabindex();\n this.resetTabindex(this.menuItems[0]);\n this.menuItems[0].focus();\n ev.preventDefault();\n ev.stopPropagation();\n } else if (keyCode === 13) {\n // space enter选中\n this.handleClick();\n } else if ([9, 27].indexOf(keyCode) > -1) {\n // tab || esc\n this.hide();\n }\n },\n handleItemKeyDown: function handleItemKeyDown(ev) {\n var keyCode = ev.keyCode;\n var target = ev.target;\n var currentIndex = this.menuItemsArray.indexOf(target);\n var max = this.menuItemsArray.length - 1;\n var nextIndex = void 0;\n if ([38, 40].indexOf(keyCode) > -1) {\n // up/down\n if (keyCode === 38) {\n // up\n nextIndex = currentIndex !== 0 ? currentIndex - 1 : 0;\n } else {\n // down\n nextIndex = currentIndex < max ? currentIndex + 1 : max;\n }\n this.removeTabindex();\n this.resetTabindex(this.menuItems[nextIndex]);\n this.menuItems[nextIndex].focus();\n ev.preventDefault();\n ev.stopPropagation();\n } else if (keyCode === 13) {\n // enter选中\n this.triggerElmFocus();\n target.click();\n if (this.hideOnClick) {\n // click关闭\n this.visible = false;\n }\n } else if ([9, 27].indexOf(keyCode) > -1) {\n // tab // esc\n this.hide();\n this.triggerElmFocus();\n }\n },\n resetTabindex: function resetTabindex(ele) {\n // 下次tab时组件聚焦元素\n this.removeTabindex();\n ele.setAttribute('tabindex', '0'); // 下次期望的聚焦元素\n },\n removeTabindex: function removeTabindex() {\n this.triggerElm.setAttribute('tabindex', '-1');\n this.menuItemsArray.forEach(function (item) {\n item.setAttribute('tabindex', '-1');\n });\n },\n initAria: function initAria() {\n this.dropdownElm.setAttribute('id', this.listId);\n this.triggerElm.setAttribute('aria-haspopup', 'list');\n this.triggerElm.setAttribute('aria-controls', this.listId);\n\n if (!this.splitButton) {\n // 自定义\n this.triggerElm.setAttribute('role', 'button');\n this.triggerElm.setAttribute('tabindex', this.tabindex);\n this.triggerElm.setAttribute('class', (this.triggerElm.getAttribute('class') || '') + ' el-dropdown-selfdefine'); // 控制\n }\n },\n initEvent: function initEvent() {\n var _this3 = this;\n\n var trigger = this.trigger,\n show = this.show,\n hide = this.hide,\n handleClick = this.handleClick,\n splitButton = this.splitButton,\n handleTriggerKeyDown = this.handleTriggerKeyDown,\n handleItemKeyDown = this.handleItemKeyDown;\n\n this.triggerElm = splitButton ? this.$refs.trigger.$el : this.$slots.default[0].elm;\n\n var dropdownElm = this.dropdownElm;\n\n this.triggerElm.addEventListener('keydown', handleTriggerKeyDown); // triggerElm keydown\n dropdownElm.addEventListener('keydown', handleItemKeyDown, true); // item keydown\n // 控制自定义元素的样式\n if (!splitButton) {\n this.triggerElm.addEventListener('focus', function () {\n _this3.focusing = true;\n });\n this.triggerElm.addEventListener('blur', function () {\n _this3.focusing = false;\n });\n this.triggerElm.addEventListener('click', function () {\n _this3.focusing = false;\n });\n }\n if (trigger === 'hover') {\n this.triggerElm.addEventListener('mouseenter', show);\n this.triggerElm.addEventListener('mouseleave', hide);\n dropdownElm.addEventListener('mouseenter', show);\n dropdownElm.addEventListener('mouseleave', hide);\n } else if (trigger === 'click') {\n this.triggerElm.addEventListener('click', handleClick);\n }\n },\n handleMenuItemClick: function handleMenuItemClick(command, instance) {\n if (this.hideOnClick) {\n this.visible = false;\n }\n this.$emit('command', command, instance);\n },\n triggerElmFocus: function triggerElmFocus() {\n this.triggerElm.focus && this.triggerElm.focus();\n },\n initDomOperation: function initDomOperation() {\n this.dropdownElm = this.popperElm;\n this.menuItems = this.dropdownElm.querySelectorAll(\"[tabindex='-1']\");\n this.menuItemsArray = [].slice.call(this.menuItems);\n\n this.initEvent();\n this.initAria();\n }\n },\n\n render: function render(h) {\n var _this4 = this;\n\n var hide = this.hide,\n splitButton = this.splitButton,\n type = this.type,\n dropdownSize = this.dropdownSize;\n\n\n var handleMainButtonClick = function handleMainButtonClick(event) {\n _this4.$emit('click', event);\n hide();\n };\n\n var triggerElm = !splitButton ? this.$slots.default : h('el-button-group', [h(\n 'el-button',\n {\n attrs: { type: type, size: dropdownSize },\n nativeOn: {\n 'click': handleMainButtonClick\n }\n },\n [this.$slots.default]\n ), h(\n 'el-button',\n { ref: 'trigger', attrs: { type: type, size: dropdownSize },\n 'class': 'el-dropdown__caret-button' },\n [h('i', { 'class': 'el-dropdown__icon el-icon-arrow-down' })]\n )]);\n\n return h(\n 'div',\n { 'class': 'el-dropdown', directives: [{\n name: 'clickoutside',\n value: hide\n }]\n },\n [triggerElm, this.$slots.dropdown]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_dropdownvue_type_script_lang_js_ = (dropdownvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown.vue\nvar dropdown_render, dropdown_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar dropdown_component = normalizeComponent(\n src_dropdownvue_type_script_lang_js_,\n dropdown_render,\n dropdown_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var dropdown_api; }\ndropdown_component.options.__file = \"packages/dropdown/src/dropdown.vue\"\n/* harmony default export */ var dropdown = (dropdown_component.exports);\n// CONCATENATED MODULE: ./packages/dropdown/index.js\n\n\n/* istanbul ignore next */\ndropdown.install = function (Vue) {\n Vue.component(dropdown.name, dropdown);\n};\n\n/* harmony default export */ var packages_dropdown = (dropdown);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-menu.vue?vue&type=template&id=0da6b714&\nvar dropdown_menuvue_type_template_id_0da6b714_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { name: \"el-zoom-in-top\" }, on: { \"after-leave\": _vm.doDestroy } },\n [\n _c(\n \"ul\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPopper,\n expression: \"showPopper\"\n }\n ],\n staticClass: \"el-dropdown-menu el-popper\",\n class: [_vm.size && \"el-dropdown-menu--\" + _vm.size]\n },\n [_vm._t(\"default\")],\n 2\n )\n ]\n )\n}\nvar dropdown_menuvue_type_template_id_0da6b714_staticRenderFns = []\ndropdown_menuvue_type_template_id_0da6b714_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-menu.vue?vue&type=template&id=0da6b714&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-menu.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var dropdown_menuvue_type_script_lang_js_ = ({\n name: 'ElDropdownMenu',\n\n componentName: 'ElDropdownMenu',\n\n mixins: [vue_popper_default.a],\n\n props: {\n visibleArrow: {\n type: Boolean,\n default: true\n },\n arrowOffset: {\n type: Number,\n default: 0\n }\n },\n\n data: function data() {\n return {\n size: this.dropdown.dropdownSize\n };\n },\n\n\n inject: ['dropdown'],\n\n created: function created() {\n var _this = this;\n\n this.$on('updatePopper', function () {\n if (_this.showPopper) _this.updatePopper();\n });\n this.$on('visible', function (val) {\n _this.showPopper = val;\n });\n },\n mounted: function mounted() {\n this.dropdown.popperElm = this.popperElm = this.$el;\n this.referenceElm = this.dropdown.$el;\n // compatible with 2.6 new v-slot syntax\n // issue link https://github.com/ElemeFE/element/issues/14345\n this.dropdown.initDomOperation();\n },\n\n\n watch: {\n 'dropdown.placement': {\n immediate: true,\n handler: function handler(val) {\n this.currentPlacement = val;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_dropdown_menuvue_type_script_lang_js_ = (dropdown_menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-menu.vue\n\n\n\n\n\n/* normalize component */\n\nvar dropdown_menu_component = normalizeComponent(\n src_dropdown_menuvue_type_script_lang_js_,\n dropdown_menuvue_type_template_id_0da6b714_render,\n dropdown_menuvue_type_template_id_0da6b714_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var dropdown_menu_api; }\ndropdown_menu_component.options.__file = \"packages/dropdown/src/dropdown-menu.vue\"\n/* harmony default export */ var dropdown_menu = (dropdown_menu_component.exports);\n// CONCATENATED MODULE: ./packages/dropdown-menu/index.js\n\n\n/* istanbul ignore next */\ndropdown_menu.install = function (Vue) {\n Vue.component(dropdown_menu.name, dropdown_menu);\n};\n\n/* harmony default export */ var packages_dropdown_menu = (dropdown_menu);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-item.vue?vue&type=template&id=6359102a&\nvar dropdown_itemvue_type_template_id_6359102a_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"li\",\n {\n staticClass: \"el-dropdown-menu__item\",\n class: {\n \"is-disabled\": _vm.disabled,\n \"el-dropdown-menu__item--divided\": _vm.divided\n },\n attrs: {\n \"aria-disabled\": _vm.disabled,\n tabindex: _vm.disabled ? null : -1\n },\n on: { click: _vm.handleClick }\n },\n [_vm.icon ? _c(\"i\", { class: _vm.icon }) : _vm._e(), _vm._t(\"default\")],\n 2\n )\n}\nvar dropdown_itemvue_type_template_id_6359102a_staticRenderFns = []\ndropdown_itemvue_type_template_id_6359102a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-item.vue?vue&type=template&id=6359102a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var dropdown_itemvue_type_script_lang_js_ = ({\n name: 'ElDropdownItem',\n\n mixins: [emitter_default.a],\n\n props: {\n command: {},\n disabled: Boolean,\n divided: Boolean,\n icon: String\n },\n\n methods: {\n handleClick: function handleClick(e) {\n this.dispatch('ElDropdown', 'menu-item-click', [this.command, this]);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_dropdown_itemvue_type_script_lang_js_ = (dropdown_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar dropdown_item_component = normalizeComponent(\n src_dropdown_itemvue_type_script_lang_js_,\n dropdown_itemvue_type_template_id_6359102a_render,\n dropdown_itemvue_type_template_id_6359102a_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var dropdown_item_api; }\ndropdown_item_component.options.__file = \"packages/dropdown/src/dropdown-item.vue\"\n/* harmony default export */ var dropdown_item = (dropdown_item_component.exports);\n// CONCATENATED MODULE: ./packages/dropdown-item/index.js\n\n\n/* istanbul ignore next */\ndropdown_item.install = function (Vue) {\n Vue.component(dropdown_item.name, dropdown_item);\n};\n\n/* harmony default export */ var packages_dropdown_item = (dropdown_item);\n// CONCATENATED MODULE: ./src/utils/aria-utils.js\nvar aria = aria || {};\n\naria.Utils = aria.Utils || {};\n\n/**\n * @desc Set focus on descendant nodes until the first focusable element is\n * found.\n * @param element\n * DOM node for which to find the first focusable descendant.\n * @returns\n * true if a focusable element is found and focus is set.\n */\naria.Utils.focusFirstDescendant = function (element) {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (aria.Utils.attemptFocus(child) || aria.Utils.focusFirstDescendant(child)) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @desc Find the last descendant node that is focusable.\n * @param element\n * DOM node for which to find the last focusable descendant.\n * @returns\n * true if a focusable element is found and focus is set.\n */\n\naria.Utils.focusLastDescendant = function (element) {\n for (var i = element.childNodes.length - 1; i >= 0; i--) {\n var child = element.childNodes[i];\n if (aria.Utils.attemptFocus(child) || aria.Utils.focusLastDescendant(child)) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @desc Set Attempt to set focus on the current node.\n * @param element\n * The node to attempt to focus on.\n * @returns\n * true if element is focused.\n */\naria.Utils.attemptFocus = function (element) {\n if (!aria.Utils.isFocusable(element)) {\n return false;\n }\n aria.Utils.IgnoreUtilFocusChanges = true;\n try {\n element.focus();\n } catch (e) {}\n aria.Utils.IgnoreUtilFocusChanges = false;\n return document.activeElement === element;\n};\n\naria.Utils.isFocusable = function (element) {\n if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute('tabIndex') !== null) {\n return true;\n }\n\n if (element.disabled) {\n return false;\n }\n\n switch (element.nodeName) {\n case 'A':\n return !!element.href && element.rel !== 'ignore';\n case 'INPUT':\n return element.type !== 'hidden' && element.type !== 'file';\n case 'BUTTON':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n default:\n return false;\n }\n};\n\n/**\n * 触发一个事件\n * mouseenter, mouseleave, mouseover, keyup, change, click 等\n * @param {Element} elm\n * @param {String} name\n * @param {*} opts\n */\naria.Utils.triggerEvent = function (elm, name) {\n var eventName = void 0;\n\n if (/^mouse|click/.test(name)) {\n eventName = 'MouseEvents';\n } else if (/^key/.test(name)) {\n eventName = 'KeyboardEvent';\n } else {\n eventName = 'HTMLEvents';\n }\n var evt = document.createEvent(eventName);\n\n for (var _len = arguments.length, opts = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n opts[_key - 2] = arguments[_key];\n }\n\n evt.initEvent.apply(evt, [name].concat(opts));\n elm.dispatchEvent ? elm.dispatchEvent(evt) : elm.fireEvent('on' + name, evt);\n\n return elm;\n};\n\naria.Utils.keys = {\n tab: 9,\n enter: 13,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n esc: 27\n};\n\n/* harmony default export */ var aria_utils = (aria.Utils);\n// CONCATENATED MODULE: ./src/utils/menu/aria-submenu.js\n\n\nvar SubMenu = function SubMenu(parent, domNode) {\n this.domNode = domNode;\n this.parent = parent;\n this.subMenuItems = [];\n this.subIndex = 0;\n this.init();\n};\n\nSubMenu.prototype.init = function () {\n this.subMenuItems = this.domNode.querySelectorAll('li');\n this.addListeners();\n};\n\nSubMenu.prototype.gotoSubIndex = function (idx) {\n if (idx === this.subMenuItems.length) {\n idx = 0;\n } else if (idx < 0) {\n idx = this.subMenuItems.length - 1;\n }\n this.subMenuItems[idx].focus();\n this.subIndex = idx;\n};\n\nSubMenu.prototype.addListeners = function () {\n var _this = this;\n\n var keys = aria_utils.keys;\n var parentNode = this.parent.domNode;\n Array.prototype.forEach.call(this.subMenuItems, function (el) {\n el.addEventListener('keydown', function (event) {\n var prevDef = false;\n switch (event.keyCode) {\n case keys.down:\n _this.gotoSubIndex(_this.subIndex + 1);\n prevDef = true;\n break;\n case keys.up:\n _this.gotoSubIndex(_this.subIndex - 1);\n prevDef = true;\n break;\n case keys.tab:\n aria_utils.triggerEvent(parentNode, 'mouseleave');\n break;\n case keys.enter:\n case keys.space:\n prevDef = true;\n event.currentTarget.click();\n break;\n }\n if (prevDef) {\n event.preventDefault();\n event.stopPropagation();\n }\n return false;\n });\n });\n};\n\n/* harmony default export */ var aria_submenu = (SubMenu);\n// CONCATENATED MODULE: ./src/utils/menu/aria-menuitem.js\n\n\n\nvar MenuItem = function MenuItem(domNode) {\n this.domNode = domNode;\n this.submenu = null;\n this.init();\n};\n\nMenuItem.prototype.init = function () {\n this.domNode.setAttribute('tabindex', '0');\n var menuChild = this.domNode.querySelector('.el-menu');\n if (menuChild) {\n this.submenu = new aria_submenu(this, menuChild);\n }\n this.addListeners();\n};\n\nMenuItem.prototype.addListeners = function () {\n var _this = this;\n\n var keys = aria_utils.keys;\n this.domNode.addEventListener('keydown', function (event) {\n var prevDef = false;\n switch (event.keyCode) {\n case keys.down:\n aria_utils.triggerEvent(event.currentTarget, 'mouseenter');\n _this.submenu && _this.submenu.gotoSubIndex(0);\n prevDef = true;\n break;\n case keys.up:\n aria_utils.triggerEvent(event.currentTarget, 'mouseenter');\n _this.submenu && _this.submenu.gotoSubIndex(_this.submenu.subMenuItems.length - 1);\n prevDef = true;\n break;\n case keys.tab:\n aria_utils.triggerEvent(event.currentTarget, 'mouseleave');\n break;\n case keys.enter:\n case keys.space:\n prevDef = true;\n event.currentTarget.click();\n break;\n }\n if (prevDef) {\n event.preventDefault();\n }\n });\n};\n\n/* harmony default export */ var aria_menuitem = (MenuItem);\n// CONCATENATED MODULE: ./src/utils/menu/aria-menubar.js\n\n\nvar Menu = function Menu(domNode) {\n this.domNode = domNode;\n this.init();\n};\n\nMenu.prototype.init = function () {\n var menuChildren = this.domNode.childNodes;\n [].filter.call(menuChildren, function (child) {\n return child.nodeType === 1;\n }).forEach(function (child) {\n new aria_menuitem(child); // eslint-disable-line\n });\n};\n/* harmony default export */ var aria_menubar = (Menu);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/dom\"\nvar dom_ = __webpack_require__(1);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n/* harmony default export */ var menuvue_type_script_lang_js_ = ({\n name: 'ElMenu',\n\n render: function render(h) {\n var component = h(\n 'ul',\n {\n attrs: {\n role: 'menubar'\n },\n key: +this.collapse,\n style: { backgroundColor: this.backgroundColor || '' },\n 'class': {\n 'el-menu--horizontal': this.mode === 'horizontal',\n 'el-menu--collapse': this.collapse,\n \"el-menu\": true\n }\n },\n [this.$slots.default]\n );\n\n if (this.collapseTransition) {\n return h('el-menu-collapse-transition', [component]);\n } else {\n return component;\n }\n },\n\n\n componentName: 'ElMenu',\n\n mixins: [emitter_default.a, migrating_default.a],\n\n provide: function provide() {\n return {\n rootMenu: this\n };\n },\n\n\n components: {\n 'el-menu-collapse-transition': {\n functional: true,\n render: function render(createElement, context) {\n var data = {\n props: {\n mode: 'out-in'\n },\n on: {\n beforeEnter: function beforeEnter(el) {\n el.style.opacity = 0.2;\n },\n enter: function enter(el) {\n Object(dom_[\"addClass\"])(el, 'el-opacity-transition');\n el.style.opacity = 1;\n },\n afterEnter: function afterEnter(el) {\n Object(dom_[\"removeClass\"])(el, 'el-opacity-transition');\n el.style.opacity = '';\n },\n beforeLeave: function beforeLeave(el) {\n if (!el.dataset) el.dataset = {};\n\n if (Object(dom_[\"hasClass\"])(el, 'el-menu--collapse')) {\n Object(dom_[\"removeClass\"])(el, 'el-menu--collapse');\n el.dataset.oldOverflow = el.style.overflow;\n el.dataset.scrollWidth = el.clientWidth;\n Object(dom_[\"addClass\"])(el, 'el-menu--collapse');\n } else {\n Object(dom_[\"addClass\"])(el, 'el-menu--collapse');\n el.dataset.oldOverflow = el.style.overflow;\n el.dataset.scrollWidth = el.clientWidth;\n Object(dom_[\"removeClass\"])(el, 'el-menu--collapse');\n }\n\n el.style.width = el.scrollWidth + 'px';\n el.style.overflow = 'hidden';\n },\n leave: function leave(el) {\n Object(dom_[\"addClass\"])(el, 'horizontal-collapse-transition');\n el.style.width = el.dataset.scrollWidth + 'px';\n }\n }\n };\n return createElement('transition', data, context.children);\n }\n }\n },\n\n props: {\n mode: {\n type: String,\n default: 'vertical'\n },\n defaultActive: {\n type: String,\n default: ''\n },\n defaultOpeneds: Array,\n uniqueOpened: Boolean,\n router: Boolean,\n menuTrigger: {\n type: String,\n default: 'hover'\n },\n collapse: Boolean,\n backgroundColor: String,\n textColor: String,\n activeTextColor: String,\n collapseTransition: {\n type: Boolean,\n default: true\n }\n },\n data: function data() {\n return {\n activeIndex: this.defaultActive,\n openedMenus: this.defaultOpeneds && !this.collapse ? this.defaultOpeneds.slice(0) : [],\n items: {},\n submenus: {}\n };\n },\n\n computed: {\n hoverBackground: function hoverBackground() {\n return this.backgroundColor ? this.mixColor(this.backgroundColor, 0.2) : '';\n },\n isMenuPopup: function isMenuPopup() {\n return this.mode === 'horizontal' || this.mode === 'vertical' && this.collapse;\n }\n },\n watch: {\n defaultActive: function defaultActive(value) {\n if (!this.items[value]) {\n this.activeIndex = null;\n }\n this.updateActiveIndex(value);\n },\n defaultOpeneds: function defaultOpeneds(value) {\n if (!this.collapse) {\n this.openedMenus = value;\n }\n },\n collapse: function collapse(value) {\n if (value) this.openedMenus = [];\n this.broadcast('ElSubmenu', 'toggle-collapse', value);\n }\n },\n methods: {\n updateActiveIndex: function updateActiveIndex(val) {\n var item = this.items[val] || this.items[this.activeIndex] || this.items[this.defaultActive];\n if (item) {\n this.activeIndex = item.index;\n this.initOpenedMenu();\n } else {\n this.activeIndex = null;\n }\n },\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'theme': 'theme is removed.'\n }\n };\n },\n getColorChannels: function getColorChannels(color) {\n color = color.replace('#', '');\n if (/^[0-9a-fA-F]{3}$/.test(color)) {\n color = color.split('');\n for (var i = 2; i >= 0; i--) {\n color.splice(i, 0, color[i]);\n }\n color = color.join('');\n }\n if (/^[0-9a-fA-F]{6}$/.test(color)) {\n return {\n red: parseInt(color.slice(0, 2), 16),\n green: parseInt(color.slice(2, 4), 16),\n blue: parseInt(color.slice(4, 6), 16)\n };\n } else {\n return {\n red: 255,\n green: 255,\n blue: 255\n };\n }\n },\n mixColor: function mixColor(color, percent) {\n var _getColorChannels = this.getColorChannels(color),\n red = _getColorChannels.red,\n green = _getColorChannels.green,\n blue = _getColorChannels.blue;\n\n if (percent > 0) {\n // shade given color\n red *= 1 - percent;\n green *= 1 - percent;\n blue *= 1 - percent;\n } else {\n // tint given color\n red += (255 - red) * percent;\n green += (255 - green) * percent;\n blue += (255 - blue) * percent;\n }\n return 'rgb(' + Math.round(red) + ', ' + Math.round(green) + ', ' + Math.round(blue) + ')';\n },\n addItem: function addItem(item) {\n this.$set(this.items, item.index, item);\n },\n removeItem: function removeItem(item) {\n delete this.items[item.index];\n },\n addSubmenu: function addSubmenu(item) {\n this.$set(this.submenus, item.index, item);\n },\n removeSubmenu: function removeSubmenu(item) {\n delete this.submenus[item.index];\n },\n openMenu: function openMenu(index, indexPath) {\n var openedMenus = this.openedMenus;\n if (openedMenus.indexOf(index) !== -1) return;\n // 将不在该菜单路径下的其余菜单收起\n // collapse all menu that are not under current menu item\n if (this.uniqueOpened) {\n this.openedMenus = openedMenus.filter(function (index) {\n return indexPath.indexOf(index) !== -1;\n });\n }\n this.openedMenus.push(index);\n },\n closeMenu: function closeMenu(index) {\n var i = this.openedMenus.indexOf(index);\n if (i !== -1) {\n this.openedMenus.splice(i, 1);\n }\n },\n handleSubmenuClick: function handleSubmenuClick(submenu) {\n var index = submenu.index,\n indexPath = submenu.indexPath;\n\n var isOpened = this.openedMenus.indexOf(index) !== -1;\n\n if (isOpened) {\n this.closeMenu(index);\n this.$emit('close', index, indexPath);\n } else {\n this.openMenu(index, indexPath);\n this.$emit('open', index, indexPath);\n }\n },\n handleItemClick: function handleItemClick(item) {\n var _this = this;\n\n var index = item.index,\n indexPath = item.indexPath;\n\n var oldActiveIndex = this.activeIndex;\n var hasIndex = item.index !== null;\n\n if (hasIndex) {\n this.activeIndex = item.index;\n }\n\n this.$emit('select', index, indexPath, item);\n\n if (this.mode === 'horizontal' || this.collapse) {\n this.openedMenus = [];\n }\n\n if (this.router && hasIndex) {\n this.routeToItem(item, function (error) {\n _this.activeIndex = oldActiveIndex;\n if (error) {\n // vue-router 3.1.0+ push/replace cause NavigationDuplicated error \n // https://github.com/ElemeFE/element/issues/17044\n if (error.name === 'NavigationDuplicated') return;\n console.error(error);\n }\n });\n }\n },\n\n // 初始化展开菜单\n // initialize opened menu\n initOpenedMenu: function initOpenedMenu() {\n var _this2 = this;\n\n var index = this.activeIndex;\n var activeItem = this.items[index];\n if (!activeItem || this.mode === 'horizontal' || this.collapse) return;\n\n var indexPath = activeItem.indexPath;\n\n // 展开该菜单项的路径上所有子菜单\n // expand all submenus of the menu item\n indexPath.forEach(function (index) {\n var submenu = _this2.submenus[index];\n submenu && _this2.openMenu(index, submenu.indexPath);\n });\n },\n routeToItem: function routeToItem(item, onError) {\n var route = item.route || item.index;\n try {\n this.$router.push(route, function () {}, onError);\n } catch (e) {\n console.error(e);\n }\n },\n open: function open(index) {\n var _this3 = this;\n\n var indexPath = this.submenus[index.toString()].indexPath;\n\n indexPath.forEach(function (i) {\n return _this3.openMenu(i, indexPath);\n });\n },\n close: function close(index) {\n this.closeMenu(index);\n }\n },\n mounted: function mounted() {\n this.initOpenedMenu();\n this.$on('item-click', this.handleItemClick);\n this.$on('submenu-click', this.handleSubmenuClick);\n if (this.mode === 'horizontal') {\n new aria_menubar(this.$el); // eslint-disable-line\n }\n this.$watch('items', this.updateActiveIndex);\n }\n});\n// CONCATENATED MODULE: ./packages/menu/src/menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_menuvue_type_script_lang_js_ = (menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/menu.vue\nvar menu_render, menu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar menu_component = normalizeComponent(\n src_menuvue_type_script_lang_js_,\n menu_render,\n menu_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var menu_api; }\nmenu_component.options.__file = \"packages/menu/src/menu.vue\"\n/* harmony default export */ var src_menu = (menu_component.exports);\n// CONCATENATED MODULE: ./packages/menu/index.js\n\n\n/* istanbul ignore next */\nsrc_menu.install = function (Vue) {\n Vue.component(src_menu.name, src_menu);\n};\n\n/* harmony default export */ var packages_menu = (src_menu);\n// EXTERNAL MODULE: external \"element-ui/lib/transitions/collapse-transition\"\nvar collapse_transition_ = __webpack_require__(21);\nvar collapse_transition_default = /*#__PURE__*/__webpack_require__.n(collapse_transition_);\n\n// CONCATENATED MODULE: ./packages/menu/src/menu-mixin.js\n/* harmony default export */ var menu_mixin = ({\n inject: ['rootMenu'],\n computed: {\n indexPath: function indexPath() {\n var path = [this.index];\n var parent = this.$parent;\n while (parent.$options.componentName !== 'ElMenu') {\n if (parent.index) {\n path.unshift(parent.index);\n }\n parent = parent.$parent;\n }\n return path;\n },\n parentMenu: function parentMenu() {\n var parent = this.$parent;\n while (parent && ['ElMenu', 'ElSubmenu'].indexOf(parent.$options.componentName) === -1) {\n parent = parent.$parent;\n }\n return parent;\n },\n paddingStyle: function paddingStyle() {\n if (this.rootMenu.mode !== 'vertical') return {};\n\n var padding = 20;\n var parent = this.$parent;\n\n if (this.rootMenu.collapse) {\n padding = 20;\n } else {\n while (parent && parent.$options.componentName !== 'ElMenu') {\n if (parent.$options.componentName === 'ElSubmenu') {\n padding += 20;\n }\n parent = parent.$parent;\n }\n }\n return { paddingLeft: padding + 'px' };\n }\n }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/submenu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nvar poperMixins = {\n props: {\n transformOrigin: {\n type: [Boolean, String],\n default: false\n },\n offset: vue_popper_default.a.props.offset,\n boundariesPadding: vue_popper_default.a.props.boundariesPadding,\n popperOptions: vue_popper_default.a.props.popperOptions\n },\n data: vue_popper_default.a.data,\n methods: vue_popper_default.a.methods,\n beforeDestroy: vue_popper_default.a.beforeDestroy,\n deactivated: vue_popper_default.a.deactivated\n};\n\n/* harmony default export */ var submenuvue_type_script_lang_js_ = ({\n name: 'ElSubmenu',\n\n componentName: 'ElSubmenu',\n\n mixins: [menu_mixin, emitter_default.a, poperMixins],\n\n components: { ElCollapseTransition: collapse_transition_default.a },\n\n props: {\n index: {\n type: String,\n required: true\n },\n showTimeout: {\n type: Number,\n default: 300\n },\n hideTimeout: {\n type: Number,\n default: 300\n },\n popperClass: String,\n disabled: Boolean,\n popperAppendToBody: {\n type: Boolean,\n default: undefined\n }\n },\n\n data: function data() {\n return {\n popperJS: null,\n timeout: null,\n items: {},\n submenus: {},\n mouseInChild: false\n };\n },\n\n watch: {\n opened: function opened(val) {\n var _this = this;\n\n if (this.isMenuPopup) {\n this.$nextTick(function (_) {\n _this.updatePopper();\n });\n }\n }\n },\n computed: {\n // popper option\n appendToBody: function appendToBody() {\n return this.popperAppendToBody === undefined ? this.isFirstLevel : this.popperAppendToBody;\n },\n menuTransitionName: function menuTransitionName() {\n return this.rootMenu.collapse ? 'el-zoom-in-left' : 'el-zoom-in-top';\n },\n opened: function opened() {\n return this.rootMenu.openedMenus.indexOf(this.index) > -1;\n },\n active: function active() {\n var isActive = false;\n var submenus = this.submenus;\n var items = this.items;\n\n Object.keys(items).forEach(function (index) {\n if (items[index].active) {\n isActive = true;\n }\n });\n\n Object.keys(submenus).forEach(function (index) {\n if (submenus[index].active) {\n isActive = true;\n }\n });\n\n return isActive;\n },\n hoverBackground: function hoverBackground() {\n return this.rootMenu.hoverBackground;\n },\n backgroundColor: function backgroundColor() {\n return this.rootMenu.backgroundColor || '';\n },\n activeTextColor: function activeTextColor() {\n return this.rootMenu.activeTextColor || '';\n },\n textColor: function textColor() {\n return this.rootMenu.textColor || '';\n },\n mode: function mode() {\n return this.rootMenu.mode;\n },\n isMenuPopup: function isMenuPopup() {\n return this.rootMenu.isMenuPopup;\n },\n titleStyle: function titleStyle() {\n if (this.mode !== 'horizontal') {\n return {\n color: this.textColor\n };\n }\n return {\n borderBottomColor: this.active ? this.rootMenu.activeTextColor ? this.activeTextColor : '' : 'transparent',\n color: this.active ? this.activeTextColor : this.textColor\n };\n },\n isFirstLevel: function isFirstLevel() {\n var isFirstLevel = true;\n var parent = this.$parent;\n while (parent && parent !== this.rootMenu) {\n if (['ElSubmenu', 'ElMenuItemGroup'].indexOf(parent.$options.componentName) > -1) {\n isFirstLevel = false;\n break;\n } else {\n parent = parent.$parent;\n }\n }\n return isFirstLevel;\n }\n },\n methods: {\n handleCollapseToggle: function handleCollapseToggle(value) {\n if (value) {\n this.initPopper();\n } else {\n this.doDestroy();\n }\n },\n addItem: function addItem(item) {\n this.$set(this.items, item.index, item);\n },\n removeItem: function removeItem(item) {\n delete this.items[item.index];\n },\n addSubmenu: function addSubmenu(item) {\n this.$set(this.submenus, item.index, item);\n },\n removeSubmenu: function removeSubmenu(item) {\n delete this.submenus[item.index];\n },\n handleClick: function handleClick() {\n var rootMenu = this.rootMenu,\n disabled = this.disabled;\n\n if (rootMenu.menuTrigger === 'hover' && rootMenu.mode === 'horizontal' || rootMenu.collapse && rootMenu.mode === 'vertical' || disabled) {\n return;\n }\n this.dispatch('ElMenu', 'submenu-click', this);\n },\n handleMouseenter: function handleMouseenter(event) {\n var _this2 = this;\n\n var showTimeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.showTimeout;\n\n\n if (!('ActiveXObject' in window) && event.type === 'focus' && !event.relatedTarget) {\n return;\n }\n var rootMenu = this.rootMenu,\n disabled = this.disabled;\n\n if (rootMenu.menuTrigger === 'click' && rootMenu.mode === 'horizontal' || !rootMenu.collapse && rootMenu.mode === 'vertical' || disabled) {\n return;\n }\n this.dispatch('ElSubmenu', 'mouse-enter-child');\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n _this2.rootMenu.openMenu(_this2.index, _this2.indexPath);\n }, showTimeout);\n\n if (this.appendToBody) {\n this.$parent.$el.dispatchEvent(new MouseEvent('mouseenter'));\n }\n },\n handleMouseleave: function handleMouseleave() {\n var _this3 = this;\n\n var deepDispatch = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var rootMenu = this.rootMenu;\n\n if (rootMenu.menuTrigger === 'click' && rootMenu.mode === 'horizontal' || !rootMenu.collapse && rootMenu.mode === 'vertical') {\n return;\n }\n this.dispatch('ElSubmenu', 'mouse-leave-child');\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n !_this3.mouseInChild && _this3.rootMenu.closeMenu(_this3.index);\n }, this.hideTimeout);\n\n if (this.appendToBody && deepDispatch) {\n if (this.$parent.$options.name === 'ElSubmenu') {\n this.$parent.handleMouseleave(true);\n }\n }\n },\n handleTitleMouseenter: function handleTitleMouseenter() {\n if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n var title = this.$refs['submenu-title'];\n title && (title.style.backgroundColor = this.rootMenu.hoverBackground);\n },\n handleTitleMouseleave: function handleTitleMouseleave() {\n if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n var title = this.$refs['submenu-title'];\n title && (title.style.backgroundColor = this.rootMenu.backgroundColor || '');\n },\n updatePlacement: function updatePlacement() {\n this.currentPlacement = this.mode === 'horizontal' && this.isFirstLevel ? 'bottom-start' : 'right-start';\n },\n initPopper: function initPopper() {\n this.referenceElm = this.$el;\n this.popperElm = this.$refs.menu;\n this.updatePlacement();\n }\n },\n created: function created() {\n var _this4 = this;\n\n this.$on('toggle-collapse', this.handleCollapseToggle);\n this.$on('mouse-enter-child', function () {\n _this4.mouseInChild = true;\n clearTimeout(_this4.timeout);\n });\n this.$on('mouse-leave-child', function () {\n _this4.mouseInChild = false;\n clearTimeout(_this4.timeout);\n });\n },\n mounted: function mounted() {\n this.parentMenu.addSubmenu(this);\n this.rootMenu.addSubmenu(this);\n this.initPopper();\n },\n beforeDestroy: function beforeDestroy() {\n this.parentMenu.removeSubmenu(this);\n this.rootMenu.removeSubmenu(this);\n },\n render: function render(h) {\n var _this5 = this;\n\n var active = this.active,\n opened = this.opened,\n paddingStyle = this.paddingStyle,\n titleStyle = this.titleStyle,\n backgroundColor = this.backgroundColor,\n rootMenu = this.rootMenu,\n currentPlacement = this.currentPlacement,\n menuTransitionName = this.menuTransitionName,\n mode = this.mode,\n disabled = this.disabled,\n popperClass = this.popperClass,\n $slots = this.$slots,\n isFirstLevel = this.isFirstLevel;\n\n\n var popupMenu = h(\n 'transition',\n {\n attrs: { name: menuTransitionName }\n },\n [h(\n 'div',\n {\n ref: 'menu',\n directives: [{\n name: 'show',\n value: opened\n }],\n\n 'class': ['el-menu--' + mode, popperClass],\n on: {\n 'mouseenter': function mouseenter($event) {\n return _this5.handleMouseenter($event, 100);\n },\n 'mouseleave': function mouseleave() {\n return _this5.handleMouseleave(true);\n },\n 'focus': function focus($event) {\n return _this5.handleMouseenter($event, 100);\n }\n }\n },\n [h(\n 'ul',\n {\n attrs: {\n role: 'menu'\n },\n 'class': ['el-menu el-menu--popup', 'el-menu--popup-' + currentPlacement],\n style: { backgroundColor: rootMenu.backgroundColor || '' } },\n [$slots.default]\n )]\n )]\n );\n\n var inlineMenu = h('el-collapse-transition', [h(\n 'ul',\n {\n attrs: {\n role: 'menu'\n },\n 'class': 'el-menu el-menu--inline',\n directives: [{\n name: 'show',\n value: opened\n }],\n\n style: { backgroundColor: rootMenu.backgroundColor || '' } },\n [$slots.default]\n )]);\n\n var submenuTitleIcon = rootMenu.mode === 'horizontal' && isFirstLevel || rootMenu.mode === 'vertical' && !rootMenu.collapse ? 'el-icon-arrow-down' : 'el-icon-arrow-right';\n\n return h(\n 'li',\n {\n 'class': {\n 'el-submenu': true,\n 'is-active': active,\n 'is-opened': opened,\n 'is-disabled': disabled\n },\n attrs: { role: 'menuitem',\n 'aria-haspopup': 'true',\n 'aria-expanded': opened\n },\n on: {\n 'mouseenter': this.handleMouseenter,\n 'mouseleave': function mouseleave() {\n return _this5.handleMouseleave(false);\n },\n 'focus': this.handleMouseenter\n }\n },\n [h(\n 'div',\n {\n 'class': 'el-submenu__title',\n ref: 'submenu-title',\n on: {\n 'click': this.handleClick,\n 'mouseenter': this.handleTitleMouseenter,\n 'mouseleave': this.handleTitleMouseleave\n },\n\n style: [paddingStyle, titleStyle, { backgroundColor: backgroundColor }]\n },\n [$slots.title, h('i', { 'class': ['el-submenu__icon-arrow', submenuTitleIcon] })]\n ), this.isMenuPopup ? popupMenu : inlineMenu]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/menu/src/submenu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_submenuvue_type_script_lang_js_ = (submenuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/submenu.vue\nvar submenu_render, submenu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar submenu_component = normalizeComponent(\n src_submenuvue_type_script_lang_js_,\n submenu_render,\n submenu_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var submenu_api; }\nsubmenu_component.options.__file = \"packages/menu/src/submenu.vue\"\n/* harmony default export */ var submenu = (submenu_component.exports);\n// CONCATENATED MODULE: ./packages/submenu/index.js\n\n\n/* istanbul ignore next */\nsubmenu.install = function (Vue) {\n Vue.component(submenu.name, submenu);\n};\n\n/* harmony default export */ var packages_submenu = (submenu);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item.vue?vue&type=template&id=2a5dbfea&\nvar menu_itemvue_type_template_id_2a5dbfea_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"li\",\n {\n staticClass: \"el-menu-item\",\n class: {\n \"is-active\": _vm.active,\n \"is-disabled\": _vm.disabled\n },\n style: [\n _vm.paddingStyle,\n _vm.itemStyle,\n { backgroundColor: _vm.backgroundColor }\n ],\n attrs: { role: \"menuitem\", tabindex: \"-1\" },\n on: {\n click: _vm.handleClick,\n mouseenter: _vm.onMouseEnter,\n focus: _vm.onMouseEnter,\n blur: _vm.onMouseLeave,\n mouseleave: _vm.onMouseLeave\n }\n },\n [\n _vm.parentMenu.$options.componentName === \"ElMenu\" &&\n _vm.rootMenu.collapse &&\n _vm.$slots.title\n ? _c(\"el-tooltip\", { attrs: { effect: \"dark\", placement: \"right\" } }, [\n _c(\n \"div\",\n { attrs: { slot: \"content\" }, slot: \"content\" },\n [_vm._t(\"title\")],\n 2\n ),\n _c(\n \"div\",\n {\n staticStyle: {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n height: \"100%\",\n width: \"100%\",\n display: \"inline-block\",\n \"box-sizing\": \"border-box\",\n padding: \"0 20px\"\n }\n },\n [_vm._t(\"default\")],\n 2\n )\n ])\n : [_vm._t(\"default\"), _vm._t(\"title\")]\n ],\n 2\n )\n}\nvar menu_itemvue_type_template_id_2a5dbfea_staticRenderFns = []\nmenu_itemvue_type_template_id_2a5dbfea_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/menu/src/menu-item.vue?vue&type=template&id=2a5dbfea&\n\n// EXTERNAL MODULE: external \"element-ui/lib/tooltip\"\nvar tooltip_ = __webpack_require__(26);\nvar tooltip_default = /*#__PURE__*/__webpack_require__.n(tooltip_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var menu_itemvue_type_script_lang_js_ = ({\n name: 'ElMenuItem',\n\n componentName: 'ElMenuItem',\n\n mixins: [menu_mixin, emitter_default.a],\n\n components: { ElTooltip: tooltip_default.a },\n\n props: {\n index: {\n default: null,\n validator: function validator(val) {\n return typeof val === 'string' || val === null;\n }\n },\n route: [String, Object],\n disabled: Boolean\n },\n computed: {\n active: function active() {\n return this.index === this.rootMenu.activeIndex;\n },\n hoverBackground: function hoverBackground() {\n return this.rootMenu.hoverBackground;\n },\n backgroundColor: function backgroundColor() {\n return this.rootMenu.backgroundColor || '';\n },\n activeTextColor: function activeTextColor() {\n return this.rootMenu.activeTextColor || '';\n },\n textColor: function textColor() {\n return this.rootMenu.textColor || '';\n },\n mode: function mode() {\n return this.rootMenu.mode;\n },\n itemStyle: function itemStyle() {\n var style = {\n color: this.active ? this.activeTextColor : this.textColor\n };\n if (this.mode === 'horizontal' && !this.isNested) {\n style.borderBottomColor = this.active ? this.rootMenu.activeTextColor ? this.activeTextColor : '' : 'transparent';\n }\n return style;\n },\n isNested: function isNested() {\n return this.parentMenu !== this.rootMenu;\n }\n },\n methods: {\n onMouseEnter: function onMouseEnter() {\n if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n this.$el.style.backgroundColor = this.hoverBackground;\n },\n onMouseLeave: function onMouseLeave() {\n if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n this.$el.style.backgroundColor = this.backgroundColor;\n },\n handleClick: function handleClick() {\n if (!this.disabled) {\n this.dispatch('ElMenu', 'item-click', this);\n this.$emit('click', this);\n }\n }\n },\n mounted: function mounted() {\n this.parentMenu.addItem(this);\n this.rootMenu.addItem(this);\n },\n beforeDestroy: function beforeDestroy() {\n this.parentMenu.removeItem(this);\n this.rootMenu.removeItem(this);\n }\n});\n// CONCATENATED MODULE: ./packages/menu/src/menu-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_menu_itemvue_type_script_lang_js_ = (menu_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/menu-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar menu_item_component = normalizeComponent(\n src_menu_itemvue_type_script_lang_js_,\n menu_itemvue_type_template_id_2a5dbfea_render,\n menu_itemvue_type_template_id_2a5dbfea_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var menu_item_api; }\nmenu_item_component.options.__file = \"packages/menu/src/menu-item.vue\"\n/* harmony default export */ var menu_item = (menu_item_component.exports);\n// CONCATENATED MODULE: ./packages/menu-item/index.js\n\n\n/* istanbul ignore next */\nmenu_item.install = function (Vue) {\n Vue.component(menu_item.name, menu_item);\n};\n\n/* harmony default export */ var packages_menu_item = (menu_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item-group.vue?vue&type=template&id=543b7bdc&\nvar menu_item_groupvue_type_template_id_543b7bdc_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"li\", { staticClass: \"el-menu-item-group\" }, [\n _c(\n \"div\",\n {\n staticClass: \"el-menu-item-group__title\",\n style: { paddingLeft: _vm.levelPadding + \"px\" }\n },\n [!_vm.$slots.title ? [_vm._v(_vm._s(_vm.title))] : _vm._t(\"title\")],\n 2\n ),\n _c(\"ul\", [_vm._t(\"default\")], 2)\n ])\n}\nvar menu_item_groupvue_type_template_id_543b7bdc_staticRenderFns = []\nmenu_item_groupvue_type_template_id_543b7bdc_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/menu/src/menu-item-group.vue?vue&type=template&id=543b7bdc&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var menu_item_groupvue_type_script_lang_js_ = ({\n name: 'ElMenuItemGroup',\n\n componentName: 'ElMenuItemGroup',\n\n inject: ['rootMenu'],\n props: {\n title: {\n type: String\n }\n },\n data: function data() {\n return {\n paddingLeft: 20\n };\n },\n\n computed: {\n levelPadding: function levelPadding() {\n var padding = 20;\n var parent = this.$parent;\n if (this.rootMenu.collapse) return 20;\n while (parent && parent.$options.componentName !== 'ElMenu') {\n if (parent.$options.componentName === 'ElSubmenu') {\n padding += 20;\n }\n parent = parent.$parent;\n }\n return padding;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/menu/src/menu-item-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_menu_item_groupvue_type_script_lang_js_ = (menu_item_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/menu-item-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar menu_item_group_component = normalizeComponent(\n src_menu_item_groupvue_type_script_lang_js_,\n menu_item_groupvue_type_template_id_543b7bdc_render,\n menu_item_groupvue_type_template_id_543b7bdc_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var menu_item_group_api; }\nmenu_item_group_component.options.__file = \"packages/menu/src/menu-item-group.vue\"\n/* harmony default export */ var menu_item_group = (menu_item_group_component.exports);\n// CONCATENATED MODULE: ./packages/menu-item-group/index.js\n\n\n/* istanbul ignore next */\nmenu_item_group.install = function (Vue) {\n Vue.component(menu_item_group.name, menu_item_group);\n};\n\n/* harmony default export */ var packages_menu_item_group = (menu_item_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=template&id=343dd774&\nvar inputvue_type_template_id_343dd774_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: [\n _vm.type === \"textarea\" ? \"el-textarea\" : \"el-input\",\n _vm.inputSize ? \"el-input--\" + _vm.inputSize : \"\",\n {\n \"is-disabled\": _vm.inputDisabled,\n \"is-exceed\": _vm.inputExceed,\n \"el-input-group\": _vm.$slots.prepend || _vm.$slots.append,\n \"el-input-group--append\": _vm.$slots.append,\n \"el-input-group--prepend\": _vm.$slots.prepend,\n \"el-input--prefix\": _vm.$slots.prefix || _vm.prefixIcon,\n \"el-input--suffix\":\n _vm.$slots.suffix ||\n _vm.suffixIcon ||\n _vm.clearable ||\n _vm.showPassword\n }\n ],\n on: {\n mouseenter: function($event) {\n _vm.hovering = true\n },\n mouseleave: function($event) {\n _vm.hovering = false\n }\n }\n },\n [\n _vm.type !== \"textarea\"\n ? [\n _vm.$slots.prepend\n ? _c(\n \"div\",\n { staticClass: \"el-input-group__prepend\" },\n [_vm._t(\"prepend\")],\n 2\n )\n : _vm._e(),\n _vm.type !== \"textarea\"\n ? _c(\n \"input\",\n _vm._b(\n {\n ref: \"input\",\n staticClass: \"el-input__inner\",\n attrs: {\n tabindex: _vm.tabindex,\n type: _vm.showPassword\n ? _vm.passwordVisible\n ? \"text\"\n : \"password\"\n : _vm.type,\n disabled: _vm.inputDisabled,\n readonly: _vm.readonly,\n autocomplete: _vm.autoComplete || _vm.autocomplete,\n \"aria-label\": _vm.label\n },\n on: {\n compositionstart: _vm.handleCompositionStart,\n compositionupdate: _vm.handleCompositionUpdate,\n compositionend: _vm.handleCompositionEnd,\n input: _vm.handleInput,\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n change: _vm.handleChange\n }\n },\n \"input\",\n _vm.$attrs,\n false\n )\n )\n : _vm._e(),\n _vm.$slots.prefix || _vm.prefixIcon\n ? _c(\n \"span\",\n { staticClass: \"el-input__prefix\" },\n [\n _vm._t(\"prefix\"),\n _vm.prefixIcon\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: _vm.prefixIcon\n })\n : _vm._e()\n ],\n 2\n )\n : _vm._e(),\n _vm.getSuffixVisible()\n ? _c(\"span\", { staticClass: \"el-input__suffix\" }, [\n _c(\n \"span\",\n { staticClass: \"el-input__suffix-inner\" },\n [\n !_vm.showClear ||\n !_vm.showPwdVisible ||\n !_vm.isWordLimitVisible\n ? [\n _vm._t(\"suffix\"),\n _vm.suffixIcon\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: _vm.suffixIcon\n })\n : _vm._e()\n ]\n : _vm._e(),\n _vm.showClear\n ? _c(\"i\", {\n staticClass:\n \"el-input__icon el-icon-circle-close el-input__clear\",\n on: {\n mousedown: function($event) {\n $event.preventDefault()\n },\n click: _vm.clear\n }\n })\n : _vm._e(),\n _vm.showPwdVisible\n ? _c(\"i\", {\n staticClass:\n \"el-input__icon el-icon-view el-input__clear\",\n on: { click: _vm.handlePasswordVisible }\n })\n : _vm._e(),\n _vm.isWordLimitVisible\n ? _c(\"span\", { staticClass: \"el-input__count\" }, [\n _c(\n \"span\",\n { staticClass: \"el-input__count-inner\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.textLength) +\n \"/\" +\n _vm._s(_vm.upperLimit) +\n \"\\n \"\n )\n ]\n )\n ])\n : _vm._e()\n ],\n 2\n ),\n _vm.validateState\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: [\"el-input__validateIcon\", _vm.validateIcon]\n })\n : _vm._e()\n ])\n : _vm._e(),\n _vm.$slots.append\n ? _c(\n \"div\",\n { staticClass: \"el-input-group__append\" },\n [_vm._t(\"append\")],\n 2\n )\n : _vm._e()\n ]\n : _c(\n \"textarea\",\n _vm._b(\n {\n ref: \"textarea\",\n staticClass: \"el-textarea__inner\",\n style: _vm.textareaStyle,\n attrs: {\n tabindex: _vm.tabindex,\n disabled: _vm.inputDisabled,\n readonly: _vm.readonly,\n autocomplete: _vm.autoComplete || _vm.autocomplete,\n \"aria-label\": _vm.label\n },\n on: {\n compositionstart: _vm.handleCompositionStart,\n compositionupdate: _vm.handleCompositionUpdate,\n compositionend: _vm.handleCompositionEnd,\n input: _vm.handleInput,\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n change: _vm.handleChange\n }\n },\n \"textarea\",\n _vm.$attrs,\n false\n )\n ),\n _vm.isWordLimitVisible && _vm.type === \"textarea\"\n ? _c(\"span\", { staticClass: \"el-input__count\" }, [\n _vm._v(_vm._s(_vm.textLength) + \"/\" + _vm._s(_vm.upperLimit))\n ])\n : _vm._e()\n ],\n 2\n )\n}\nvar inputvue_type_template_id_343dd774_staticRenderFns = []\ninputvue_type_template_id_343dd774_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=template&id=343dd774&\n\n// CONCATENATED MODULE: ./packages/input/src/calcTextareaHeight.js\nvar hiddenTextarea = void 0;\n\nvar HIDDEN_STYLE = '\\n height:0 !important;\\n visibility:hidden !important;\\n overflow:hidden !important;\\n position:absolute !important;\\n z-index:-1000 !important;\\n top:0 !important;\\n right:0 !important\\n';\n\nvar CONTEXT_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing'];\n\nfunction calculateNodeStyling(targetElement) {\n var style = window.getComputedStyle(targetElement);\n\n var boxSizing = style.getPropertyValue('box-sizing');\n\n var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));\n\n var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));\n\n var contextStyle = CONTEXT_STYLE.map(function (name) {\n return name + ':' + style.getPropertyValue(name);\n }).join(';');\n\n return { contextStyle: contextStyle, paddingSize: paddingSize, borderSize: borderSize, boxSizing: boxSizing };\n}\n\nfunction calcTextareaHeight(targetElement) {\n var minRows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var maxRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea');\n document.body.appendChild(hiddenTextarea);\n }\n\n var _calculateNodeStyling = calculateNodeStyling(targetElement),\n paddingSize = _calculateNodeStyling.paddingSize,\n borderSize = _calculateNodeStyling.borderSize,\n boxSizing = _calculateNodeStyling.boxSizing,\n contextStyle = _calculateNodeStyling.contextStyle;\n\n hiddenTextarea.setAttribute('style', contextStyle + ';' + HIDDEN_STYLE);\n hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';\n\n var height = hiddenTextarea.scrollHeight;\n var result = {};\n\n if (boxSizing === 'border-box') {\n height = height + borderSize;\n } else if (boxSizing === 'content-box') {\n height = height - paddingSize;\n }\n\n hiddenTextarea.value = '';\n var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n\n if (minRows !== null) {\n var minHeight = singleRowHeight * minRows;\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize;\n }\n height = Math.max(minHeight, height);\n result.minHeight = minHeight + 'px';\n }\n if (maxRows !== null) {\n var maxHeight = singleRowHeight * maxRows;\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n height = Math.min(maxHeight, height);\n }\n result.height = height + 'px';\n hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n hiddenTextarea = null;\n return result;\n};\n// EXTERNAL MODULE: external \"element-ui/lib/utils/merge\"\nvar merge_ = __webpack_require__(7);\nvar merge_default = /*#__PURE__*/__webpack_require__.n(merge_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/shared\"\nvar shared_ = __webpack_require__(19);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n/* harmony default export */ var inputvue_type_script_lang_js_ = ({\n name: 'ElInput',\n\n componentName: 'ElInput',\n\n mixins: [emitter_default.a, migrating_default.a],\n\n inheritAttrs: false,\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n data: function data() {\n return {\n textareaCalcStyle: {},\n hovering: false,\n focused: false,\n isComposing: false,\n passwordVisible: false\n };\n },\n\n\n props: {\n value: [String, Number],\n size: String,\n resize: String,\n form: String,\n disabled: Boolean,\n readonly: Boolean,\n type: {\n type: String,\n default: 'text'\n },\n autosize: {\n type: [Boolean, Object],\n default: false\n },\n autocomplete: {\n type: String,\n default: 'off'\n },\n /** @Deprecated in next major version */\n autoComplete: {\n type: String,\n validator: function validator(val) {\n false && false;\n return true;\n }\n },\n validateEvent: {\n type: Boolean,\n default: true\n },\n suffixIcon: String,\n prefixIcon: String,\n label: String,\n clearable: {\n type: Boolean,\n default: false\n },\n showPassword: {\n type: Boolean,\n default: false\n },\n showWordLimit: {\n type: Boolean,\n default: false\n },\n tabindex: String\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n validateState: function validateState() {\n return this.elFormItem ? this.elFormItem.validateState : '';\n },\n needStatusIcon: function needStatusIcon() {\n return this.elForm ? this.elForm.statusIcon : false;\n },\n validateIcon: function validateIcon() {\n return {\n validating: 'el-icon-loading',\n success: 'el-icon-circle-check',\n error: 'el-icon-circle-close'\n }[this.validateState];\n },\n textareaStyle: function textareaStyle() {\n return merge_default()({}, this.textareaCalcStyle, { resize: this.resize });\n },\n inputSize: function inputSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n inputDisabled: function inputDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n },\n nativeInputValue: function nativeInputValue() {\n return this.value === null || this.value === undefined ? '' : String(this.value);\n },\n showClear: function showClear() {\n return this.clearable && !this.inputDisabled && !this.readonly && this.nativeInputValue && (this.focused || this.hovering);\n },\n showPwdVisible: function showPwdVisible() {\n return this.showPassword && !this.inputDisabled && !this.readonly && (!!this.nativeInputValue || this.focused);\n },\n isWordLimitVisible: function isWordLimitVisible() {\n return this.showWordLimit && this.$attrs.maxlength && (this.type === 'text' || this.type === 'textarea') && !this.inputDisabled && !this.readonly && !this.showPassword;\n },\n upperLimit: function upperLimit() {\n return this.$attrs.maxlength;\n },\n textLength: function textLength() {\n if (typeof this.value === 'number') {\n return String(this.value).length;\n }\n\n return (this.value || '').length;\n },\n inputExceed: function inputExceed() {\n // show exceed style if length of initial value greater then maxlength\n return this.isWordLimitVisible && this.textLength > this.upperLimit;\n }\n },\n\n watch: {\n value: function value(val) {\n this.$nextTick(this.resizeTextarea);\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.change', [val]);\n }\n },\n\n // native input value is set explicitly\n // do not use v-model / :value in template\n // see: https://github.com/ElemeFE/element/issues/14521\n nativeInputValue: function nativeInputValue() {\n this.setNativeInputValue();\n },\n\n // when change between <input> and <textarea>,\n // update DOM dependent value and styles\n // https://github.com/ElemeFE/element/issues/14857\n type: function type() {\n var _this = this;\n\n this.$nextTick(function () {\n _this.setNativeInputValue();\n _this.resizeTextarea();\n _this.updateIconOffset();\n });\n }\n },\n\n methods: {\n focus: function focus() {\n this.getInput().focus();\n },\n blur: function blur() {\n this.getInput().blur();\n },\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'icon': 'icon is removed, use suffix-icon / prefix-icon instead.',\n 'on-icon-click': 'on-icon-click is removed.'\n },\n events: {\n 'click': 'click is removed.'\n }\n };\n },\n handleBlur: function handleBlur(event) {\n this.focused = false;\n this.$emit('blur', event);\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.blur', [this.value]);\n }\n },\n select: function select() {\n this.getInput().select();\n },\n resizeTextarea: function resizeTextarea() {\n if (this.$isServer) return;\n var autosize = this.autosize,\n type = this.type;\n\n if (type !== 'textarea') return;\n if (!autosize) {\n this.textareaCalcStyle = {\n minHeight: calcTextareaHeight(this.$refs.textarea).minHeight\n };\n return;\n }\n var minRows = autosize.minRows;\n var maxRows = autosize.maxRows;\n\n this.textareaCalcStyle = calcTextareaHeight(this.$refs.textarea, minRows, maxRows);\n },\n setNativeInputValue: function setNativeInputValue() {\n var input = this.getInput();\n if (!input) return;\n if (input.value === this.nativeInputValue) return;\n input.value = this.nativeInputValue;\n },\n handleFocus: function handleFocus(event) {\n this.focused = true;\n this.$emit('focus', event);\n },\n handleCompositionStart: function handleCompositionStart() {\n this.isComposing = true;\n },\n handleCompositionUpdate: function handleCompositionUpdate(event) {\n var text = event.target.value;\n var lastCharacter = text[text.length - 1] || '';\n this.isComposing = !Object(shared_[\"isKorean\"])(lastCharacter);\n },\n handleCompositionEnd: function handleCompositionEnd(event) {\n if (this.isComposing) {\n this.isComposing = false;\n this.handleInput(event);\n }\n },\n handleInput: function handleInput(event) {\n // should not emit input during composition\n // see: https://github.com/ElemeFE/element/issues/10516\n if (this.isComposing) return;\n\n // hack for https://github.com/ElemeFE/element/issues/8548\n // should remove the following line when we don't support IE\n if (event.target.value === this.nativeInputValue) return;\n\n this.$emit('input', event.target.value);\n\n // ensure native input value is controlled\n // see: https://github.com/ElemeFE/element/issues/12850\n this.$nextTick(this.setNativeInputValue);\n },\n handleChange: function handleChange(event) {\n this.$emit('change', event.target.value);\n },\n calcIconOffset: function calcIconOffset(place) {\n var elList = [].slice.call(this.$el.querySelectorAll('.el-input__' + place) || []);\n if (!elList.length) return;\n var el = null;\n for (var i = 0; i < elList.length; i++) {\n if (elList[i].parentNode === this.$el) {\n el = elList[i];\n break;\n }\n }\n if (!el) return;\n var pendantMap = {\n suffix: 'append',\n prefix: 'prepend'\n };\n\n var pendant = pendantMap[place];\n if (this.$slots[pendant]) {\n el.style.transform = 'translateX(' + (place === 'suffix' ? '-' : '') + this.$el.querySelector('.el-input-group__' + pendant).offsetWidth + 'px)';\n } else {\n el.removeAttribute('style');\n }\n },\n updateIconOffset: function updateIconOffset() {\n this.calcIconOffset('prefix');\n this.calcIconOffset('suffix');\n },\n clear: function clear() {\n this.$emit('input', '');\n this.$emit('change', '');\n this.$emit('clear');\n },\n handlePasswordVisible: function handlePasswordVisible() {\n this.passwordVisible = !this.passwordVisible;\n this.focus();\n },\n getInput: function getInput() {\n return this.$refs.input || this.$refs.textarea;\n },\n getSuffixVisible: function getSuffixVisible() {\n return this.$slots.suffix || this.suffixIcon || this.showClear || this.showPassword || this.isWordLimitVisible || this.validateState && this.needStatusIcon;\n }\n },\n\n created: function created() {\n this.$on('inputSelect', this.select);\n },\n mounted: function mounted() {\n this.setNativeInputValue();\n this.resizeTextarea();\n this.updateIconOffset();\n },\n updated: function updated() {\n this.$nextTick(this.updateIconOffset);\n }\n});\n// CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_inputvue_type_script_lang_js_ = (inputvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/input/src/input.vue\n\n\n\n\n\n/* normalize component */\n\nvar input_component = normalizeComponent(\n src_inputvue_type_script_lang_js_,\n inputvue_type_template_id_343dd774_render,\n inputvue_type_template_id_343dd774_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var input_api; }\ninput_component.options.__file = \"packages/input/src/input.vue\"\n/* harmony default export */ var src_input = (input_component.exports);\n// CONCATENATED MODULE: ./packages/input/index.js\n\n\n/* istanbul ignore next */\nsrc_input.install = function (Vue) {\n Vue.component(src_input.name, src_input);\n};\n\n/* harmony default export */ var packages_input = (src_input);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input-number/src/input-number.vue?vue&type=template&id=42f8cf66&\nvar input_numbervue_type_template_id_42f8cf66_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: [\n \"el-input-number\",\n _vm.inputNumberSize ? \"el-input-number--\" + _vm.inputNumberSize : \"\",\n { \"is-disabled\": _vm.inputNumberDisabled },\n { \"is-without-controls\": !_vm.controls },\n { \"is-controls-right\": _vm.controlsAtRight }\n ],\n on: {\n dragstart: function($event) {\n $event.preventDefault()\n }\n }\n },\n [\n _vm.controls\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.decrease,\n expression: \"decrease\"\n }\n ],\n staticClass: \"el-input-number__decrease\",\n class: { \"is-disabled\": _vm.minDisabled },\n attrs: { role: \"button\" },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.decrease($event)\n }\n }\n },\n [\n _c(\"i\", {\n class:\n \"el-icon-\" + (_vm.controlsAtRight ? \"arrow-down\" : \"minus\")\n })\n ]\n )\n : _vm._e(),\n _vm.controls\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.increase,\n expression: \"increase\"\n }\n ],\n staticClass: \"el-input-number__increase\",\n class: { \"is-disabled\": _vm.maxDisabled },\n attrs: { role: \"button\" },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.increase($event)\n }\n }\n },\n [\n _c(\"i\", {\n class: \"el-icon-\" + (_vm.controlsAtRight ? \"arrow-up\" : \"plus\")\n })\n ]\n )\n : _vm._e(),\n _c(\"el-input\", {\n ref: \"input\",\n attrs: {\n value: _vm.displayValue,\n placeholder: _vm.placeholder,\n disabled: _vm.inputNumberDisabled,\n size: _vm.inputNumberSize,\n max: _vm.max,\n min: _vm.min,\n name: _vm.name,\n label: _vm.label\n },\n on: {\n blur: _vm.handleBlur,\n focus: _vm.handleFocus,\n input: _vm.handleInput,\n change: _vm.handleInputChange\n },\n nativeOn: {\n keydown: [\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.increase($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.decrease($event)\n }\n ]\n }\n })\n ],\n 1\n )\n}\nvar input_numbervue_type_template_id_42f8cf66_staticRenderFns = []\ninput_numbervue_type_template_id_42f8cf66_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue?vue&type=template&id=42f8cf66&\n\n// CONCATENATED MODULE: ./src/directives/repeat-click.js\n\n\n/* harmony default export */ var repeat_click = ({\n bind: function bind(el, binding, vnode) {\n var interval = null;\n var startTime = void 0;\n var handler = function handler() {\n return vnode.context[binding.expression].apply();\n };\n var clear = function clear() {\n if (Date.now() - startTime < 100) {\n handler();\n }\n clearInterval(interval);\n interval = null;\n };\n\n Object(dom_[\"on\"])(el, 'mousedown', function (e) {\n if (e.button !== 0) return;\n startTime = Date.now();\n Object(dom_[\"once\"])(document, 'mouseup', clear);\n clearInterval(interval);\n interval = setInterval(handler, 100);\n });\n }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input-number/src/input-number.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var input_numbervue_type_script_lang_js_ = ({\n name: 'ElInputNumber',\n mixins: [focus_default()('input')],\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n directives: {\n repeatClick: repeat_click\n },\n components: {\n ElInput: input_default.a\n },\n props: {\n step: {\n type: Number,\n default: 1\n },\n stepStrictly: {\n type: Boolean,\n default: false\n },\n max: {\n type: Number,\n default: Infinity\n },\n min: {\n type: Number,\n default: -Infinity\n },\n value: {},\n disabled: Boolean,\n size: String,\n controls: {\n type: Boolean,\n default: true\n },\n controlsPosition: {\n type: String,\n default: ''\n },\n name: String,\n label: String,\n placeholder: String,\n precision: {\n type: Number,\n validator: function validator(val) {\n return val >= 0 && val === parseInt(val, 10);\n }\n }\n },\n data: function data() {\n return {\n currentValue: 0,\n userInput: null\n };\n },\n\n watch: {\n value: {\n immediate: true,\n handler: function handler(value) {\n var newVal = value === undefined ? value : Number(value);\n if (newVal !== undefined) {\n if (isNaN(newVal)) {\n return;\n }\n\n if (this.stepStrictly) {\n var stepPrecision = this.getPrecision(this.step);\n var precisionFactor = Math.pow(10, stepPrecision);\n newVal = Math.round(newVal / this.step) * precisionFactor * this.step / precisionFactor;\n }\n\n if (this.precision !== undefined) {\n newVal = this.toPrecision(newVal, this.precision);\n }\n }\n if (newVal >= this.max) newVal = this.max;\n if (newVal <= this.min) newVal = this.min;\n this.currentValue = newVal;\n this.userInput = null;\n this.$emit('input', newVal);\n }\n }\n },\n computed: {\n minDisabled: function minDisabled() {\n return this._decrease(this.value, this.step) < this.min;\n },\n maxDisabled: function maxDisabled() {\n return this._increase(this.value, this.step) > this.max;\n },\n numPrecision: function numPrecision() {\n var value = this.value,\n step = this.step,\n getPrecision = this.getPrecision,\n precision = this.precision;\n\n var stepPrecision = getPrecision(step);\n if (precision !== undefined) {\n if (stepPrecision > precision) {\n console.warn('[Element Warn][InputNumber]precision should not be less than the decimal places of step');\n }\n return precision;\n } else {\n return Math.max(getPrecision(value), stepPrecision);\n }\n },\n controlsAtRight: function controlsAtRight() {\n return this.controls && this.controlsPosition === 'right';\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n inputNumberSize: function inputNumberSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n inputNumberDisabled: function inputNumberDisabled() {\n return this.disabled || !!(this.elForm || {}).disabled;\n },\n displayValue: function displayValue() {\n if (this.userInput !== null) {\n return this.userInput;\n }\n\n var currentValue = this.currentValue;\n\n if (typeof currentValue === 'number') {\n if (this.stepStrictly) {\n var stepPrecision = this.getPrecision(this.step);\n var precisionFactor = Math.pow(10, stepPrecision);\n currentValue = Math.round(currentValue / this.step) * precisionFactor * this.step / precisionFactor;\n }\n\n if (this.precision !== undefined) {\n currentValue = currentValue.toFixed(this.precision);\n }\n }\n\n return currentValue;\n }\n },\n methods: {\n toPrecision: function toPrecision(num, precision) {\n if (precision === undefined) precision = this.numPrecision;\n return parseFloat(Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision));\n },\n getPrecision: function getPrecision(value) {\n if (value === undefined) return 0;\n var valueString = value.toString();\n var dotPosition = valueString.indexOf('.');\n var precision = 0;\n if (dotPosition !== -1) {\n precision = valueString.length - dotPosition - 1;\n }\n return precision;\n },\n _increase: function _increase(val, step) {\n if (typeof val !== 'number' && val !== undefined) return this.currentValue;\n\n var precisionFactor = Math.pow(10, this.numPrecision);\n // Solve the accuracy problem of JS decimal calculation by converting the value to integer.\n return this.toPrecision((precisionFactor * val + precisionFactor * step) / precisionFactor);\n },\n _decrease: function _decrease(val, step) {\n if (typeof val !== 'number' && val !== undefined) return this.currentValue;\n\n var precisionFactor = Math.pow(10, this.numPrecision);\n\n return this.toPrecision((precisionFactor * val - precisionFactor * step) / precisionFactor);\n },\n increase: function increase() {\n if (this.inputNumberDisabled || this.maxDisabled) return;\n var value = this.value || 0;\n var newVal = this._increase(value, this.step);\n this.setCurrentValue(newVal);\n },\n decrease: function decrease() {\n if (this.inputNumberDisabled || this.minDisabled) return;\n var value = this.value || 0;\n var newVal = this._decrease(value, this.step);\n this.setCurrentValue(newVal);\n },\n handleBlur: function handleBlur(event) {\n this.$emit('blur', event);\n },\n handleFocus: function handleFocus(event) {\n this.$emit('focus', event);\n },\n setCurrentValue: function setCurrentValue(newVal) {\n var oldVal = this.currentValue;\n if (typeof newVal === 'number' && this.precision !== undefined) {\n newVal = this.toPrecision(newVal, this.precision);\n }\n if (newVal >= this.max) newVal = this.max;\n if (newVal <= this.min) newVal = this.min;\n if (oldVal === newVal) return;\n this.userInput = null;\n this.$emit('input', newVal);\n this.$emit('change', newVal, oldVal);\n this.currentValue = newVal;\n },\n handleInput: function handleInput(value) {\n this.userInput = value;\n },\n handleInputChange: function handleInputChange(value) {\n var newVal = value === '' ? undefined : Number(value);\n if (!isNaN(newVal) || value === '') {\n this.setCurrentValue(newVal);\n }\n this.userInput = null;\n },\n select: function select() {\n this.$refs.input.select();\n }\n },\n mounted: function mounted() {\n var innerInput = this.$refs.input.$refs.input;\n innerInput.setAttribute('role', 'spinbutton');\n innerInput.setAttribute('aria-valuemax', this.max);\n innerInput.setAttribute('aria-valuemin', this.min);\n innerInput.setAttribute('aria-valuenow', this.currentValue);\n innerInput.setAttribute('aria-disabled', this.inputNumberDisabled);\n },\n updated: function updated() {\n if (!this.$refs || !this.$refs.input) return;\n var innerInput = this.$refs.input.$refs.input;\n innerInput.setAttribute('aria-valuenow', this.currentValue);\n }\n});\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_input_numbervue_type_script_lang_js_ = (input_numbervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue\n\n\n\n\n\n/* normalize component */\n\nvar input_number_component = normalizeComponent(\n src_input_numbervue_type_script_lang_js_,\n input_numbervue_type_template_id_42f8cf66_render,\n input_numbervue_type_template_id_42f8cf66_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var input_number_api; }\ninput_number_component.options.__file = \"packages/input-number/src/input-number.vue\"\n/* harmony default export */ var input_number = (input_number_component.exports);\n// CONCATENATED MODULE: ./packages/input-number/index.js\n\n\n/* istanbul ignore next */\ninput_number.install = function (Vue) {\n Vue.component(input_number.name, input_number);\n};\n\n/* harmony default export */ var packages_input_number = (input_number);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio.vue?vue&type=template&id=69cd6268&\nvar radiovue_type_template_id_69cd6268_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n staticClass: \"el-radio\",\n class: [\n _vm.border && _vm.radioSize ? \"el-radio--\" + _vm.radioSize : \"\",\n { \"is-disabled\": _vm.isDisabled },\n { \"is-focus\": _vm.focus },\n { \"is-bordered\": _vm.border },\n { \"is-checked\": _vm.model === _vm.label }\n ],\n attrs: {\n role: \"radio\",\n \"aria-checked\": _vm.model === _vm.label,\n \"aria-disabled\": _vm.isDisabled,\n tabindex: _vm.tabIndex\n },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.model = _vm.isDisabled ? _vm.model : _vm.label\n }\n }\n },\n [\n _c(\n \"span\",\n {\n staticClass: \"el-radio__input\",\n class: {\n \"is-disabled\": _vm.isDisabled,\n \"is-checked\": _vm.model === _vm.label\n }\n },\n [\n _c(\"span\", { staticClass: \"el-radio__inner\" }),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n ref: \"radio\",\n staticClass: \"el-radio__original\",\n attrs: {\n type: \"radio\",\n \"aria-hidden\": \"true\",\n name: _vm.name,\n disabled: _vm.isDisabled,\n tabindex: \"-1\"\n },\n domProps: {\n value: _vm.label,\n checked: _vm._q(_vm.model, _vm.label)\n },\n on: {\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n },\n change: [\n function($event) {\n _vm.model = _vm.label\n },\n _vm.handleChange\n ]\n }\n })\n ]\n ),\n _c(\n \"span\",\n {\n staticClass: \"el-radio__label\",\n on: {\n keydown: function($event) {\n $event.stopPropagation()\n }\n }\n },\n [\n _vm._t(\"default\"),\n !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n ],\n 2\n )\n ]\n )\n}\nvar radiovue_type_template_id_69cd6268_staticRenderFns = []\nradiovue_type_template_id_69cd6268_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue?vue&type=template&id=69cd6268&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var radiovue_type_script_lang_js_ = ({\n name: 'ElRadio',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n\n elFormItem: {\n default: ''\n }\n },\n\n componentName: 'ElRadio',\n\n props: {\n value: {},\n label: {},\n disabled: Boolean,\n name: String,\n border: Boolean,\n size: String\n },\n\n data: function data() {\n return {\n focus: false\n };\n },\n\n computed: {\n isGroup: function isGroup() {\n var parent = this.$parent;\n while (parent) {\n if (parent.$options.componentName !== 'ElRadioGroup') {\n parent = parent.$parent;\n } else {\n this._radioGroup = parent;\n return true;\n }\n }\n return false;\n },\n\n model: {\n get: function get() {\n return this.isGroup ? this._radioGroup.value : this.value;\n },\n set: function set(val) {\n if (this.isGroup) {\n this.dispatch('ElRadioGroup', 'input', [val]);\n } else {\n this.$emit('input', val);\n }\n this.$refs.radio && (this.$refs.radio.checked = this.model === this.label);\n }\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n radioSize: function radioSize() {\n var temRadioSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n return this.isGroup ? this._radioGroup.radioGroupSize || temRadioSize : temRadioSize;\n },\n isDisabled: function isDisabled() {\n return this.isGroup ? this._radioGroup.disabled || this.disabled || (this.elForm || {}).disabled : this.disabled || (this.elForm || {}).disabled;\n },\n tabIndex: function tabIndex() {\n return this.isDisabled || this.isGroup && this.model !== this.label ? -1 : 0;\n }\n },\n\n methods: {\n handleChange: function handleChange() {\n var _this = this;\n\n this.$nextTick(function () {\n _this.$emit('change', _this.model);\n _this.isGroup && _this.dispatch('ElRadioGroup', 'handleChange', _this.model);\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radiovue_type_script_lang_js_ = (radiovue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/radio/src/radio.vue\n\n\n\n\n\n/* normalize component */\n\nvar radio_component = normalizeComponent(\n src_radiovue_type_script_lang_js_,\n radiovue_type_template_id_69cd6268_render,\n radiovue_type_template_id_69cd6268_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var radio_api; }\nradio_component.options.__file = \"packages/radio/src/radio.vue\"\n/* harmony default export */ var src_radio = (radio_component.exports);\n// CONCATENATED MODULE: ./packages/radio/index.js\n\n\n/* istanbul ignore next */\nsrc_radio.install = function (Vue) {\n Vue.component(src_radio.name, src_radio);\n};\n\n/* harmony default export */ var packages_radio = (src_radio);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-group.vue?vue&type=template&id=818a704c&\nvar radio_groupvue_type_template_id_818a704c_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n _vm._elTag,\n {\n tag: \"component\",\n staticClass: \"el-radio-group\",\n attrs: { role: \"radiogroup\" },\n on: { keydown: _vm.handleKeydown }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar radio_groupvue_type_template_id_818a704c_staticRenderFns = []\nradio_groupvue_type_template_id_818a704c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio-group.vue?vue&type=template&id=818a704c&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\nvar keyCode = Object.freeze({\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40\n});\n/* harmony default export */ var radio_groupvue_type_script_lang_js_ = ({\n name: 'ElRadioGroup',\n\n componentName: 'ElRadioGroup',\n\n inject: {\n elFormItem: {\n default: ''\n }\n },\n\n mixins: [emitter_default.a],\n\n props: {\n value: {},\n size: String,\n fill: String,\n textColor: String,\n disabled: Boolean\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n _elTag: function _elTag() {\n return (this.$vnode.data || {}).tag || 'div';\n },\n radioGroupSize: function radioGroupSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n }\n },\n\n created: function created() {\n var _this = this;\n\n this.$on('handleChange', function (value) {\n _this.$emit('change', value);\n });\n },\n mounted: function mounted() {\n // 当radioGroup没有默认选项时,第一个可以选中Tab导航\n var radios = this.$el.querySelectorAll('[type=radio]');\n var firstLabel = this.$el.querySelectorAll('[role=radio]')[0];\n if (![].some.call(radios, function (radio) {\n return radio.checked;\n }) && firstLabel) {\n firstLabel.tabIndex = 0;\n }\n },\n\n methods: {\n handleKeydown: function handleKeydown(e) {\n // 左右上下按键 可以在radio组内切换不同选项\n var target = e.target;\n var className = target.nodeName === 'INPUT' ? '[type=radio]' : '[role=radio]';\n var radios = this.$el.querySelectorAll(className);\n var length = radios.length;\n var index = [].indexOf.call(radios, target);\n var roleRadios = this.$el.querySelectorAll('[role=radio]');\n switch (e.keyCode) {\n case keyCode.LEFT:\n case keyCode.UP:\n e.stopPropagation();\n e.preventDefault();\n if (index === 0) {\n roleRadios[length - 1].click();\n roleRadios[length - 1].focus();\n } else {\n roleRadios[index - 1].click();\n roleRadios[index - 1].focus();\n }\n break;\n case keyCode.RIGHT:\n case keyCode.DOWN:\n if (index === length - 1) {\n e.stopPropagation();\n e.preventDefault();\n roleRadios[0].click();\n roleRadios[0].focus();\n } else {\n roleRadios[index + 1].click();\n roleRadios[index + 1].focus();\n }\n break;\n default:\n break;\n }\n }\n },\n watch: {\n value: function value(_value) {\n this.dispatch('ElFormItem', 'el.form.change', [this.value]);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radio_groupvue_type_script_lang_js_ = (radio_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/radio/src/radio-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar radio_group_component = normalizeComponent(\n src_radio_groupvue_type_script_lang_js_,\n radio_groupvue_type_template_id_818a704c_render,\n radio_groupvue_type_template_id_818a704c_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var radio_group_api; }\nradio_group_component.options.__file = \"packages/radio/src/radio-group.vue\"\n/* harmony default export */ var radio_group = (radio_group_component.exports);\n// CONCATENATED MODULE: ./packages/radio-group/index.js\n\n\n/* istanbul ignore next */\nradio_group.install = function (Vue) {\n Vue.component(radio_group.name, radio_group);\n};\n\n/* harmony default export */ var packages_radio_group = (radio_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-button.vue?vue&type=template&id=18a77a32&\nvar radio_buttonvue_type_template_id_18a77a32_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n staticClass: \"el-radio-button\",\n class: [\n _vm.size ? \"el-radio-button--\" + _vm.size : \"\",\n { \"is-active\": _vm.value === _vm.label },\n { \"is-disabled\": _vm.isDisabled },\n { \"is-focus\": _vm.focus }\n ],\n attrs: {\n role: \"radio\",\n \"aria-checked\": _vm.value === _vm.label,\n \"aria-disabled\": _vm.isDisabled,\n tabindex: _vm.tabIndex\n },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.value = _vm.isDisabled ? _vm.value : _vm.label\n }\n }\n },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.value,\n expression: \"value\"\n }\n ],\n staticClass: \"el-radio-button__orig-radio\",\n attrs: {\n type: \"radio\",\n name: _vm.name,\n disabled: _vm.isDisabled,\n tabindex: \"-1\"\n },\n domProps: { value: _vm.label, checked: _vm._q(_vm.value, _vm.label) },\n on: {\n change: [\n function($event) {\n _vm.value = _vm.label\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n }),\n _c(\n \"span\",\n {\n staticClass: \"el-radio-button__inner\",\n style: _vm.value === _vm.label ? _vm.activeStyle : null,\n on: {\n keydown: function($event) {\n $event.stopPropagation()\n }\n }\n },\n [\n _vm._t(\"default\"),\n !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n ],\n 2\n )\n ]\n )\n}\nvar radio_buttonvue_type_template_id_18a77a32_staticRenderFns = []\nradio_buttonvue_type_template_id_18a77a32_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio-button.vue?vue&type=template&id=18a77a32&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var radio_buttonvue_type_script_lang_js_ = ({\n name: 'ElRadioButton',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n props: {\n label: {},\n disabled: Boolean,\n name: String\n },\n data: function data() {\n return {\n focus: false\n };\n },\n\n computed: {\n value: {\n get: function get() {\n return this._radioGroup.value;\n },\n set: function set(value) {\n this._radioGroup.$emit('input', value);\n }\n },\n _radioGroup: function _radioGroup() {\n var parent = this.$parent;\n while (parent) {\n if (parent.$options.componentName !== 'ElRadioGroup') {\n parent = parent.$parent;\n } else {\n return parent;\n }\n }\n return false;\n },\n activeStyle: function activeStyle() {\n return {\n backgroundColor: this._radioGroup.fill || '',\n borderColor: this._radioGroup.fill || '',\n boxShadow: this._radioGroup.fill ? '-1px 0 0 0 ' + this._radioGroup.fill : '',\n color: this._radioGroup.textColor || ''\n };\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n size: function size() {\n return this._radioGroup.radioGroupSize || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n isDisabled: function isDisabled() {\n return this.disabled || this._radioGroup.disabled || (this.elForm || {}).disabled;\n },\n tabIndex: function tabIndex() {\n return this.isDisabled || this._radioGroup && this.value !== this.label ? -1 : 0;\n }\n },\n\n methods: {\n handleChange: function handleChange() {\n var _this = this;\n\n this.$nextTick(function () {\n _this.dispatch('ElRadioGroup', 'handleChange', _this.value);\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio-button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radio_buttonvue_type_script_lang_js_ = (radio_buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/radio/src/radio-button.vue\n\n\n\n\n\n/* normalize component */\n\nvar radio_button_component = normalizeComponent(\n src_radio_buttonvue_type_script_lang_js_,\n radio_buttonvue_type_template_id_18a77a32_render,\n radio_buttonvue_type_template_id_18a77a32_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var radio_button_api; }\nradio_button_component.options.__file = \"packages/radio/src/radio-button.vue\"\n/* harmony default export */ var radio_button = (radio_button_component.exports);\n// CONCATENATED MODULE: ./packages/radio-button/index.js\n\n\n/* istanbul ignore next */\nradio_button.install = function (Vue) {\n Vue.component(radio_button.name, radio_button);\n};\n\n/* harmony default export */ var packages_radio_button = (radio_button);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox.vue?vue&type=template&id=d0387074&\nvar checkboxvue_type_template_id_d0387074_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n staticClass: \"el-checkbox\",\n class: [\n _vm.border && _vm.checkboxSize\n ? \"el-checkbox--\" + _vm.checkboxSize\n : \"\",\n { \"is-disabled\": _vm.isDisabled },\n { \"is-bordered\": _vm.border },\n { \"is-checked\": _vm.isChecked }\n ],\n attrs: { id: _vm.id }\n },\n [\n _c(\n \"span\",\n {\n staticClass: \"el-checkbox__input\",\n class: {\n \"is-disabled\": _vm.isDisabled,\n \"is-checked\": _vm.isChecked,\n \"is-indeterminate\": _vm.indeterminate,\n \"is-focus\": _vm.focus\n },\n attrs: {\n tabindex: _vm.indeterminate ? 0 : false,\n role: _vm.indeterminate ? \"checkbox\" : false,\n \"aria-checked\": _vm.indeterminate ? \"mixed\" : false\n }\n },\n [\n _c(\"span\", { staticClass: \"el-checkbox__inner\" }),\n _vm.trueLabel || _vm.falseLabel\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n staticClass: \"el-checkbox__original\",\n attrs: {\n type: \"checkbox\",\n \"aria-hidden\": _vm.indeterminate ? \"true\" : \"false\",\n name: _vm.name,\n disabled: _vm.isDisabled,\n \"true-value\": _vm.trueLabel,\n \"false-value\": _vm.falseLabel\n },\n domProps: {\n checked: Array.isArray(_vm.model)\n ? _vm._i(_vm.model, null) > -1\n : _vm._q(_vm.model, _vm.trueLabel)\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.model,\n $$el = $event.target,\n $$c = $$el.checked ? _vm.trueLabel : _vm.falseLabel\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.model = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.model = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.model = $$c\n }\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n })\n : _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n staticClass: \"el-checkbox__original\",\n attrs: {\n type: \"checkbox\",\n \"aria-hidden\": _vm.indeterminate ? \"true\" : \"false\",\n disabled: _vm.isDisabled,\n name: _vm.name\n },\n domProps: {\n value: _vm.label,\n checked: Array.isArray(_vm.model)\n ? _vm._i(_vm.model, _vm.label) > -1\n : _vm.model\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.model,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.label,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.model = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.model = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.model = $$c\n }\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n })\n ]\n ),\n _vm.$slots.default || _vm.label\n ? _c(\n \"span\",\n { staticClass: \"el-checkbox__label\" },\n [\n _vm._t(\"default\"),\n !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n ],\n 2\n )\n : _vm._e()\n ]\n )\n}\nvar checkboxvue_type_template_id_d0387074_staticRenderFns = []\ncheckboxvue_type_template_id_d0387074_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue?vue&type=template&id=d0387074&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var checkboxvue_type_script_lang_js_ = ({\n name: 'ElCheckbox',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n componentName: 'ElCheckbox',\n\n data: function data() {\n return {\n selfModel: false,\n focus: false,\n isLimitExceeded: false\n };\n },\n\n\n computed: {\n model: {\n get: function get() {\n return this.isGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n },\n set: function set(val) {\n if (this.isGroup) {\n this.isLimitExceeded = false;\n this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (this.isLimitExceeded = true);\n\n this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (this.isLimitExceeded = true);\n\n this.isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]);\n } else {\n this.$emit('input', val);\n this.selfModel = val;\n }\n }\n },\n\n isChecked: function isChecked() {\n if ({}.toString.call(this.model) === '[object Boolean]') {\n return this.model;\n } else if (Array.isArray(this.model)) {\n return this.model.indexOf(this.label) > -1;\n } else if (this.model !== null && this.model !== undefined) {\n return this.model === this.trueLabel;\n }\n },\n isGroup: function isGroup() {\n var parent = this.$parent;\n while (parent) {\n if (parent.$options.componentName !== 'ElCheckboxGroup') {\n parent = parent.$parent;\n } else {\n this._checkboxGroup = parent;\n return true;\n }\n }\n return false;\n },\n store: function store() {\n return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n },\n\n\n /* used to make the isDisabled judgment under max/min props */\n isLimitDisabled: function isLimitDisabled() {\n var _checkboxGroup = this._checkboxGroup,\n max = _checkboxGroup.max,\n min = _checkboxGroup.min;\n\n return !!(max || min) && this.model.length >= max && !this.isChecked || this.model.length <= min && this.isChecked;\n },\n isDisabled: function isDisabled() {\n return this.isGroup ? this._checkboxGroup.disabled || this.disabled || (this.elForm || {}).disabled || this.isLimitDisabled : this.disabled || (this.elForm || {}).disabled;\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n checkboxSize: function checkboxSize() {\n var temCheckboxSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n return this.isGroup ? this._checkboxGroup.checkboxGroupSize || temCheckboxSize : temCheckboxSize;\n }\n },\n\n props: {\n value: {},\n label: {},\n indeterminate: Boolean,\n disabled: Boolean,\n checked: Boolean,\n name: String,\n trueLabel: [String, Number],\n falseLabel: [String, Number],\n id: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/\n controls: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/\n border: Boolean,\n size: String\n },\n\n methods: {\n addToStore: function addToStore() {\n if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n this.model.push(this.label);\n } else {\n this.model = this.trueLabel || true;\n }\n },\n handleChange: function handleChange(ev) {\n var _this = this;\n\n if (this.isLimitExceeded) return;\n var value = void 0;\n if (ev.target.checked) {\n value = this.trueLabel === undefined ? true : this.trueLabel;\n } else {\n value = this.falseLabel === undefined ? false : this.falseLabel;\n }\n this.$emit('change', value, ev);\n this.$nextTick(function () {\n if (_this.isGroup) {\n _this.dispatch('ElCheckboxGroup', 'change', [_this._checkboxGroup.value]);\n }\n });\n }\n },\n\n created: function created() {\n this.checked && this.addToStore();\n },\n mounted: function mounted() {\n // 为indeterminate元素 添加aria-controls 属性\n if (this.indeterminate) {\n this.$el.setAttribute('aria-controls', this.controls);\n }\n },\n\n\n watch: {\n value: function value(_value) {\n this.dispatch('ElFormItem', 'el.form.change', _value);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkboxvue_type_script_lang_js_ = (checkboxvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue\n\n\n\n\n\n/* normalize component */\n\nvar checkbox_component = normalizeComponent(\n src_checkboxvue_type_script_lang_js_,\n checkboxvue_type_template_id_d0387074_render,\n checkboxvue_type_template_id_d0387074_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var checkbox_api; }\ncheckbox_component.options.__file = \"packages/checkbox/src/checkbox.vue\"\n/* harmony default export */ var src_checkbox = (checkbox_component.exports);\n// CONCATENATED MODULE: ./packages/checkbox/index.js\n\n\n/* istanbul ignore next */\nsrc_checkbox.install = function (Vue) {\n Vue.component(src_checkbox.name, src_checkbox);\n};\n\n/* harmony default export */ var packages_checkbox = (src_checkbox);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-button.vue?vue&type=template&id=478e906e&\nvar checkbox_buttonvue_type_template_id_478e906e_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n staticClass: \"el-checkbox-button\",\n class: [\n _vm.size ? \"el-checkbox-button--\" + _vm.size : \"\",\n { \"is-disabled\": _vm.isDisabled },\n { \"is-checked\": _vm.isChecked },\n { \"is-focus\": _vm.focus }\n ],\n attrs: {\n role: \"checkbox\",\n \"aria-checked\": _vm.isChecked,\n \"aria-disabled\": _vm.isDisabled\n }\n },\n [\n _vm.trueLabel || _vm.falseLabel\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n staticClass: \"el-checkbox-button__original\",\n attrs: {\n type: \"checkbox\",\n name: _vm.name,\n disabled: _vm.isDisabled,\n \"true-value\": _vm.trueLabel,\n \"false-value\": _vm.falseLabel\n },\n domProps: {\n checked: Array.isArray(_vm.model)\n ? _vm._i(_vm.model, null) > -1\n : _vm._q(_vm.model, _vm.trueLabel)\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.model,\n $$el = $event.target,\n $$c = $$el.checked ? _vm.trueLabel : _vm.falseLabel\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.model = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.model = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.model = $$c\n }\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n })\n : _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n staticClass: \"el-checkbox-button__original\",\n attrs: {\n type: \"checkbox\",\n name: _vm.name,\n disabled: _vm.isDisabled\n },\n domProps: {\n value: _vm.label,\n checked: Array.isArray(_vm.model)\n ? _vm._i(_vm.model, _vm.label) > -1\n : _vm.model\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.model,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.label,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.model = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.model = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.model = $$c\n }\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n }),\n _vm.$slots.default || _vm.label\n ? _c(\n \"span\",\n {\n staticClass: \"el-checkbox-button__inner\",\n style: _vm.isChecked ? _vm.activeStyle : null\n },\n [_vm._t(\"default\", [_vm._v(_vm._s(_vm.label))])],\n 2\n )\n : _vm._e()\n ]\n )\n}\nvar checkbox_buttonvue_type_template_id_478e906e_staticRenderFns = []\ncheckbox_buttonvue_type_template_id_478e906e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-button.vue?vue&type=template&id=478e906e&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var checkbox_buttonvue_type_script_lang_js_ = ({\n name: 'ElCheckboxButton',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n data: function data() {\n return {\n selfModel: false,\n focus: false,\n isLimitExceeded: false\n };\n },\n\n\n props: {\n value: {},\n label: {},\n disabled: Boolean,\n checked: Boolean,\n name: String,\n trueLabel: [String, Number],\n falseLabel: [String, Number]\n },\n computed: {\n model: {\n get: function get() {\n return this._checkboxGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n },\n set: function set(val) {\n if (this._checkboxGroup) {\n this.isLimitExceeded = false;\n this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (this.isLimitExceeded = true);\n\n this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (this.isLimitExceeded = true);\n\n this.isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]);\n } else if (this.value !== undefined) {\n this.$emit('input', val);\n } else {\n this.selfModel = val;\n }\n }\n },\n\n isChecked: function isChecked() {\n if ({}.toString.call(this.model) === '[object Boolean]') {\n return this.model;\n } else if (Array.isArray(this.model)) {\n return this.model.indexOf(this.label) > -1;\n } else if (this.model !== null && this.model !== undefined) {\n return this.model === this.trueLabel;\n }\n },\n _checkboxGroup: function _checkboxGroup() {\n var parent = this.$parent;\n while (parent) {\n if (parent.$options.componentName !== 'ElCheckboxGroup') {\n parent = parent.$parent;\n } else {\n return parent;\n }\n }\n return false;\n },\n store: function store() {\n return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n },\n activeStyle: function activeStyle() {\n return {\n backgroundColor: this._checkboxGroup.fill || '',\n borderColor: this._checkboxGroup.fill || '',\n color: this._checkboxGroup.textColor || '',\n 'box-shadow': '-1px 0 0 0 ' + this._checkboxGroup.fill\n\n };\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n size: function size() {\n return this._checkboxGroup.checkboxGroupSize || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n\n\n /* used to make the isDisabled judgment under max/min props */\n isLimitDisabled: function isLimitDisabled() {\n var _checkboxGroup2 = this._checkboxGroup,\n max = _checkboxGroup2.max,\n min = _checkboxGroup2.min;\n\n return !!(max || min) && this.model.length >= max && !this.isChecked || this.model.length <= min && this.isChecked;\n },\n isDisabled: function isDisabled() {\n return this._checkboxGroup ? this._checkboxGroup.disabled || this.disabled || (this.elForm || {}).disabled || this.isLimitDisabled : this.disabled || (this.elForm || {}).disabled;\n }\n },\n methods: {\n addToStore: function addToStore() {\n if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n this.model.push(this.label);\n } else {\n this.model = this.trueLabel || true;\n }\n },\n handleChange: function handleChange(ev) {\n var _this = this;\n\n if (this.isLimitExceeded) return;\n var value = void 0;\n if (ev.target.checked) {\n value = this.trueLabel === undefined ? true : this.trueLabel;\n } else {\n value = this.falseLabel === undefined ? false : this.falseLabel;\n }\n this.$emit('change', value, ev);\n this.$nextTick(function () {\n if (_this._checkboxGroup) {\n _this.dispatch('ElCheckboxGroup', 'change', [_this._checkboxGroup.value]);\n }\n });\n }\n },\n\n created: function created() {\n this.checked && this.addToStore();\n }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkbox_buttonvue_type_script_lang_js_ = (checkbox_buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-button.vue\n\n\n\n\n\n/* normalize component */\n\nvar checkbox_button_component = normalizeComponent(\n src_checkbox_buttonvue_type_script_lang_js_,\n checkbox_buttonvue_type_template_id_478e906e_render,\n checkbox_buttonvue_type_template_id_478e906e_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var checkbox_button_api; }\ncheckbox_button_component.options.__file = \"packages/checkbox/src/checkbox-button.vue\"\n/* harmony default export */ var checkbox_button = (checkbox_button_component.exports);\n// CONCATENATED MODULE: ./packages/checkbox-button/index.js\n\n\n/* istanbul ignore next */\ncheckbox_button.install = function (Vue) {\n Vue.component(checkbox_button.name, checkbox_button);\n};\n\n/* harmony default export */ var packages_checkbox_button = (checkbox_button);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-group.vue?vue&type=template&id=7289a290&\nvar checkbox_groupvue_type_template_id_7289a290_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-checkbox-group\",\n attrs: { role: \"group\", \"aria-label\": \"checkbox-group\" }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar checkbox_groupvue_type_template_id_7289a290_staticRenderFns = []\ncheckbox_groupvue_type_template_id_7289a290_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue?vue&type=template&id=7289a290&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-group.vue?vue&type=script&lang=js&\n\n\n\n/* harmony default export */ var checkbox_groupvue_type_script_lang_js_ = ({\n name: 'ElCheckboxGroup',\n\n componentName: 'ElCheckboxGroup',\n\n mixins: [emitter_default.a],\n\n inject: {\n elFormItem: {\n default: ''\n }\n },\n\n props: {\n value: {},\n disabled: Boolean,\n min: Number,\n max: Number,\n size: String,\n fill: String,\n textColor: String\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n checkboxGroupSize: function checkboxGroupSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n }\n },\n\n watch: {\n value: function value(_value) {\n this.dispatch('ElFormItem', 'el.form.change', [_value]);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkbox_groupvue_type_script_lang_js_ = (checkbox_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar checkbox_group_component = normalizeComponent(\n src_checkbox_groupvue_type_script_lang_js_,\n checkbox_groupvue_type_template_id_7289a290_render,\n checkbox_groupvue_type_template_id_7289a290_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var checkbox_group_api; }\ncheckbox_group_component.options.__file = \"packages/checkbox/src/checkbox-group.vue\"\n/* harmony default export */ var checkbox_group = (checkbox_group_component.exports);\n// CONCATENATED MODULE: ./packages/checkbox-group/index.js\n\n\n/* istanbul ignore next */\ncheckbox_group.install = function (Vue) {\n Vue.component(checkbox_group.name, checkbox_group);\n};\n\n/* harmony default export */ var packages_checkbox_group = (checkbox_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/switch/src/component.vue?vue&type=template&id=2dcd8fbb&\nvar componentvue_type_template_id_2dcd8fbb_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-switch\",\n class: { \"is-disabled\": _vm.switchDisabled, \"is-checked\": _vm.checked },\n attrs: {\n role: \"switch\",\n \"aria-checked\": _vm.checked,\n \"aria-disabled\": _vm.switchDisabled\n },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.switchValue($event)\n }\n }\n },\n [\n _c(\"input\", {\n ref: \"input\",\n staticClass: \"el-switch__input\",\n attrs: {\n type: \"checkbox\",\n id: _vm.id,\n name: _vm.name,\n \"true-value\": _vm.activeValue,\n \"false-value\": _vm.inactiveValue,\n disabled: _vm.switchDisabled\n },\n on: {\n change: _vm.handleChange,\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.switchValue($event)\n }\n }\n }),\n _vm.inactiveIconClass || _vm.inactiveText\n ? _c(\n \"span\",\n {\n class: [\n \"el-switch__label\",\n \"el-switch__label--left\",\n !_vm.checked ? \"is-active\" : \"\"\n ]\n },\n [\n _vm.inactiveIconClass\n ? _c(\"i\", { class: [_vm.inactiveIconClass] })\n : _vm._e(),\n !_vm.inactiveIconClass && _vm.inactiveText\n ? _c(\"span\", { attrs: { \"aria-hidden\": _vm.checked } }, [\n _vm._v(_vm._s(_vm.inactiveText))\n ])\n : _vm._e()\n ]\n )\n : _vm._e(),\n _c(\"span\", {\n ref: \"core\",\n staticClass: \"el-switch__core\",\n style: { width: _vm.coreWidth + \"px\" }\n }),\n _vm.activeIconClass || _vm.activeText\n ? _c(\n \"span\",\n {\n class: [\n \"el-switch__label\",\n \"el-switch__label--right\",\n _vm.checked ? \"is-active\" : \"\"\n ]\n },\n [\n _vm.activeIconClass\n ? _c(\"i\", { class: [_vm.activeIconClass] })\n : _vm._e(),\n !_vm.activeIconClass && _vm.activeText\n ? _c(\"span\", { attrs: { \"aria-hidden\": !_vm.checked } }, [\n _vm._v(_vm._s(_vm.activeText))\n ])\n : _vm._e()\n ]\n )\n : _vm._e()\n ]\n )\n}\nvar componentvue_type_template_id_2dcd8fbb_staticRenderFns = []\ncomponentvue_type_template_id_2dcd8fbb_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/switch/src/component.vue?vue&type=template&id=2dcd8fbb&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/switch/src/component.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var switch_src_componentvue_type_script_lang_js_ = ({\n name: 'ElSwitch',\n mixins: [focus_default()('input'), migrating_default.a, emitter_default.a],\n inject: {\n elForm: {\n default: ''\n }\n },\n props: {\n value: {\n type: [Boolean, String, Number],\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n width: {\n type: Number,\n default: 40\n },\n activeIconClass: {\n type: String,\n default: ''\n },\n inactiveIconClass: {\n type: String,\n default: ''\n },\n activeText: String,\n inactiveText: String,\n activeColor: {\n type: String,\n default: ''\n },\n inactiveColor: {\n type: String,\n default: ''\n },\n activeValue: {\n type: [Boolean, String, Number],\n default: true\n },\n inactiveValue: {\n type: [Boolean, String, Number],\n default: false\n },\n name: {\n type: String,\n default: ''\n },\n validateEvent: {\n type: Boolean,\n default: true\n },\n id: String\n },\n data: function data() {\n return {\n coreWidth: this.width\n };\n },\n created: function created() {\n if (!~[this.activeValue, this.inactiveValue].indexOf(this.value)) {\n this.$emit('input', this.inactiveValue);\n }\n },\n\n computed: {\n checked: function checked() {\n return this.value === this.activeValue;\n },\n switchDisabled: function switchDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n watch: {\n checked: function checked() {\n this.$refs.input.checked = this.checked;\n if (this.activeColor || this.inactiveColor) {\n this.setBackgroundColor();\n }\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.change', [this.value]);\n }\n }\n },\n methods: {\n handleChange: function handleChange(event) {\n var _this = this;\n\n var val = this.checked ? this.inactiveValue : this.activeValue;\n this.$emit('input', val);\n this.$emit('change', val);\n this.$nextTick(function () {\n // set input's checked property\n // in case parent refuses to change component's value\n _this.$refs.input.checked = _this.checked;\n });\n },\n setBackgroundColor: function setBackgroundColor() {\n var newColor = this.checked ? this.activeColor : this.inactiveColor;\n this.$refs.core.style.borderColor = newColor;\n this.$refs.core.style.backgroundColor = newColor;\n },\n switchValue: function switchValue() {\n !this.switchDisabled && this.handleChange();\n },\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'on-color': 'on-color is renamed to active-color.',\n 'off-color': 'off-color is renamed to inactive-color.',\n 'on-text': 'on-text is renamed to active-text.',\n 'off-text': 'off-text is renamed to inactive-text.',\n 'on-value': 'on-value is renamed to active-value.',\n 'off-value': 'off-value is renamed to inactive-value.',\n 'on-icon-class': 'on-icon-class is renamed to active-icon-class.',\n 'off-icon-class': 'off-icon-class is renamed to inactive-icon-class.'\n }\n };\n }\n },\n mounted: function mounted() {\n /* istanbul ignore if */\n this.coreWidth = this.width || 40;\n if (this.activeColor || this.inactiveColor) {\n this.setBackgroundColor();\n }\n this.$refs.input.checked = this.checked;\n }\n});\n// CONCATENATED MODULE: ./packages/switch/src/component.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_switch_src_componentvue_type_script_lang_js_ = (switch_src_componentvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/switch/src/component.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_component_component = normalizeComponent(\n packages_switch_src_componentvue_type_script_lang_js_,\n componentvue_type_template_id_2dcd8fbb_render,\n componentvue_type_template_id_2dcd8fbb_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_component_api; }\nsrc_component_component.options.__file = \"packages/switch/src/component.vue\"\n/* harmony default export */ var switch_src_component = (src_component_component.exports);\n// CONCATENATED MODULE: ./packages/switch/index.js\n\n\n/* istanbul ignore next */\nswitch_src_component.install = function (Vue) {\n Vue.component(switch_src_component.name, switch_src_component);\n};\n\n/* harmony default export */ var packages_switch = (switch_src_component);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select.vue?vue&type=template&id=0e4aade6&\nvar selectvue_type_template_id_0e4aade6_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleClose,\n expression: \"handleClose\"\n }\n ],\n staticClass: \"el-select\",\n class: [_vm.selectSize ? \"el-select--\" + _vm.selectSize : \"\"],\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.toggleMenu($event)\n }\n }\n },\n [\n _vm.multiple\n ? _c(\n \"div\",\n {\n ref: \"tags\",\n staticClass: \"el-select__tags\",\n style: { \"max-width\": _vm.inputWidth - 32 + \"px\", width: \"100%\" }\n },\n [\n _vm.collapseTags && _vm.selected.length\n ? _c(\n \"span\",\n [\n _c(\n \"el-tag\",\n {\n attrs: {\n closable: !_vm.selectDisabled,\n size: _vm.collapseTagSize,\n hit: _vm.selected[0].hitState,\n type: \"info\",\n \"disable-transitions\": \"\"\n },\n on: {\n close: function($event) {\n _vm.deleteTag($event, _vm.selected[0])\n }\n }\n },\n [\n _c(\"span\", { staticClass: \"el-select__tags-text\" }, [\n _vm._v(_vm._s(_vm.selected[0].currentLabel))\n ])\n ]\n ),\n _vm.selected.length > 1\n ? _c(\n \"el-tag\",\n {\n attrs: {\n closable: false,\n size: _vm.collapseTagSize,\n type: \"info\",\n \"disable-transitions\": \"\"\n }\n },\n [\n _c(\n \"span\",\n { staticClass: \"el-select__tags-text\" },\n [_vm._v(\"+ \" + _vm._s(_vm.selected.length - 1))]\n )\n ]\n )\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n !_vm.collapseTags\n ? _c(\n \"transition-group\",\n { on: { \"after-leave\": _vm.resetInputHeight } },\n _vm._l(_vm.selected, function(item) {\n return _c(\n \"el-tag\",\n {\n key: _vm.getValueKey(item),\n attrs: {\n closable: !_vm.selectDisabled,\n size: _vm.collapseTagSize,\n hit: item.hitState,\n type: \"info\",\n \"disable-transitions\": \"\"\n },\n on: {\n close: function($event) {\n _vm.deleteTag($event, item)\n }\n }\n },\n [\n _c(\"span\", { staticClass: \"el-select__tags-text\" }, [\n _vm._v(_vm._s(item.currentLabel))\n ])\n ]\n )\n }),\n 1\n )\n : _vm._e(),\n _vm.filterable\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.query,\n expression: \"query\"\n }\n ],\n ref: \"input\",\n staticClass: \"el-select__input\",\n class: [_vm.selectSize ? \"is-\" + _vm.selectSize : \"\"],\n style: {\n \"flex-grow\": \"1\",\n width: _vm.inputLength / (_vm.inputWidth - 32) + \"%\",\n \"max-width\": _vm.inputWidth - 42 + \"px\"\n },\n attrs: {\n type: \"text\",\n disabled: _vm.selectDisabled,\n autocomplete: _vm.autoComplete || _vm.autocomplete\n },\n domProps: { value: _vm.query },\n on: {\n focus: _vm.handleFocus,\n blur: function($event) {\n _vm.softFocus = false\n },\n keyup: _vm.managePlaceholder,\n keydown: [\n _vm.resetInputState,\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n _vm.navigateOptions(\"next\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\n \"Up\",\n \"ArrowUp\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n _vm.navigateOptions(\"prev\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.selectOption($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n \"Esc\",\n \"Escape\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.visible = false\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"delete\",\n [8, 46],\n $event.key,\n [\"Backspace\", \"Delete\", \"Del\"]\n )\n ) {\n return null\n }\n return _vm.deletePrevTag($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n ) {\n return null\n }\n _vm.visible = false\n }\n ],\n compositionstart: _vm.handleComposition,\n compositionupdate: _vm.handleComposition,\n compositionend: _vm.handleComposition,\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.query = $event.target.value\n },\n _vm.debouncedQueryChange\n ]\n }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _c(\n \"el-input\",\n {\n ref: \"reference\",\n class: { \"is-focus\": _vm.visible },\n attrs: {\n type: \"text\",\n placeholder: _vm.currentPlaceholder,\n name: _vm.name,\n id: _vm.id,\n autocomplete: _vm.autoComplete || _vm.autocomplete,\n size: _vm.selectSize,\n disabled: _vm.selectDisabled,\n readonly: _vm.readonly,\n \"validate-event\": false,\n tabindex: _vm.multiple && _vm.filterable ? \"-1\" : null\n },\n on: { focus: _vm.handleFocus, blur: _vm.handleBlur },\n nativeOn: {\n keyup: function($event) {\n return _vm.debouncedOnInputChange($event)\n },\n keydown: [\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.navigateOptions(\"next\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\n \"Up\",\n \"ArrowUp\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.navigateOptions(\"prev\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.selectOption($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n \"Esc\",\n \"Escape\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.visible = false\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n ) {\n return null\n }\n _vm.visible = false\n }\n ],\n paste: function($event) {\n return _vm.debouncedOnInputChange($event)\n },\n mouseenter: function($event) {\n _vm.inputHovering = true\n },\n mouseleave: function($event) {\n _vm.inputHovering = false\n }\n },\n model: {\n value: _vm.selectedLabel,\n callback: function($$v) {\n _vm.selectedLabel = $$v\n },\n expression: \"selectedLabel\"\n }\n },\n [\n _vm.$slots.prefix\n ? _c(\"template\", { slot: \"prefix\" }, [_vm._t(\"prefix\")], 2)\n : _vm._e(),\n _c(\"template\", { slot: \"suffix\" }, [\n _c(\"i\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.showClose,\n expression: \"!showClose\"\n }\n ],\n class: [\n \"el-select__caret\",\n \"el-input__icon\",\n \"el-icon-\" + _vm.iconClass\n ]\n }),\n _vm.showClose\n ? _c(\"i\", {\n staticClass:\n \"el-select__caret el-input__icon el-icon-circle-close\",\n on: { click: _vm.handleClearClick }\n })\n : _vm._e()\n ])\n ],\n 2\n ),\n _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"before-enter\": _vm.handleMenuEnter,\n \"after-leave\": _vm.doDestroy\n }\n },\n [\n _c(\n \"el-select-menu\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible && _vm.emptyText !== false,\n expression: \"visible && emptyText !== false\"\n }\n ],\n ref: \"popper\",\n attrs: { \"append-to-body\": _vm.popperAppendToBody }\n },\n [\n _c(\n \"el-scrollbar\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.options.length > 0 && !_vm.loading,\n expression: \"options.length > 0 && !loading\"\n }\n ],\n ref: \"scrollbar\",\n class: {\n \"is-empty\":\n !_vm.allowCreate &&\n _vm.query &&\n _vm.filteredOptionsCount === 0\n },\n attrs: {\n tag: \"ul\",\n \"wrap-class\": \"el-select-dropdown__wrap\",\n \"view-class\": \"el-select-dropdown__list\"\n }\n },\n [\n _vm.showNewOption\n ? _c(\"el-option\", {\n attrs: { value: _vm.query, created: \"\" }\n })\n : _vm._e(),\n _vm._t(\"default\")\n ],\n 2\n ),\n _vm.emptyText &&\n (!_vm.allowCreate ||\n _vm.loading ||\n (_vm.allowCreate && _vm.options.length === 0))\n ? [\n _vm.$slots.empty\n ? _vm._t(\"empty\")\n : _c(\"p\", { staticClass: \"el-select-dropdown__empty\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.emptyText) +\n \"\\n \"\n )\n ])\n ]\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar selectvue_type_template_id_0e4aade6_staticRenderFns = []\nselectvue_type_template_id_0e4aade6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/select.vue?vue&type=template&id=0e4aade6&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select-dropdown.vue?vue&type=template&id=06828748&\nvar select_dropdownvue_type_template_id_06828748_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-select-dropdown el-popper\",\n class: [{ \"is-multiple\": _vm.$parent.multiple }, _vm.popperClass],\n style: { minWidth: _vm.minWidth }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar select_dropdownvue_type_template_id_06828748_staticRenderFns = []\nselect_dropdownvue_type_template_id_06828748_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue?vue&type=template&id=06828748&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select-dropdown.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var select_dropdownvue_type_script_lang_js_ = ({\n name: 'ElSelectDropdown',\n\n componentName: 'ElSelectDropdown',\n\n mixins: [vue_popper_default.a],\n\n props: {\n placement: {\n default: 'bottom-start'\n },\n\n boundariesPadding: {\n default: 0\n },\n\n popperOptions: {\n default: function _default() {\n return {\n gpuAcceleration: false\n };\n }\n },\n\n visibleArrow: {\n default: true\n },\n\n appendToBody: {\n type: Boolean,\n default: true\n }\n },\n\n data: function data() {\n return {\n minWidth: ''\n };\n },\n\n\n computed: {\n popperClass: function popperClass() {\n return this.$parent.popperClass;\n }\n },\n\n watch: {\n '$parent.inputWidth': function $parentInputWidth() {\n this.minWidth = this.$parent.$el.getBoundingClientRect().width + 'px';\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n this.referenceElm = this.$parent.$refs.reference.$el;\n this.$parent.popperElm = this.popperElm = this.$el;\n this.$on('updatePopper', function () {\n if (_this.$parent.visible) _this.updatePopper();\n });\n this.$on('destroyPopper', this.destroyPopper);\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_select_dropdownvue_type_script_lang_js_ = (select_dropdownvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue\n\n\n\n\n\n/* normalize component */\n\nvar select_dropdown_component = normalizeComponent(\n src_select_dropdownvue_type_script_lang_js_,\n select_dropdownvue_type_template_id_06828748_render,\n select_dropdownvue_type_template_id_06828748_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var select_dropdown_api; }\nselect_dropdown_component.options.__file = \"packages/select/src/select-dropdown.vue\"\n/* harmony default export */ var select_dropdown = (select_dropdown_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=template&id=7a44c642&\nvar optionvue_type_template_id_7a44c642_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"li\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-select-dropdown__item\",\n class: {\n selected: _vm.itemSelected,\n \"is-disabled\": _vm.disabled || _vm.groupDisabled || _vm.limitReached,\n hover: _vm.hover\n },\n on: {\n mouseenter: _vm.hoverItem,\n click: function($event) {\n $event.stopPropagation()\n return _vm.selectOptionClick($event)\n }\n }\n },\n [_vm._t(\"default\", [_c(\"span\", [_vm._v(_vm._s(_vm.currentLabel))])])],\n 2\n )\n}\nvar optionvue_type_template_id_7a44c642_staticRenderFns = []\noptionvue_type_template_id_7a44c642_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=template&id=7a44c642&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=script&lang=js&\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var optionvue_type_script_lang_js_ = ({\n mixins: [emitter_default.a],\n\n name: 'ElOption',\n\n componentName: 'ElOption',\n\n inject: ['select'],\n\n props: {\n value: {\n required: true\n },\n label: [String, Number],\n created: Boolean,\n disabled: {\n type: Boolean,\n default: false\n }\n },\n\n data: function data() {\n return {\n index: -1,\n groupDisabled: false,\n visible: true,\n hitState: false,\n hover: false\n };\n },\n\n\n computed: {\n isObject: function isObject() {\n return Object.prototype.toString.call(this.value).toLowerCase() === '[object object]';\n },\n currentLabel: function currentLabel() {\n return this.label || (this.isObject ? '' : this.value);\n },\n currentValue: function currentValue() {\n return this.value || this.label || '';\n },\n itemSelected: function itemSelected() {\n if (!this.select.multiple) {\n return this.isEqual(this.value, this.select.value);\n } else {\n return this.contains(this.select.value, this.value);\n }\n },\n limitReached: function limitReached() {\n if (this.select.multiple) {\n return !this.itemSelected && (this.select.value || []).length >= this.select.multipleLimit && this.select.multipleLimit > 0;\n } else {\n return false;\n }\n }\n },\n\n watch: {\n currentLabel: function currentLabel() {\n if (!this.created && !this.select.remote) this.dispatch('ElSelect', 'setSelected');\n },\n value: function value(val, oldVal) {\n var _select = this.select,\n remote = _select.remote,\n valueKey = _select.valueKey;\n\n if (!this.created && !remote) {\n if (valueKey && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && (typeof oldVal === 'undefined' ? 'undefined' : _typeof(oldVal)) === 'object' && val[valueKey] === oldVal[valueKey]) {\n return;\n }\n this.dispatch('ElSelect', 'setSelected');\n }\n }\n },\n\n methods: {\n isEqual: function isEqual(a, b) {\n if (!this.isObject) {\n return a === b;\n } else {\n var valueKey = this.select.valueKey;\n return Object(util_[\"getValueByPath\"])(a, valueKey) === Object(util_[\"getValueByPath\"])(b, valueKey);\n }\n },\n contains: function contains() {\n var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var target = arguments[1];\n\n if (!this.isObject) {\n return arr && arr.indexOf(target) > -1;\n } else {\n var valueKey = this.select.valueKey;\n return arr && arr.some(function (item) {\n return Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(target, valueKey);\n });\n }\n },\n handleGroupDisabled: function handleGroupDisabled(val) {\n this.groupDisabled = val;\n },\n hoverItem: function hoverItem() {\n if (!this.disabled && !this.groupDisabled) {\n this.select.hoverIndex = this.select.options.indexOf(this);\n }\n },\n selectOptionClick: function selectOptionClick() {\n if (this.disabled !== true && this.groupDisabled !== true) {\n this.dispatch('ElSelect', 'handleOptionClick', [this, true]);\n }\n },\n queryChange: function queryChange(query) {\n this.visible = new RegExp(Object(util_[\"escapeRegexpString\"])(query), 'i').test(this.currentLabel) || this.created;\n if (!this.visible) {\n this.select.filteredOptionsCount--;\n }\n }\n },\n\n created: function created() {\n this.select.options.push(this);\n this.select.cachedOptions.push(this);\n this.select.optionsCount++;\n this.select.filteredOptionsCount++;\n\n this.$on('queryChange', this.queryChange);\n this.$on('handleGroupDisabled', this.handleGroupDisabled);\n },\n beforeDestroy: function beforeDestroy() {\n var _select2 = this.select,\n selected = _select2.selected,\n multiple = _select2.multiple;\n\n var selectedOptions = multiple ? selected : [selected];\n var index = this.select.cachedOptions.indexOf(this);\n var selectedIndex = selectedOptions.indexOf(this);\n\n // if option is not selected, remove it from cache\n if (index > -1 && selectedIndex < 0) {\n this.select.cachedOptions.splice(index, 1);\n }\n this.select.onOptionDestroy(this.select.options.indexOf(this));\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_optionvue_type_script_lang_js_ = (optionvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/option.vue\n\n\n\n\n\n/* normalize component */\n\nvar option_component = normalizeComponent(\n src_optionvue_type_script_lang_js_,\n optionvue_type_template_id_7a44c642_render,\n optionvue_type_template_id_7a44c642_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var option_api; }\noption_component.options.__file = \"packages/select/src/option.vue\"\n/* harmony default export */ var src_option = (option_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/tag\"\nvar tag_ = __webpack_require__(30);\nvar tag_default = /*#__PURE__*/__webpack_require__.n(tag_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/resize-event\"\nvar resize_event_ = __webpack_require__(13);\n\n// EXTERNAL MODULE: external \"element-ui/lib/locale\"\nvar lib_locale_ = __webpack_require__(11);\nvar lib_locale_default = /*#__PURE__*/__webpack_require__.n(lib_locale_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scroll-into-view\"\nvar scroll_into_view_ = __webpack_require__(27);\nvar scroll_into_view_default = /*#__PURE__*/__webpack_require__.n(scroll_into_view_);\n\n// CONCATENATED MODULE: ./packages/select/src/navigation-mixin.js\n/* harmony default export */ var navigation_mixin = ({\n data: function data() {\n return {\n hoverOption: -1\n };\n },\n\n\n computed: {\n optionsAllDisabled: function optionsAllDisabled() {\n return this.options.filter(function (option) {\n return option.visible;\n }).every(function (option) {\n return option.disabled;\n });\n }\n },\n\n watch: {\n hoverIndex: function hoverIndex(val) {\n var _this = this;\n\n if (typeof val === 'number' && val > -1) {\n this.hoverOption = this.options[val] || {};\n }\n this.options.forEach(function (option) {\n option.hover = _this.hoverOption === option;\n });\n }\n },\n\n methods: {\n navigateOptions: function navigateOptions(direction) {\n var _this2 = this;\n\n if (!this.visible) {\n this.visible = true;\n return;\n }\n if (this.options.length === 0 || this.filteredOptionsCount === 0) return;\n if (!this.optionsAllDisabled) {\n if (direction === 'next') {\n this.hoverIndex++;\n if (this.hoverIndex === this.options.length) {\n this.hoverIndex = 0;\n }\n } else if (direction === 'prev') {\n this.hoverIndex--;\n if (this.hoverIndex < 0) {\n this.hoverIndex = this.options.length - 1;\n }\n }\n var option = this.options[this.hoverIndex];\n if (option.disabled === true || option.groupDisabled === true || !option.visible) {\n this.navigateOptions(direction);\n }\n this.$nextTick(function () {\n return _this2.scrollToOption(_this2.hoverOption);\n });\n }\n }\n }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var selectvue_type_script_lang_js_ = ({\n mixins: [emitter_default.a, locale_default.a, focus_default()('reference'), navigation_mixin],\n\n name: 'ElSelect',\n\n componentName: 'ElSelect',\n\n inject: {\n elForm: {\n default: ''\n },\n\n elFormItem: {\n default: ''\n }\n },\n\n provide: function provide() {\n return {\n 'select': this\n };\n },\n\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n readonly: function readonly() {\n return !this.filterable || this.multiple || !Object(util_[\"isIE\"])() && !Object(util_[\"isEdge\"])() && !this.visible;\n },\n showClose: function showClose() {\n var hasValue = this.multiple ? Array.isArray(this.value) && this.value.length > 0 : this.value !== undefined && this.value !== null && this.value !== '';\n var criteria = this.clearable && !this.selectDisabled && this.inputHovering && hasValue;\n return criteria;\n },\n iconClass: function iconClass() {\n return this.remote && this.filterable ? '' : this.visible ? 'arrow-up is-reverse' : 'arrow-up';\n },\n debounce: function debounce() {\n return this.remote ? 300 : 0;\n },\n emptyText: function emptyText() {\n if (this.loading) {\n return this.loadingText || this.t('el.select.loading');\n } else {\n if (this.remote && this.query === '' && this.options.length === 0) return false;\n if (this.filterable && this.query && this.options.length > 0 && this.filteredOptionsCount === 0) {\n return this.noMatchText || this.t('el.select.noMatch');\n }\n if (this.options.length === 0) {\n return this.noDataText || this.t('el.select.noData');\n }\n }\n return null;\n },\n showNewOption: function showNewOption() {\n var _this = this;\n\n var hasExistingOption = this.options.filter(function (option) {\n return !option.created;\n }).some(function (option) {\n return option.currentLabel === _this.query;\n });\n return this.filterable && this.allowCreate && this.query !== '' && !hasExistingOption;\n },\n selectSize: function selectSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n selectDisabled: function selectDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n },\n collapseTagSize: function collapseTagSize() {\n return ['small', 'mini'].indexOf(this.selectSize) > -1 ? 'mini' : 'small';\n }\n },\n\n components: {\n ElInput: input_default.a,\n ElSelectMenu: select_dropdown,\n ElOption: src_option,\n ElTag: tag_default.a,\n ElScrollbar: scrollbar_default.a\n },\n\n directives: { Clickoutside: clickoutside_default.a },\n\n props: {\n name: String,\n id: String,\n value: {\n required: true\n },\n autocomplete: {\n type: String,\n default: 'off'\n },\n /** @Deprecated in next major version */\n autoComplete: {\n type: String,\n validator: function validator(val) {\n false && false;\n return true;\n }\n },\n automaticDropdown: Boolean,\n size: String,\n disabled: Boolean,\n clearable: Boolean,\n filterable: Boolean,\n allowCreate: Boolean,\n loading: Boolean,\n popperClass: String,\n remote: Boolean,\n loadingText: String,\n noMatchText: String,\n noDataText: String,\n remoteMethod: Function,\n filterMethod: Function,\n multiple: Boolean,\n multipleLimit: {\n type: Number,\n default: 0\n },\n placeholder: {\n type: String,\n default: function _default() {\n return Object(lib_locale_[\"t\"])('el.select.placeholder');\n }\n },\n defaultFirstOption: Boolean,\n reserveKeyword: Boolean,\n valueKey: {\n type: String,\n default: 'value'\n },\n collapseTags: Boolean,\n popperAppendToBody: {\n type: Boolean,\n default: true\n }\n },\n\n data: function data() {\n return {\n options: [],\n cachedOptions: [],\n createdLabel: null,\n createdSelected: false,\n selected: this.multiple ? [] : {},\n inputLength: 20,\n inputWidth: 0,\n initialInputHeight: 0,\n cachedPlaceHolder: '',\n optionsCount: 0,\n filteredOptionsCount: 0,\n visible: false,\n softFocus: false,\n selectedLabel: '',\n hoverIndex: -1,\n query: '',\n previousQuery: null,\n inputHovering: false,\n currentPlaceholder: '',\n menuVisibleOnFocus: false,\n isOnComposition: false,\n isSilentBlur: false\n };\n },\n\n\n watch: {\n selectDisabled: function selectDisabled() {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.resetInputHeight();\n });\n },\n placeholder: function placeholder(val) {\n this.cachedPlaceHolder = this.currentPlaceholder = val;\n },\n value: function value(val, oldVal) {\n if (this.multiple) {\n this.resetInputHeight();\n if (val && val.length > 0 || this.$refs.input && this.query !== '') {\n this.currentPlaceholder = '';\n } else {\n this.currentPlaceholder = this.cachedPlaceHolder;\n }\n if (this.filterable && !this.reserveKeyword) {\n this.query = '';\n this.handleQueryChange(this.query);\n }\n }\n this.setSelected();\n if (this.filterable && !this.multiple) {\n this.inputLength = 20;\n }\n if (!Object(util_[\"valueEquals\"])(val, oldVal)) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n }\n },\n visible: function visible(val) {\n var _this3 = this;\n\n if (!val) {\n this.broadcast('ElSelectDropdown', 'destroyPopper');\n if (this.$refs.input) {\n this.$refs.input.blur();\n }\n this.query = '';\n this.previousQuery = null;\n this.selectedLabel = '';\n this.inputLength = 20;\n this.menuVisibleOnFocus = false;\n this.resetHoverIndex();\n this.$nextTick(function () {\n if (_this3.$refs.input && _this3.$refs.input.value === '' && _this3.selected.length === 0) {\n _this3.currentPlaceholder = _this3.cachedPlaceHolder;\n }\n });\n if (!this.multiple) {\n if (this.selected) {\n if (this.filterable && this.allowCreate && this.createdSelected && this.createdLabel) {\n this.selectedLabel = this.createdLabel;\n } else {\n this.selectedLabel = this.selected.currentLabel;\n }\n if (this.filterable) this.query = this.selectedLabel;\n }\n\n if (this.filterable) {\n this.currentPlaceholder = this.cachedPlaceHolder;\n }\n }\n } else {\n this.broadcast('ElSelectDropdown', 'updatePopper');\n if (this.filterable) {\n this.query = this.remote ? '' : this.selectedLabel;\n this.handleQueryChange(this.query);\n if (this.multiple) {\n this.$refs.input.focus();\n } else {\n if (!this.remote) {\n this.broadcast('ElOption', 'queryChange', '');\n this.broadcast('ElOptionGroup', 'queryChange');\n }\n\n if (this.selectedLabel) {\n this.currentPlaceholder = this.selectedLabel;\n this.selectedLabel = '';\n }\n }\n }\n }\n this.$emit('visible-change', val);\n },\n options: function options() {\n var _this4 = this;\n\n if (this.$isServer) return;\n this.$nextTick(function () {\n _this4.broadcast('ElSelectDropdown', 'updatePopper');\n });\n if (this.multiple) {\n this.resetInputHeight();\n }\n var inputs = this.$el.querySelectorAll('input');\n if ([].indexOf.call(inputs, document.activeElement) === -1) {\n this.setSelected();\n }\n if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n this.checkDefaultFirstOption();\n }\n }\n },\n\n methods: {\n handleComposition: function handleComposition(event) {\n var _this5 = this;\n\n var text = event.target.value;\n if (event.type === 'compositionend') {\n this.isOnComposition = false;\n this.$nextTick(function (_) {\n return _this5.handleQueryChange(text);\n });\n } else {\n var lastCharacter = text[text.length - 1] || '';\n this.isOnComposition = !Object(shared_[\"isKorean\"])(lastCharacter);\n }\n },\n handleQueryChange: function handleQueryChange(val) {\n var _this6 = this;\n\n if (this.previousQuery === val || this.isOnComposition) return;\n if (this.previousQuery === null && (typeof this.filterMethod === 'function' || typeof this.remoteMethod === 'function')) {\n this.previousQuery = val;\n return;\n }\n this.previousQuery = val;\n this.$nextTick(function () {\n if (_this6.visible) _this6.broadcast('ElSelectDropdown', 'updatePopper');\n });\n this.hoverIndex = -1;\n if (this.multiple && this.filterable) {\n this.$nextTick(function () {\n var length = _this6.$refs.input.value.length * 15 + 20;\n _this6.inputLength = _this6.collapseTags ? Math.min(50, length) : length;\n _this6.managePlaceholder();\n _this6.resetInputHeight();\n });\n }\n if (this.remote && typeof this.remoteMethod === 'function') {\n this.hoverIndex = -1;\n this.remoteMethod(val);\n } else if (typeof this.filterMethod === 'function') {\n this.filterMethod(val);\n this.broadcast('ElOptionGroup', 'queryChange');\n } else {\n this.filteredOptionsCount = this.optionsCount;\n this.broadcast('ElOption', 'queryChange', val);\n this.broadcast('ElOptionGroup', 'queryChange');\n }\n if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n this.checkDefaultFirstOption();\n }\n },\n scrollToOption: function scrollToOption(option) {\n var target = Array.isArray(option) && option[0] ? option[0].$el : option.$el;\n if (this.$refs.popper && target) {\n var menu = this.$refs.popper.$el.querySelector('.el-select-dropdown__wrap');\n scroll_into_view_default()(menu, target);\n }\n this.$refs.scrollbar && this.$refs.scrollbar.handleScroll();\n },\n handleMenuEnter: function handleMenuEnter() {\n var _this7 = this;\n\n this.$nextTick(function () {\n return _this7.scrollToOption(_this7.selected);\n });\n },\n emitChange: function emitChange(val) {\n if (!Object(util_[\"valueEquals\"])(this.value, val)) {\n this.$emit('change', val);\n }\n },\n getOption: function getOption(value) {\n var option = void 0;\n var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n var isNull = Object.prototype.toString.call(value).toLowerCase() === '[object null]';\n var isUndefined = Object.prototype.toString.call(value).toLowerCase() === '[object undefined]';\n\n for (var i = this.cachedOptions.length - 1; i >= 0; i--) {\n var cachedOption = this.cachedOptions[i];\n var isEqual = isObject ? Object(util_[\"getValueByPath\"])(cachedOption.value, this.valueKey) === Object(util_[\"getValueByPath\"])(value, this.valueKey) : cachedOption.value === value;\n if (isEqual) {\n option = cachedOption;\n break;\n }\n }\n if (option) return option;\n var label = !isObject && !isNull && !isUndefined ? value : '';\n var newOption = {\n value: value,\n currentLabel: label\n };\n if (this.multiple) {\n newOption.hitState = false;\n }\n return newOption;\n },\n setSelected: function setSelected() {\n var _this8 = this;\n\n if (!this.multiple) {\n var option = this.getOption(this.value);\n if (option.created) {\n this.createdLabel = option.currentLabel;\n this.createdSelected = true;\n } else {\n this.createdSelected = false;\n }\n this.selectedLabel = option.currentLabel;\n this.selected = option;\n if (this.filterable) this.query = this.selectedLabel;\n return;\n }\n var result = [];\n if (Array.isArray(this.value)) {\n this.value.forEach(function (value) {\n result.push(_this8.getOption(value));\n });\n }\n this.selected = result;\n this.$nextTick(function () {\n _this8.resetInputHeight();\n });\n },\n handleFocus: function handleFocus(event) {\n if (!this.softFocus) {\n if (this.automaticDropdown || this.filterable) {\n this.visible = true;\n if (this.filterable) {\n this.menuVisibleOnFocus = true;\n }\n }\n this.$emit('focus', event);\n } else {\n this.softFocus = false;\n }\n },\n blur: function blur() {\n this.visible = false;\n this.$refs.reference.blur();\n },\n handleBlur: function handleBlur(event) {\n var _this9 = this;\n\n setTimeout(function () {\n if (_this9.isSilentBlur) {\n _this9.isSilentBlur = false;\n } else {\n _this9.$emit('blur', event);\n }\n }, 50);\n this.softFocus = false;\n },\n handleClearClick: function handleClearClick(event) {\n this.deleteSelected(event);\n },\n doDestroy: function doDestroy() {\n this.$refs.popper && this.$refs.popper.doDestroy();\n },\n handleClose: function handleClose() {\n this.visible = false;\n },\n toggleLastOptionHitState: function toggleLastOptionHitState(hit) {\n if (!Array.isArray(this.selected)) return;\n var option = this.selected[this.selected.length - 1];\n if (!option) return;\n\n if (hit === true || hit === false) {\n option.hitState = hit;\n return hit;\n }\n\n option.hitState = !option.hitState;\n return option.hitState;\n },\n deletePrevTag: function deletePrevTag(e) {\n if (e.target.value.length <= 0 && !this.toggleLastOptionHitState()) {\n var value = this.value.slice();\n value.pop();\n this.$emit('input', value);\n this.emitChange(value);\n }\n },\n managePlaceholder: function managePlaceholder() {\n if (this.currentPlaceholder !== '') {\n this.currentPlaceholder = this.$refs.input.value ? '' : this.cachedPlaceHolder;\n }\n },\n resetInputState: function resetInputState(e) {\n if (e.keyCode !== 8) this.toggleLastOptionHitState(false);\n this.inputLength = this.$refs.input.value.length * 15 + 20;\n this.resetInputHeight();\n },\n resetInputHeight: function resetInputHeight() {\n var _this10 = this;\n\n if (this.collapseTags && !this.filterable) return;\n this.$nextTick(function () {\n if (!_this10.$refs.reference) return;\n var inputChildNodes = _this10.$refs.reference.$el.childNodes;\n var input = [].filter.call(inputChildNodes, function (item) {\n return item.tagName === 'INPUT';\n })[0];\n var tags = _this10.$refs.tags;\n var sizeInMap = _this10.initialInputHeight || 40;\n input.style.height = _this10.selected.length === 0 ? sizeInMap + 'px' : Math.max(tags ? tags.clientHeight + (tags.clientHeight > sizeInMap ? 6 : 0) : 0, sizeInMap) + 'px';\n if (_this10.visible && _this10.emptyText !== false) {\n _this10.broadcast('ElSelectDropdown', 'updatePopper');\n }\n });\n },\n resetHoverIndex: function resetHoverIndex() {\n var _this11 = this;\n\n setTimeout(function () {\n if (!_this11.multiple) {\n _this11.hoverIndex = _this11.options.indexOf(_this11.selected);\n } else {\n if (_this11.selected.length > 0) {\n _this11.hoverIndex = Math.min.apply(null, _this11.selected.map(function (item) {\n return _this11.options.indexOf(item);\n }));\n } else {\n _this11.hoverIndex = -1;\n }\n }\n }, 300);\n },\n handleOptionSelect: function handleOptionSelect(option, byClick) {\n var _this12 = this;\n\n if (this.multiple) {\n var value = (this.value || []).slice();\n var optionIndex = this.getValueIndex(value, option.value);\n if (optionIndex > -1) {\n value.splice(optionIndex, 1);\n } else if (this.multipleLimit <= 0 || value.length < this.multipleLimit) {\n value.push(option.value);\n }\n this.$emit('input', value);\n this.emitChange(value);\n if (option.created) {\n this.query = '';\n this.handleQueryChange('');\n this.inputLength = 20;\n }\n if (this.filterable) this.$refs.input.focus();\n } else {\n this.$emit('input', option.value);\n this.emitChange(option.value);\n this.visible = false;\n }\n this.isSilentBlur = byClick;\n this.setSoftFocus();\n if (this.visible) return;\n this.$nextTick(function () {\n _this12.scrollToOption(option);\n });\n },\n setSoftFocus: function setSoftFocus() {\n this.softFocus = true;\n var input = this.$refs.input || this.$refs.reference;\n if (input) {\n input.focus();\n }\n },\n getValueIndex: function getValueIndex() {\n var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var value = arguments[1];\n\n var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n if (!isObject) {\n return arr.indexOf(value);\n } else {\n var valueKey = this.valueKey;\n var index = -1;\n arr.some(function (item, i) {\n if (Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(value, valueKey)) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n }\n },\n toggleMenu: function toggleMenu() {\n if (!this.selectDisabled) {\n if (this.menuVisibleOnFocus) {\n this.menuVisibleOnFocus = false;\n } else {\n this.visible = !this.visible;\n }\n if (this.visible) {\n (this.$refs.input || this.$refs.reference).focus();\n }\n }\n },\n selectOption: function selectOption() {\n if (!this.visible) {\n this.toggleMenu();\n } else {\n if (this.options[this.hoverIndex]) {\n this.handleOptionSelect(this.options[this.hoverIndex]);\n }\n }\n },\n deleteSelected: function deleteSelected(event) {\n event.stopPropagation();\n var value = this.multiple ? [] : '';\n this.$emit('input', value);\n this.emitChange(value);\n this.visible = false;\n this.$emit('clear');\n },\n deleteTag: function deleteTag(event, tag) {\n var index = this.selected.indexOf(tag);\n if (index > -1 && !this.selectDisabled) {\n var value = this.value.slice();\n value.splice(index, 1);\n this.$emit('input', value);\n this.emitChange(value);\n this.$emit('remove-tag', tag.value);\n }\n event.stopPropagation();\n },\n onInputChange: function onInputChange() {\n if (this.filterable && this.query !== this.selectedLabel) {\n this.query = this.selectedLabel;\n this.handleQueryChange(this.query);\n }\n },\n onOptionDestroy: function onOptionDestroy(index) {\n if (index > -1) {\n this.optionsCount--;\n this.filteredOptionsCount--;\n this.options.splice(index, 1);\n }\n },\n resetInputWidth: function resetInputWidth() {\n this.inputWidth = this.$refs.reference.$el.getBoundingClientRect().width;\n },\n handleResize: function handleResize() {\n this.resetInputWidth();\n if (this.multiple) this.resetInputHeight();\n },\n checkDefaultFirstOption: function checkDefaultFirstOption() {\n this.hoverIndex = -1;\n // highlight the created option\n var hasCreated = false;\n for (var i = this.options.length - 1; i >= 0; i--) {\n if (this.options[i].created) {\n hasCreated = true;\n this.hoverIndex = i;\n break;\n }\n }\n if (hasCreated) return;\n for (var _i = 0; _i !== this.options.length; ++_i) {\n var option = this.options[_i];\n if (this.query) {\n // highlight first options that passes the filter\n if (!option.disabled && !option.groupDisabled && option.visible) {\n this.hoverIndex = _i;\n break;\n }\n } else {\n // highlight currently selected option\n if (option.itemSelected) {\n this.hoverIndex = _i;\n break;\n }\n }\n }\n },\n getValueKey: function getValueKey(item) {\n if (Object.prototype.toString.call(item.value).toLowerCase() !== '[object object]') {\n return item.value;\n } else {\n return Object(util_[\"getValueByPath\"])(item.value, this.valueKey);\n }\n }\n },\n\n created: function created() {\n var _this13 = this;\n\n this.cachedPlaceHolder = this.currentPlaceholder = this.placeholder;\n if (this.multiple && !Array.isArray(this.value)) {\n this.$emit('input', []);\n }\n if (!this.multiple && Array.isArray(this.value)) {\n this.$emit('input', '');\n }\n\n this.debouncedOnInputChange = debounce_default()(this.debounce, function () {\n _this13.onInputChange();\n });\n\n this.debouncedQueryChange = debounce_default()(this.debounce, function (e) {\n _this13.handleQueryChange(e.target.value);\n });\n\n this.$on('handleOptionClick', this.handleOptionSelect);\n this.$on('setSelected', this.setSelected);\n },\n mounted: function mounted() {\n var _this14 = this;\n\n if (this.multiple && Array.isArray(this.value) && this.value.length > 0) {\n this.currentPlaceholder = '';\n }\n Object(resize_event_[\"addResizeListener\"])(this.$el, this.handleResize);\n\n var reference = this.$refs.reference;\n if (reference && reference.$el) {\n var sizeMap = {\n medium: 36,\n small: 32,\n mini: 28\n };\n var input = reference.$el.querySelector('input');\n this.initialInputHeight = input.getBoundingClientRect().height || sizeMap[this.selectSize];\n }\n if (this.remote && this.multiple) {\n this.resetInputHeight();\n }\n this.$nextTick(function () {\n if (reference && reference.$el) {\n _this14.inputWidth = reference.$el.getBoundingClientRect().width;\n }\n });\n this.setSelected();\n },\n beforeDestroy: function beforeDestroy() {\n if (this.$el && this.handleResize) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.handleResize);\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/select.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_selectvue_type_script_lang_js_ = (selectvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/select.vue\n\n\n\n\n\n/* normalize component */\n\nvar select_component = normalizeComponent(\n src_selectvue_type_script_lang_js_,\n selectvue_type_template_id_0e4aade6_render,\n selectvue_type_template_id_0e4aade6_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var select_api; }\nselect_component.options.__file = \"packages/select/src/select.vue\"\n/* harmony default export */ var src_select = (select_component.exports);\n// CONCATENATED MODULE: ./packages/select/index.js\n\n\n/* istanbul ignore next */\nsrc_select.install = function (Vue) {\n Vue.component(src_select.name, src_select);\n};\n\n/* harmony default export */ var packages_select = (src_select);\n// CONCATENATED MODULE: ./packages/option/index.js\n\n\n/* istanbul ignore next */\nsrc_option.install = function (Vue) {\n Vue.component(src_option.name, src_option);\n};\n\n/* harmony default export */ var packages_option = (src_option);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option-group.vue?vue&type=template&id=6685e5de&\nvar option_groupvue_type_template_id_6685e5de_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"ul\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-select-group__wrap\"\n },\n [\n _c(\"li\", { staticClass: \"el-select-group__title\" }, [\n _vm._v(_vm._s(_vm.label))\n ]),\n _c(\"li\", [\n _c(\"ul\", { staticClass: \"el-select-group\" }, [_vm._t(\"default\")], 2)\n ])\n ]\n )\n}\nvar option_groupvue_type_template_id_6685e5de_staticRenderFns = []\noption_groupvue_type_template_id_6685e5de_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/option-group.vue?vue&type=template&id=6685e5de&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var option_groupvue_type_script_lang_js_ = ({\n mixins: [emitter_default.a],\n\n name: 'ElOptionGroup',\n\n componentName: 'ElOptionGroup',\n\n props: {\n label: String,\n disabled: {\n type: Boolean,\n default: false\n }\n },\n\n data: function data() {\n return {\n visible: true\n };\n },\n\n\n watch: {\n disabled: function disabled(val) {\n this.broadcast('ElOption', 'handleGroupDisabled', val);\n }\n },\n\n methods: {\n queryChange: function queryChange() {\n this.visible = this.$children && Array.isArray(this.$children) && this.$children.some(function (option) {\n return option.visible === true;\n });\n }\n },\n\n created: function created() {\n this.$on('queryChange', this.queryChange);\n },\n mounted: function mounted() {\n if (this.disabled) {\n this.broadcast('ElOption', 'handleGroupDisabled', this.disabled);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/option-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_option_groupvue_type_script_lang_js_ = (option_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/option-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar option_group_component = normalizeComponent(\n src_option_groupvue_type_script_lang_js_,\n option_groupvue_type_template_id_6685e5de_render,\n option_groupvue_type_template_id_6685e5de_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var option_group_api; }\noption_group_component.options.__file = \"packages/select/src/option-group.vue\"\n/* harmony default export */ var option_group = (option_group_component.exports);\n// CONCATENATED MODULE: ./packages/option-group/index.js\n\n\n/* istanbul ignore next */\noption_group.install = function (Vue) {\n Vue.component(option_group.name, option_group);\n};\n\n/* harmony default export */ var packages_option_group = (option_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button.vue?vue&type=template&id=ca859fb4&\nvar buttonvue_type_template_id_ca859fb4_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n staticClass: \"el-button\",\n class: [\n _vm.type ? \"el-button--\" + _vm.type : \"\",\n _vm.buttonSize ? \"el-button--\" + _vm.buttonSize : \"\",\n {\n \"is-disabled\": _vm.buttonDisabled,\n \"is-loading\": _vm.loading,\n \"is-plain\": _vm.plain,\n \"is-round\": _vm.round,\n \"is-circle\": _vm.circle\n }\n ],\n attrs: {\n disabled: _vm.buttonDisabled || _vm.loading,\n autofocus: _vm.autofocus,\n type: _vm.nativeType\n },\n on: { click: _vm.handleClick }\n },\n [\n _vm.loading ? _c(\"i\", { staticClass: \"el-icon-loading\" }) : _vm._e(),\n _vm.icon && !_vm.loading ? _c(\"i\", { class: _vm.icon }) : _vm._e(),\n _vm.$slots.default ? _c(\"span\", [_vm._t(\"default\")], 2) : _vm._e()\n ]\n )\n}\nvar buttonvue_type_template_id_ca859fb4_staticRenderFns = []\nbuttonvue_type_template_id_ca859fb4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/button/src/button.vue?vue&type=template&id=ca859fb4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var buttonvue_type_script_lang_js_ = ({\n name: 'ElButton',\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n props: {\n type: {\n type: String,\n default: 'default'\n },\n size: String,\n icon: {\n type: String,\n default: ''\n },\n nativeType: {\n type: String,\n default: 'button'\n },\n loading: Boolean,\n disabled: Boolean,\n plain: Boolean,\n autofocus: Boolean,\n round: Boolean,\n circle: Boolean\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n buttonSize: function buttonSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n buttonDisabled: function buttonDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n\n methods: {\n handleClick: function handleClick(evt) {\n this.$emit('click', evt);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/button/src/button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_buttonvue_type_script_lang_js_ = (buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/button/src/button.vue\n\n\n\n\n\n/* normalize component */\n\nvar button_component = normalizeComponent(\n src_buttonvue_type_script_lang_js_,\n buttonvue_type_template_id_ca859fb4_render,\n buttonvue_type_template_id_ca859fb4_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var button_api; }\nbutton_component.options.__file = \"packages/button/src/button.vue\"\n/* harmony default export */ var src_button = (button_component.exports);\n// CONCATENATED MODULE: ./packages/button/index.js\n\n\n/* istanbul ignore next */\nsrc_button.install = function (Vue) {\n Vue.component(src_button.name, src_button);\n};\n\n/* harmony default export */ var packages_button = (src_button);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button-group.vue?vue&type=template&id=3d8661d0&\nvar button_groupvue_type_template_id_3d8661d0_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-button-group\" }, [_vm._t(\"default\")], 2)\n}\nvar button_groupvue_type_template_id_3d8661d0_staticRenderFns = []\nbutton_groupvue_type_template_id_3d8661d0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue?vue&type=template&id=3d8661d0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var button_groupvue_type_script_lang_js_ = ({\n name: 'ElButtonGroup'\n});\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_button_groupvue_type_script_lang_js_ = (button_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/button/src/button-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar button_group_component = normalizeComponent(\n src_button_groupvue_type_script_lang_js_,\n button_groupvue_type_template_id_3d8661d0_render,\n button_groupvue_type_template_id_3d8661d0_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var button_group_api; }\nbutton_group_component.options.__file = \"packages/button/src/button-group.vue\"\n/* harmony default export */ var button_group = (button_group_component.exports);\n// CONCATENATED MODULE: ./packages/button-group/index.js\n\n\n/* istanbul ignore next */\nbutton_group.install = function (Vue) {\n Vue.component(button_group.name, button_group);\n};\n\n/* harmony default export */ var packages_button_group = (button_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/table.vue?vue&type=template&id=493fe34e&\nvar tablevue_type_template_id_493fe34e_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-table\",\n class: [\n {\n \"el-table--fit\": _vm.fit,\n \"el-table--striped\": _vm.stripe,\n \"el-table--border\": _vm.border || _vm.isGroup,\n \"el-table--hidden\": _vm.isHidden,\n \"el-table--group\": _vm.isGroup,\n \"el-table--fluid-height\": _vm.maxHeight,\n \"el-table--scrollable-x\": _vm.layout.scrollX,\n \"el-table--scrollable-y\": _vm.layout.scrollY,\n \"el-table--enable-row-hover\": !_vm.store.states.isComplex,\n \"el-table--enable-row-transition\":\n (_vm.store.states.data || []).length !== 0 &&\n (_vm.store.states.data || []).length < 100\n },\n _vm.tableSize ? \"el-table--\" + _vm.tableSize : \"\"\n ],\n on: {\n mouseleave: function($event) {\n _vm.handleMouseLeave($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { ref: \"hiddenColumns\", staticClass: \"hidden-columns\" },\n [_vm._t(\"default\")],\n 2\n ),\n _vm.showHeader\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"mousewheel\",\n rawName: \"v-mousewheel\",\n value: _vm.handleHeaderFooterMousewheel,\n expression: \"handleHeaderFooterMousewheel\"\n }\n ],\n ref: \"headerWrapper\",\n staticClass: \"el-table__header-wrapper\"\n },\n [\n _c(\"table-header\", {\n ref: \"tableHeader\",\n style: {\n width: _vm.layout.bodyWidth ? _vm.layout.bodyWidth + \"px\" : \"\"\n },\n attrs: {\n store: _vm.store,\n border: _vm.border,\n \"default-sort\": _vm.defaultSort\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _c(\n \"div\",\n {\n ref: \"bodyWrapper\",\n staticClass: \"el-table__body-wrapper\",\n class: [\n _vm.layout.scrollX\n ? \"is-scrolling-\" + _vm.scrollPosition\n : \"is-scrolling-none\"\n ],\n style: [_vm.bodyHeight]\n },\n [\n _c(\"table-body\", {\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n context: _vm.context,\n store: _vm.store,\n stripe: _vm.stripe,\n \"row-class-name\": _vm.rowClassName,\n \"row-style\": _vm.rowStyle,\n highlight: _vm.highlightCurrentRow\n }\n }),\n !_vm.data || _vm.data.length === 0\n ? _c(\n \"div\",\n {\n ref: \"emptyBlock\",\n staticClass: \"el-table__empty-block\",\n style: _vm.emptyBlockStyle\n },\n [\n _c(\n \"span\",\n { staticClass: \"el-table__empty-text\" },\n [\n _vm._t(\"empty\", [\n _vm._v(\n _vm._s(_vm.emptyText || _vm.t(\"el.table.emptyText\"))\n )\n ])\n ],\n 2\n )\n ]\n )\n : _vm._e(),\n _vm.$slots.append\n ? _c(\n \"div\",\n {\n ref: \"appendWrapper\",\n staticClass: \"el-table__append-wrapper\"\n },\n [_vm._t(\"append\")],\n 2\n )\n : _vm._e()\n ],\n 1\n ),\n _vm.showSummary\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.data && _vm.data.length > 0,\n expression: \"data && data.length > 0\"\n },\n {\n name: \"mousewheel\",\n rawName: \"v-mousewheel\",\n value: _vm.handleHeaderFooterMousewheel,\n expression: \"handleHeaderFooterMousewheel\"\n }\n ],\n ref: \"footerWrapper\",\n staticClass: \"el-table__footer-wrapper\"\n },\n [\n _c(\"table-footer\", {\n style: {\n width: _vm.layout.bodyWidth ? _vm.layout.bodyWidth + \"px\" : \"\"\n },\n attrs: {\n store: _vm.store,\n border: _vm.border,\n \"sum-text\": _vm.sumText || _vm.t(\"el.table.sumText\"),\n \"summary-method\": _vm.summaryMethod,\n \"default-sort\": _vm.defaultSort\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm.fixedColumns.length > 0\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"mousewheel\",\n rawName: \"v-mousewheel\",\n value: _vm.handleFixedMousewheel,\n expression: \"handleFixedMousewheel\"\n }\n ],\n ref: \"fixedWrapper\",\n staticClass: \"el-table__fixed\",\n style: [\n {\n width: _vm.layout.fixedWidth\n ? _vm.layout.fixedWidth + \"px\"\n : \"\"\n },\n _vm.fixedHeight\n ]\n },\n [\n _vm.showHeader\n ? _c(\n \"div\",\n {\n ref: \"fixedHeaderWrapper\",\n staticClass: \"el-table__fixed-header-wrapper\"\n },\n [\n _c(\"table-header\", {\n ref: \"fixedTableHeader\",\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"left\",\n border: _vm.border,\n store: _vm.store\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _c(\n \"div\",\n {\n ref: \"fixedBodyWrapper\",\n staticClass: \"el-table__fixed-body-wrapper\",\n style: [\n {\n top: _vm.layout.headerHeight + \"px\"\n },\n _vm.fixedBodyHeight\n ]\n },\n [\n _c(\"table-body\", {\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"left\",\n store: _vm.store,\n stripe: _vm.stripe,\n highlight: _vm.highlightCurrentRow,\n \"row-class-name\": _vm.rowClassName,\n \"row-style\": _vm.rowStyle\n }\n }),\n _vm.$slots.append\n ? _c(\"div\", {\n staticClass: \"el-table__append-gutter\",\n style: { height: _vm.layout.appendHeight + \"px\" }\n })\n : _vm._e()\n ],\n 1\n ),\n _vm.showSummary\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.data && _vm.data.length > 0,\n expression: \"data && data.length > 0\"\n }\n ],\n ref: \"fixedFooterWrapper\",\n staticClass: \"el-table__fixed-footer-wrapper\"\n },\n [\n _c(\"table-footer\", {\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"left\",\n border: _vm.border,\n \"sum-text\": _vm.sumText || _vm.t(\"el.table.sumText\"),\n \"summary-method\": _vm.summaryMethod,\n store: _vm.store\n }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n : _vm._e(),\n _vm.rightFixedColumns.length > 0\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"mousewheel\",\n rawName: \"v-mousewheel\",\n value: _vm.handleFixedMousewheel,\n expression: \"handleFixedMousewheel\"\n }\n ],\n ref: \"rightFixedWrapper\",\n staticClass: \"el-table__fixed-right\",\n style: [\n {\n width: _vm.layout.rightFixedWidth\n ? _vm.layout.rightFixedWidth + \"px\"\n : \"\",\n right: _vm.layout.scrollY\n ? (_vm.border\n ? _vm.layout.gutterWidth\n : _vm.layout.gutterWidth || 0) + \"px\"\n : \"\"\n },\n _vm.fixedHeight\n ]\n },\n [\n _vm.showHeader\n ? _c(\n \"div\",\n {\n ref: \"rightFixedHeaderWrapper\",\n staticClass: \"el-table__fixed-header-wrapper\"\n },\n [\n _c(\"table-header\", {\n ref: \"rightFixedTableHeader\",\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"right\",\n border: _vm.border,\n store: _vm.store\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _c(\n \"div\",\n {\n ref: \"rightFixedBodyWrapper\",\n staticClass: \"el-table__fixed-body-wrapper\",\n style: [\n {\n top: _vm.layout.headerHeight + \"px\"\n },\n _vm.fixedBodyHeight\n ]\n },\n [\n _c(\"table-body\", {\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"right\",\n store: _vm.store,\n stripe: _vm.stripe,\n \"row-class-name\": _vm.rowClassName,\n \"row-style\": _vm.rowStyle,\n highlight: _vm.highlightCurrentRow\n }\n }),\n _vm.$slots.append\n ? _c(\"div\", {\n staticClass: \"el-table__append-gutter\",\n style: { height: _vm.layout.appendHeight + \"px\" }\n })\n : _vm._e()\n ],\n 1\n ),\n _vm.showSummary\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.data && _vm.data.length > 0,\n expression: \"data && data.length > 0\"\n }\n ],\n ref: \"rightFixedFooterWrapper\",\n staticClass: \"el-table__fixed-footer-wrapper\"\n },\n [\n _c(\"table-footer\", {\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"right\",\n border: _vm.border,\n \"sum-text\": _vm.sumText || _vm.t(\"el.table.sumText\"),\n \"summary-method\": _vm.summaryMethod,\n store: _vm.store\n }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n : _vm._e(),\n _vm.rightFixedColumns.length > 0\n ? _c(\"div\", {\n ref: \"rightFixedPatch\",\n staticClass: \"el-table__fixed-right-patch\",\n style: {\n width: _vm.layout.scrollY ? _vm.layout.gutterWidth + \"px\" : \"0\",\n height: _vm.layout.headerHeight + \"px\"\n }\n })\n : _vm._e(),\n _c(\"div\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.resizeProxyVisible,\n expression: \"resizeProxyVisible\"\n }\n ],\n ref: \"resizeProxy\",\n staticClass: \"el-table__column-resize-proxy\"\n })\n ]\n )\n}\nvar tablevue_type_template_id_493fe34e_staticRenderFns = []\ntablevue_type_template_id_493fe34e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/table/src/table.vue?vue&type=template&id=493fe34e&\n\n// EXTERNAL MODULE: external \"element-ui/lib/checkbox\"\nvar checkbox_ = __webpack_require__(16);\nvar checkbox_default = /*#__PURE__*/__webpack_require__.n(checkbox_);\n\n// EXTERNAL MODULE: external \"throttle-debounce\"\nvar external_throttle_debounce_ = __webpack_require__(35);\n\n// EXTERNAL MODULE: external \"normalize-wheel\"\nvar external_normalize_wheel_ = __webpack_require__(38);\nvar external_normalize_wheel_default = /*#__PURE__*/__webpack_require__.n(external_normalize_wheel_);\n\n// CONCATENATED MODULE: ./src/directives/mousewheel.js\n\n\nvar isFirefox = typeof navigator !== 'undefined' && navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nvar mousewheel_mousewheel = function mousewheel(element, callback) {\n if (element && element.addEventListener) {\n element.addEventListener(isFirefox ? 'DOMMouseScroll' : 'mousewheel', function (event) {\n var normalized = external_normalize_wheel_default()(event);\n callback && callback.apply(this, [event, normalized]);\n });\n }\n};\n\n/* harmony default export */ var directives_mousewheel = ({\n bind: function bind(el, binding) {\n mousewheel_mousewheel(el, binding.value);\n }\n});\n// EXTERNAL MODULE: external \"vue\"\nvar external_vue_ = __webpack_require__(6);\nvar external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);\n\n// CONCATENATED MODULE: ./packages/table/src/util.js\nvar util_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nvar getCell = function getCell(event) {\n var cell = event.target;\n\n while (cell && cell.tagName.toUpperCase() !== 'HTML') {\n if (cell.tagName.toUpperCase() === 'TD') {\n return cell;\n }\n cell = cell.parentNode;\n }\n\n return null;\n};\n\nvar util_isObject = function isObject(obj) {\n return obj !== null && (typeof obj === 'undefined' ? 'undefined' : util_typeof(obj)) === 'object';\n};\n\nvar util_orderBy = function orderBy(array, sortKey, reverse, sortMethod, sortBy) {\n if (!sortKey && !sortMethod && (!sortBy || Array.isArray(sortBy) && !sortBy.length)) {\n return array;\n }\n if (typeof reverse === 'string') {\n reverse = reverse === 'descending' ? -1 : 1;\n } else {\n reverse = reverse && reverse < 0 ? -1 : 1;\n }\n var getKey = sortMethod ? null : function (value, index) {\n if (sortBy) {\n if (!Array.isArray(sortBy)) {\n sortBy = [sortBy];\n }\n return sortBy.map(function (by) {\n if (typeof by === 'string') {\n return Object(util_[\"getValueByPath\"])(value, by);\n } else {\n return by(value, index, array);\n }\n });\n }\n if (sortKey !== '$key') {\n if (util_isObject(value) && '$value' in value) value = value.$value;\n }\n return [util_isObject(value) ? Object(util_[\"getValueByPath\"])(value, sortKey) : value];\n };\n var compare = function compare(a, b) {\n if (sortMethod) {\n return sortMethod(a.value, b.value);\n }\n for (var i = 0, len = a.key.length; i < len; i++) {\n if (a.key[i] < b.key[i]) {\n return -1;\n }\n if (a.key[i] > b.key[i]) {\n return 1;\n }\n }\n return 0;\n };\n return array.map(function (value, index) {\n return {\n value: value,\n index: index,\n key: getKey ? getKey(value, index) : null\n };\n }).sort(function (a, b) {\n var order = compare(a, b);\n if (!order) {\n // make stable https://en.wikipedia.org/wiki/Sorting_algorithm#Stability\n order = a.index - b.index;\n }\n return order * reverse;\n }).map(function (item) {\n return item.value;\n });\n};\n\nvar getColumnById = function getColumnById(table, columnId) {\n var column = null;\n table.columns.forEach(function (item) {\n if (item.id === columnId) {\n column = item;\n }\n });\n return column;\n};\n\nvar getColumnByKey = function getColumnByKey(table, columnKey) {\n var column = null;\n for (var i = 0; i < table.columns.length; i++) {\n var item = table.columns[i];\n if (item.columnKey === columnKey) {\n column = item;\n break;\n }\n }\n return column;\n};\n\nvar getColumnByCell = function getColumnByCell(table, cell) {\n var matches = (cell.className || '').match(/el-table_[^\\s]+/gm);\n if (matches) {\n return getColumnById(table, matches[0]);\n }\n return null;\n};\n\nvar getRowIdentity = function getRowIdentity(row, rowKey) {\n if (!row) throw new Error('row is required when get row identity');\n if (typeof rowKey === 'string') {\n if (rowKey.indexOf('.') < 0) {\n return row[rowKey];\n }\n var key = rowKey.split('.');\n var current = row;\n for (var i = 0; i < key.length; i++) {\n current = current[key[i]];\n }\n return current;\n } else if (typeof rowKey === 'function') {\n return rowKey.call(null, row);\n }\n};\n\nvar getKeysMap = function getKeysMap(array, rowKey) {\n var arrayMap = {};\n (array || []).forEach(function (row, index) {\n arrayMap[getRowIdentity(row, rowKey)] = { row: row, index: index };\n });\n return arrayMap;\n};\n\nfunction hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nfunction mergeOptions(defaults, config) {\n var options = {};\n var key = void 0;\n for (key in defaults) {\n options[key] = defaults[key];\n }\n for (key in config) {\n if (hasOwn(config, key)) {\n var value = config[key];\n if (typeof value !== 'undefined') {\n options[key] = value;\n }\n }\n }\n return options;\n}\n\nfunction parseWidth(width) {\n if (width !== undefined) {\n width = parseInt(width, 10);\n if (isNaN(width)) {\n width = null;\n }\n }\n return width;\n}\n\nfunction parseMinWidth(minWidth) {\n if (typeof minWidth !== 'undefined') {\n minWidth = parseWidth(minWidth);\n if (isNaN(minWidth)) {\n minWidth = 80;\n }\n }\n return minWidth;\n};\n\nfunction parseHeight(height) {\n if (typeof height === 'number') {\n return height;\n }\n if (typeof height === 'string') {\n if (/^\\d+(?:px)?$/.test(height)) {\n return parseInt(height, 10);\n } else {\n return height;\n }\n }\n return null;\n}\n\n// https://github.com/reduxjs/redux/blob/master/src/compose.js\nfunction compose() {\n for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(undefined, arguments));\n };\n });\n}\n\nfunction toggleRowStatus(statusArr, row, newVal) {\n var changed = false;\n var index = statusArr.indexOf(row);\n var included = index !== -1;\n\n var addRow = function addRow() {\n statusArr.push(row);\n changed = true;\n };\n var removeRow = function removeRow() {\n statusArr.splice(index, 1);\n changed = true;\n };\n\n if (typeof newVal === 'boolean') {\n if (newVal && !included) {\n addRow();\n } else if (!newVal && included) {\n removeRow();\n }\n } else {\n if (included) {\n removeRow();\n } else {\n addRow();\n }\n }\n return changed;\n}\n\nfunction walkTreeNode(root, cb) {\n var childrenKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';\n var lazyKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'hasChildren';\n\n var isNil = function isNil(array) {\n return !(Array.isArray(array) && array.length);\n };\n\n function _walker(parent, children, level) {\n cb(parent, children, level);\n children.forEach(function (item) {\n if (item[lazyKey]) {\n cb(item, null, level + 1);\n return;\n }\n var children = item[childrenKey];\n if (!isNil(children)) {\n _walker(item, children, level + 1);\n }\n });\n }\n\n root.forEach(function (item) {\n if (item[lazyKey]) {\n cb(item, null, 0);\n return;\n }\n var children = item[childrenKey];\n if (!isNil(children)) {\n _walker(item, children, 0);\n }\n });\n}\n// CONCATENATED MODULE: ./packages/table/src/store/expand.js\n\n\n/* harmony default export */ var expand = ({\n data: function data() {\n return {\n states: {\n defaultExpandAll: false,\n expandRows: []\n }\n };\n },\n\n\n methods: {\n updateExpandRows: function updateExpandRows() {\n var _states = this.states,\n _states$data = _states.data,\n data = _states$data === undefined ? [] : _states$data,\n rowKey = _states.rowKey,\n defaultExpandAll = _states.defaultExpandAll,\n expandRows = _states.expandRows;\n\n if (defaultExpandAll) {\n this.states.expandRows = data.slice();\n } else if (rowKey) {\n // TODO:这里的代码可以优化\n var expandRowsMap = getKeysMap(expandRows, rowKey);\n this.states.expandRows = data.reduce(function (prev, row) {\n var rowId = getRowIdentity(row, rowKey);\n var rowInfo = expandRowsMap[rowId];\n if (rowInfo) {\n prev.push(row);\n }\n return prev;\n }, []);\n } else {\n this.states.expandRows = [];\n }\n },\n toggleRowExpansion: function toggleRowExpansion(row, expanded) {\n var changed = toggleRowStatus(this.states.expandRows, row, expanded);\n if (changed) {\n this.table.$emit('expand-change', row, this.states.expandRows.slice());\n this.scheduleLayout();\n }\n },\n setExpandRowKeys: function setExpandRowKeys(rowKeys) {\n this.assertRowKey();\n // TODO:这里的代码可以优化\n var _states2 = this.states,\n data = _states2.data,\n rowKey = _states2.rowKey;\n\n var keysMap = getKeysMap(data, rowKey);\n this.states.expandRows = rowKeys.reduce(function (prev, cur) {\n var info = keysMap[cur];\n if (info) {\n prev.push(info.row);\n }\n return prev;\n }, []);\n },\n isRowExpanded: function isRowExpanded(row) {\n var _states3 = this.states,\n _states3$expandRows = _states3.expandRows,\n expandRows = _states3$expandRows === undefined ? [] : _states3$expandRows,\n rowKey = _states3.rowKey;\n\n if (rowKey) {\n var expandMap = getKeysMap(expandRows, rowKey);\n return !!expandMap[getRowIdentity(row, rowKey)];\n }\n return expandRows.indexOf(row) !== -1;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/store/current.js\n\n\n\n/* harmony default export */ var current = ({\n data: function data() {\n return {\n states: {\n // 不可响应的,设置 currentRowKey 时,data 不一定存在,也许无法算出正确的 currentRow\n // 把该值缓存一下,当用户点击修改 currentRow 时,把该值重置为 null\n _currentRowKey: null,\n currentRow: null\n }\n };\n },\n\n\n methods: {\n setCurrentRowKey: function setCurrentRowKey(key) {\n this.assertRowKey();\n this.states._currentRowKey = key;\n this.setCurrentRowByKey(key);\n },\n restoreCurrentRowKey: function restoreCurrentRowKey() {\n this.states._currentRowKey = null;\n },\n setCurrentRowByKey: function setCurrentRowByKey(key) {\n var states = this.states;\n var _states$data = states.data,\n data = _states$data === undefined ? [] : _states$data,\n rowKey = states.rowKey;\n\n var currentRow = null;\n if (rowKey) {\n currentRow = Object(util_[\"arrayFind\"])(data, function (item) {\n return getRowIdentity(item, rowKey) === key;\n });\n }\n states.currentRow = currentRow;\n },\n updateCurrentRow: function updateCurrentRow(currentRow) {\n var states = this.states,\n table = this.table;\n\n var oldCurrentRow = states.currentRow;\n if (currentRow && currentRow !== oldCurrentRow) {\n states.currentRow = currentRow;\n table.$emit('current-change', currentRow, oldCurrentRow);\n return;\n }\n if (!currentRow && oldCurrentRow) {\n states.currentRow = null;\n table.$emit('current-change', null, oldCurrentRow);\n }\n },\n updateCurrentRowData: function updateCurrentRowData() {\n var states = this.states,\n table = this.table;\n var rowKey = states.rowKey,\n _currentRowKey = states._currentRowKey;\n // data 为 null 时,解构时的默认值会被忽略\n\n var data = states.data || [];\n var oldCurrentRow = states.currentRow;\n\n // 当 currentRow 不在 data 中时尝试更新数据\n if (data.indexOf(oldCurrentRow) === -1 && oldCurrentRow) {\n if (rowKey) {\n var currentRowKey = getRowIdentity(oldCurrentRow, rowKey);\n this.setCurrentRowByKey(currentRowKey);\n } else {\n states.currentRow = null;\n }\n if (states.currentRow === null) {\n table.$emit('current-change', null, oldCurrentRow);\n }\n } else if (_currentRowKey) {\n // 把初始时下设置的 rowKey 转化成 rowData\n this.setCurrentRowByKey(_currentRowKey);\n this.restoreCurrentRowKey();\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/store/tree.js\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n/* harmony default export */ var tree = ({\n data: function data() {\n return {\n states: {\n // defaultExpandAll 存在于 expand.js 中,这里不重复添加\n // 在展开行中,expandRowKeys 会被转化成 expandRows,expandRowKeys 这个属性只是记录了 TreeTable 行的展开\n // TODO: 拆分为独立的 TreeTable,统一用法\n expandRowKeys: [],\n treeData: {},\n indent: 16,\n lazy: false,\n lazyTreeNodeMap: {},\n lazyColumnIdentifier: 'hasChildren',\n childrenColumnName: 'children'\n }\n };\n },\n\n\n computed: {\n // 嵌入型的数据,watch 无法是检测到变化 https://github.com/ElemeFE/element/issues/14998\n // TODO: 使用 computed 解决该问题,是否会造成性能问题?\n // @return { id: { level, children } }\n normalizedData: function normalizedData() {\n if (!this.states.rowKey) return {};\n var data = this.states.data || [];\n return this.normalize(data);\n },\n\n // @return { id: { children } }\n // 针对懒加载的情形,不处理嵌套数据\n normalizedLazyNode: function normalizedLazyNode() {\n var _states = this.states,\n rowKey = _states.rowKey,\n lazyTreeNodeMap = _states.lazyTreeNodeMap,\n lazyColumnIdentifier = _states.lazyColumnIdentifier;\n\n var keys = Object.keys(lazyTreeNodeMap);\n var res = {};\n if (!keys.length) return res;\n keys.forEach(function (key) {\n if (lazyTreeNodeMap[key].length) {\n var item = { children: [] };\n lazyTreeNodeMap[key].forEach(function (row) {\n var currentRowKey = getRowIdentity(row, rowKey);\n item.children.push(currentRowKey);\n if (row[lazyColumnIdentifier] && !res[currentRowKey]) {\n res[currentRowKey] = { children: [] };\n }\n });\n res[key] = item;\n }\n });\n return res;\n }\n },\n\n watch: {\n normalizedData: 'updateTreeData',\n normalizedLazyNode: 'updateTreeData'\n },\n\n methods: {\n normalize: function normalize(data) {\n var _states2 = this.states,\n childrenColumnName = _states2.childrenColumnName,\n lazyColumnIdentifier = _states2.lazyColumnIdentifier,\n rowKey = _states2.rowKey,\n lazy = _states2.lazy;\n\n var res = {};\n walkTreeNode(data, function (parent, children, level) {\n var parentId = getRowIdentity(parent, rowKey);\n if (Array.isArray(children)) {\n res[parentId] = {\n children: children.map(function (row) {\n return getRowIdentity(row, rowKey);\n }),\n level: level\n };\n } else if (lazy) {\n // 当 children 不存在且 lazy 为 true,该节点即为懒加载的节点\n res[parentId] = {\n children: [],\n lazy: true,\n level: level\n };\n }\n }, childrenColumnName, lazyColumnIdentifier);\n return res;\n },\n updateTreeData: function updateTreeData() {\n var nested = this.normalizedData;\n var normalizedLazyNode = this.normalizedLazyNode;\n var keys = Object.keys(nested);\n var newTreeData = {};\n if (keys.length) {\n var _states3 = this.states,\n oldTreeData = _states3.treeData,\n defaultExpandAll = _states3.defaultExpandAll,\n expandRowKeys = _states3.expandRowKeys,\n lazy = _states3.lazy;\n\n var rootLazyRowKeys = [];\n var getExpanded = function getExpanded(oldValue, key) {\n var included = defaultExpandAll || expandRowKeys && expandRowKeys.indexOf(key) !== -1;\n return !!(oldValue && oldValue.expanded || included);\n };\n // 合并 expanded 与 display,确保数据刷新后,状态不变\n keys.forEach(function (key) {\n var oldValue = oldTreeData[key];\n var newValue = _extends({}, nested[key]);\n newValue.expanded = getExpanded(oldValue, key);\n if (newValue.lazy) {\n var _ref = oldValue || {},\n _ref$loaded = _ref.loaded,\n loaded = _ref$loaded === undefined ? false : _ref$loaded,\n _ref$loading = _ref.loading,\n loading = _ref$loading === undefined ? false : _ref$loading;\n\n newValue.loaded = !!loaded;\n newValue.loading = !!loading;\n rootLazyRowKeys.push(key);\n }\n newTreeData[key] = newValue;\n });\n // 根据懒加载数据更新 treeData\n var lazyKeys = Object.keys(normalizedLazyNode);\n if (lazy && lazyKeys.length && rootLazyRowKeys.length) {\n lazyKeys.forEach(function (key) {\n var oldValue = oldTreeData[key];\n var lazyNodeChildren = normalizedLazyNode[key].children;\n if (rootLazyRowKeys.indexOf(key) !== -1) {\n // 懒加载的 root 节点,更新一下原有的数据,原来的 children 一定是空数组\n if (newTreeData[key].children.length !== 0) {\n throw new Error('[ElTable]children must be an empty array.');\n }\n newTreeData[key].children = lazyNodeChildren;\n } else {\n var _ref2 = oldValue || {},\n _ref2$loaded = _ref2.loaded,\n loaded = _ref2$loaded === undefined ? false : _ref2$loaded,\n _ref2$loading = _ref2.loading,\n loading = _ref2$loading === undefined ? false : _ref2$loading;\n\n newTreeData[key] = {\n lazy: true,\n loaded: !!loaded,\n loading: !!loading,\n expanded: getExpanded(oldValue, key),\n children: lazyNodeChildren,\n level: ''\n };\n }\n });\n }\n }\n this.states.treeData = newTreeData;\n this.updateTableScrollY();\n },\n updateTreeExpandKeys: function updateTreeExpandKeys(value) {\n this.states.expandRowKeys = value;\n this.updateTreeData();\n },\n toggleTreeExpansion: function toggleTreeExpansion(row, expanded) {\n this.assertRowKey();\n\n var _states4 = this.states,\n rowKey = _states4.rowKey,\n treeData = _states4.treeData;\n\n var id = getRowIdentity(row, rowKey);\n var data = id && treeData[id];\n if (id && data && 'expanded' in data) {\n var oldExpanded = data.expanded;\n expanded = typeof expanded === 'undefined' ? !data.expanded : expanded;\n treeData[id].expanded = expanded;\n if (oldExpanded !== expanded) {\n this.table.$emit('expand-change', row, expanded);\n }\n this.updateTableScrollY();\n }\n },\n loadOrToggle: function loadOrToggle(row) {\n this.assertRowKey();\n var _states5 = this.states,\n lazy = _states5.lazy,\n treeData = _states5.treeData,\n rowKey = _states5.rowKey;\n\n var id = getRowIdentity(row, rowKey);\n var data = treeData[id];\n if (lazy && data && 'loaded' in data && !data.loaded) {\n this.loadData(row, id, data);\n } else {\n this.toggleTreeExpansion(row);\n }\n },\n loadData: function loadData(row, key, treeNode) {\n var _this = this;\n\n var load = this.table.load;\n var _states6 = this.states,\n lazyTreeNodeMap = _states6.lazyTreeNodeMap,\n treeData = _states6.treeData;\n\n if (load && !treeData[key].loaded) {\n treeData[key].loading = true;\n load(row, treeNode, function (data) {\n if (!Array.isArray(data)) {\n throw new Error('[ElTable] data must be an array');\n }\n treeData[key].loading = false;\n treeData[key].loaded = true;\n treeData[key].expanded = true;\n if (data.length) {\n _this.$set(lazyTreeNodeMap, key, data);\n }\n _this.table.$emit('expand-change', row, true);\n });\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/store/watcher.js\n\n\n\n\n\n\n\nvar watcher_sortData = function sortData(data, states) {\n var sortingColumn = states.sortingColumn;\n if (!sortingColumn || typeof sortingColumn.sortable === 'string') {\n return data;\n }\n return util_orderBy(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod, sortingColumn.sortBy);\n};\n\nvar doFlattenColumns = function doFlattenColumns(columns) {\n var result = [];\n columns.forEach(function (column) {\n if (column.children) {\n result.push.apply(result, doFlattenColumns(column.children));\n } else {\n result.push(column);\n }\n });\n return result;\n};\n\n/* harmony default export */ var watcher = (external_vue_default.a.extend({\n data: function data() {\n return {\n states: {\n // 3.0 版本后要求必须设置该属性\n rowKey: null,\n\n // 渲染的数据来源,是对 table 中的 data 过滤排序后的结果\n data: [],\n\n // 是否包含固定列\n isComplex: false,\n\n // 列\n _columns: [], // 不可响应的\n originColumns: [],\n columns: [],\n fixedColumns: [],\n rightFixedColumns: [],\n leafColumns: [],\n fixedLeafColumns: [],\n rightFixedLeafColumns: [],\n leafColumnsLength: 0,\n fixedLeafColumnsLength: 0,\n rightFixedLeafColumnsLength: 0,\n\n // 选择\n isAllSelected: false,\n selection: [],\n reserveSelection: false,\n selectOnIndeterminate: false,\n selectable: null,\n\n // 过滤\n filters: {}, // 不可响应的\n filteredData: null,\n\n // 排序\n sortingColumn: null,\n sortProp: null,\n sortOrder: null,\n\n hoverRow: null\n }\n };\n },\n\n\n mixins: [expand, current, tree],\n\n methods: {\n // 检查 rowKey 是否存在\n assertRowKey: function assertRowKey() {\n var rowKey = this.states.rowKey;\n if (!rowKey) throw new Error('[ElTable] prop row-key is required');\n },\n\n\n // 更新列\n updateColumns: function updateColumns() {\n var states = this.states;\n var _columns = states._columns || [];\n states.fixedColumns = _columns.filter(function (column) {\n return column.fixed === true || column.fixed === 'left';\n });\n states.rightFixedColumns = _columns.filter(function (column) {\n return column.fixed === 'right';\n });\n\n if (states.fixedColumns.length > 0 && _columns[0] && _columns[0].type === 'selection' && !_columns[0].fixed) {\n _columns[0].fixed = true;\n states.fixedColumns.unshift(_columns[0]);\n }\n\n var notFixedColumns = _columns.filter(function (column) {\n return !column.fixed;\n });\n states.originColumns = [].concat(states.fixedColumns).concat(notFixedColumns).concat(states.rightFixedColumns);\n\n var leafColumns = doFlattenColumns(notFixedColumns);\n var fixedLeafColumns = doFlattenColumns(states.fixedColumns);\n var rightFixedLeafColumns = doFlattenColumns(states.rightFixedColumns);\n\n states.leafColumnsLength = leafColumns.length;\n states.fixedLeafColumnsLength = fixedLeafColumns.length;\n states.rightFixedLeafColumnsLength = rightFixedLeafColumns.length;\n\n states.columns = [].concat(fixedLeafColumns).concat(leafColumns).concat(rightFixedLeafColumns);\n states.isComplex = states.fixedColumns.length > 0 || states.rightFixedColumns.length > 0;\n },\n\n\n // 更新 DOM\n scheduleLayout: function scheduleLayout(needUpdateColumns) {\n if (needUpdateColumns) {\n this.updateColumns();\n }\n this.table.debouncedUpdateLayout();\n },\n\n\n // 选择\n isSelected: function isSelected(row) {\n var _states$selection = this.states.selection,\n selection = _states$selection === undefined ? [] : _states$selection;\n\n return selection.indexOf(row) > -1;\n },\n clearSelection: function clearSelection() {\n var states = this.states;\n states.isAllSelected = false;\n var oldSelection = states.selection;\n if (oldSelection.length) {\n states.selection = [];\n this.table.$emit('selection-change', []);\n }\n },\n cleanSelection: function cleanSelection() {\n var states = this.states;\n var data = states.data,\n rowKey = states.rowKey,\n selection = states.selection;\n\n var deleted = void 0;\n if (rowKey) {\n deleted = [];\n var selectedMap = getKeysMap(selection, rowKey);\n var dataMap = getKeysMap(data, rowKey);\n for (var key in selectedMap) {\n if (selectedMap.hasOwnProperty(key) && !dataMap[key]) {\n deleted.push(selectedMap[key].row);\n }\n }\n } else {\n deleted = selection.filter(function (item) {\n return data.indexOf(item) === -1;\n });\n }\n if (deleted.length) {\n var newSelection = selection.filter(function (item) {\n return deleted.indexOf(item) === -1;\n });\n states.selection = newSelection;\n this.table.$emit('selection-change', newSelection.slice());\n }\n },\n toggleRowSelection: function toggleRowSelection(row, selected) {\n var emitChange = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n var changed = toggleRowStatus(this.states.selection, row, selected);\n if (changed) {\n var newSelection = (this.states.selection || []).slice();\n // 调用 API 修改选中值,不触发 select 事件\n if (emitChange) {\n this.table.$emit('select', newSelection, row);\n }\n this.table.$emit('selection-change', newSelection);\n }\n },\n _toggleAllSelection: function _toggleAllSelection() {\n var states = this.states;\n var _states$data = states.data,\n data = _states$data === undefined ? [] : _states$data,\n selection = states.selection;\n // when only some rows are selected (but not all), select or deselect all of them\n // depending on the value of selectOnIndeterminate\n\n var value = states.selectOnIndeterminate ? !states.isAllSelected : !(states.isAllSelected || selection.length);\n states.isAllSelected = value;\n\n var selectionChanged = false;\n data.forEach(function (row, index) {\n if (states.selectable) {\n if (states.selectable.call(null, row, index) && toggleRowStatus(selection, row, value)) {\n selectionChanged = true;\n }\n } else {\n if (toggleRowStatus(selection, row, value)) {\n selectionChanged = true;\n }\n }\n });\n\n if (selectionChanged) {\n this.table.$emit('selection-change', selection ? selection.slice() : []);\n }\n this.table.$emit('select-all', selection);\n },\n updateSelectionByRowKey: function updateSelectionByRowKey() {\n var states = this.states;\n var selection = states.selection,\n rowKey = states.rowKey,\n data = states.data;\n\n var selectedMap = getKeysMap(selection, rowKey);\n data.forEach(function (row) {\n var rowId = getRowIdentity(row, rowKey);\n var rowInfo = selectedMap[rowId];\n if (rowInfo) {\n selection[rowInfo.index] = row;\n }\n });\n },\n updateAllSelected: function updateAllSelected() {\n var states = this.states;\n var selection = states.selection,\n rowKey = states.rowKey,\n selectable = states.selectable;\n // data 为 null 时,解构时的默认值会被忽略\n\n var data = states.data || [];\n if (data.length === 0) {\n states.isAllSelected = false;\n return;\n }\n\n var selectedMap = void 0;\n if (rowKey) {\n selectedMap = getKeysMap(selection, rowKey);\n }\n var isSelected = function isSelected(row) {\n if (selectedMap) {\n return !!selectedMap[getRowIdentity(row, rowKey)];\n } else {\n return selection.indexOf(row) !== -1;\n }\n };\n var isAllSelected = true;\n var selectedCount = 0;\n for (var i = 0, j = data.length; i < j; i++) {\n var item = data[i];\n var isRowSelectable = selectable && selectable.call(null, item, i);\n if (!isSelected(item)) {\n if (!selectable || isRowSelectable) {\n isAllSelected = false;\n break;\n }\n } else {\n selectedCount++;\n }\n }\n\n if (selectedCount === 0) isAllSelected = false;\n states.isAllSelected = isAllSelected;\n },\n\n\n // 过滤与排序\n updateFilters: function updateFilters(columns, values) {\n if (!Array.isArray(columns)) {\n columns = [columns];\n }\n var states = this.states;\n var filters = {};\n columns.forEach(function (col) {\n states.filters[col.id] = values;\n filters[col.columnKey || col.id] = values;\n });\n\n return filters;\n },\n updateSort: function updateSort(column, prop, order) {\n if (this.states.sortingColumn && this.states.sortingColumn !== column) {\n this.states.sortingColumn.order = null;\n }\n this.states.sortingColumn = column;\n this.states.sortProp = prop;\n this.states.sortOrder = order;\n },\n execFilter: function execFilter() {\n var _this = this;\n\n var states = this.states;\n var _data = states._data,\n filters = states.filters;\n\n var data = _data;\n\n Object.keys(filters).forEach(function (columnId) {\n var values = states.filters[columnId];\n if (!values || values.length === 0) return;\n var column = getColumnById(_this.states, columnId);\n if (column && column.filterMethod) {\n data = data.filter(function (row) {\n return values.some(function (value) {\n return column.filterMethod.call(null, value, row, column);\n });\n });\n }\n });\n\n states.filteredData = data;\n },\n execSort: function execSort() {\n var states = this.states;\n states.data = watcher_sortData(states.filteredData, states);\n },\n\n\n // 根据 filters 与 sort 去过滤 data\n execQuery: function execQuery(ignore) {\n if (!(ignore && ignore.filter)) {\n this.execFilter();\n }\n this.execSort();\n },\n clearFilter: function clearFilter(columnKeys) {\n var states = this.states;\n var _table$$refs = this.table.$refs,\n tableHeader = _table$$refs.tableHeader,\n fixedTableHeader = _table$$refs.fixedTableHeader,\n rightFixedTableHeader = _table$$refs.rightFixedTableHeader;\n\n\n var panels = {};\n if (tableHeader) panels = merge_default()(panels, tableHeader.filterPanels);\n if (fixedTableHeader) panels = merge_default()(panels, fixedTableHeader.filterPanels);\n if (rightFixedTableHeader) panels = merge_default()(panels, rightFixedTableHeader.filterPanels);\n\n var keys = Object.keys(panels);\n if (!keys.length) return;\n\n if (typeof columnKeys === 'string') {\n columnKeys = [columnKeys];\n }\n\n if (Array.isArray(columnKeys)) {\n var columns = columnKeys.map(function (key) {\n return getColumnByKey(states, key);\n });\n keys.forEach(function (key) {\n var column = columns.find(function (col) {\n return col.id === key;\n });\n if (column) {\n // TODO: 优化这里的代码\n panels[key].filteredValue = [];\n }\n });\n this.commit('filterChange', {\n column: columns,\n values: [],\n silent: true,\n multi: true\n });\n } else {\n keys.forEach(function (key) {\n // TODO: 优化这里的代码\n panels[key].filteredValue = [];\n });\n\n states.filters = {};\n this.commit('filterChange', {\n column: {},\n values: [],\n silent: true\n });\n }\n },\n clearSort: function clearSort() {\n var states = this.states;\n if (!states.sortingColumn) return;\n\n this.updateSort(null, null, null);\n this.commit('changeSortCondition', {\n silent: true\n });\n },\n\n\n // 适配层,expand-row-keys 在 Expand 与 TreeTable 中都有使用\n setExpandRowKeysAdapter: function setExpandRowKeysAdapter(val) {\n // 这里会触发额外的计算,但为了兼容性,暂时这么做\n this.setExpandRowKeys(val);\n this.updateTreeExpandKeys(val);\n },\n\n\n // 展开行与 TreeTable 都要使用\n toggleRowExpansionAdapter: function toggleRowExpansionAdapter(row, expanded) {\n var hasExpandColumn = this.states.columns.some(function (_ref) {\n var type = _ref.type;\n return type === 'expand';\n });\n if (hasExpandColumn) {\n this.toggleRowExpansion(row, expanded);\n } else {\n this.toggleTreeExpansion(row, expanded);\n }\n }\n }\n}));\n// CONCATENATED MODULE: ./packages/table/src/store/index.js\n\n\n\n\nwatcher.prototype.mutations = {\n setData: function setData(states, data) {\n var dataInstanceChanged = states._data !== data;\n states._data = data;\n\n this.execQuery();\n // 数据变化,更新部分数据。\n // 没有使用 computed,而是手动更新部分数据 https://github.com/vuejs/vue/issues/6660#issuecomment-331417140\n this.updateCurrentRowData();\n this.updateExpandRows();\n if (states.reserveSelection) {\n this.assertRowKey();\n this.updateSelectionByRowKey();\n } else {\n if (dataInstanceChanged) {\n this.clearSelection();\n } else {\n this.cleanSelection();\n }\n }\n this.updateAllSelected();\n\n this.updateTableScrollY();\n },\n insertColumn: function insertColumn(states, column, index, parent) {\n var array = states._columns;\n if (parent) {\n array = parent.children;\n if (!array) array = parent.children = [];\n }\n\n if (typeof index !== 'undefined') {\n array.splice(index, 0, column);\n } else {\n array.push(column);\n }\n\n if (column.type === 'selection') {\n states.selectable = column.selectable;\n states.reserveSelection = column.reserveSelection;\n }\n\n if (this.table.$ready) {\n this.updateColumns(); // hack for dynamics insert column\n this.scheduleLayout();\n }\n },\n removeColumn: function removeColumn(states, column, parent) {\n var array = states._columns;\n if (parent) {\n array = parent.children;\n if (!array) array = parent.children = [];\n }\n if (array) {\n array.splice(array.indexOf(column), 1);\n }\n\n if (this.table.$ready) {\n this.updateColumns(); // hack for dynamics remove column\n this.scheduleLayout();\n }\n },\n sort: function sort(states, options) {\n var prop = options.prop,\n order = options.order,\n init = options.init;\n\n if (prop) {\n var column = Object(util_[\"arrayFind\"])(states.columns, function (column) {\n return column.property === prop;\n });\n if (column) {\n column.order = order;\n this.updateSort(column, prop, order);\n this.commit('changeSortCondition', { init: init });\n }\n }\n },\n changeSortCondition: function changeSortCondition(states, options) {\n // 修复 pr https://github.com/ElemeFE/element/pull/15012 导致的 bug\n var column = states.sortingColumn,\n prop = states.sortProp,\n order = states.sortOrder;\n\n if (order === null) {\n states.sortingColumn = null;\n states.sortProp = null;\n }\n var ingore = { filter: true };\n this.execQuery(ingore);\n\n if (!options || !(options.silent || options.init)) {\n this.table.$emit('sort-change', {\n column: column,\n prop: prop,\n order: order\n });\n }\n\n this.updateTableScrollY();\n },\n filterChange: function filterChange(states, options) {\n var column = options.column,\n values = options.values,\n silent = options.silent;\n\n var newFilters = this.updateFilters(column, values);\n\n this.execQuery();\n\n if (!silent) {\n this.table.$emit('filter-change', newFilters);\n }\n\n this.updateTableScrollY();\n },\n toggleAllSelection: function toggleAllSelection() {\n this.toggleAllSelection();\n },\n rowSelectedChanged: function rowSelectedChanged(states, row) {\n this.toggleRowSelection(row);\n this.updateAllSelected();\n },\n setHoverRow: function setHoverRow(states, row) {\n states.hoverRow = row;\n },\n setCurrentRow: function setCurrentRow(states, row) {\n this.updateCurrentRow(row);\n }\n};\n\nwatcher.prototype.commit = function (name) {\n var mutations = this.mutations;\n if (mutations[name]) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n mutations[name].apply(this, [this.states].concat(args));\n } else {\n throw new Error('Action not found: ' + name);\n }\n};\n\nwatcher.prototype.updateTableScrollY = function () {\n external_vue_default.a.nextTick(this.table.updateScrollY);\n};\n\n/* harmony default export */ var src_store = (watcher);\n// CONCATENATED MODULE: ./packages/table/src/store/helper.js\n\n\n\nfunction createStore(table) {\n var initialState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!table) {\n throw new Error('Table is required.');\n }\n\n var store = new src_store();\n store.table = table;\n // fix https://github.com/ElemeFE/element/issues/14075\n // related pr https://github.com/ElemeFE/element/pull/14146\n store.toggleAllSelection = debounce_default()(10, store._toggleAllSelection);\n Object.keys(initialState).forEach(function (key) {\n store.states[key] = initialState[key];\n });\n return store;\n}\n\nfunction mapStates(mapper) {\n var res = {};\n Object.keys(mapper).forEach(function (key) {\n var value = mapper[key];\n var fn = void 0;\n if (typeof value === 'string') {\n fn = function fn() {\n return this.store.states[value];\n };\n } else if (typeof value === 'function') {\n fn = function fn() {\n return value.call(this, this.store.states);\n };\n } else {\n console.error('invalid value type');\n }\n if (fn) {\n res[key] = fn;\n }\n });\n return res;\n};\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scrollbar-width\"\nvar scrollbar_width_ = __webpack_require__(31);\nvar scrollbar_width_default = /*#__PURE__*/__webpack_require__.n(scrollbar_width_);\n\n// CONCATENATED MODULE: ./packages/table/src/table-layout.js\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar table_layout_TableLayout = function () {\n function TableLayout(options) {\n _classCallCheck(this, TableLayout);\n\n this.observers = [];\n this.table = null;\n this.store = null;\n this.columns = null;\n this.fit = true;\n this.showHeader = true;\n\n this.height = null;\n this.scrollX = false;\n this.scrollY = false;\n this.bodyWidth = null;\n this.fixedWidth = null;\n this.rightFixedWidth = null;\n this.tableHeight = null;\n this.headerHeight = 44; // Table Header Height\n this.appendHeight = 0; // Append Slot Height\n this.footerHeight = 44; // Table Footer Height\n this.viewportHeight = null; // Table Height - Scroll Bar Height\n this.bodyHeight = null; // Table Height - Table Header Height\n this.fixedBodyHeight = null; // Table Height - Table Header Height - Scroll Bar Height\n this.gutterWidth = scrollbar_width_default()();\n\n for (var name in options) {\n if (options.hasOwnProperty(name)) {\n this[name] = options[name];\n }\n }\n\n if (!this.table) {\n throw new Error('table is required for Table Layout');\n }\n if (!this.store) {\n throw new Error('store is required for Table Layout');\n }\n }\n\n TableLayout.prototype.updateScrollY = function updateScrollY() {\n var height = this.height;\n if (height === null) return false;\n var bodyWrapper = this.table.bodyWrapper;\n if (this.table.$el && bodyWrapper) {\n var body = bodyWrapper.querySelector('.el-table__body');\n var prevScrollY = this.scrollY;\n var scrollY = body.offsetHeight > this.bodyHeight;\n this.scrollY = scrollY;\n return prevScrollY !== scrollY;\n }\n return false;\n };\n\n TableLayout.prototype.setHeight = function setHeight(value) {\n var _this = this;\n\n var prop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'height';\n\n if (external_vue_default.a.prototype.$isServer) return;\n var el = this.table.$el;\n value = parseHeight(value);\n this.height = value;\n\n if (!el && (value || value === 0)) return external_vue_default.a.nextTick(function () {\n return _this.setHeight(value, prop);\n });\n\n if (typeof value === 'number') {\n el.style[prop] = value + 'px';\n this.updateElsHeight();\n } else if (typeof value === 'string') {\n el.style[prop] = value;\n this.updateElsHeight();\n }\n };\n\n TableLayout.prototype.setMaxHeight = function setMaxHeight(value) {\n this.setHeight(value, 'max-height');\n };\n\n TableLayout.prototype.getFlattenColumns = function getFlattenColumns() {\n var flattenColumns = [];\n var columns = this.table.columns;\n columns.forEach(function (column) {\n if (column.isColumnGroup) {\n flattenColumns.push.apply(flattenColumns, column.columns);\n } else {\n flattenColumns.push(column);\n }\n });\n\n return flattenColumns;\n };\n\n TableLayout.prototype.updateElsHeight = function updateElsHeight() {\n var _this2 = this;\n\n if (!this.table.$ready) return external_vue_default.a.nextTick(function () {\n return _this2.updateElsHeight();\n });\n var _table$$refs = this.table.$refs,\n headerWrapper = _table$$refs.headerWrapper,\n appendWrapper = _table$$refs.appendWrapper,\n footerWrapper = _table$$refs.footerWrapper;\n\n this.appendHeight = appendWrapper ? appendWrapper.offsetHeight : 0;\n\n if (this.showHeader && !headerWrapper) return;\n\n // fix issue (https://github.com/ElemeFE/element/pull/16956)\n var headerTrElm = headerWrapper ? headerWrapper.querySelector('.el-table__header tr') : null;\n var noneHeader = this.headerDisplayNone(headerTrElm);\n\n var headerHeight = this.headerHeight = !this.showHeader ? 0 : headerWrapper.offsetHeight;\n if (this.showHeader && !noneHeader && headerWrapper.offsetWidth > 0 && (this.table.columns || []).length > 0 && headerHeight < 2) {\n return external_vue_default.a.nextTick(function () {\n return _this2.updateElsHeight();\n });\n }\n var tableHeight = this.tableHeight = this.table.$el.clientHeight;\n var footerHeight = this.footerHeight = footerWrapper ? footerWrapper.offsetHeight : 0;\n if (this.height !== null) {\n this.bodyHeight = tableHeight - headerHeight - footerHeight + (footerWrapper ? 1 : 0);\n }\n this.fixedBodyHeight = this.scrollX ? this.bodyHeight - this.gutterWidth : this.bodyHeight;\n\n var noData = !(this.store.states.data && this.store.states.data.length);\n this.viewportHeight = this.scrollX ? tableHeight - (noData ? 0 : this.gutterWidth) : tableHeight;\n\n this.updateScrollY();\n this.notifyObservers('scrollable');\n };\n\n TableLayout.prototype.headerDisplayNone = function headerDisplayNone(elm) {\n if (!elm) return true;\n var headerChild = elm;\n while (headerChild.tagName !== 'DIV') {\n if (getComputedStyle(headerChild).display === 'none') {\n return true;\n }\n headerChild = headerChild.parentElement;\n }\n return false;\n };\n\n TableLayout.prototype.updateColumnsWidth = function updateColumnsWidth() {\n if (external_vue_default.a.prototype.$isServer) return;\n var fit = this.fit;\n var bodyWidth = this.table.$el.clientWidth;\n var bodyMinWidth = 0;\n\n var flattenColumns = this.getFlattenColumns();\n var flexColumns = flattenColumns.filter(function (column) {\n return typeof column.width !== 'number';\n });\n\n flattenColumns.forEach(function (column) {\n // Clean those columns whose width changed from flex to unflex\n if (typeof column.width === 'number' && column.realWidth) column.realWidth = null;\n });\n\n if (flexColumns.length > 0 && fit) {\n flattenColumns.forEach(function (column) {\n bodyMinWidth += column.width || column.minWidth || 80;\n });\n\n var scrollYWidth = this.scrollY ? this.gutterWidth : 0;\n\n if (bodyMinWidth <= bodyWidth - scrollYWidth) {\n // DON'T HAVE SCROLL BAR\n this.scrollX = false;\n\n var totalFlexWidth = bodyWidth - scrollYWidth - bodyMinWidth;\n\n if (flexColumns.length === 1) {\n flexColumns[0].realWidth = (flexColumns[0].minWidth || 80) + totalFlexWidth;\n } else {\n var allColumnsWidth = flexColumns.reduce(function (prev, column) {\n return prev + (column.minWidth || 80);\n }, 0);\n var flexWidthPerPixel = totalFlexWidth / allColumnsWidth;\n var noneFirstWidth = 0;\n\n flexColumns.forEach(function (column, index) {\n if (index === 0) return;\n var flexWidth = Math.floor((column.minWidth || 80) * flexWidthPerPixel);\n noneFirstWidth += flexWidth;\n column.realWidth = (column.minWidth || 80) + flexWidth;\n });\n\n flexColumns[0].realWidth = (flexColumns[0].minWidth || 80) + totalFlexWidth - noneFirstWidth;\n }\n } else {\n // HAVE HORIZONTAL SCROLL BAR\n this.scrollX = true;\n flexColumns.forEach(function (column) {\n column.realWidth = column.minWidth;\n });\n }\n\n this.bodyWidth = Math.max(bodyMinWidth, bodyWidth);\n this.table.resizeState.width = this.bodyWidth;\n } else {\n flattenColumns.forEach(function (column) {\n if (!column.width && !column.minWidth) {\n column.realWidth = 80;\n } else {\n column.realWidth = column.width || column.minWidth;\n }\n\n bodyMinWidth += column.realWidth;\n });\n this.scrollX = bodyMinWidth > bodyWidth;\n\n this.bodyWidth = bodyMinWidth;\n }\n\n var fixedColumns = this.store.states.fixedColumns;\n\n if (fixedColumns.length > 0) {\n var fixedWidth = 0;\n fixedColumns.forEach(function (column) {\n fixedWidth += column.realWidth || column.width;\n });\n\n this.fixedWidth = fixedWidth;\n }\n\n var rightFixedColumns = this.store.states.rightFixedColumns;\n if (rightFixedColumns.length > 0) {\n var rightFixedWidth = 0;\n rightFixedColumns.forEach(function (column) {\n rightFixedWidth += column.realWidth || column.width;\n });\n\n this.rightFixedWidth = rightFixedWidth;\n }\n\n this.notifyObservers('columns');\n };\n\n TableLayout.prototype.addObserver = function addObserver(observer) {\n this.observers.push(observer);\n };\n\n TableLayout.prototype.removeObserver = function removeObserver(observer) {\n var index = this.observers.indexOf(observer);\n if (index !== -1) {\n this.observers.splice(index, 1);\n }\n };\n\n TableLayout.prototype.notifyObservers = function notifyObservers(event) {\n var _this3 = this;\n\n var observers = this.observers;\n observers.forEach(function (observer) {\n switch (event) {\n case 'columns':\n observer.onColumnsChange(_this3);\n break;\n case 'scrollable':\n observer.onScrollableChange(_this3);\n break;\n default:\n throw new Error('Table Layout don\\'t have event ' + event + '.');\n }\n });\n };\n\n return TableLayout;\n}();\n\n/* harmony default export */ var table_layout = (table_layout_TableLayout);\n// CONCATENATED MODULE: ./packages/table/src/layout-observer.js\n/* harmony default export */ var layout_observer = ({\n created: function created() {\n this.tableLayout.addObserver(this);\n },\n destroyed: function destroyed() {\n this.tableLayout.removeObserver(this);\n },\n\n\n computed: {\n tableLayout: function tableLayout() {\n var layout = this.layout;\n if (!layout && this.table) {\n layout = this.table.layout;\n }\n if (!layout) {\n throw new Error('Can not find table layout.');\n }\n return layout;\n }\n },\n\n mounted: function mounted() {\n this.onColumnsChange(this.tableLayout);\n this.onScrollableChange(this.tableLayout);\n },\n updated: function updated() {\n if (this.__updated__) return;\n this.onColumnsChange(this.tableLayout);\n this.onScrollableChange(this.tableLayout);\n this.__updated__ = true;\n },\n\n\n methods: {\n onColumnsChange: function onColumnsChange(layout) {\n var cols = this.$el.querySelectorAll('colgroup > col');\n if (!cols.length) return;\n var flattenColumns = layout.getFlattenColumns();\n var columnsMap = {};\n flattenColumns.forEach(function (column) {\n columnsMap[column.id] = column;\n });\n for (var i = 0, j = cols.length; i < j; i++) {\n var col = cols[i];\n var name = col.getAttribute('name');\n var column = columnsMap[name];\n if (column) {\n col.setAttribute('width', column.realWidth || column.width);\n }\n }\n },\n onScrollableChange: function onScrollableChange(layout) {\n var cols = this.$el.querySelectorAll('colgroup > col[name=gutter]');\n for (var i = 0, j = cols.length; i < j; i++) {\n var col = cols[i];\n col.setAttribute('width', layout.scrollY ? layout.gutterWidth : '0');\n }\n var ths = this.$el.querySelectorAll('th.gutter');\n for (var _i = 0, _j = ths.length; _i < _j; _i++) {\n var th = ths[_i];\n th.style.width = layout.scrollY ? layout.gutterWidth + 'px' : '0';\n th.style.display = layout.scrollY ? '' : 'none';\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/table-body.js\nvar table_body_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar table_body_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var table_body = ({\n name: 'ElTableBody',\n\n mixins: [layout_observer],\n\n components: {\n ElCheckbox: checkbox_default.a,\n ElTooltip: tooltip_default.a\n },\n\n props: {\n store: {\n required: true\n },\n stripe: Boolean,\n context: {},\n rowClassName: [String, Function],\n rowStyle: [Object, Function],\n fixed: String,\n highlight: Boolean\n },\n\n render: function render(h) {\n var _this = this;\n\n var data = this.data || [];\n return h(\n 'table',\n {\n 'class': 'el-table__body',\n attrs: { cellspacing: '0',\n cellpadding: '0',\n border: '0' }\n },\n [h('colgroup', [this.columns.map(function (column) {\n return h('col', {\n attrs: { name: column.id },\n key: column.id });\n })]), h('tbody', [data.reduce(function (acc, row) {\n return acc.concat(_this.wrappedRowRender(row, acc.length));\n }, []), h('el-tooltip', {\n attrs: { effect: this.table.tooltipEffect, placement: 'top', content: this.tooltipContent },\n ref: 'tooltip' })])]\n );\n },\n\n\n computed: table_body_extends({\n table: function table() {\n return this.$parent;\n }\n }, mapStates({\n data: 'data',\n columns: 'columns',\n treeIndent: 'indent',\n leftFixedLeafCount: 'fixedLeafColumnsLength',\n rightFixedLeafCount: 'rightFixedLeafColumnsLength',\n columnsCount: function columnsCount(states) {\n return states.columns.length;\n },\n leftFixedCount: function leftFixedCount(states) {\n return states.fixedColumns.length;\n },\n rightFixedCount: function rightFixedCount(states) {\n return states.rightFixedColumns.length;\n },\n hasExpandColumn: function hasExpandColumn(states) {\n return states.columns.some(function (_ref) {\n var type = _ref.type;\n return type === 'expand';\n });\n }\n }), {\n firstDefaultColumnIndex: function firstDefaultColumnIndex() {\n return Object(util_[\"arrayFindIndex\"])(this.columns, function (_ref2) {\n var type = _ref2.type;\n return type === 'default';\n });\n }\n }),\n\n watch: {\n // don't trigger getter of currentRow in getCellClass. see https://jsfiddle.net/oe2b4hqt/\n // update DOM manually. see https://github.com/ElemeFE/element/pull/13954/files#diff-9b450c00d0a9dec0ffad5a3176972e40\n 'store.states.hoverRow': function storeStatesHoverRow(newVal, oldVal) {\n var _this2 = this;\n\n if (!this.store.states.isComplex || this.$isServer) return;\n var raf = window.requestAnimationFrame;\n if (!raf) {\n raf = function raf(fn) {\n return setTimeout(fn, 16);\n };\n }\n raf(function () {\n var rows = _this2.$el.querySelectorAll('.el-table__row');\n var oldRow = rows[oldVal];\n var newRow = rows[newVal];\n if (oldRow) {\n Object(dom_[\"removeClass\"])(oldRow, 'hover-row');\n }\n if (newRow) {\n Object(dom_[\"addClass\"])(newRow, 'hover-row');\n }\n });\n }\n },\n\n data: function data() {\n return {\n tooltipContent: ''\n };\n },\n created: function created() {\n this.activateTooltip = debounce_default()(50, function (tooltip) {\n return tooltip.handleShowPopper();\n });\n },\n\n\n methods: {\n getKeyOfRow: function getKeyOfRow(row, index) {\n var rowKey = this.table.rowKey;\n if (rowKey) {\n return getRowIdentity(row, rowKey);\n }\n return index;\n },\n isColumnHidden: function isColumnHidden(index) {\n if (this.fixed === true || this.fixed === 'left') {\n return index >= this.leftFixedLeafCount;\n } else if (this.fixed === 'right') {\n return index < this.columnsCount - this.rightFixedLeafCount;\n } else {\n return index < this.leftFixedLeafCount || index >= this.columnsCount - this.rightFixedLeafCount;\n }\n },\n getSpan: function getSpan(row, column, rowIndex, columnIndex) {\n var rowspan = 1;\n var colspan = 1;\n var fn = this.table.spanMethod;\n if (typeof fn === 'function') {\n var result = fn({\n row: row,\n column: column,\n rowIndex: rowIndex,\n columnIndex: columnIndex\n });\n if (Array.isArray(result)) {\n rowspan = result[0];\n colspan = result[1];\n } else if ((typeof result === 'undefined' ? 'undefined' : table_body_typeof(result)) === 'object') {\n rowspan = result.rowspan;\n colspan = result.colspan;\n }\n }\n return { rowspan: rowspan, colspan: colspan };\n },\n getRowStyle: function getRowStyle(row, rowIndex) {\n var rowStyle = this.table.rowStyle;\n if (typeof rowStyle === 'function') {\n return rowStyle.call(null, {\n row: row,\n rowIndex: rowIndex\n });\n }\n return rowStyle || null;\n },\n getRowClass: function getRowClass(row, rowIndex) {\n var classes = ['el-table__row'];\n if (this.table.highlightCurrentRow && row === this.store.states.currentRow) {\n classes.push('current-row');\n }\n\n if (this.stripe && rowIndex % 2 === 1) {\n classes.push('el-table__row--striped');\n }\n var rowClassName = this.table.rowClassName;\n if (typeof rowClassName === 'string') {\n classes.push(rowClassName);\n } else if (typeof rowClassName === 'function') {\n classes.push(rowClassName.call(null, {\n row: row,\n rowIndex: rowIndex\n }));\n }\n\n if (this.store.states.expandRows.indexOf(row) > -1) {\n classes.push('expanded');\n }\n\n return classes;\n },\n getCellStyle: function getCellStyle(rowIndex, columnIndex, row, column) {\n var cellStyle = this.table.cellStyle;\n if (typeof cellStyle === 'function') {\n return cellStyle.call(null, {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n row: row,\n column: column\n });\n }\n return cellStyle;\n },\n getCellClass: function getCellClass(rowIndex, columnIndex, row, column) {\n var classes = [column.id, column.align, column.className];\n\n if (this.isColumnHidden(columnIndex)) {\n classes.push('is-hidden');\n }\n\n var cellClassName = this.table.cellClassName;\n if (typeof cellClassName === 'string') {\n classes.push(cellClassName);\n } else if (typeof cellClassName === 'function') {\n classes.push(cellClassName.call(null, {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n row: row,\n column: column\n }));\n }\n\n return classes.join(' ');\n },\n getColspanRealWidth: function getColspanRealWidth(columns, colspan, index) {\n if (colspan < 1) {\n return columns[index].realWidth;\n }\n var widthArr = columns.map(function (_ref3) {\n var realWidth = _ref3.realWidth;\n return realWidth;\n }).slice(index, index + colspan);\n return widthArr.reduce(function (acc, width) {\n return acc + width;\n }, -1);\n },\n handleCellMouseEnter: function handleCellMouseEnter(event, row) {\n var table = this.table;\n var cell = getCell(event);\n\n if (cell) {\n var column = getColumnByCell(table, cell);\n var hoverState = table.hoverState = { cell: cell, column: column, row: row };\n table.$emit('cell-mouse-enter', hoverState.row, hoverState.column, hoverState.cell, event);\n }\n\n // 判断是否text-overflow, 如果是就显示tooltip\n var cellChild = event.target.querySelector('.cell');\n if (!(Object(dom_[\"hasClass\"])(cellChild, 'el-tooltip') && cellChild.childNodes.length)) {\n return;\n }\n // use range width instead of scrollWidth to determine whether the text is overflowing\n // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3\n var range = document.createRange();\n range.setStart(cellChild, 0);\n range.setEnd(cellChild, cellChild.childNodes.length);\n var rangeWidth = range.getBoundingClientRect().width;\n var padding = (parseInt(Object(dom_[\"getStyle\"])(cellChild, 'paddingLeft'), 10) || 0) + (parseInt(Object(dom_[\"getStyle\"])(cellChild, 'paddingRight'), 10) || 0);\n if ((rangeWidth + padding > cellChild.offsetWidth || cellChild.scrollWidth > cellChild.offsetWidth) && this.$refs.tooltip) {\n var tooltip = this.$refs.tooltip;\n // TODO 会引起整个 Table 的重新渲染,需要优化\n this.tooltipContent = cell.innerText || cell.textContent;\n tooltip.referenceElm = cell;\n tooltip.$refs.popper && (tooltip.$refs.popper.style.display = 'none');\n tooltip.doDestroy();\n tooltip.setExpectedState(true);\n this.activateTooltip(tooltip);\n }\n },\n handleCellMouseLeave: function handleCellMouseLeave(event) {\n var tooltip = this.$refs.tooltip;\n if (tooltip) {\n tooltip.setExpectedState(false);\n tooltip.handleClosePopper();\n }\n var cell = getCell(event);\n if (!cell) return;\n\n var oldHoverState = this.table.hoverState || {};\n this.table.$emit('cell-mouse-leave', oldHoverState.row, oldHoverState.column, oldHoverState.cell, event);\n },\n\n\n handleMouseEnter: debounce_default()(30, function (index) {\n this.store.commit('setHoverRow', index);\n }),\n\n handleMouseLeave: debounce_default()(30, function () {\n this.store.commit('setHoverRow', null);\n }),\n\n handleContextMenu: function handleContextMenu(event, row) {\n this.handleEvent(event, row, 'contextmenu');\n },\n handleDoubleClick: function handleDoubleClick(event, row) {\n this.handleEvent(event, row, 'dblclick');\n },\n handleClick: function handleClick(event, row) {\n this.store.commit('setCurrentRow', row);\n this.handleEvent(event, row, 'click');\n },\n handleEvent: function handleEvent(event, row, name) {\n var table = this.table;\n var cell = getCell(event);\n var column = void 0;\n if (cell) {\n column = getColumnByCell(table, cell);\n if (column) {\n table.$emit('cell-' + name, row, column, cell, event);\n }\n }\n table.$emit('row-' + name, row, column, event);\n },\n rowRender: function rowRender(row, $index, treeRowData) {\n var _this3 = this;\n\n var h = this.$createElement;\n var treeIndent = this.treeIndent,\n columns = this.columns,\n firstDefaultColumnIndex = this.firstDefaultColumnIndex;\n\n var columnsHidden = columns.map(function (column, index) {\n return _this3.isColumnHidden(index);\n });\n var rowClasses = this.getRowClass(row, $index);\n var display = true;\n if (treeRowData) {\n rowClasses.push('el-table__row--level-' + treeRowData.level);\n display = treeRowData.display;\n }\n // 指令 v-show 会覆盖 row-style 中 display\n // 使用 :style 代替 v-show https://github.com/ElemeFE/element/issues/16995\n var displayStyle = display ? null : {\n display: 'none'\n };\n return h(\n 'tr',\n {\n style: [displayStyle, this.getRowStyle(row, $index)],\n 'class': rowClasses,\n key: this.getKeyOfRow(row, $index),\n on: {\n 'dblclick': function dblclick($event) {\n return _this3.handleDoubleClick($event, row);\n },\n 'click': function click($event) {\n return _this3.handleClick($event, row);\n },\n 'contextmenu': function contextmenu($event) {\n return _this3.handleContextMenu($event, row);\n },\n 'mouseenter': function mouseenter(_) {\n return _this3.handleMouseEnter($index);\n },\n 'mouseleave': this.handleMouseLeave\n }\n },\n [columns.map(function (column, cellIndex) {\n var _getSpan = _this3.getSpan(row, column, $index, cellIndex),\n rowspan = _getSpan.rowspan,\n colspan = _getSpan.colspan;\n\n if (!rowspan || !colspan) {\n return null;\n }\n var columnData = table_body_extends({}, column);\n columnData.realWidth = _this3.getColspanRealWidth(columns, colspan, cellIndex);\n var data = {\n store: _this3.store,\n _self: _this3.context || _this3.table.$vnode.context,\n column: columnData,\n row: row,\n $index: $index\n };\n if (cellIndex === firstDefaultColumnIndex && treeRowData) {\n data.treeNode = {\n indent: treeRowData.level * treeIndent,\n level: treeRowData.level\n };\n if (typeof treeRowData.expanded === 'boolean') {\n data.treeNode.expanded = treeRowData.expanded;\n // 表明是懒加载\n if ('loading' in treeRowData) {\n data.treeNode.loading = treeRowData.loading;\n }\n if ('noLazyChildren' in treeRowData) {\n data.treeNode.noLazyChildren = treeRowData.noLazyChildren;\n }\n }\n }\n return h(\n 'td',\n {\n style: _this3.getCellStyle($index, cellIndex, row, column),\n 'class': _this3.getCellClass($index, cellIndex, row, column),\n attrs: { rowspan: rowspan,\n colspan: colspan\n },\n on: {\n 'mouseenter': function mouseenter($event) {\n return _this3.handleCellMouseEnter($event, row);\n },\n 'mouseleave': _this3.handleCellMouseLeave\n }\n },\n [column.renderCell.call(_this3._renderProxy, _this3.$createElement, data, columnsHidden[cellIndex])]\n );\n })]\n );\n },\n wrappedRowRender: function wrappedRowRender(row, $index) {\n var _this4 = this;\n\n var h = this.$createElement;\n\n var store = this.store;\n var isRowExpanded = store.isRowExpanded,\n assertRowKey = store.assertRowKey;\n var _store$states = store.states,\n treeData = _store$states.treeData,\n lazyTreeNodeMap = _store$states.lazyTreeNodeMap,\n childrenColumnName = _store$states.childrenColumnName,\n rowKey = _store$states.rowKey;\n\n if (this.hasExpandColumn && isRowExpanded(row)) {\n var renderExpanded = this.table.renderExpanded;\n var tr = this.rowRender(row, $index);\n if (!renderExpanded) {\n console.error('[Element Error]renderExpanded is required.');\n return tr;\n }\n // 使用二维数组,避免修改 $index\n return [[tr, h(\n 'tr',\n { key: 'expanded-row__' + tr.key },\n [h(\n 'td',\n {\n attrs: { colspan: this.columnsCount },\n 'class': 'el-table__expanded-cell' },\n [renderExpanded(this.$createElement, { row: row, $index: $index, store: this.store })]\n )]\n )]];\n } else if (Object.keys(treeData).length) {\n assertRowKey();\n // TreeTable 时,rowKey 必须由用户设定,不使用 getKeyOfRow 计算\n // 在调用 rowRender 函数时,仍然会计算 rowKey,不太好的操作\n var key = getRowIdentity(row, rowKey);\n var cur = treeData[key];\n var treeRowData = null;\n if (cur) {\n treeRowData = {\n expanded: cur.expanded,\n level: cur.level,\n display: true\n };\n if (typeof cur.lazy === 'boolean') {\n if (typeof cur.loaded === 'boolean' && cur.loaded) {\n treeRowData.noLazyChildren = !(cur.children && cur.children.length);\n }\n treeRowData.loading = cur.loading;\n }\n }\n var tmp = [this.rowRender(row, $index, treeRowData)];\n // 渲染嵌套数据\n if (cur) {\n // currentRow 记录的是 index,所以还需主动增加 TreeTable 的 index\n var i = 0;\n var traverse = function traverse(children, parent) {\n if (!(children && children.length && parent)) return;\n children.forEach(function (node) {\n // 父节点的 display 状态影响子节点的显示状态\n var innerTreeRowData = {\n display: parent.display && parent.expanded,\n level: parent.level + 1\n };\n var childKey = getRowIdentity(node, rowKey);\n if (childKey === undefined || childKey === null) {\n throw new Error('for nested data item, row-key is required.');\n }\n cur = table_body_extends({}, treeData[childKey]);\n // 对于当前节点,分成有无子节点两种情况。\n // 如果包含子节点的,设置 expanded 属性。\n // 对于它子节点的 display 属性由它本身的 expanded 与 display 共同决定。\n if (cur) {\n innerTreeRowData.expanded = cur.expanded;\n // 懒加载的某些节点,level 未知\n cur.level = cur.level || innerTreeRowData.level;\n cur.display = !!(cur.expanded && innerTreeRowData.display);\n if (typeof cur.lazy === 'boolean') {\n if (typeof cur.loaded === 'boolean' && cur.loaded) {\n innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length);\n }\n innerTreeRowData.loading = cur.loading;\n }\n }\n i++;\n tmp.push(_this4.rowRender(node, $index + i, innerTreeRowData));\n if (cur) {\n var _nodes = lazyTreeNodeMap[childKey] || node[childrenColumnName];\n traverse(_nodes, cur);\n }\n });\n };\n // 对于 root 节点,display 一定为 true\n cur.display = true;\n var nodes = lazyTreeNodeMap[key] || row[childrenColumnName];\n traverse(nodes, cur);\n }\n return tmp;\n } else {\n return this.rowRender(row, $index);\n }\n }\n }\n});\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/filter-panel.vue?vue&type=template&id=7f2c919f&\nvar filter_panelvue_type_template_id_7f2c919f_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"el-zoom-in-top\" } }, [\n _vm.multiple\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleOutsideClick,\n expression: \"handleOutsideClick\"\n },\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPopper,\n expression: \"showPopper\"\n }\n ],\n staticClass: \"el-table-filter\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-table-filter__content\" },\n [\n _c(\n \"el-scrollbar\",\n { attrs: { \"wrap-class\": \"el-table-filter__wrap\" } },\n [\n _c(\n \"el-checkbox-group\",\n {\n staticClass: \"el-table-filter__checkbox-group\",\n model: {\n value: _vm.filteredValue,\n callback: function($$v) {\n _vm.filteredValue = $$v\n },\n expression: \"filteredValue\"\n }\n },\n _vm._l(_vm.filters, function(filter) {\n return _c(\n \"el-checkbox\",\n { key: filter.value, attrs: { label: filter.value } },\n [_vm._v(_vm._s(filter.text))]\n )\n }),\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\"div\", { staticClass: \"el-table-filter__bottom\" }, [\n _c(\n \"button\",\n {\n class: { \"is-disabled\": _vm.filteredValue.length === 0 },\n attrs: { disabled: _vm.filteredValue.length === 0 },\n on: { click: _vm.handleConfirm }\n },\n [_vm._v(_vm._s(_vm.t(\"el.table.confirmFilter\")))]\n ),\n _c(\"button\", { on: { click: _vm.handleReset } }, [\n _vm._v(_vm._s(_vm.t(\"el.table.resetFilter\")))\n ])\n ])\n ]\n )\n : _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleOutsideClick,\n expression: \"handleOutsideClick\"\n },\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPopper,\n expression: \"showPopper\"\n }\n ],\n staticClass: \"el-table-filter\"\n },\n [\n _c(\n \"ul\",\n { staticClass: \"el-table-filter__list\" },\n [\n _c(\n \"li\",\n {\n staticClass: \"el-table-filter__list-item\",\n class: {\n \"is-active\":\n _vm.filterValue === undefined ||\n _vm.filterValue === null\n },\n on: {\n click: function($event) {\n _vm.handleSelect(null)\n }\n }\n },\n [_vm._v(_vm._s(_vm.t(\"el.table.clearFilter\")))]\n ),\n _vm._l(_vm.filters, function(filter) {\n return _c(\n \"li\",\n {\n key: filter.value,\n staticClass: \"el-table-filter__list-item\",\n class: { \"is-active\": _vm.isActive(filter) },\n attrs: { label: filter.value },\n on: {\n click: function($event) {\n _vm.handleSelect(filter.value)\n }\n }\n },\n [_vm._v(_vm._s(filter.text))]\n )\n })\n ],\n 2\n )\n ]\n )\n ])\n}\nvar filter_panelvue_type_template_id_7f2c919f_staticRenderFns = []\nfilter_panelvue_type_template_id_7f2c919f_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/table/src/filter-panel.vue?vue&type=template&id=7f2c919f&\n\n// CONCATENATED MODULE: ./packages/table/src/dropdown.js\n\nvar dropdowns = [];\n\n!external_vue_default.a.prototype.$isServer && document.addEventListener('click', function (event) {\n dropdowns.forEach(function (dropdown) {\n var target = event.target;\n if (!dropdown || !dropdown.$el) return;\n if (target === dropdown.$el || dropdown.$el.contains(target)) {\n return;\n }\n dropdown.handleOutsideClick && dropdown.handleOutsideClick(event);\n });\n});\n\n/* harmony default export */ var src_dropdown = ({\n open: function open(instance) {\n if (instance) {\n dropdowns.push(instance);\n }\n },\n close: function close(instance) {\n var index = dropdowns.indexOf(instance);\n if (index !== -1) {\n dropdowns.splice(instance, 1);\n }\n }\n});\n// EXTERNAL MODULE: external \"element-ui/lib/checkbox-group\"\nvar checkbox_group_ = __webpack_require__(32);\nvar checkbox_group_default = /*#__PURE__*/__webpack_require__.n(checkbox_group_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/filter-panel.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var filter_panelvue_type_script_lang_js_ = ({\n name: 'ElTableFilterPanel',\n\n mixins: [vue_popper_default.a, locale_default.a],\n\n directives: {\n Clickoutside: clickoutside_default.a\n },\n\n components: {\n ElCheckbox: checkbox_default.a,\n ElCheckboxGroup: checkbox_group_default.a,\n ElScrollbar: scrollbar_default.a\n },\n\n props: {\n placement: {\n type: String,\n default: 'bottom-end'\n }\n },\n\n methods: {\n isActive: function isActive(filter) {\n return filter.value === this.filterValue;\n },\n handleOutsideClick: function handleOutsideClick() {\n var _this = this;\n\n setTimeout(function () {\n _this.showPopper = false;\n }, 16);\n },\n handleConfirm: function handleConfirm() {\n this.confirmFilter(this.filteredValue);\n this.handleOutsideClick();\n },\n handleReset: function handleReset() {\n this.filteredValue = [];\n this.confirmFilter(this.filteredValue);\n this.handleOutsideClick();\n },\n handleSelect: function handleSelect(filterValue) {\n this.filterValue = filterValue;\n\n if (typeof filterValue !== 'undefined' && filterValue !== null) {\n this.confirmFilter(this.filteredValue);\n } else {\n this.confirmFilter([]);\n }\n\n this.handleOutsideClick();\n },\n confirmFilter: function confirmFilter(filteredValue) {\n this.table.store.commit('filterChange', {\n column: this.column,\n values: filteredValue\n });\n this.table.store.updateAllSelected();\n }\n },\n\n data: function data() {\n return {\n table: null,\n cell: null,\n column: null\n };\n },\n\n\n computed: {\n filters: function filters() {\n return this.column && this.column.filters;\n },\n\n\n filterValue: {\n get: function get() {\n return (this.column.filteredValue || [])[0];\n },\n set: function set(value) {\n if (this.filteredValue) {\n if (typeof value !== 'undefined' && value !== null) {\n this.filteredValue.splice(0, 1, value);\n } else {\n this.filteredValue.splice(0, 1);\n }\n }\n }\n },\n\n filteredValue: {\n get: function get() {\n if (this.column) {\n return this.column.filteredValue || [];\n }\n return [];\n },\n set: function set(value) {\n if (this.column) {\n this.column.filteredValue = value;\n }\n }\n },\n\n multiple: function multiple() {\n if (this.column) {\n return this.column.filterMultiple;\n }\n return true;\n }\n },\n\n mounted: function mounted() {\n var _this2 = this;\n\n this.popperElm = this.$el;\n this.referenceElm = this.cell;\n this.table.bodyWrapper.addEventListener('scroll', function () {\n _this2.updatePopper();\n });\n\n this.$watch('showPopper', function (value) {\n if (_this2.column) _this2.column.filterOpened = value;\n if (value) {\n src_dropdown.open(_this2);\n } else {\n src_dropdown.close(_this2);\n }\n });\n },\n\n watch: {\n showPopper: function showPopper(val) {\n if (val === true && parseInt(this.popperJS._popper.style.zIndex, 10) < popup_[\"PopupManager\"].zIndex) {\n this.popperJS._popper.style.zIndex = popup_[\"PopupManager\"].nextZIndex();\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/filter-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_filter_panelvue_type_script_lang_js_ = (filter_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/table/src/filter-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar filter_panel_component = normalizeComponent(\n src_filter_panelvue_type_script_lang_js_,\n filter_panelvue_type_template_id_7f2c919f_render,\n filter_panelvue_type_template_id_7f2c919f_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var filter_panel_api; }\nfilter_panel_component.options.__file = \"packages/table/src/filter-panel.vue\"\n/* harmony default export */ var filter_panel = (filter_panel_component.exports);\n// CONCATENATED MODULE: ./packages/table/src/table-header.js\nvar table_header_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\n\n\nvar getAllColumns = function getAllColumns(columns) {\n var result = [];\n columns.forEach(function (column) {\n if (column.children) {\n result.push(column);\n result.push.apply(result, getAllColumns(column.children));\n } else {\n result.push(column);\n }\n });\n return result;\n};\n\nvar convertToRows = function convertToRows(originColumns) {\n var maxLevel = 1;\n var traverse = function traverse(column, parent) {\n if (parent) {\n column.level = parent.level + 1;\n if (maxLevel < column.level) {\n maxLevel = column.level;\n }\n }\n if (column.children) {\n var colSpan = 0;\n column.children.forEach(function (subColumn) {\n traverse(subColumn, column);\n colSpan += subColumn.colSpan;\n });\n column.colSpan = colSpan;\n } else {\n column.colSpan = 1;\n }\n };\n\n originColumns.forEach(function (column) {\n column.level = 1;\n traverse(column);\n });\n\n var rows = [];\n for (var i = 0; i < maxLevel; i++) {\n rows.push([]);\n }\n\n var allColumns = getAllColumns(originColumns);\n\n allColumns.forEach(function (column) {\n if (!column.children) {\n column.rowSpan = maxLevel - column.level + 1;\n } else {\n column.rowSpan = 1;\n }\n rows[column.level - 1].push(column);\n });\n\n return rows;\n};\n\n/* harmony default export */ var table_header = ({\n name: 'ElTableHeader',\n\n mixins: [layout_observer],\n\n render: function render(h) {\n var _this = this;\n\n var originColumns = this.store.states.originColumns;\n var columnRows = convertToRows(originColumns, this.columns);\n // 是否拥有多级表头\n var isGroup = columnRows.length > 1;\n if (isGroup) this.$parent.isGroup = true;\n return h(\n 'table',\n {\n 'class': 'el-table__header',\n attrs: { cellspacing: '0',\n cellpadding: '0',\n border: '0' }\n },\n [h('colgroup', [this.columns.map(function (column) {\n return h('col', {\n attrs: { name: column.id },\n key: column.id });\n }), this.hasGutter ? h('col', {\n attrs: { name: 'gutter' }\n }) : '']), h(\n 'thead',\n { 'class': [{ 'is-group': isGroup, 'has-gutter': this.hasGutter }] },\n [this._l(columnRows, function (columns, rowIndex) {\n return h(\n 'tr',\n {\n style: _this.getHeaderRowStyle(rowIndex),\n 'class': _this.getHeaderRowClass(rowIndex)\n },\n [columns.map(function (column, cellIndex) {\n return h(\n 'th',\n {\n attrs: {\n colspan: column.colSpan,\n rowspan: column.rowSpan\n },\n on: {\n 'mousemove': function mousemove($event) {\n return _this.handleMouseMove($event, column);\n },\n 'mouseout': _this.handleMouseOut,\n 'mousedown': function mousedown($event) {\n return _this.handleMouseDown($event, column);\n },\n 'click': function click($event) {\n return _this.handleHeaderClick($event, column);\n },\n 'contextmenu': function contextmenu($event) {\n return _this.handleHeaderContextMenu($event, column);\n }\n },\n\n style: _this.getHeaderCellStyle(rowIndex, cellIndex, columns, column),\n 'class': _this.getHeaderCellClass(rowIndex, cellIndex, columns, column),\n key: column.id },\n [h(\n 'div',\n { 'class': ['cell', column.filteredValue && column.filteredValue.length > 0 ? 'highlight' : '', column.labelClassName] },\n [column.renderHeader ? column.renderHeader.call(_this._renderProxy, h, { column: column, $index: cellIndex, store: _this.store, _self: _this.$parent.$vnode.context }) : column.label, column.sortable ? h(\n 'span',\n {\n 'class': 'caret-wrapper',\n on: {\n 'click': function click($event) {\n return _this.handleSortClick($event, column);\n }\n }\n },\n [h('i', { 'class': 'sort-caret ascending',\n on: {\n 'click': function click($event) {\n return _this.handleSortClick($event, column, 'ascending');\n }\n }\n }), h('i', { 'class': 'sort-caret descending',\n on: {\n 'click': function click($event) {\n return _this.handleSortClick($event, column, 'descending');\n }\n }\n })]\n ) : '', column.filterable ? h(\n 'span',\n {\n 'class': 'el-table__column-filter-trigger',\n on: {\n 'click': function click($event) {\n return _this.handleFilterClick($event, column);\n }\n }\n },\n [h('i', { 'class': ['el-icon-arrow-down', column.filterOpened ? 'el-icon-arrow-up' : ''] })]\n ) : '']\n )]\n );\n }), _this.hasGutter ? h('th', { 'class': 'gutter' }) : '']\n );\n })]\n )]\n );\n },\n\n\n props: {\n fixed: String,\n store: {\n required: true\n },\n border: Boolean,\n defaultSort: {\n type: Object,\n default: function _default() {\n return {\n prop: '',\n order: ''\n };\n }\n }\n },\n\n components: {\n ElCheckbox: checkbox_default.a\n },\n\n computed: table_header_extends({\n table: function table() {\n return this.$parent;\n },\n hasGutter: function hasGutter() {\n return !this.fixed && this.tableLayout.gutterWidth;\n }\n }, mapStates({\n columns: 'columns',\n isAllSelected: 'isAllSelected',\n leftFixedLeafCount: 'fixedLeafColumnsLength',\n rightFixedLeafCount: 'rightFixedLeafColumnsLength',\n columnsCount: function columnsCount(states) {\n return states.columns.length;\n },\n leftFixedCount: function leftFixedCount(states) {\n return states.fixedColumns.length;\n },\n rightFixedCount: function rightFixedCount(states) {\n return states.rightFixedColumns.length;\n }\n })),\n\n created: function created() {\n this.filterPanels = {};\n },\n mounted: function mounted() {\n var _this2 = this;\n\n // nextTick 是有必要的 https://github.com/ElemeFE/element/pull/11311\n this.$nextTick(function () {\n var _defaultSort = _this2.defaultSort,\n prop = _defaultSort.prop,\n order = _defaultSort.order;\n\n var init = true;\n _this2.store.commit('sort', { prop: prop, order: order, init: init });\n });\n },\n beforeDestroy: function beforeDestroy() {\n var panels = this.filterPanels;\n for (var prop in panels) {\n if (panels.hasOwnProperty(prop) && panels[prop]) {\n panels[prop].$destroy(true);\n }\n }\n },\n\n\n methods: {\n isCellHidden: function isCellHidden(index, columns) {\n var start = 0;\n for (var i = 0; i < index; i++) {\n start += columns[i].colSpan;\n }\n var after = start + columns[index].colSpan - 1;\n if (this.fixed === true || this.fixed === 'left') {\n return after >= this.leftFixedLeafCount;\n } else if (this.fixed === 'right') {\n return start < this.columnsCount - this.rightFixedLeafCount;\n } else {\n return after < this.leftFixedLeafCount || start >= this.columnsCount - this.rightFixedLeafCount;\n }\n },\n getHeaderRowStyle: function getHeaderRowStyle(rowIndex) {\n var headerRowStyle = this.table.headerRowStyle;\n if (typeof headerRowStyle === 'function') {\n return headerRowStyle.call(null, { rowIndex: rowIndex });\n }\n return headerRowStyle;\n },\n getHeaderRowClass: function getHeaderRowClass(rowIndex) {\n var classes = [];\n\n var headerRowClassName = this.table.headerRowClassName;\n if (typeof headerRowClassName === 'string') {\n classes.push(headerRowClassName);\n } else if (typeof headerRowClassName === 'function') {\n classes.push(headerRowClassName.call(null, { rowIndex: rowIndex }));\n }\n\n return classes.join(' ');\n },\n getHeaderCellStyle: function getHeaderCellStyle(rowIndex, columnIndex, row, column) {\n var headerCellStyle = this.table.headerCellStyle;\n if (typeof headerCellStyle === 'function') {\n return headerCellStyle.call(null, {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n row: row,\n column: column\n });\n }\n return headerCellStyle;\n },\n getHeaderCellClass: function getHeaderCellClass(rowIndex, columnIndex, row, column) {\n var classes = [column.id, column.order, column.headerAlign, column.className, column.labelClassName];\n\n if (rowIndex === 0 && this.isCellHidden(columnIndex, row)) {\n classes.push('is-hidden');\n }\n\n if (!column.children) {\n classes.push('is-leaf');\n }\n\n if (column.sortable) {\n classes.push('is-sortable');\n }\n\n var headerCellClassName = this.table.headerCellClassName;\n if (typeof headerCellClassName === 'string') {\n classes.push(headerCellClassName);\n } else if (typeof headerCellClassName === 'function') {\n classes.push(headerCellClassName.call(null, {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n row: row,\n column: column\n }));\n }\n\n return classes.join(' ');\n },\n toggleAllSelection: function toggleAllSelection(event) {\n event.stopPropagation();\n this.store.commit('toggleAllSelection');\n },\n handleFilterClick: function handleFilterClick(event, column) {\n event.stopPropagation();\n var target = event.target;\n var cell = target.tagName === 'TH' ? target : target.parentNode;\n if (Object(dom_[\"hasClass\"])(cell, 'noclick')) return;\n cell = cell.querySelector('.el-table__column-filter-trigger') || cell;\n var table = this.$parent;\n\n var filterPanel = this.filterPanels[column.id];\n\n if (filterPanel && column.filterOpened) {\n filterPanel.showPopper = false;\n return;\n }\n\n if (!filterPanel) {\n filterPanel = new external_vue_default.a(filter_panel);\n this.filterPanels[column.id] = filterPanel;\n if (column.filterPlacement) {\n filterPanel.placement = column.filterPlacement;\n }\n filterPanel.table = table;\n filterPanel.cell = cell;\n filterPanel.column = column;\n !this.$isServer && filterPanel.$mount(document.createElement('div'));\n }\n\n setTimeout(function () {\n filterPanel.showPopper = true;\n }, 16);\n },\n handleHeaderClick: function handleHeaderClick(event, column) {\n if (!column.filters && column.sortable) {\n this.handleSortClick(event, column);\n } else if (column.filterable && !column.sortable) {\n this.handleFilterClick(event, column);\n }\n\n this.$parent.$emit('header-click', column, event);\n },\n handleHeaderContextMenu: function handleHeaderContextMenu(event, column) {\n this.$parent.$emit('header-contextmenu', column, event);\n },\n handleMouseDown: function handleMouseDown(event, column) {\n var _this3 = this;\n\n if (this.$isServer) return;\n if (column.children && column.children.length > 0) return;\n /* istanbul ignore if */\n if (this.draggingColumn && this.border) {\n this.dragging = true;\n\n this.$parent.resizeProxyVisible = true;\n\n var table = this.$parent;\n var tableEl = table.$el;\n var tableLeft = tableEl.getBoundingClientRect().left;\n var columnEl = this.$el.querySelector('th.' + column.id);\n var columnRect = columnEl.getBoundingClientRect();\n var minLeft = columnRect.left - tableLeft + 30;\n\n Object(dom_[\"addClass\"])(columnEl, 'noclick');\n\n this.dragState = {\n startMouseLeft: event.clientX,\n startLeft: columnRect.right - tableLeft,\n startColumnLeft: columnRect.left - tableLeft,\n tableLeft: tableLeft\n };\n\n var resizeProxy = table.$refs.resizeProxy;\n resizeProxy.style.left = this.dragState.startLeft + 'px';\n\n document.onselectstart = function () {\n return false;\n };\n document.ondragstart = function () {\n return false;\n };\n\n var handleMouseMove = function handleMouseMove(event) {\n var deltaLeft = event.clientX - _this3.dragState.startMouseLeft;\n var proxyLeft = _this3.dragState.startLeft + deltaLeft;\n\n resizeProxy.style.left = Math.max(minLeft, proxyLeft) + 'px';\n };\n\n var handleMouseUp = function handleMouseUp() {\n if (_this3.dragging) {\n var _dragState = _this3.dragState,\n startColumnLeft = _dragState.startColumnLeft,\n startLeft = _dragState.startLeft;\n\n var finalLeft = parseInt(resizeProxy.style.left, 10);\n var columnWidth = finalLeft - startColumnLeft;\n column.width = column.realWidth = columnWidth;\n table.$emit('header-dragend', column.width, startLeft - startColumnLeft, column, event);\n\n _this3.store.scheduleLayout();\n\n document.body.style.cursor = '';\n _this3.dragging = false;\n _this3.draggingColumn = null;\n _this3.dragState = {};\n\n table.resizeProxyVisible = false;\n }\n\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.onselectstart = null;\n document.ondragstart = null;\n\n setTimeout(function () {\n Object(dom_[\"removeClass\"])(columnEl, 'noclick');\n }, 0);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n }\n },\n handleMouseMove: function handleMouseMove(event, column) {\n if (column.children && column.children.length > 0) return;\n var target = event.target;\n while (target && target.tagName !== 'TH') {\n target = target.parentNode;\n }\n\n if (!column || !column.resizable) return;\n\n if (!this.dragging && this.border) {\n var rect = target.getBoundingClientRect();\n\n var bodyStyle = document.body.style;\n if (rect.width > 12 && rect.right - event.pageX < 8) {\n bodyStyle.cursor = 'col-resize';\n if (Object(dom_[\"hasClass\"])(target, 'is-sortable')) {\n target.style.cursor = 'col-resize';\n }\n this.draggingColumn = column;\n } else if (!this.dragging) {\n bodyStyle.cursor = '';\n if (Object(dom_[\"hasClass\"])(target, 'is-sortable')) {\n target.style.cursor = 'pointer';\n }\n this.draggingColumn = null;\n }\n }\n },\n handleMouseOut: function handleMouseOut() {\n if (this.$isServer) return;\n document.body.style.cursor = '';\n },\n toggleOrder: function toggleOrder(_ref) {\n var order = _ref.order,\n sortOrders = _ref.sortOrders;\n\n if (order === '') return sortOrders[0];\n var index = sortOrders.indexOf(order || null);\n return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1];\n },\n handleSortClick: function handleSortClick(event, column, givenOrder) {\n event.stopPropagation();\n var order = column.order === givenOrder ? null : givenOrder || this.toggleOrder(column);\n\n var target = event.target;\n while (target && target.tagName !== 'TH') {\n target = target.parentNode;\n }\n\n if (target && target.tagName === 'TH') {\n if (Object(dom_[\"hasClass\"])(target, 'noclick')) {\n Object(dom_[\"removeClass\"])(target, 'noclick');\n return;\n }\n }\n\n if (!column.sortable) return;\n\n var states = this.store.states;\n var sortProp = states.sortProp;\n var sortOrder = void 0;\n var sortingColumn = states.sortingColumn;\n\n if (sortingColumn !== column || sortingColumn === column && sortingColumn.order === null) {\n if (sortingColumn) {\n sortingColumn.order = null;\n }\n states.sortingColumn = column;\n sortProp = column.property;\n }\n\n if (!order) {\n sortOrder = column.order = null;\n } else {\n sortOrder = column.order = order;\n }\n\n states.sortProp = sortProp;\n states.sortOrder = sortOrder;\n\n this.store.commit('changeSortCondition');\n }\n },\n\n data: function data() {\n return {\n draggingColumn: null,\n dragging: false,\n dragState: {}\n };\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/table-footer.js\nvar table_footer_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n/* harmony default export */ var table_footer = ({\n name: 'ElTableFooter',\n\n mixins: [layout_observer],\n\n render: function render(h) {\n var _this = this;\n\n var sums = [];\n if (this.summaryMethod) {\n sums = this.summaryMethod({ columns: this.columns, data: this.store.states.data });\n } else {\n this.columns.forEach(function (column, index) {\n if (index === 0) {\n sums[index] = _this.sumText;\n return;\n }\n var values = _this.store.states.data.map(function (item) {\n return Number(item[column.property]);\n });\n var precisions = [];\n var notNumber = true;\n values.forEach(function (value) {\n if (!isNaN(value)) {\n notNumber = false;\n var decimal = ('' + value).split('.')[1];\n precisions.push(decimal ? decimal.length : 0);\n }\n });\n var precision = Math.max.apply(null, precisions);\n if (!notNumber) {\n sums[index] = values.reduce(function (prev, curr) {\n var value = Number(curr);\n if (!isNaN(value)) {\n return parseFloat((prev + curr).toFixed(Math.min(precision, 20)));\n } else {\n return prev;\n }\n }, 0);\n } else {\n sums[index] = '';\n }\n });\n }\n\n return h(\n 'table',\n {\n 'class': 'el-table__footer',\n attrs: { cellspacing: '0',\n cellpadding: '0',\n border: '0' }\n },\n [h('colgroup', [this.columns.map(function (column) {\n return h('col', {\n attrs: { name: column.id },\n key: column.id });\n }), this.hasGutter ? h('col', {\n attrs: { name: 'gutter' }\n }) : '']), h(\n 'tbody',\n { 'class': [{ 'has-gutter': this.hasGutter }] },\n [h('tr', [this.columns.map(function (column, cellIndex) {\n return h(\n 'td',\n {\n key: cellIndex,\n attrs: { colspan: column.colSpan,\n rowspan: column.rowSpan\n },\n 'class': _this.getRowClasses(column, cellIndex) },\n [h(\n 'div',\n { 'class': ['cell', column.labelClassName] },\n [sums[cellIndex]]\n )]\n );\n }), this.hasGutter ? h('th', { 'class': 'gutter' }) : ''])]\n )]\n );\n },\n\n\n props: {\n fixed: String,\n store: {\n required: true\n },\n summaryMethod: Function,\n sumText: String,\n border: Boolean,\n defaultSort: {\n type: Object,\n default: function _default() {\n return {\n prop: '',\n order: ''\n };\n }\n }\n },\n\n computed: table_footer_extends({\n table: function table() {\n return this.$parent;\n },\n hasGutter: function hasGutter() {\n return !this.fixed && this.tableLayout.gutterWidth;\n }\n }, mapStates({\n columns: 'columns',\n isAllSelected: 'isAllSelected',\n leftFixedLeafCount: 'fixedLeafColumnsLength',\n rightFixedLeafCount: 'rightFixedLeafColumnsLength',\n columnsCount: function columnsCount(states) {\n return states.columns.length;\n },\n leftFixedCount: function leftFixedCount(states) {\n return states.fixedColumns.length;\n },\n rightFixedCount: function rightFixedCount(states) {\n return states.rightFixedColumns.length;\n }\n })),\n\n methods: {\n isCellHidden: function isCellHidden(index, columns, column) {\n if (this.fixed === true || this.fixed === 'left') {\n return index >= this.leftFixedLeafCount;\n } else if (this.fixed === 'right') {\n var before = 0;\n for (var i = 0; i < index; i++) {\n before += columns[i].colSpan;\n }\n return before < this.columnsCount - this.rightFixedLeafCount;\n } else if (!this.fixed && column.fixed) {\n // hide cell when footer instance is not fixed and column is fixed\n return true;\n } else {\n return index < this.leftFixedCount || index >= this.columnsCount - this.rightFixedCount;\n }\n },\n getRowClasses: function getRowClasses(column, cellIndex) {\n var classes = [column.id, column.align, column.labelClassName];\n if (column.className) {\n classes.push(column.className);\n }\n if (this.isCellHidden(cellIndex, this.columns, column)) {\n classes.push('is-hidden');\n }\n if (!column.children) {\n classes.push('is-leaf');\n }\n return classes;\n }\n }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/table.vue?vue&type=script&lang=js&\nvar tablevue_type_script_lang_js_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar tableIdSeed = 1;\n\n/* harmony default export */ var tablevue_type_script_lang_js_ = ({\n name: 'ElTable',\n\n mixins: [locale_default.a, migrating_default.a],\n\n directives: {\n Mousewheel: directives_mousewheel\n },\n\n props: {\n data: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n\n size: String,\n\n width: [String, Number],\n\n height: [String, Number],\n\n maxHeight: [String, Number],\n\n fit: {\n type: Boolean,\n default: true\n },\n\n stripe: Boolean,\n\n border: Boolean,\n\n rowKey: [String, Function],\n\n context: {},\n\n showHeader: {\n type: Boolean,\n default: true\n },\n\n showSummary: Boolean,\n\n sumText: String,\n\n summaryMethod: Function,\n\n rowClassName: [String, Function],\n\n rowStyle: [Object, Function],\n\n cellClassName: [String, Function],\n\n cellStyle: [Object, Function],\n\n headerRowClassName: [String, Function],\n\n headerRowStyle: [Object, Function],\n\n headerCellClassName: [String, Function],\n\n headerCellStyle: [Object, Function],\n\n highlightCurrentRow: Boolean,\n\n currentRowKey: [String, Number],\n\n emptyText: String,\n\n expandRowKeys: Array,\n\n defaultExpandAll: Boolean,\n\n defaultSort: Object,\n\n tooltipEffect: String,\n\n spanMethod: Function,\n\n selectOnIndeterminate: {\n type: Boolean,\n default: true\n },\n\n indent: {\n type: Number,\n default: 16\n },\n\n treeProps: {\n type: Object,\n default: function _default() {\n return {\n hasChildren: 'hasChildren',\n children: 'children'\n };\n }\n },\n\n lazy: Boolean,\n\n load: Function\n },\n\n components: {\n TableHeader: table_header,\n TableFooter: table_footer,\n TableBody: table_body,\n ElCheckbox: checkbox_default.a\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n events: {\n expand: 'expand is renamed to expand-change'\n }\n };\n },\n setCurrentRow: function setCurrentRow(row) {\n this.store.commit('setCurrentRow', row);\n },\n toggleRowSelection: function toggleRowSelection(row, selected) {\n this.store.toggleRowSelection(row, selected, false);\n this.store.updateAllSelected();\n },\n toggleRowExpansion: function toggleRowExpansion(row, expanded) {\n this.store.toggleRowExpansionAdapter(row, expanded);\n },\n clearSelection: function clearSelection() {\n this.store.clearSelection();\n },\n clearFilter: function clearFilter(columnKeys) {\n this.store.clearFilter(columnKeys);\n },\n clearSort: function clearSort() {\n this.store.clearSort();\n },\n handleMouseLeave: function handleMouseLeave() {\n this.store.commit('setHoverRow', null);\n if (this.hoverState) this.hoverState = null;\n },\n updateScrollY: function updateScrollY() {\n var changed = this.layout.updateScrollY();\n if (changed) {\n this.layout.notifyObservers('scrollable');\n this.layout.updateColumnsWidth();\n }\n },\n handleFixedMousewheel: function handleFixedMousewheel(event, data) {\n var bodyWrapper = this.bodyWrapper;\n if (Math.abs(data.spinY) > 0) {\n var currentScrollTop = bodyWrapper.scrollTop;\n if (data.pixelY < 0 && currentScrollTop !== 0) {\n event.preventDefault();\n }\n if (data.pixelY > 0 && bodyWrapper.scrollHeight - bodyWrapper.clientHeight > currentScrollTop) {\n event.preventDefault();\n }\n bodyWrapper.scrollTop += Math.ceil(data.pixelY / 5);\n } else {\n bodyWrapper.scrollLeft += Math.ceil(data.pixelX / 5);\n }\n },\n handleHeaderFooterMousewheel: function handleHeaderFooterMousewheel(event, data) {\n var pixelX = data.pixelX,\n pixelY = data.pixelY;\n\n if (Math.abs(pixelX) >= Math.abs(pixelY)) {\n this.bodyWrapper.scrollLeft += data.pixelX / 5;\n }\n },\n\n\n // TODO 使用 CSS transform\n syncPostion: Object(external_throttle_debounce_[\"throttle\"])(20, function () {\n var _bodyWrapper = this.bodyWrapper,\n scrollLeft = _bodyWrapper.scrollLeft,\n scrollTop = _bodyWrapper.scrollTop,\n offsetWidth = _bodyWrapper.offsetWidth,\n scrollWidth = _bodyWrapper.scrollWidth;\n var _$refs = this.$refs,\n headerWrapper = _$refs.headerWrapper,\n footerWrapper = _$refs.footerWrapper,\n fixedBodyWrapper = _$refs.fixedBodyWrapper,\n rightFixedBodyWrapper = _$refs.rightFixedBodyWrapper;\n\n if (headerWrapper) headerWrapper.scrollLeft = scrollLeft;\n if (footerWrapper) footerWrapper.scrollLeft = scrollLeft;\n if (fixedBodyWrapper) fixedBodyWrapper.scrollTop = scrollTop;\n if (rightFixedBodyWrapper) rightFixedBodyWrapper.scrollTop = scrollTop;\n var maxScrollLeftPosition = scrollWidth - offsetWidth - 1;\n if (scrollLeft >= maxScrollLeftPosition) {\n this.scrollPosition = 'right';\n } else if (scrollLeft === 0) {\n this.scrollPosition = 'left';\n } else {\n this.scrollPosition = 'middle';\n }\n }),\n\n bindEvents: function bindEvents() {\n this.bodyWrapper.addEventListener('scroll', this.syncPostion, { passive: true });\n if (this.fit) {\n Object(resize_event_[\"addResizeListener\"])(this.$el, this.resizeListener);\n }\n },\n unbindEvents: function unbindEvents() {\n this.bodyWrapper.removeEventListener('scroll', this.syncPostion, { passive: true });\n if (this.fit) {\n Object(resize_event_[\"removeResizeListener\"])(this.$el, this.resizeListener);\n }\n },\n resizeListener: function resizeListener() {\n if (!this.$ready) return;\n var shouldUpdateLayout = false;\n var el = this.$el;\n var _resizeState = this.resizeState,\n oldWidth = _resizeState.width,\n oldHeight = _resizeState.height;\n\n\n var width = el.offsetWidth;\n if (oldWidth !== width) {\n shouldUpdateLayout = true;\n }\n\n var height = el.offsetHeight;\n if ((this.height || this.shouldUpdateHeight) && oldHeight !== height) {\n shouldUpdateLayout = true;\n }\n\n if (shouldUpdateLayout) {\n this.resizeState.width = width;\n this.resizeState.height = height;\n this.doLayout();\n }\n },\n doLayout: function doLayout() {\n if (this.shouldUpdateHeight) {\n this.layout.updateElsHeight();\n }\n this.layout.updateColumnsWidth();\n },\n sort: function sort(prop, order) {\n this.store.commit('sort', { prop: prop, order: order });\n },\n toggleAllSelection: function toggleAllSelection() {\n this.store.commit('toggleAllSelection');\n }\n },\n\n computed: tablevue_type_script_lang_js_extends({\n tableSize: function tableSize() {\n return this.size || (this.$ELEMENT || {}).size;\n },\n bodyWrapper: function bodyWrapper() {\n return this.$refs.bodyWrapper;\n },\n shouldUpdateHeight: function shouldUpdateHeight() {\n return this.height || this.maxHeight || this.fixedColumns.length > 0 || this.rightFixedColumns.length > 0;\n },\n bodyWidth: function bodyWidth() {\n var _layout = this.layout,\n bodyWidth = _layout.bodyWidth,\n scrollY = _layout.scrollY,\n gutterWidth = _layout.gutterWidth;\n\n return bodyWidth ? bodyWidth - (scrollY ? gutterWidth : 0) + 'px' : '';\n },\n bodyHeight: function bodyHeight() {\n var _layout2 = this.layout,\n _layout2$headerHeight = _layout2.headerHeight,\n headerHeight = _layout2$headerHeight === undefined ? 0 : _layout2$headerHeight,\n bodyHeight = _layout2.bodyHeight,\n _layout2$footerHeight = _layout2.footerHeight,\n footerHeight = _layout2$footerHeight === undefined ? 0 : _layout2$footerHeight;\n\n if (this.height) {\n return {\n height: bodyHeight ? bodyHeight + 'px' : ''\n };\n } else if (this.maxHeight) {\n var maxHeight = parseHeight(this.maxHeight);\n if (typeof maxHeight === 'number') {\n return {\n 'max-height': maxHeight - footerHeight - (this.showHeader ? headerHeight : 0) + 'px'\n };\n }\n }\n return {};\n },\n fixedBodyHeight: function fixedBodyHeight() {\n if (this.height) {\n return {\n height: this.layout.fixedBodyHeight ? this.layout.fixedBodyHeight + 'px' : ''\n };\n } else if (this.maxHeight) {\n var maxHeight = parseHeight(this.maxHeight);\n if (typeof maxHeight === 'number') {\n maxHeight = this.layout.scrollX ? maxHeight - this.layout.gutterWidth : maxHeight;\n if (this.showHeader) {\n maxHeight -= this.layout.headerHeight;\n }\n maxHeight -= this.layout.footerHeight;\n return {\n 'max-height': maxHeight + 'px'\n };\n }\n }\n return {};\n },\n fixedHeight: function fixedHeight() {\n if (this.maxHeight) {\n if (this.showSummary) {\n return {\n bottom: 0\n };\n }\n return {\n bottom: this.layout.scrollX && this.data.length ? this.layout.gutterWidth + 'px' : ''\n };\n } else {\n if (this.showSummary) {\n return {\n height: this.layout.tableHeight ? this.layout.tableHeight + 'px' : ''\n };\n }\n return {\n height: this.layout.viewportHeight ? this.layout.viewportHeight + 'px' : ''\n };\n }\n },\n emptyBlockStyle: function emptyBlockStyle() {\n if (this.data && this.data.length) return null;\n var height = '100%';\n if (this.layout.appendHeight) {\n height = 'calc(100% - ' + this.layout.appendHeight + 'px)';\n }\n return {\n width: this.bodyWidth,\n height: height\n };\n }\n }, mapStates({\n selection: 'selection',\n columns: 'columns',\n tableData: 'data',\n fixedColumns: 'fixedColumns',\n rightFixedColumns: 'rightFixedColumns'\n })),\n\n watch: {\n height: {\n immediate: true,\n handler: function handler(value) {\n this.layout.setHeight(value);\n }\n },\n\n maxHeight: {\n immediate: true,\n handler: function handler(value) {\n this.layout.setMaxHeight(value);\n }\n },\n\n currentRowKey: {\n immediate: true,\n handler: function handler(value) {\n if (!this.rowKey) return;\n this.store.setCurrentRowKey(value);\n }\n },\n\n data: {\n immediate: true,\n handler: function handler(value) {\n this.store.commit('setData', value);\n }\n },\n\n expandRowKeys: {\n immediate: true,\n handler: function handler(newVal) {\n if (newVal) {\n this.store.setExpandRowKeysAdapter(newVal);\n }\n }\n }\n },\n\n created: function created() {\n var _this = this;\n\n this.tableId = 'el-table_' + tableIdSeed++;\n this.debouncedUpdateLayout = Object(external_throttle_debounce_[\"debounce\"])(50, function () {\n return _this.doLayout();\n });\n },\n mounted: function mounted() {\n var _this2 = this;\n\n this.bindEvents();\n this.store.updateColumns();\n this.doLayout();\n\n this.resizeState = {\n width: this.$el.offsetWidth,\n height: this.$el.offsetHeight\n };\n\n // init filters\n this.store.states.columns.forEach(function (column) {\n if (column.filteredValue && column.filteredValue.length) {\n _this2.store.commit('filterChange', {\n column: column,\n values: column.filteredValue,\n silent: true\n });\n }\n });\n\n this.$ready = true;\n },\n destroyed: function destroyed() {\n this.unbindEvents();\n },\n data: function data() {\n var _treeProps = this.treeProps,\n _treeProps$hasChildre = _treeProps.hasChildren,\n hasChildren = _treeProps$hasChildre === undefined ? 'hasChildren' : _treeProps$hasChildre,\n _treeProps$children = _treeProps.children,\n children = _treeProps$children === undefined ? 'children' : _treeProps$children;\n\n this.store = createStore(this, {\n rowKey: this.rowKey,\n defaultExpandAll: this.defaultExpandAll,\n selectOnIndeterminate: this.selectOnIndeterminate,\n // TreeTable 的相关配置\n indent: this.indent,\n lazy: this.lazy,\n lazyColumnIdentifier: hasChildren,\n childrenColumnName: children\n });\n var layout = new table_layout({\n store: this.store,\n table: this,\n fit: this.fit,\n showHeader: this.showHeader\n });\n return {\n layout: layout,\n isHidden: false,\n renderExpanded: null,\n resizeProxyVisible: false,\n resizeState: {\n width: null,\n height: null\n },\n // 是否拥有多级表头\n isGroup: false,\n scrollPosition: 'left'\n };\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/table.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tablevue_type_script_lang_js_ = (tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/table/src/table.vue\n\n\n\n\n\n/* normalize component */\n\nvar table_component = normalizeComponent(\n src_tablevue_type_script_lang_js_,\n tablevue_type_template_id_493fe34e_render,\n tablevue_type_template_id_493fe34e_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var table_api; }\ntable_component.options.__file = \"packages/table/src/table.vue\"\n/* harmony default export */ var src_table = (table_component.exports);\n// CONCATENATED MODULE: ./packages/table/index.js\n\n\n/* istanbul ignore next */\nsrc_table.install = function (Vue) {\n Vue.component(src_table.name, src_table);\n};\n\n/* harmony default export */ var packages_table = (src_table);\n// CONCATENATED MODULE: ./packages/table/src/config.js\n\n\nvar cellStarts = {\n default: {\n order: ''\n },\n selection: {\n width: 48,\n minWidth: 48,\n realWidth: 48,\n order: '',\n className: 'el-table-column--selection'\n },\n expand: {\n width: 48,\n minWidth: 48,\n realWidth: 48,\n order: ''\n },\n index: {\n width: 48,\n minWidth: 48,\n realWidth: 48,\n order: ''\n }\n};\n\n// 这些选项不应该被覆盖\nvar cellForced = {\n selection: {\n renderHeader: function renderHeader(h, _ref) {\n var store = _ref.store;\n\n return h('el-checkbox', {\n attrs: {\n disabled: store.states.data && store.states.data.length === 0,\n indeterminate: store.states.selection.length > 0 && !this.isAllSelected,\n\n value: this.isAllSelected },\n nativeOn: {\n 'click': this.toggleAllSelection\n }\n });\n },\n renderCell: function renderCell(h, _ref2) {\n var row = _ref2.row,\n column = _ref2.column,\n store = _ref2.store,\n $index = _ref2.$index;\n\n return h('el-checkbox', {\n nativeOn: {\n 'click': function click(event) {\n return event.stopPropagation();\n }\n },\n attrs: {\n value: store.isSelected(row),\n disabled: column.selectable ? !column.selectable.call(null, row, $index) : false\n },\n on: {\n 'input': function input() {\n store.commit('rowSelectedChanged', row);\n }\n }\n });\n },\n sortable: false,\n resizable: false\n },\n index: {\n renderHeader: function renderHeader(h, _ref3) {\n var column = _ref3.column;\n\n return column.label || '#';\n },\n renderCell: function renderCell(h, _ref4) {\n var $index = _ref4.$index,\n column = _ref4.column;\n\n var i = $index + 1;\n var index = column.index;\n\n if (typeof index === 'number') {\n i = $index + index;\n } else if (typeof index === 'function') {\n i = index($index);\n }\n\n return h('div', [i]);\n },\n sortable: false\n },\n expand: {\n renderHeader: function renderHeader(h, _ref5) {\n var column = _ref5.column;\n\n return column.label || '';\n },\n renderCell: function renderCell(h, _ref6) {\n var row = _ref6.row,\n store = _ref6.store;\n\n var classes = ['el-table__expand-icon'];\n if (store.states.expandRows.indexOf(row) > -1) {\n classes.push('el-table__expand-icon--expanded');\n }\n var callback = function callback(e) {\n e.stopPropagation();\n store.toggleRowExpansion(row);\n };\n return h(\n 'div',\n { 'class': classes,\n on: {\n 'click': callback\n }\n },\n [h('i', { 'class': 'el-icon el-icon-arrow-right' })]\n );\n },\n sortable: false,\n resizable: false,\n className: 'el-table__expand-column'\n }\n};\n\nfunction defaultRenderCell(h, _ref7) {\n var row = _ref7.row,\n column = _ref7.column,\n $index = _ref7.$index;\n\n var property = column.property;\n var value = property && Object(util_[\"getPropByPath\"])(row, property).v;\n if (column && column.formatter) {\n return column.formatter(row, column, value, $index);\n }\n return value;\n}\n\nfunction treeCellPrefix(h, _ref8) {\n var row = _ref8.row,\n treeNode = _ref8.treeNode,\n store = _ref8.store;\n\n if (!treeNode) return null;\n var ele = [];\n var callback = function callback(e) {\n e.stopPropagation();\n store.loadOrToggle(row);\n };\n if (treeNode.indent) {\n ele.push(h('span', { 'class': 'el-table__indent', style: { 'padding-left': treeNode.indent + 'px' } }));\n }\n if (typeof treeNode.expanded === 'boolean' && !treeNode.noLazyChildren) {\n var expandClasses = ['el-table__expand-icon', treeNode.expanded ? 'el-table__expand-icon--expanded' : ''];\n var iconClasses = ['el-icon-arrow-right'];\n if (treeNode.loading) {\n iconClasses = ['el-icon-loading'];\n }\n ele.push(h(\n 'div',\n { 'class': expandClasses,\n on: {\n 'click': callback\n }\n },\n [h('i', { 'class': iconClasses })]\n ));\n } else {\n ele.push(h('span', { 'class': 'el-table__placeholder' }));\n }\n return ele;\n}\n// CONCATENATED MODULE: ./packages/table/src/table-column.js\nvar table_column_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\nvar columnIdSeed = 1;\n\n/* harmony default export */ var table_column = ({\n name: 'ElTableColumn',\n\n props: {\n type: {\n type: String,\n default: 'default'\n },\n label: String,\n className: String,\n labelClassName: String,\n property: String,\n prop: String,\n width: {},\n minWidth: {},\n renderHeader: Function,\n sortable: {\n type: [Boolean, String],\n default: false\n },\n sortMethod: Function,\n sortBy: [String, Function, Array],\n resizable: {\n type: Boolean,\n default: true\n },\n columnKey: String,\n align: String,\n headerAlign: String,\n showTooltipWhenOverflow: Boolean,\n showOverflowTooltip: Boolean,\n fixed: [Boolean, String],\n formatter: Function,\n selectable: Function,\n reserveSelection: Boolean,\n filterMethod: Function,\n filteredValue: Array,\n filters: Array,\n filterPlacement: String,\n filterMultiple: {\n type: Boolean,\n default: true\n },\n index: [Number, Function],\n sortOrders: {\n type: Array,\n default: function _default() {\n return ['ascending', 'descending', null];\n },\n validator: function validator(val) {\n return val.every(function (order) {\n return ['ascending', 'descending', null].indexOf(order) > -1;\n });\n }\n }\n },\n\n data: function data() {\n return {\n isSubColumn: false,\n columns: []\n };\n },\n\n\n computed: {\n owner: function owner() {\n var parent = this.$parent;\n while (parent && !parent.tableId) {\n parent = parent.$parent;\n }\n return parent;\n },\n columnOrTableParent: function columnOrTableParent() {\n var parent = this.$parent;\n while (parent && !parent.tableId && !parent.columnId) {\n parent = parent.$parent;\n }\n return parent;\n },\n realWidth: function realWidth() {\n return parseWidth(this.width);\n },\n realMinWidth: function realMinWidth() {\n return parseMinWidth(this.minWidth);\n },\n realAlign: function realAlign() {\n return this.align ? 'is-' + this.align : null;\n },\n realHeaderAlign: function realHeaderAlign() {\n return this.headerAlign ? 'is-' + this.headerAlign : this.realAlign;\n }\n },\n\n methods: {\n getPropsData: function getPropsData() {\n var _this = this;\n\n for (var _len = arguments.length, props = Array(_len), _key = 0; _key < _len; _key++) {\n props[_key] = arguments[_key];\n }\n\n return props.reduce(function (prev, cur) {\n if (Array.isArray(cur)) {\n cur.forEach(function (key) {\n prev[key] = _this[key];\n });\n }\n return prev;\n }, {});\n },\n getColumnElIndex: function getColumnElIndex(children, child) {\n return [].indexOf.call(children, child);\n },\n setColumnWidth: function setColumnWidth(column) {\n if (this.realWidth) {\n column.width = this.realWidth;\n }\n if (this.realMinWidth) {\n column.minWidth = this.realMinWidth;\n }\n if (!column.minWidth) {\n column.minWidth = 80;\n }\n column.realWidth = column.width === undefined ? column.minWidth : column.width;\n return column;\n },\n setColumnForcedProps: function setColumnForcedProps(column) {\n // 对于特定类型的 column,某些属性不允许设置\n var type = column.type;\n var source = cellForced[type] || {};\n Object.keys(source).forEach(function (prop) {\n var value = source[prop];\n if (value !== undefined) {\n column[prop] = prop === 'className' ? column[prop] + ' ' + value : value;\n }\n });\n return column;\n },\n setColumnRenders: function setColumnRenders(column) {\n var _this2 = this;\n\n var h = this.$createElement;\n\n // renderHeader 属性不推荐使用。\n if (this.renderHeader) {\n console.warn('[Element Warn][TableColumn]Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header.');\n } else if (column.type !== 'selection') {\n column.renderHeader = function (h, scope) {\n var renderHeader = _this2.$scopedSlots.header;\n return renderHeader ? renderHeader(scope) : column.label;\n };\n }\n\n var originRenderCell = column.renderCell;\n // TODO: 这里的实现调整\n if (column.type === 'expand') {\n // 对于展开行,renderCell 不允许配置的。在上一步中已经设置过,这里需要简单封装一下。\n column.renderCell = function (h, data) {\n return h(\n 'div',\n { 'class': 'cell' },\n [originRenderCell(h, data)]\n );\n };\n this.owner.renderExpanded = function (h, data) {\n return _this2.$scopedSlots.default ? _this2.$scopedSlots.default(data) : _this2.$slots.default;\n };\n } else {\n originRenderCell = originRenderCell || defaultRenderCell;\n // 对 renderCell 进行包装\n column.renderCell = function (h, data) {\n var children = null;\n if (_this2.$scopedSlots.default) {\n children = _this2.$scopedSlots.default(data);\n } else {\n children = originRenderCell(h, data);\n }\n var prefix = treeCellPrefix(h, data);\n var props = {\n class: 'cell',\n style: {}\n };\n if (column.showOverflowTooltip) {\n props.class += ' el-tooltip';\n props.style = { width: (data.column.realWidth || data.column.width) - 1 + 'px' };\n }\n return h(\n 'div',\n props,\n [prefix, children]\n );\n };\n }\n return column;\n },\n registerNormalWatchers: function registerNormalWatchers() {\n var _this3 = this;\n\n var props = ['label', 'property', 'filters', 'filterMultiple', 'sortable', 'index', 'formatter', 'className', 'labelClassName', 'showOverflowTooltip'];\n // 一些属性具有别名\n var aliases = {\n prop: 'property',\n realAlign: 'align',\n realHeaderAlign: 'headerAlign',\n realWidth: 'width'\n };\n var allAliases = props.reduce(function (prev, cur) {\n prev[cur] = cur;\n return prev;\n }, aliases);\n\n Object.keys(allAliases).forEach(function (key) {\n var columnKey = aliases[key];\n\n _this3.$watch(key, function (newVal) {\n _this3.columnConfig[columnKey] = newVal;\n });\n });\n },\n registerComplexWatchers: function registerComplexWatchers() {\n var _this4 = this;\n\n var props = ['fixed'];\n var aliases = {\n realWidth: 'width',\n realMinWidth: 'minWidth'\n };\n var allAliases = props.reduce(function (prev, cur) {\n prev[cur] = cur;\n return prev;\n }, aliases);\n\n Object.keys(allAliases).forEach(function (key) {\n var columnKey = aliases[key];\n\n _this4.$watch(key, function (newVal) {\n _this4.columnConfig[columnKey] = newVal;\n var updateColumns = columnKey === 'fixed';\n _this4.owner.store.scheduleLayout(updateColumns);\n });\n });\n }\n },\n\n components: {\n ElCheckbox: checkbox_default.a\n },\n\n beforeCreate: function beforeCreate() {\n this.row = {};\n this.column = {};\n this.$index = 0;\n this.columnId = '';\n },\n created: function created() {\n var parent = this.columnOrTableParent;\n this.isSubColumn = this.owner !== parent;\n this.columnId = (parent.tableId || parent.columnId) + '_column_' + columnIdSeed++;\n\n var type = this.type || 'default';\n var sortable = this.sortable === '' ? true : this.sortable;\n var defaults = table_column_extends({}, cellStarts[type], {\n id: this.columnId,\n type: type,\n property: this.prop || this.property,\n align: this.realAlign,\n headerAlign: this.realHeaderAlign,\n showOverflowTooltip: this.showOverflowTooltip || this.showTooltipWhenOverflow,\n // filter 相关属性\n filterable: this.filters || this.filterMethod,\n filteredValue: [],\n filterPlacement: '',\n isColumnGroup: false,\n filterOpened: false,\n // sort 相关属性\n sortable: sortable,\n // index 列\n index: this.index\n });\n\n var basicProps = ['columnKey', 'label', 'className', 'labelClassName', 'type', 'renderHeader', 'formatter', 'fixed', 'resizable'];\n var sortProps = ['sortMethod', 'sortBy', 'sortOrders'];\n var selectProps = ['selectable', 'reserveSelection'];\n var filterProps = ['filterMethod', 'filters', 'filterMultiple', 'filterOpened', 'filteredValue', 'filterPlacement'];\n\n var column = this.getPropsData(basicProps, sortProps, selectProps, filterProps);\n column = mergeOptions(defaults, column);\n\n // 注意 compose 中函数执行的顺序是从右到左\n var chains = compose(this.setColumnRenders, this.setColumnWidth, this.setColumnForcedProps);\n column = chains(column);\n\n this.columnConfig = column;\n\n // 注册 watcher\n this.registerNormalWatchers();\n this.registerComplexWatchers();\n },\n mounted: function mounted() {\n var owner = this.owner;\n var parent = this.columnOrTableParent;\n var children = this.isSubColumn ? parent.$el.children : parent.$refs.hiddenColumns.children;\n var columnIndex = this.getColumnElIndex(children, this.$el);\n\n owner.store.commit('insertColumn', this.columnConfig, columnIndex, this.isSubColumn ? parent.columnConfig : null);\n },\n destroyed: function destroyed() {\n if (!this.$parent) return;\n var parent = this.$parent;\n this.owner.store.commit('removeColumn', this.columnConfig, this.isSubColumn ? parent.columnConfig : null);\n },\n render: function render(h) {\n // slots 也要渲染,需要计算合并表头\n return h('div', this.$slots.default);\n }\n});\n// CONCATENATED MODULE: ./packages/table-column/index.js\n\n\n/* istanbul ignore next */\ntable_column.install = function (Vue) {\n Vue.component(table_column.name, table_column);\n};\n\n/* harmony default export */ var packages_table_column = (table_column);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/picker.vue?vue&type=template&id=79ae069f&\nvar pickervue_type_template_id_79ae069f_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return !_vm.ranged\n ? _c(\n \"el-input\",\n _vm._b(\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleClose,\n expression: \"handleClose\"\n }\n ],\n ref: \"reference\",\n staticClass: \"el-date-editor\",\n class: \"el-date-editor--\" + _vm.type,\n attrs: {\n readonly:\n !_vm.editable ||\n _vm.readonly ||\n _vm.type === \"dates\" ||\n _vm.type === \"week\",\n disabled: _vm.pickerDisabled,\n size: _vm.pickerSize,\n name: _vm.name,\n placeholder: _vm.placeholder,\n value: _vm.displayValue,\n validateEvent: false\n },\n on: {\n focus: _vm.handleFocus,\n input: function(value) {\n return (_vm.userInput = value)\n },\n change: _vm.handleChange\n },\n nativeOn: {\n keydown: function($event) {\n return _vm.handleKeydown($event)\n },\n mouseenter: function($event) {\n return _vm.handleMouseEnter($event)\n },\n mouseleave: function($event) {\n _vm.showClose = false\n }\n }\n },\n \"el-input\",\n _vm.firstInputId,\n false\n ),\n [\n _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: _vm.triggerClass,\n attrs: { slot: \"prefix\" },\n on: { click: _vm.handleFocus },\n slot: \"prefix\"\n }),\n _vm.haveTrigger\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: [_vm.showClose ? \"\" + _vm.clearIcon : \"\"],\n attrs: { slot: \"suffix\" },\n on: { click: _vm.handleClickIcon },\n slot: \"suffix\"\n })\n : _vm._e()\n ]\n )\n : _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleClose,\n expression: \"handleClose\"\n }\n ],\n ref: \"reference\",\n staticClass: \"el-date-editor el-range-editor el-input__inner\",\n class: [\n \"el-date-editor--\" + _vm.type,\n _vm.pickerSize ? \"el-range-editor--\" + _vm.pickerSize : \"\",\n _vm.pickerDisabled ? \"is-disabled\" : \"\",\n _vm.pickerVisible ? \"is-active\" : \"\"\n ],\n on: {\n click: _vm.handleRangeClick,\n mouseenter: _vm.handleMouseEnter,\n mouseleave: function($event) {\n _vm.showClose = false\n },\n keydown: _vm.handleKeydown\n }\n },\n [\n _c(\"i\", {\n class: [\"el-input__icon\", \"el-range__icon\", _vm.triggerClass]\n }),\n _c(\n \"input\",\n _vm._b(\n {\n staticClass: \"el-range-input\",\n attrs: {\n autocomplete: \"off\",\n placeholder: _vm.startPlaceholder,\n disabled: _vm.pickerDisabled,\n readonly: !_vm.editable || _vm.readonly,\n name: _vm.name && _vm.name[0]\n },\n domProps: { value: _vm.displayValue && _vm.displayValue[0] },\n on: {\n input: _vm.handleStartInput,\n change: _vm.handleStartChange,\n focus: _vm.handleFocus\n }\n },\n \"input\",\n _vm.firstInputId,\n false\n )\n ),\n _vm._t(\"range-separator\", [\n _c(\"span\", { staticClass: \"el-range-separator\" }, [\n _vm._v(_vm._s(_vm.rangeSeparator))\n ])\n ]),\n _c(\n \"input\",\n _vm._b(\n {\n staticClass: \"el-range-input\",\n attrs: {\n autocomplete: \"off\",\n placeholder: _vm.endPlaceholder,\n disabled: _vm.pickerDisabled,\n readonly: !_vm.editable || _vm.readonly,\n name: _vm.name && _vm.name[1]\n },\n domProps: { value: _vm.displayValue && _vm.displayValue[1] },\n on: {\n input: _vm.handleEndInput,\n change: _vm.handleEndChange,\n focus: _vm.handleFocus\n }\n },\n \"input\",\n _vm.secondInputId,\n false\n )\n ),\n _vm.haveTrigger\n ? _c(\"i\", {\n staticClass: \"el-input__icon el-range__close-icon\",\n class: [_vm.showClose ? \"\" + _vm.clearIcon : \"\"],\n on: { click: _vm.handleClickIcon }\n })\n : _vm._e()\n ],\n 2\n )\n}\nvar pickervue_type_template_id_79ae069f_staticRenderFns = []\npickervue_type_template_id_79ae069f_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/picker.vue?vue&type=template&id=79ae069f&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/date-util\"\nvar date_util_ = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/picker.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\nvar NewPopper = {\n props: {\n appendToBody: vue_popper_default.a.props.appendToBody,\n offset: vue_popper_default.a.props.offset,\n boundariesPadding: vue_popper_default.a.props.boundariesPadding,\n arrowOffset: vue_popper_default.a.props.arrowOffset\n },\n methods: vue_popper_default.a.methods,\n data: function data() {\n return merge_default()({ visibleArrow: true }, vue_popper_default.a.data);\n },\n\n beforeDestroy: vue_popper_default.a.beforeDestroy\n};\n\nvar DEFAULT_FORMATS = {\n date: 'yyyy-MM-dd',\n month: 'yyyy-MM',\n datetime: 'yyyy-MM-dd HH:mm:ss',\n time: 'HH:mm:ss',\n week: 'yyyywWW',\n timerange: 'HH:mm:ss',\n daterange: 'yyyy-MM-dd',\n monthrange: 'yyyy-MM',\n datetimerange: 'yyyy-MM-dd HH:mm:ss',\n year: 'yyyy'\n};\nvar HAVE_TRIGGER_TYPES = ['date', 'datetime', 'time', 'time-select', 'week', 'month', 'year', 'daterange', 'monthrange', 'timerange', 'datetimerange', 'dates'];\nvar pickervue_type_script_lang_js_DATE_FORMATTER = function DATE_FORMATTER(value, format) {\n if (format === 'timestamp') return value.getTime();\n return Object(date_util_[\"formatDate\"])(value, format);\n};\nvar pickervue_type_script_lang_js_DATE_PARSER = function DATE_PARSER(text, format) {\n if (format === 'timestamp') return new Date(Number(text));\n return Object(date_util_[\"parseDate\"])(text, format);\n};\nvar RANGE_FORMATTER = function RANGE_FORMATTER(value, format) {\n if (Array.isArray(value) && value.length === 2) {\n var start = value[0];\n var end = value[1];\n\n if (start && end) {\n return [pickervue_type_script_lang_js_DATE_FORMATTER(start, format), pickervue_type_script_lang_js_DATE_FORMATTER(end, format)];\n }\n }\n return '';\n};\nvar RANGE_PARSER = function RANGE_PARSER(array, format, separator) {\n if (!Array.isArray(array)) {\n array = array.split(separator);\n }\n if (array.length === 2) {\n var range1 = array[0];\n var range2 = array[1];\n\n return [pickervue_type_script_lang_js_DATE_PARSER(range1, format), pickervue_type_script_lang_js_DATE_PARSER(range2, format)];\n }\n return [];\n};\nvar TYPE_VALUE_RESOLVER_MAP = {\n default: {\n formatter: function formatter(value) {\n if (!value) return '';\n return '' + value;\n },\n parser: function parser(text) {\n if (text === undefined || text === '') return null;\n return text;\n }\n },\n week: {\n formatter: function formatter(value, format) {\n var week = Object(date_util_[\"getWeekNumber\"])(value);\n var month = value.getMonth();\n var trueDate = new Date(value);\n if (week === 1 && month === 11) {\n trueDate.setHours(0, 0, 0, 0);\n trueDate.setDate(trueDate.getDate() + 3 - (trueDate.getDay() + 6) % 7);\n }\n var date = Object(date_util_[\"formatDate\"])(trueDate, format);\n\n date = /WW/.test(date) ? date.replace(/WW/, week < 10 ? '0' + week : week) : date.replace(/W/, week);\n return date;\n },\n parser: function parser(text, format) {\n // parse as if a normal date\n return TYPE_VALUE_RESOLVER_MAP.date.parser(text, format);\n }\n },\n date: {\n formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n parser: pickervue_type_script_lang_js_DATE_PARSER\n },\n datetime: {\n formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n parser: pickervue_type_script_lang_js_DATE_PARSER\n },\n daterange: {\n formatter: RANGE_FORMATTER,\n parser: RANGE_PARSER\n },\n monthrange: {\n formatter: RANGE_FORMATTER,\n parser: RANGE_PARSER\n },\n datetimerange: {\n formatter: RANGE_FORMATTER,\n parser: RANGE_PARSER\n },\n timerange: {\n formatter: RANGE_FORMATTER,\n parser: RANGE_PARSER\n },\n time: {\n formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n parser: pickervue_type_script_lang_js_DATE_PARSER\n },\n month: {\n formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n parser: pickervue_type_script_lang_js_DATE_PARSER\n },\n year: {\n formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n parser: pickervue_type_script_lang_js_DATE_PARSER\n },\n number: {\n formatter: function formatter(value) {\n if (!value) return '';\n return '' + value;\n },\n parser: function parser(text) {\n var result = Number(text);\n\n if (!isNaN(text)) {\n return result;\n } else {\n return null;\n }\n }\n },\n dates: {\n formatter: function formatter(value, format) {\n return value.map(function (date) {\n return pickervue_type_script_lang_js_DATE_FORMATTER(date, format);\n });\n },\n parser: function parser(value, format) {\n return (typeof value === 'string' ? value.split(', ') : value).map(function (date) {\n return date instanceof Date ? date : pickervue_type_script_lang_js_DATE_PARSER(date, format);\n });\n }\n }\n};\nvar PLACEMENT_MAP = {\n left: 'bottom-start',\n center: 'bottom',\n right: 'bottom-end'\n};\n\nvar parseAsFormatAndType = function parseAsFormatAndType(value, customFormat, type) {\n var rangeSeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '-';\n\n if (!value) return null;\n var parser = (TYPE_VALUE_RESOLVER_MAP[type] || TYPE_VALUE_RESOLVER_MAP['default']).parser;\n var format = customFormat || DEFAULT_FORMATS[type];\n return parser(value, format, rangeSeparator);\n};\n\nvar formatAsFormatAndType = function formatAsFormatAndType(value, customFormat, type) {\n if (!value) return null;\n var formatter = (TYPE_VALUE_RESOLVER_MAP[type] || TYPE_VALUE_RESOLVER_MAP['default']).formatter;\n var format = customFormat || DEFAULT_FORMATS[type];\n return formatter(value, format);\n};\n\n/*\n * Considers:\n * 1. Date object\n * 2. date string\n * 3. array of 1 or 2\n */\nvar valueEquals = function valueEquals(a, b) {\n // considers Date object and string\n var dateEquals = function dateEquals(a, b) {\n var aIsDate = a instanceof Date;\n var bIsDate = b instanceof Date;\n if (aIsDate && bIsDate) {\n return a.getTime() === b.getTime();\n }\n if (!aIsDate && !bIsDate) {\n return a === b;\n }\n return false;\n };\n\n var aIsArray = a instanceof Array;\n var bIsArray = b instanceof Array;\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) {\n return false;\n }\n return a.every(function (item, index) {\n return dateEquals(item, b[index]);\n });\n }\n if (!aIsArray && !bIsArray) {\n return dateEquals(a, b);\n }\n return false;\n};\n\nvar isString = function isString(val) {\n return typeof val === 'string' || val instanceof String;\n};\n\nvar pickervue_type_script_lang_js_validator = function validator(val) {\n // either: String, Array of String, null / undefined\n return val === null || val === undefined || isString(val) || Array.isArray(val) && val.length === 2 && val.every(isString);\n};\n\n/* harmony default export */ var pickervue_type_script_lang_js_ = ({\n mixins: [emitter_default.a, NewPopper],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n props: {\n size: String,\n format: String,\n valueFormat: String,\n readonly: Boolean,\n placeholder: String,\n startPlaceholder: String,\n endPlaceholder: String,\n prefixIcon: String,\n clearIcon: {\n type: String,\n default: 'el-icon-circle-close'\n },\n name: {\n default: '',\n validator: pickervue_type_script_lang_js_validator\n },\n disabled: Boolean,\n clearable: {\n type: Boolean,\n default: true\n },\n id: {\n default: '',\n validator: pickervue_type_script_lang_js_validator\n },\n popperClass: String,\n editable: {\n type: Boolean,\n default: true\n },\n align: {\n type: String,\n default: 'left'\n },\n value: {},\n defaultValue: {},\n defaultTime: {},\n rangeSeparator: {\n default: '-'\n },\n pickerOptions: {},\n unlinkPanels: Boolean,\n validateEvent: {\n type: Boolean,\n default: true\n }\n },\n\n components: { ElInput: input_default.a },\n\n directives: { Clickoutside: clickoutside_default.a },\n\n data: function data() {\n return {\n pickerVisible: false,\n showClose: false,\n userInput: null,\n valueOnOpen: null, // value when picker opens, used to determine whether to emit change\n unwatchPickerOptions: null\n };\n },\n\n\n watch: {\n pickerVisible: function pickerVisible(val) {\n if (this.readonly || this.pickerDisabled) return;\n if (val) {\n this.showPicker();\n this.valueOnOpen = Array.isArray(this.value) ? [].concat(this.value) : this.value;\n } else {\n this.hidePicker();\n this.emitChange(this.value);\n this.userInput = null;\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.blur');\n }\n this.$emit('blur', this);\n this.blur();\n }\n },\n\n parsedValue: {\n immediate: true,\n handler: function handler(val) {\n if (this.picker) {\n this.picker.value = val;\n }\n }\n },\n defaultValue: function defaultValue(val) {\n // NOTE: should eventually move to jsx style picker + panel ?\n if (this.picker) {\n this.picker.defaultValue = val;\n }\n },\n value: function value(val, oldVal) {\n if (!valueEquals(val, oldVal) && !this.pickerVisible && this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n }\n }\n },\n\n computed: {\n ranged: function ranged() {\n return this.type.indexOf('range') > -1;\n },\n reference: function reference() {\n var reference = this.$refs.reference;\n return reference.$el || reference;\n },\n refInput: function refInput() {\n if (this.reference) {\n return [].slice.call(this.reference.querySelectorAll('input'));\n }\n return [];\n },\n valueIsEmpty: function valueIsEmpty() {\n var val = this.value;\n if (Array.isArray(val)) {\n for (var i = 0, len = val.length; i < len; i++) {\n if (val[i]) {\n return false;\n }\n }\n } else {\n if (val) {\n return false;\n }\n }\n return true;\n },\n triggerClass: function triggerClass() {\n return this.prefixIcon || (this.type.indexOf('time') !== -1 ? 'el-icon-time' : 'el-icon-date');\n },\n selectionMode: function selectionMode() {\n if (this.type === 'week') {\n return 'week';\n } else if (this.type === 'month') {\n return 'month';\n } else if (this.type === 'year') {\n return 'year';\n } else if (this.type === 'dates') {\n return 'dates';\n }\n\n return 'day';\n },\n haveTrigger: function haveTrigger() {\n if (typeof this.showTrigger !== 'undefined') {\n return this.showTrigger;\n }\n return HAVE_TRIGGER_TYPES.indexOf(this.type) !== -1;\n },\n displayValue: function displayValue() {\n var formattedValue = formatAsFormatAndType(this.parsedValue, this.format, this.type, this.rangeSeparator);\n if (Array.isArray(this.userInput)) {\n return [this.userInput[0] || formattedValue && formattedValue[0] || '', this.userInput[1] || formattedValue && formattedValue[1] || ''];\n } else if (this.userInput !== null) {\n return this.userInput;\n } else if (formattedValue) {\n return this.type === 'dates' ? formattedValue.join(', ') : formattedValue;\n } else {\n return '';\n }\n },\n parsedValue: function parsedValue() {\n if (!this.value) return this.value; // component value is not set\n if (this.type === 'time-select') return this.value; // time-select does not require parsing, this might change in next major version\n\n var valueIsDateObject = Object(date_util_[\"isDateObject\"])(this.value) || Array.isArray(this.value) && this.value.every(date_util_[\"isDateObject\"]);\n if (valueIsDateObject) {\n return this.value;\n }\n\n if (this.valueFormat) {\n return parseAsFormatAndType(this.value, this.valueFormat, this.type, this.rangeSeparator) || this.value;\n }\n\n // NOTE: deal with common but incorrect usage, should remove in next major version\n // user might provide string / timestamp without value-format, coerce them into date (or array of date)\n return Array.isArray(this.value) ? this.value.map(function (val) {\n return new Date(val);\n }) : new Date(this.value);\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n pickerSize: function pickerSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n pickerDisabled: function pickerDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n },\n firstInputId: function firstInputId() {\n var obj = {};\n var id = void 0;\n if (this.ranged) {\n id = this.id && this.id[0];\n } else {\n id = this.id;\n }\n if (id) obj.id = id;\n return obj;\n },\n secondInputId: function secondInputId() {\n var obj = {};\n var id = void 0;\n if (this.ranged) {\n id = this.id && this.id[1];\n }\n if (id) obj.id = id;\n return obj;\n }\n },\n\n created: function created() {\n // vue-popper\n this.popperOptions = {\n boundariesPadding: 0,\n gpuAcceleration: false\n };\n this.placement = PLACEMENT_MAP[this.align] || PLACEMENT_MAP.left;\n\n this.$on('fieldReset', this.handleFieldReset);\n },\n\n\n methods: {\n focus: function focus() {\n if (!this.ranged) {\n this.$refs.reference.focus();\n } else {\n this.handleFocus();\n }\n },\n blur: function blur() {\n this.refInput.forEach(function (input) {\n return input.blur();\n });\n },\n\n\n // {parse, formatTo} Value deals maps component value with internal Date\n parseValue: function parseValue(value) {\n var isParsed = Object(date_util_[\"isDateObject\"])(value) || Array.isArray(value) && value.every(date_util_[\"isDateObject\"]);\n if (this.valueFormat && !isParsed) {\n return parseAsFormatAndType(value, this.valueFormat, this.type, this.rangeSeparator) || value;\n } else {\n return value;\n }\n },\n formatToValue: function formatToValue(date) {\n var isFormattable = Object(date_util_[\"isDateObject\"])(date) || Array.isArray(date) && date.every(date_util_[\"isDateObject\"]);\n if (this.valueFormat && isFormattable) {\n return formatAsFormatAndType(date, this.valueFormat, this.type, this.rangeSeparator);\n } else {\n return date;\n }\n },\n\n\n // {parse, formatTo} String deals with user input\n parseString: function parseString(value) {\n var type = Array.isArray(value) ? this.type : this.type.replace('range', '');\n return parseAsFormatAndType(value, this.format, type);\n },\n formatToString: function formatToString(value) {\n var type = Array.isArray(value) ? this.type : this.type.replace('range', '');\n return formatAsFormatAndType(value, this.format, type);\n },\n handleMouseEnter: function handleMouseEnter() {\n if (this.readonly || this.pickerDisabled) return;\n if (!this.valueIsEmpty && this.clearable) {\n this.showClose = true;\n }\n },\n handleChange: function handleChange() {\n if (this.userInput) {\n var value = this.parseString(this.displayValue);\n if (value) {\n this.picker.value = value;\n if (this.isValidValue(value)) {\n this.emitInput(value);\n this.userInput = null;\n }\n }\n }\n if (this.userInput === '') {\n this.emitInput(null);\n this.emitChange(null);\n this.userInput = null;\n }\n },\n handleStartInput: function handleStartInput(event) {\n if (this.userInput) {\n this.userInput = [event.target.value, this.userInput[1]];\n } else {\n this.userInput = [event.target.value, null];\n }\n },\n handleEndInput: function handleEndInput(event) {\n if (this.userInput) {\n this.userInput = [this.userInput[0], event.target.value];\n } else {\n this.userInput = [null, event.target.value];\n }\n },\n handleStartChange: function handleStartChange(event) {\n var value = this.parseString(this.userInput && this.userInput[0]);\n if (value) {\n this.userInput = [this.formatToString(value), this.displayValue[1]];\n var newValue = [value, this.picker.value && this.picker.value[1]];\n this.picker.value = newValue;\n if (this.isValidValue(newValue)) {\n this.emitInput(newValue);\n this.userInput = null;\n }\n }\n },\n handleEndChange: function handleEndChange(event) {\n var value = this.parseString(this.userInput && this.userInput[1]);\n if (value) {\n this.userInput = [this.displayValue[0], this.formatToString(value)];\n var newValue = [this.picker.value && this.picker.value[0], value];\n this.picker.value = newValue;\n if (this.isValidValue(newValue)) {\n this.emitInput(newValue);\n this.userInput = null;\n }\n }\n },\n handleClickIcon: function handleClickIcon(event) {\n if (this.readonly || this.pickerDisabled) return;\n if (this.showClose) {\n this.valueOnOpen = this.value;\n event.stopPropagation();\n this.emitInput(null);\n this.emitChange(null);\n this.showClose = false;\n if (this.picker && typeof this.picker.handleClear === 'function') {\n this.picker.handleClear();\n }\n } else {\n this.pickerVisible = !this.pickerVisible;\n }\n },\n handleClose: function handleClose() {\n if (!this.pickerVisible) return;\n this.pickerVisible = false;\n\n if (this.type === 'dates') {\n // restore to former value\n var oldValue = parseAsFormatAndType(this.valueOnOpen, this.valueFormat, this.type, this.rangeSeparator) || this.valueOnOpen;\n this.emitInput(oldValue);\n }\n },\n handleFieldReset: function handleFieldReset(initialValue) {\n this.userInput = initialValue === '' ? null : initialValue;\n },\n handleFocus: function handleFocus() {\n var type = this.type;\n\n if (HAVE_TRIGGER_TYPES.indexOf(type) !== -1 && !this.pickerVisible) {\n this.pickerVisible = true;\n }\n this.$emit('focus', this);\n },\n handleKeydown: function handleKeydown(event) {\n var _this = this;\n\n var keyCode = event.keyCode;\n\n // ESC\n if (keyCode === 27) {\n this.pickerVisible = false;\n event.stopPropagation();\n return;\n }\n\n // Tab\n if (keyCode === 9) {\n if (!this.ranged) {\n this.handleChange();\n this.pickerVisible = this.picker.visible = false;\n this.blur();\n event.stopPropagation();\n } else {\n // user may change focus between two input\n setTimeout(function () {\n if (_this.refInput.indexOf(document.activeElement) === -1) {\n _this.pickerVisible = false;\n _this.blur();\n event.stopPropagation();\n }\n }, 0);\n }\n return;\n }\n\n // Enter\n if (keyCode === 13) {\n if (this.userInput === '' || this.isValidValue(this.parseString(this.displayValue))) {\n this.handleChange();\n this.pickerVisible = this.picker.visible = false;\n this.blur();\n }\n event.stopPropagation();\n return;\n }\n\n // if user is typing, do not let picker handle key input\n if (this.userInput) {\n event.stopPropagation();\n return;\n }\n\n // delegate other keys to panel\n if (this.picker && this.picker.handleKeydown) {\n this.picker.handleKeydown(event);\n }\n },\n handleRangeClick: function handleRangeClick() {\n var type = this.type;\n\n if (HAVE_TRIGGER_TYPES.indexOf(type) !== -1 && !this.pickerVisible) {\n this.pickerVisible = true;\n }\n this.$emit('focus', this);\n },\n hidePicker: function hidePicker() {\n if (this.picker) {\n this.picker.resetView && this.picker.resetView();\n this.pickerVisible = this.picker.visible = false;\n this.destroyPopper();\n }\n },\n showPicker: function showPicker() {\n var _this2 = this;\n\n if (this.$isServer) return;\n if (!this.picker) {\n this.mountPicker();\n }\n this.pickerVisible = this.picker.visible = true;\n\n this.updatePopper();\n\n this.picker.value = this.parsedValue;\n this.picker.resetView && this.picker.resetView();\n\n this.$nextTick(function () {\n _this2.picker.adjustSpinners && _this2.picker.adjustSpinners();\n });\n },\n mountPicker: function mountPicker() {\n var _this3 = this;\n\n this.picker = new external_vue_default.a(this.panel).$mount();\n this.picker.defaultValue = this.defaultValue;\n this.picker.defaultTime = this.defaultTime;\n this.picker.popperClass = this.popperClass;\n this.popperElm = this.picker.$el;\n this.picker.width = this.reference.getBoundingClientRect().width;\n this.picker.showTime = this.type === 'datetime' || this.type === 'datetimerange';\n this.picker.selectionMode = this.selectionMode;\n this.picker.unlinkPanels = this.unlinkPanels;\n this.picker.arrowControl = this.arrowControl || this.timeArrowControl || false;\n this.$watch('format', function (format) {\n _this3.picker.format = format;\n });\n\n var updateOptions = function updateOptions() {\n var options = _this3.pickerOptions;\n\n if (options && options.selectableRange) {\n var ranges = options.selectableRange;\n var parser = TYPE_VALUE_RESOLVER_MAP.datetimerange.parser;\n var format = DEFAULT_FORMATS.timerange;\n\n ranges = Array.isArray(ranges) ? ranges : [ranges];\n _this3.picker.selectableRange = ranges.map(function (range) {\n return parser(range, format, _this3.rangeSeparator);\n });\n }\n\n for (var option in options) {\n if (options.hasOwnProperty(option) &&\n // 忽略 time-picker 的该配置项\n option !== 'selectableRange') {\n _this3.picker[option] = options[option];\n }\n }\n\n // main format must prevail over undocumented pickerOptions.format\n if (_this3.format) {\n _this3.picker.format = _this3.format;\n }\n };\n updateOptions();\n this.unwatchPickerOptions = this.$watch('pickerOptions', function () {\n return updateOptions();\n }, { deep: true });\n this.$el.appendChild(this.picker.$el);\n this.picker.resetView && this.picker.resetView();\n\n this.picker.$on('dodestroy', this.doDestroy);\n this.picker.$on('pick', function () {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n _this3.userInput = null;\n _this3.pickerVisible = _this3.picker.visible = visible;\n _this3.emitInput(date);\n _this3.picker.resetView && _this3.picker.resetView();\n });\n\n this.picker.$on('select-range', function (start, end, pos) {\n if (_this3.refInput.length === 0) return;\n if (!pos || pos === 'min') {\n _this3.refInput[0].setSelectionRange(start, end);\n _this3.refInput[0].focus();\n } else if (pos === 'max') {\n _this3.refInput[1].setSelectionRange(start, end);\n _this3.refInput[1].focus();\n }\n });\n },\n unmountPicker: function unmountPicker() {\n if (this.picker) {\n this.picker.$destroy();\n this.picker.$off();\n if (typeof this.unwatchPickerOptions === 'function') {\n this.unwatchPickerOptions();\n }\n this.picker.$el.parentNode.removeChild(this.picker.$el);\n }\n },\n emitChange: function emitChange(val) {\n // determine user real change only\n if (!valueEquals(val, this.valueOnOpen)) {\n this.$emit('change', val);\n this.valueOnOpen = val;\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n }\n }\n },\n emitInput: function emitInput(val) {\n var formatted = this.formatToValue(val);\n if (!valueEquals(this.value, formatted)) {\n this.$emit('input', formatted);\n }\n },\n isValidValue: function isValidValue(value) {\n if (!this.picker) {\n this.mountPicker();\n }\n if (this.picker.isValidValue) {\n return value && this.picker.isValidValue(value);\n } else {\n return true;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/picker.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_pickervue_type_script_lang_js_ = (pickervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/picker.vue\n\n\n\n\n\n/* normalize component */\n\nvar picker_component = normalizeComponent(\n src_pickervue_type_script_lang_js_,\n pickervue_type_template_id_79ae069f_render,\n pickervue_type_template_id_79ae069f_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var picker_api; }\npicker_component.options.__file = \"packages/date-picker/src/picker.vue\"\n/* harmony default export */ var picker = (picker_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date.vue?vue&type=template&id=2440d4ea&\nvar datevue_type_template_id_2440d4ea_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: { \"after-enter\": _vm.handleEnter, \"after-leave\": _vm.handleLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-picker-panel el-date-picker el-popper\",\n class: [\n {\n \"has-sidebar\": _vm.$slots.sidebar || _vm.shortcuts,\n \"has-time\": _vm.showTime\n },\n _vm.popperClass\n ]\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-picker-panel__body-wrapper\" },\n [\n _vm._t(\"sidebar\"),\n _vm.shortcuts\n ? _c(\n \"div\",\n { staticClass: \"el-picker-panel__sidebar\" },\n _vm._l(_vm.shortcuts, function(shortcut, key) {\n return _c(\n \"button\",\n {\n key: key,\n staticClass: \"el-picker-panel__shortcut\",\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.handleShortcutClick(shortcut)\n }\n }\n },\n [_vm._v(_vm._s(shortcut.text))]\n )\n }),\n 0\n )\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-picker-panel__body\" }, [\n _vm.showTime\n ? _c(\"div\", { staticClass: \"el-date-picker__time-header\" }, [\n _c(\n \"span\",\n { staticClass: \"el-date-picker__editor-wrap\" },\n [\n _c(\"el-input\", {\n attrs: {\n placeholder: _vm.t(\"el.datepicker.selectDate\"),\n value: _vm.visibleDate,\n size: \"small\"\n },\n on: {\n input: function(val) {\n return (_vm.userInputDate = val)\n },\n change: _vm.handleVisibleDateChange\n }\n })\n ],\n 1\n ),\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleTimePickClose,\n expression: \"handleTimePickClose\"\n }\n ],\n staticClass: \"el-date-picker__editor-wrap\"\n },\n [\n _c(\"el-input\", {\n ref: \"input\",\n attrs: {\n placeholder: _vm.t(\"el.datepicker.selectTime\"),\n value: _vm.visibleTime,\n size: \"small\"\n },\n on: {\n focus: function($event) {\n _vm.timePickerVisible = true\n },\n input: function(val) {\n return (_vm.userInputTime = val)\n },\n change: _vm.handleVisibleTimeChange\n }\n }),\n _c(\"time-picker\", {\n ref: \"timepicker\",\n attrs: {\n \"time-arrow-control\": _vm.arrowControl,\n visible: _vm.timePickerVisible\n },\n on: {\n pick: _vm.handleTimePick,\n mounted: _vm.proxyTimePickerDataProperties\n }\n })\n ],\n 1\n )\n ])\n : _vm._e(),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView !== \"time\",\n expression: \"currentView !== 'time'\"\n }\n ],\n staticClass: \"el-date-picker__header\",\n class: {\n \"el-date-picker__header--bordered\":\n _vm.currentView === \"year\" ||\n _vm.currentView === \"month\"\n }\n },\n [\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left\",\n attrs: {\n type: \"button\",\n \"aria-label\": _vm.t(\"el.datepicker.prevYear\")\n },\n on: { click: _vm.prevYear }\n }),\n _c(\"button\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"date\",\n expression: \"currentView === 'date'\"\n }\n ],\n staticClass:\n \"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-arrow-left\",\n attrs: {\n type: \"button\",\n \"aria-label\": _vm.t(\"el.datepicker.prevMonth\")\n },\n on: { click: _vm.prevMonth }\n }),\n _c(\n \"span\",\n {\n staticClass: \"el-date-picker__header-label\",\n attrs: { role: \"button\" },\n on: { click: _vm.showYearPicker }\n },\n [_vm._v(_vm._s(_vm.yearLabel))]\n ),\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"date\",\n expression: \"currentView === 'date'\"\n }\n ],\n staticClass: \"el-date-picker__header-label\",\n class: { active: _vm.currentView === \"month\" },\n attrs: { role: \"button\" },\n on: { click: _vm.showMonthPicker }\n },\n [\n _vm._v(\n _vm._s(_vm.t(\"el.datepicker.month\" + (_vm.month + 1)))\n )\n ]\n ),\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right\",\n attrs: {\n type: \"button\",\n \"aria-label\": _vm.t(\"el.datepicker.nextYear\")\n },\n on: { click: _vm.nextYear }\n }),\n _c(\"button\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"date\",\n expression: \"currentView === 'date'\"\n }\n ],\n staticClass:\n \"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-arrow-right\",\n attrs: {\n type: \"button\",\n \"aria-label\": _vm.t(\"el.datepicker.nextMonth\")\n },\n on: { click: _vm.nextMonth }\n })\n ]\n ),\n _c(\n \"div\",\n { staticClass: \"el-picker-panel__content\" },\n [\n _c(\"date-table\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"date\",\n expression: \"currentView === 'date'\"\n }\n ],\n attrs: {\n \"selection-mode\": _vm.selectionMode,\n \"first-day-of-week\": _vm.firstDayOfWeek,\n value: _vm.value,\n \"default-value\": _vm.defaultValue\n ? new Date(_vm.defaultValue)\n : null,\n date: _vm.date,\n \"cell-class-name\": _vm.cellClassName,\n \"disabled-date\": _vm.disabledDate\n },\n on: { pick: _vm.handleDatePick }\n }),\n _c(\"year-table\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"year\",\n expression: \"currentView === 'year'\"\n }\n ],\n attrs: {\n value: _vm.value,\n \"default-value\": _vm.defaultValue\n ? new Date(_vm.defaultValue)\n : null,\n date: _vm.date,\n \"disabled-date\": _vm.disabledDate\n },\n on: { pick: _vm.handleYearPick }\n }),\n _c(\"month-table\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"month\",\n expression: \"currentView === 'month'\"\n }\n ],\n attrs: {\n value: _vm.value,\n \"default-value\": _vm.defaultValue\n ? new Date(_vm.defaultValue)\n : null,\n date: _vm.date,\n \"disabled-date\": _vm.disabledDate\n },\n on: { pick: _vm.handleMonthPick }\n })\n ],\n 1\n )\n ])\n ],\n 2\n ),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.footerVisible && _vm.currentView === \"date\",\n expression: \"footerVisible && currentView === 'date'\"\n }\n ],\n staticClass: \"el-picker-panel__footer\"\n },\n [\n _c(\n \"el-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.selectionMode !== \"dates\",\n expression: \"selectionMode !== 'dates'\"\n }\n ],\n staticClass: \"el-picker-panel__link-btn\",\n attrs: { size: \"mini\", type: \"text\" },\n on: { click: _vm.changeToNow }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.now\")) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n staticClass: \"el-picker-panel__link-btn\",\n attrs: { plain: \"\", size: \"mini\" },\n on: { click: _vm.confirm }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.confirm\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]\n )\n ]\n )\n}\nvar datevue_type_template_id_2440d4ea_staticRenderFns = []\ndatevue_type_template_id_2440d4ea_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date.vue?vue&type=template&id=2440d4ea&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time.vue?vue&type=template&id=3d939089&\nvar timevue_type_template_id_3d939089_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"after-leave\": function($event) {\n _vm.$emit(\"dodestroy\")\n }\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-time-panel el-popper\",\n class: _vm.popperClass\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-time-panel__content\",\n class: { \"has-seconds\": _vm.showSeconds }\n },\n [\n _c(\"time-spinner\", {\n ref: \"spinner\",\n attrs: {\n \"arrow-control\": _vm.useArrow,\n \"show-seconds\": _vm.showSeconds,\n \"am-pm-mode\": _vm.amPmMode,\n date: _vm.date\n },\n on: {\n change: _vm.handleChange,\n \"select-range\": _vm.setSelectionRange\n }\n })\n ],\n 1\n ),\n _c(\"div\", { staticClass: \"el-time-panel__footer\" }, [\n _c(\n \"button\",\n {\n staticClass: \"el-time-panel__btn cancel\",\n attrs: { type: \"button\" },\n on: { click: _vm.handleCancel }\n },\n [_vm._v(_vm._s(_vm.t(\"el.datepicker.cancel\")))]\n ),\n _c(\n \"button\",\n {\n staticClass: \"el-time-panel__btn\",\n class: { confirm: !_vm.disabled },\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.handleConfirm()\n }\n }\n },\n [_vm._v(_vm._s(_vm.t(\"el.datepicker.confirm\")))]\n )\n ])\n ]\n )\n ]\n )\n}\nvar timevue_type_template_id_3d939089_staticRenderFns = []\ntimevue_type_template_id_3d939089_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue?vue&type=template&id=3d939089&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/time-spinner.vue?vue&type=template&id=1facadeb&\nvar time_spinnervue_type_template_id_1facadeb_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-time-spinner\",\n class: { \"has-seconds\": _vm.showSeconds }\n },\n [\n !_vm.arrowControl\n ? [\n _c(\n \"el-scrollbar\",\n {\n ref: \"hours\",\n staticClass: \"el-time-spinner__wrapper\",\n attrs: {\n \"wrap-style\": \"max-height: inherit;\",\n \"view-class\": \"el-time-spinner__list\",\n noresize: \"\",\n tag: \"ul\"\n },\n nativeOn: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"hours\")\n },\n mousemove: function($event) {\n _vm.adjustCurrentSpinner(\"hours\")\n }\n }\n },\n _vm._l(_vm.hoursList, function(disabled, hour) {\n return _c(\n \"li\",\n {\n key: hour,\n staticClass: \"el-time-spinner__item\",\n class: { active: hour === _vm.hours, disabled: disabled },\n on: {\n click: function($event) {\n _vm.handleClick(\"hours\", {\n value: hour,\n disabled: disabled\n })\n }\n }\n },\n [\n _vm._v(\n _vm._s(\n (\"0\" + (_vm.amPmMode ? hour % 12 || 12 : hour)).slice(\n -2\n )\n ) + _vm._s(_vm.amPm(hour))\n )\n ]\n )\n }),\n 0\n ),\n _c(\n \"el-scrollbar\",\n {\n ref: \"minutes\",\n staticClass: \"el-time-spinner__wrapper\",\n attrs: {\n \"wrap-style\": \"max-height: inherit;\",\n \"view-class\": \"el-time-spinner__list\",\n noresize: \"\",\n tag: \"ul\"\n },\n nativeOn: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"minutes\")\n },\n mousemove: function($event) {\n _vm.adjustCurrentSpinner(\"minutes\")\n }\n }\n },\n _vm._l(_vm.minutesList, function(enabled, key) {\n return _c(\n \"li\",\n {\n key: key,\n staticClass: \"el-time-spinner__item\",\n class: { active: key === _vm.minutes, disabled: !enabled },\n on: {\n click: function($event) {\n _vm.handleClick(\"minutes\", {\n value: key,\n disabled: false\n })\n }\n }\n },\n [_vm._v(_vm._s((\"0\" + key).slice(-2)))]\n )\n }),\n 0\n ),\n _c(\n \"el-scrollbar\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showSeconds,\n expression: \"showSeconds\"\n }\n ],\n ref: \"seconds\",\n staticClass: \"el-time-spinner__wrapper\",\n attrs: {\n \"wrap-style\": \"max-height: inherit;\",\n \"view-class\": \"el-time-spinner__list\",\n noresize: \"\",\n tag: \"ul\"\n },\n nativeOn: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"seconds\")\n },\n mousemove: function($event) {\n _vm.adjustCurrentSpinner(\"seconds\")\n }\n }\n },\n _vm._l(60, function(second, key) {\n return _c(\n \"li\",\n {\n key: key,\n staticClass: \"el-time-spinner__item\",\n class: { active: key === _vm.seconds },\n on: {\n click: function($event) {\n _vm.handleClick(\"seconds\", {\n value: key,\n disabled: false\n })\n }\n }\n },\n [_vm._v(_vm._s((\"0\" + key).slice(-2)))]\n )\n }),\n 0\n )\n ]\n : _vm._e(),\n _vm.arrowControl\n ? [\n _c(\n \"div\",\n {\n staticClass: \"el-time-spinner__wrapper is-arrow\",\n on: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"hours\")\n }\n }\n },\n [\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.decrease,\n expression: \"decrease\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-up\"\n }),\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.increase,\n expression: \"increase\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-down\"\n }),\n _c(\n \"ul\",\n { ref: \"hours\", staticClass: \"el-time-spinner__list\" },\n _vm._l(_vm.arrowHourList, function(hour, key) {\n return _c(\n \"li\",\n {\n key: key,\n staticClass: \"el-time-spinner__item\",\n class: {\n active: hour === _vm.hours,\n disabled: _vm.hoursList[hour]\n }\n },\n [\n _vm._v(\n _vm._s(\n hour === undefined\n ? \"\"\n : (\n \"0\" + (_vm.amPmMode ? hour % 12 || 12 : hour)\n ).slice(-2) + _vm.amPm(hour)\n )\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"el-time-spinner__wrapper is-arrow\",\n on: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"minutes\")\n }\n }\n },\n [\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.decrease,\n expression: \"decrease\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-up\"\n }),\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.increase,\n expression: \"increase\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-down\"\n }),\n _c(\n \"ul\",\n { ref: \"minutes\", staticClass: \"el-time-spinner__list\" },\n _vm._l(_vm.arrowMinuteList, function(minute, key) {\n return _c(\n \"li\",\n {\n key: key,\n staticClass: \"el-time-spinner__item\",\n class: { active: minute === _vm.minutes }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n minute === undefined\n ? \"\"\n : (\"0\" + minute).slice(-2)\n ) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _vm.showSeconds\n ? _c(\n \"div\",\n {\n staticClass: \"el-time-spinner__wrapper is-arrow\",\n on: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"seconds\")\n }\n }\n },\n [\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.decrease,\n expression: \"decrease\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-up\"\n }),\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.increase,\n expression: \"increase\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-down\"\n }),\n _c(\n \"ul\",\n { ref: \"seconds\", staticClass: \"el-time-spinner__list\" },\n _vm._l(_vm.arrowSecondList, function(second, key) {\n return _c(\n \"li\",\n {\n key: key,\n staticClass: \"el-time-spinner__item\",\n class: { active: second === _vm.seconds }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n second === undefined\n ? \"\"\n : (\"0\" + second).slice(-2)\n ) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n )\n : _vm._e()\n ]\n : _vm._e()\n ],\n 2\n )\n}\nvar time_spinnervue_type_template_id_1facadeb_staticRenderFns = []\ntime_spinnervue_type_template_id_1facadeb_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue?vue&type=template&id=1facadeb&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/time-spinner.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var time_spinnervue_type_script_lang_js_ = ({\n components: { ElScrollbar: scrollbar_default.a },\n\n directives: {\n repeatClick: repeat_click\n },\n\n props: {\n date: {},\n defaultValue: {}, // reserved for future use\n showSeconds: {\n type: Boolean,\n default: true\n },\n arrowControl: Boolean,\n amPmMode: {\n type: String,\n default: '' // 'a': am/pm; 'A': AM/PM\n }\n },\n\n computed: {\n hours: function hours() {\n return this.date.getHours();\n },\n minutes: function minutes() {\n return this.date.getMinutes();\n },\n seconds: function seconds() {\n return this.date.getSeconds();\n },\n hoursList: function hoursList() {\n return Object(date_util_[\"getRangeHours\"])(this.selectableRange);\n },\n minutesList: function minutesList() {\n return Object(date_util_[\"getRangeMinutes\"])(this.selectableRange, this.hours);\n },\n arrowHourList: function arrowHourList() {\n var hours = this.hours;\n return [hours > 0 ? hours - 1 : undefined, hours, hours < 23 ? hours + 1 : undefined];\n },\n arrowMinuteList: function arrowMinuteList() {\n var minutes = this.minutes;\n return [minutes > 0 ? minutes - 1 : undefined, minutes, minutes < 59 ? minutes + 1 : undefined];\n },\n arrowSecondList: function arrowSecondList() {\n var seconds = this.seconds;\n return [seconds > 0 ? seconds - 1 : undefined, seconds, seconds < 59 ? seconds + 1 : undefined];\n }\n },\n\n data: function data() {\n return {\n selectableRange: [],\n currentScrollbar: null\n };\n },\n mounted: function mounted() {\n var _this = this;\n\n this.$nextTick(function () {\n !_this.arrowControl && _this.bindScrollEvent();\n });\n },\n\n\n methods: {\n increase: function increase() {\n this.scrollDown(1);\n },\n decrease: function decrease() {\n this.scrollDown(-1);\n },\n modifyDateField: function modifyDateField(type, value) {\n switch (type) {\n case 'hours':\n this.$emit('change', Object(date_util_[\"modifyTime\"])(this.date, value, this.minutes, this.seconds));break;\n case 'minutes':\n this.$emit('change', Object(date_util_[\"modifyTime\"])(this.date, this.hours, value, this.seconds));break;\n case 'seconds':\n this.$emit('change', Object(date_util_[\"modifyTime\"])(this.date, this.hours, this.minutes, value));break;\n }\n },\n handleClick: function handleClick(type, _ref) {\n var value = _ref.value,\n disabled = _ref.disabled;\n\n if (!disabled) {\n this.modifyDateField(type, value);\n this.emitSelectRange(type);\n this.adjustSpinner(type, value);\n }\n },\n emitSelectRange: function emitSelectRange(type) {\n if (type === 'hours') {\n this.$emit('select-range', 0, 2);\n } else if (type === 'minutes') {\n this.$emit('select-range', 3, 5);\n } else if (type === 'seconds') {\n this.$emit('select-range', 6, 8);\n }\n this.currentScrollbar = type;\n },\n bindScrollEvent: function bindScrollEvent() {\n var _this2 = this;\n\n var bindFuntion = function bindFuntion(type) {\n _this2.$refs[type].wrap.onscroll = function (e) {\n // TODO: scroll is emitted when set scrollTop programatically\n // should find better solutions in the future!\n _this2.handleScroll(type, e);\n };\n };\n bindFuntion('hours');\n bindFuntion('minutes');\n bindFuntion('seconds');\n },\n handleScroll: function handleScroll(type) {\n var value = Math.min(Math.round((this.$refs[type].wrap.scrollTop - (this.scrollBarHeight(type) * 0.5 - 10) / this.typeItemHeight(type) + 3) / this.typeItemHeight(type)), type === 'hours' ? 23 : 59);\n this.modifyDateField(type, value);\n },\n\n\n // NOTE: used by datetime / date-range panel\n // renamed from adjustScrollTop\n // should try to refactory it\n adjustSpinners: function adjustSpinners() {\n this.adjustSpinner('hours', this.hours);\n this.adjustSpinner('minutes', this.minutes);\n this.adjustSpinner('seconds', this.seconds);\n },\n adjustCurrentSpinner: function adjustCurrentSpinner(type) {\n this.adjustSpinner(type, this[type]);\n },\n adjustSpinner: function adjustSpinner(type, value) {\n if (this.arrowControl) return;\n var el = this.$refs[type].wrap;\n if (el) {\n el.scrollTop = Math.max(0, value * this.typeItemHeight(type));\n }\n },\n scrollDown: function scrollDown(step) {\n var _this3 = this;\n\n if (!this.currentScrollbar) {\n this.emitSelectRange('hours');\n }\n\n var label = this.currentScrollbar;\n var hoursList = this.hoursList;\n var now = this[label];\n\n if (this.currentScrollbar === 'hours') {\n var total = Math.abs(step);\n step = step > 0 ? 1 : -1;\n var length = hoursList.length;\n while (length-- && total) {\n now = (now + step + hoursList.length) % hoursList.length;\n if (hoursList[now]) {\n continue;\n }\n total--;\n }\n if (hoursList[now]) return;\n } else {\n now = (now + step + 60) % 60;\n }\n\n this.modifyDateField(label, now);\n this.adjustSpinner(label, now);\n this.$nextTick(function () {\n return _this3.emitSelectRange(_this3.currentScrollbar);\n });\n },\n amPm: function amPm(hour) {\n var shouldShowAmPm = this.amPmMode.toLowerCase() === 'a';\n if (!shouldShowAmPm) return '';\n var isCapital = this.amPmMode === 'A';\n var content = hour < 12 ? ' am' : ' pm';\n if (isCapital) content = content.toUpperCase();\n return content;\n },\n typeItemHeight: function typeItemHeight(type) {\n return this.$refs[type].$el.querySelector('li').offsetHeight;\n },\n scrollBarHeight: function scrollBarHeight(type) {\n return this.$refs[type].$el.offsetHeight;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_time_spinnervue_type_script_lang_js_ = (time_spinnervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_spinner_component = normalizeComponent(\n basic_time_spinnervue_type_script_lang_js_,\n time_spinnervue_type_template_id_1facadeb_render,\n time_spinnervue_type_template_id_1facadeb_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var time_spinner_api; }\ntime_spinner_component.options.__file = \"packages/date-picker/src/basic/time-spinner.vue\"\n/* harmony default export */ var time_spinner = (time_spinner_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var timevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n components: {\n TimeSpinner: time_spinner\n },\n\n props: {\n visible: Boolean,\n timeArrowControl: Boolean\n },\n\n watch: {\n visible: function visible(val) {\n var _this = this;\n\n if (val) {\n this.oldValue = this.value;\n this.$nextTick(function () {\n return _this.$refs.spinner.emitSelectRange('hours');\n });\n } else {\n this.needInitAdjust = true;\n }\n },\n value: function value(newVal) {\n var _this2 = this;\n\n var date = void 0;\n if (newVal instanceof Date) {\n date = Object(date_util_[\"limitTimeRange\"])(newVal, this.selectableRange, this.format);\n } else if (!newVal) {\n date = this.defaultValue ? new Date(this.defaultValue) : new Date();\n }\n\n this.date = date;\n if (this.visible && this.needInitAdjust) {\n this.$nextTick(function (_) {\n return _this2.adjustSpinners();\n });\n this.needInitAdjust = false;\n }\n },\n selectableRange: function selectableRange(val) {\n this.$refs.spinner.selectableRange = val;\n },\n defaultValue: function defaultValue(val) {\n if (!Object(date_util_[\"isDate\"])(this.value)) {\n this.date = val ? new Date(val) : new Date();\n }\n }\n },\n\n data: function data() {\n return {\n popperClass: '',\n format: 'HH:mm:ss',\n value: '',\n defaultValue: null,\n date: new Date(),\n oldValue: new Date(),\n selectableRange: [],\n selectionRange: [0, 2],\n disabled: false,\n arrowControl: false,\n needInitAdjust: true\n };\n },\n\n\n computed: {\n showSeconds: function showSeconds() {\n return (this.format || '').indexOf('ss') !== -1;\n },\n useArrow: function useArrow() {\n return this.arrowControl || this.timeArrowControl || false;\n },\n amPmMode: function amPmMode() {\n if ((this.format || '').indexOf('A') !== -1) return 'A';\n if ((this.format || '').indexOf('a') !== -1) return 'a';\n return '';\n }\n },\n\n methods: {\n handleCancel: function handleCancel() {\n this.$emit('pick', this.oldValue, false);\n },\n handleChange: function handleChange(date) {\n // this.visible avoids edge cases, when use scrolls during panel closing animation\n if (this.visible) {\n this.date = Object(date_util_[\"clearMilliseconds\"])(date);\n // if date is out of range, do not emit\n if (this.isValidValue(this.date)) {\n this.$emit('pick', this.date, true);\n }\n }\n },\n setSelectionRange: function setSelectionRange(start, end) {\n this.$emit('select-range', start, end);\n this.selectionRange = [start, end];\n },\n handleConfirm: function handleConfirm() {\n var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var first = arguments[1];\n\n if (first) return;\n var date = Object(date_util_[\"clearMilliseconds\"])(Object(date_util_[\"limitTimeRange\"])(this.date, this.selectableRange, this.format));\n this.$emit('pick', date, visible, first);\n },\n handleKeydown: function handleKeydown(event) {\n var keyCode = event.keyCode;\n var mapping = { 38: -1, 40: 1, 37: -1, 39: 1 };\n\n // Left or Right\n if (keyCode === 37 || keyCode === 39) {\n var step = mapping[keyCode];\n this.changeSelectionRange(step);\n event.preventDefault();\n return;\n }\n\n // Up or Down\n if (keyCode === 38 || keyCode === 40) {\n var _step = mapping[keyCode];\n this.$refs.spinner.scrollDown(_step);\n event.preventDefault();\n return;\n }\n },\n isValidValue: function isValidValue(date) {\n return Object(date_util_[\"timeWithinRange\"])(date, this.selectableRange, this.format);\n },\n adjustSpinners: function adjustSpinners() {\n return this.$refs.spinner.adjustSpinners();\n },\n changeSelectionRange: function changeSelectionRange(step) {\n var list = [0, 3].concat(this.showSeconds ? [6] : []);\n var mapping = ['hours', 'minutes'].concat(this.showSeconds ? ['seconds'] : []);\n var index = list.indexOf(this.selectionRange[0]);\n var next = (index + step + list.length) % list.length;\n this.$refs.spinner.emitSelectRange(mapping[next]);\n }\n },\n\n mounted: function mounted() {\n var _this3 = this;\n\n this.$nextTick(function () {\n return _this3.handleConfirm(true, true);\n });\n this.$emit('mounted');\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_timevue_type_script_lang_js_ = (timevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_component = normalizeComponent(\n panel_timevue_type_script_lang_js_,\n timevue_type_template_id_3d939089_render,\n timevue_type_template_id_3d939089_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var time_api; }\ntime_component.options.__file = \"packages/date-picker/src/panel/time.vue\"\n/* harmony default export */ var panel_time = (time_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/year-table.vue?vue&type=template&id=c86ab5e0&\nvar year_tablevue_type_template_id_c86ab5e0_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"table\",\n { staticClass: \"el-year-table\", on: { click: _vm.handleYearTableClick } },\n [\n _c(\"tbody\", [\n _c(\"tr\", [\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 0)\n },\n [_c(\"a\", { staticClass: \"cell\" }, [_vm._v(_vm._s(_vm.startYear))])]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 1)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 1))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 2)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 2))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 3)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 3))\n ])\n ]\n )\n ]),\n _c(\"tr\", [\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 4)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 4))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 5)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 5))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 6)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 6))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 7)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 7))\n ])\n ]\n )\n ]),\n _c(\"tr\", [\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 8)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 8))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 9)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 9))\n ])\n ]\n ),\n _c(\"td\"),\n _c(\"td\")\n ])\n ])\n ]\n )\n}\nvar year_tablevue_type_template_id_c86ab5e0_staticRenderFns = []\nyear_tablevue_type_template_id_c86ab5e0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/year-table.vue?vue&type=template&id=c86ab5e0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/year-table.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar year_tablevue_type_script_lang_js_datesInYear = function datesInYear(year) {\n var numOfDays = Object(date_util_[\"getDayCountOfYear\"])(year);\n var firstDay = new Date(year, 0, 1);\n return Object(date_util_[\"range\"])(numOfDays).map(function (n) {\n return Object(date_util_[\"nextDate\"])(firstDay, n);\n });\n};\n\n/* harmony default export */ var year_tablevue_type_script_lang_js_ = ({\n props: {\n disabledDate: {},\n value: {},\n defaultValue: {\n validator: function validator(val) {\n // null or valid Date Object\n return val === null || val instanceof Date && Object(date_util_[\"isDate\"])(val);\n }\n },\n date: {}\n },\n\n computed: {\n startYear: function startYear() {\n return Math.floor(this.date.getFullYear() / 10) * 10;\n }\n },\n\n methods: {\n getCellStyle: function getCellStyle(year) {\n var style = {};\n var today = new Date();\n\n style.disabled = typeof this.disabledDate === 'function' ? year_tablevue_type_script_lang_js_datesInYear(year).every(this.disabledDate) : false;\n style.current = Object(util_[\"arrayFindIndex\"])(Object(util_[\"coerceTruthyValueToArray\"])(this.value), function (date) {\n return date.getFullYear() === year;\n }) >= 0;\n style.today = today.getFullYear() === year;\n style.default = this.defaultValue && this.defaultValue.getFullYear() === year;\n\n return style;\n },\n handleYearTableClick: function handleYearTableClick(event) {\n var target = event.target;\n if (target.tagName === 'A') {\n if (Object(dom_[\"hasClass\"])(target.parentNode, 'disabled')) return;\n var year = target.textContent || target.innerText;\n this.$emit('pick', Number(year));\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/year-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_year_tablevue_type_script_lang_js_ = (year_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/year-table.vue\n\n\n\n\n\n/* normalize component */\n\nvar year_table_component = normalizeComponent(\n basic_year_tablevue_type_script_lang_js_,\n year_tablevue_type_template_id_c86ab5e0_render,\n year_tablevue_type_template_id_c86ab5e0_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var year_table_api; }\nyear_table_component.options.__file = \"packages/date-picker/src/basic/year-table.vue\"\n/* harmony default export */ var year_table = (year_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/month-table.vue?vue&type=template&id=654d4f42&\nvar month_tablevue_type_template_id_654d4f42_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"table\",\n {\n staticClass: \"el-month-table\",\n on: { click: _vm.handleMonthTableClick, mousemove: _vm.handleMouseMove }\n },\n [\n _c(\n \"tbody\",\n _vm._l(_vm.rows, function(row, key) {\n return _c(\n \"tr\",\n { key: key },\n _vm._l(row, function(cell, key) {\n return _c(\"td\", { key: key, class: _vm.getCellStyle(cell) }, [\n _c(\"div\", [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(\n _vm._s(\n _vm.t(\"el.datepicker.months.\" + _vm.months[cell.text])\n )\n )\n ])\n ])\n ])\n }),\n 0\n )\n }),\n 0\n )\n ]\n )\n}\nvar month_tablevue_type_template_id_654d4f42_staticRenderFns = []\nmonth_tablevue_type_template_id_654d4f42_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/month-table.vue?vue&type=template&id=654d4f42&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/month-table.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\nvar month_tablevue_type_script_lang_js_datesInMonth = function datesInMonth(year, month) {\n var numOfDays = Object(date_util_[\"getDayCountOfMonth\"])(year, month);\n var firstDay = new Date(year, month, 1);\n return Object(date_util_[\"range\"])(numOfDays).map(function (n) {\n return Object(date_util_[\"nextDate\"])(firstDay, n);\n });\n};\n\nvar clearDate = function clearDate(date) {\n return new Date(date.getFullYear(), date.getMonth());\n};\n\nvar getMonthTimestamp = function getMonthTimestamp(time) {\n if (typeof time === 'number' || typeof time === 'string') {\n return clearDate(new Date(time)).getTime();\n } else if (time instanceof Date) {\n return clearDate(time).getTime();\n } else {\n return NaN;\n }\n};\n/* harmony default export */ var month_tablevue_type_script_lang_js_ = ({\n props: {\n disabledDate: {},\n value: {},\n selectionMode: {\n default: 'month'\n },\n minDate: {},\n\n maxDate: {},\n defaultValue: {\n validator: function validator(val) {\n // null or valid Date Object\n return val === null || Object(date_util_[\"isDate\"])(val) || Array.isArray(val) && val.every(date_util_[\"isDate\"]);\n }\n },\n date: {},\n rangeState: {\n default: function _default() {\n return {\n endDate: null,\n selecting: false\n };\n }\n }\n },\n\n mixins: [locale_default.a],\n\n watch: {\n 'rangeState.endDate': function rangeStateEndDate(newVal) {\n this.markRange(this.minDate, newVal);\n },\n minDate: function minDate(newVal, oldVal) {\n if (getMonthTimestamp(newVal) !== getMonthTimestamp(oldVal)) {\n this.markRange(this.minDate, this.maxDate);\n }\n },\n maxDate: function maxDate(newVal, oldVal) {\n if (getMonthTimestamp(newVal) !== getMonthTimestamp(oldVal)) {\n this.markRange(this.minDate, this.maxDate);\n }\n }\n },\n\n data: function data() {\n return {\n months: ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'],\n tableRows: [[], [], []],\n lastRow: null,\n lastColumn: null\n };\n },\n\n\n methods: {\n cellMatchesDate: function cellMatchesDate(cell, date) {\n var value = new Date(date);\n return this.date.getFullYear() === value.getFullYear() && Number(cell.text) === value.getMonth();\n },\n getCellStyle: function getCellStyle(cell) {\n var _this = this;\n\n var style = {};\n var year = this.date.getFullYear();\n var today = new Date();\n var month = cell.text;\n var defaultValue = this.defaultValue ? Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue] : [];\n style.disabled = typeof this.disabledDate === 'function' ? month_tablevue_type_script_lang_js_datesInMonth(year, month).every(this.disabledDate) : false;\n style.current = Object(util_[\"arrayFindIndex\"])(Object(util_[\"coerceTruthyValueToArray\"])(this.value), function (date) {\n return date.getFullYear() === year && date.getMonth() === month;\n }) >= 0;\n style.today = today.getFullYear() === year && today.getMonth() === month;\n style.default = defaultValue.some(function (date) {\n return _this.cellMatchesDate(cell, date);\n });\n\n if (cell.inRange) {\n style['in-range'] = true;\n\n if (cell.start) {\n style['start-date'] = true;\n }\n\n if (cell.end) {\n style['end-date'] = true;\n }\n }\n return style;\n },\n getMonthOfCell: function getMonthOfCell(month) {\n var year = this.date.getFullYear();\n return new Date(year, month, 1);\n },\n markRange: function markRange(minDate, maxDate) {\n minDate = getMonthTimestamp(minDate);\n maxDate = getMonthTimestamp(maxDate) || minDate;\n var _ref = [Math.min(minDate, maxDate), Math.max(minDate, maxDate)];\n minDate = _ref[0];\n maxDate = _ref[1];\n\n var rows = this.rows;\n for (var i = 0, k = rows.length; i < k; i++) {\n var row = rows[i];\n for (var j = 0, l = row.length; j < l; j++) {\n\n var cell = row[j];\n var index = i * 4 + j;\n var time = new Date(this.date.getFullYear(), index).getTime();\n\n cell.inRange = minDate && time >= minDate && time <= maxDate;\n cell.start = minDate && time === minDate;\n cell.end = maxDate && time === maxDate;\n }\n }\n },\n handleMouseMove: function handleMouseMove(event) {\n if (!this.rangeState.selecting) return;\n\n var target = event.target;\n if (target.tagName === 'A') {\n target = target.parentNode.parentNode;\n }\n if (target.tagName === 'DIV') {\n target = target.parentNode;\n }\n if (target.tagName !== 'TD') return;\n\n var row = target.parentNode.rowIndex;\n var column = target.cellIndex;\n // can not select disabled date\n if (this.rows[row][column].disabled) return;\n\n // only update rangeState when mouse moves to a new cell\n // this avoids frequent Date object creation and improves performance\n if (row !== this.lastRow || column !== this.lastColumn) {\n this.lastRow = row;\n this.lastColumn = column;\n this.$emit('changerange', {\n minDate: this.minDate,\n maxDate: this.maxDate,\n rangeState: {\n selecting: true,\n endDate: this.getMonthOfCell(row * 4 + column)\n }\n });\n }\n },\n handleMonthTableClick: function handleMonthTableClick(event) {\n var target = event.target;\n if (target.tagName === 'A') {\n target = target.parentNode.parentNode;\n }\n if (target.tagName === 'DIV') {\n target = target.parentNode;\n }\n if (target.tagName !== 'TD') return;\n if (Object(dom_[\"hasClass\"])(target, 'disabled')) return;\n var column = target.cellIndex;\n var row = target.parentNode.rowIndex;\n var month = row * 4 + column;\n var newDate = this.getMonthOfCell(month);\n if (this.selectionMode === 'range') {\n if (!this.rangeState.selecting) {\n this.$emit('pick', { minDate: newDate, maxDate: null });\n this.rangeState.selecting = true;\n } else {\n if (newDate >= this.minDate) {\n this.$emit('pick', { minDate: this.minDate, maxDate: newDate });\n } else {\n this.$emit('pick', { minDate: newDate, maxDate: this.minDate });\n }\n this.rangeState.selecting = false;\n }\n } else {\n this.$emit('pick', month);\n }\n }\n },\n\n computed: {\n rows: function rows() {\n var _this2 = this;\n\n // TODO: refactory rows / getCellClasses\n var rows = this.tableRows;\n var disabledDate = this.disabledDate;\n var selectedDate = [];\n var now = getMonthTimestamp(new Date());\n\n for (var i = 0; i < 3; i++) {\n var row = rows[i];\n\n var _loop = function _loop(j) {\n var cell = row[j];\n if (!cell) {\n cell = { row: i, column: j, type: 'normal', inRange: false, start: false, end: false };\n }\n\n cell.type = 'normal';\n\n var index = i * 4 + j;\n var time = new Date(_this2.date.getFullYear(), index).getTime();\n cell.inRange = time >= getMonthTimestamp(_this2.minDate) && time <= getMonthTimestamp(_this2.maxDate);\n cell.start = _this2.minDate && time === getMonthTimestamp(_this2.minDate);\n cell.end = _this2.maxDate && time === getMonthTimestamp(_this2.maxDate);\n var isToday = time === now;\n\n if (isToday) {\n cell.type = 'today';\n }\n cell.text = index;\n var cellDate = new Date(time);\n cell.disabled = typeof disabledDate === 'function' && disabledDate(cellDate);\n cell.selected = Object(util_[\"arrayFind\"])(selectedDate, function (date) {\n return date.getTime() === cellDate.getTime();\n });\n\n _this2.$set(row, j, cell);\n };\n\n for (var j = 0; j < 4; j++) {\n _loop(j);\n }\n }\n return rows;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/month-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_month_tablevue_type_script_lang_js_ = (month_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/month-table.vue\n\n\n\n\n\n/* normalize component */\n\nvar month_table_component = normalizeComponent(\n basic_month_tablevue_type_script_lang_js_,\n month_tablevue_type_template_id_654d4f42_render,\n month_tablevue_type_template_id_654d4f42_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var month_table_api; }\nmonth_table_component.options.__file = \"packages/date-picker/src/basic/month-table.vue\"\n/* harmony default export */ var month_table = (month_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/date-table.vue?vue&type=template&id=5d1f3341&\nvar date_tablevue_type_template_id_5d1f3341_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"table\",\n {\n staticClass: \"el-date-table\",\n class: { \"is-week-mode\": _vm.selectionMode === \"week\" },\n attrs: { cellspacing: \"0\", cellpadding: \"0\" },\n on: { click: _vm.handleClick, mousemove: _vm.handleMouseMove }\n },\n [\n _c(\n \"tbody\",\n [\n _c(\n \"tr\",\n [\n _vm.showWeekNumber\n ? _c(\"th\", [_vm._v(_vm._s(_vm.t(\"el.datepicker.week\")))])\n : _vm._e(),\n _vm._l(_vm.WEEKS, function(week, key) {\n return _c(\"th\", { key: key }, [\n _vm._v(_vm._s(_vm.t(\"el.datepicker.weeks.\" + week)))\n ])\n })\n ],\n 2\n ),\n _vm._l(_vm.rows, function(row, key) {\n return _c(\n \"tr\",\n {\n key: key,\n staticClass: \"el-date-table__row\",\n class: { current: _vm.isWeekActive(row[1]) }\n },\n _vm._l(row, function(cell, key) {\n return _c(\"td\", { key: key, class: _vm.getCellClasses(cell) }, [\n _c(\"div\", [\n _c(\"span\", [\n _vm._v(\"\\n \" + _vm._s(cell.text) + \"\\n \")\n ])\n ])\n ])\n }),\n 0\n )\n })\n ],\n 2\n )\n ]\n )\n}\nvar date_tablevue_type_template_id_5d1f3341_staticRenderFns = []\ndate_tablevue_type_template_id_5d1f3341_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/date-table.vue?vue&type=template&id=5d1f3341&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/date-table.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar _WEEKS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nvar date_tablevue_type_script_lang_js_getDateTimestamp = function getDateTimestamp(time) {\n if (typeof time === 'number' || typeof time === 'string') {\n return Object(date_util_[\"clearTime\"])(new Date(time)).getTime();\n } else if (time instanceof Date) {\n return Object(date_util_[\"clearTime\"])(time).getTime();\n } else {\n return NaN;\n }\n};\n\n// remove the first element that satisfies `pred` from arr\n// return a new array if modification occurs\n// return the original array otherwise\nvar date_tablevue_type_script_lang_js_removeFromArray = function removeFromArray(arr, pred) {\n var idx = typeof pred === 'function' ? Object(util_[\"arrayFindIndex\"])(arr, pred) : arr.indexOf(pred);\n return idx >= 0 ? [].concat(arr.slice(0, idx), arr.slice(idx + 1)) : arr;\n};\n\n/* harmony default export */ var date_tablevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n props: {\n firstDayOfWeek: {\n default: 7,\n type: Number,\n validator: function validator(val) {\n return val >= 1 && val <= 7;\n }\n },\n\n value: {},\n\n defaultValue: {\n validator: function validator(val) {\n // either: null, valid Date object, Array of valid Date objects\n return val === null || Object(date_util_[\"isDate\"])(val) || Array.isArray(val) && val.every(date_util_[\"isDate\"]);\n }\n },\n\n date: {},\n\n selectionMode: {\n default: 'day'\n },\n\n showWeekNumber: {\n type: Boolean,\n default: false\n },\n\n disabledDate: {},\n\n cellClassName: {},\n\n minDate: {},\n\n maxDate: {},\n\n rangeState: {\n default: function _default() {\n return {\n endDate: null,\n selecting: false\n };\n }\n }\n },\n\n computed: {\n offsetDay: function offsetDay() {\n var week = this.firstDayOfWeek;\n // 周日为界限,左右偏移的天数,3217654 例如周一就是 -1,目的是调整前两行日期的位置\n return week > 3 ? 7 - week : -week;\n },\n WEEKS: function WEEKS() {\n var week = this.firstDayOfWeek;\n return _WEEKS.concat(_WEEKS).slice(week, week + 7);\n },\n year: function year() {\n return this.date.getFullYear();\n },\n month: function month() {\n return this.date.getMonth();\n },\n startDate: function startDate() {\n return Object(date_util_[\"getStartDateOfMonth\"])(this.year, this.month);\n },\n rows: function rows() {\n var _this = this;\n\n // TODO: refactory rows / getCellClasses\n var date = new Date(this.year, this.month, 1);\n var day = Object(date_util_[\"getFirstDayOfMonth\"])(date); // day of first day\n var dateCountOfMonth = Object(date_util_[\"getDayCountOfMonth\"])(date.getFullYear(), date.getMonth());\n var dateCountOfLastMonth = Object(date_util_[\"getDayCountOfMonth\"])(date.getFullYear(), date.getMonth() === 0 ? 11 : date.getMonth() - 1);\n\n day = day === 0 ? 7 : day;\n\n var offset = this.offsetDay;\n var rows = this.tableRows;\n var count = 1;\n\n var startDate = this.startDate;\n var disabledDate = this.disabledDate;\n var cellClassName = this.cellClassName;\n var selectedDate = this.selectionMode === 'dates' ? Object(util_[\"coerceTruthyValueToArray\"])(this.value) : [];\n var now = date_tablevue_type_script_lang_js_getDateTimestamp(new Date());\n\n for (var i = 0; i < 6; i++) {\n var row = rows[i];\n\n if (this.showWeekNumber) {\n if (!row[0]) {\n row[0] = { type: 'week', text: Object(date_util_[\"getWeekNumber\"])(Object(date_util_[\"nextDate\"])(startDate, i * 7 + 1)) };\n }\n }\n\n var _loop = function _loop(j) {\n var cell = row[_this.showWeekNumber ? j + 1 : j];\n if (!cell) {\n cell = { row: i, column: j, type: 'normal', inRange: false, start: false, end: false };\n }\n\n cell.type = 'normal';\n\n var index = i * 7 + j;\n var time = Object(date_util_[\"nextDate\"])(startDate, index - offset).getTime();\n cell.inRange = time >= date_tablevue_type_script_lang_js_getDateTimestamp(_this.minDate) && time <= date_tablevue_type_script_lang_js_getDateTimestamp(_this.maxDate);\n cell.start = _this.minDate && time === date_tablevue_type_script_lang_js_getDateTimestamp(_this.minDate);\n cell.end = _this.maxDate && time === date_tablevue_type_script_lang_js_getDateTimestamp(_this.maxDate);\n var isToday = time === now;\n\n if (isToday) {\n cell.type = 'today';\n }\n\n if (i >= 0 && i <= 1) {\n var numberOfDaysFromPreviousMonth = day + offset < 0 ? 7 + day + offset : day + offset;\n\n if (j + i * 7 >= numberOfDaysFromPreviousMonth) {\n cell.text = count++;\n } else {\n cell.text = dateCountOfLastMonth - (numberOfDaysFromPreviousMonth - j % 7) + 1 + i * 7;\n cell.type = 'prev-month';\n }\n } else {\n if (count <= dateCountOfMonth) {\n cell.text = count++;\n } else {\n cell.text = count++ - dateCountOfMonth;\n cell.type = 'next-month';\n }\n }\n\n var cellDate = new Date(time);\n cell.disabled = typeof disabledDate === 'function' && disabledDate(cellDate);\n cell.selected = Object(util_[\"arrayFind\"])(selectedDate, function (date) {\n return date.getTime() === cellDate.getTime();\n });\n cell.customClass = typeof cellClassName === 'function' && cellClassName(cellDate);\n _this.$set(row, _this.showWeekNumber ? j + 1 : j, cell);\n };\n\n for (var j = 0; j < 7; j++) {\n _loop(j);\n }\n\n if (this.selectionMode === 'week') {\n var start = this.showWeekNumber ? 1 : 0;\n var end = this.showWeekNumber ? 7 : 6;\n var isWeekActive = this.isWeekActive(row[start + 1]);\n\n row[start].inRange = isWeekActive;\n row[start].start = isWeekActive;\n row[end].inRange = isWeekActive;\n row[end].end = isWeekActive;\n }\n }\n\n return rows;\n }\n },\n\n watch: {\n 'rangeState.endDate': function rangeStateEndDate(newVal) {\n this.markRange(this.minDate, newVal);\n },\n minDate: function minDate(newVal, oldVal) {\n if (date_tablevue_type_script_lang_js_getDateTimestamp(newVal) !== date_tablevue_type_script_lang_js_getDateTimestamp(oldVal)) {\n this.markRange(this.minDate, this.maxDate);\n }\n },\n maxDate: function maxDate(newVal, oldVal) {\n if (date_tablevue_type_script_lang_js_getDateTimestamp(newVal) !== date_tablevue_type_script_lang_js_getDateTimestamp(oldVal)) {\n this.markRange(this.minDate, this.maxDate);\n }\n }\n },\n\n data: function data() {\n return {\n tableRows: [[], [], [], [], [], []],\n lastRow: null,\n lastColumn: null\n };\n },\n\n\n methods: {\n cellMatchesDate: function cellMatchesDate(cell, date) {\n var value = new Date(date);\n return this.year === value.getFullYear() && this.month === value.getMonth() && Number(cell.text) === value.getDate();\n },\n getCellClasses: function getCellClasses(cell) {\n var _this2 = this;\n\n var selectionMode = this.selectionMode;\n var defaultValue = this.defaultValue ? Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue] : [];\n\n var classes = [];\n if ((cell.type === 'normal' || cell.type === 'today') && !cell.disabled) {\n classes.push('available');\n if (cell.type === 'today') {\n classes.push('today');\n }\n } else {\n classes.push(cell.type);\n }\n\n if (cell.type === 'normal' && defaultValue.some(function (date) {\n return _this2.cellMatchesDate(cell, date);\n })) {\n classes.push('default');\n }\n\n if (selectionMode === 'day' && (cell.type === 'normal' || cell.type === 'today') && this.cellMatchesDate(cell, this.value)) {\n classes.push('current');\n }\n\n if (cell.inRange && (cell.type === 'normal' || cell.type === 'today' || this.selectionMode === 'week')) {\n classes.push('in-range');\n\n if (cell.start) {\n classes.push('start-date');\n }\n\n if (cell.end) {\n classes.push('end-date');\n }\n }\n\n if (cell.disabled) {\n classes.push('disabled');\n }\n\n if (cell.selected) {\n classes.push('selected');\n }\n\n if (cell.customClass) {\n classes.push(cell.customClass);\n }\n\n return classes.join(' ');\n },\n getDateOfCell: function getDateOfCell(row, column) {\n var offsetFromStart = row * 7 + (column - (this.showWeekNumber ? 1 : 0)) - this.offsetDay;\n return Object(date_util_[\"nextDate\"])(this.startDate, offsetFromStart);\n },\n isWeekActive: function isWeekActive(cell) {\n if (this.selectionMode !== 'week') return false;\n var newDate = new Date(this.year, this.month, 1);\n var year = newDate.getFullYear();\n var month = newDate.getMonth();\n\n if (cell.type === 'prev-month') {\n newDate.setMonth(month === 0 ? 11 : month - 1);\n newDate.setFullYear(month === 0 ? year - 1 : year);\n }\n\n if (cell.type === 'next-month') {\n newDate.setMonth(month === 11 ? 0 : month + 1);\n newDate.setFullYear(month === 11 ? year + 1 : year);\n }\n\n newDate.setDate(parseInt(cell.text, 10));\n\n if (Object(date_util_[\"isDate\"])(this.value)) {\n var dayOffset = (this.value.getDay() - this.firstDayOfWeek + 7) % 7 - 1;\n var weekDate = Object(date_util_[\"prevDate\"])(this.value, dayOffset);\n return weekDate.getTime() === newDate.getTime();\n }\n return false;\n },\n markRange: function markRange(minDate, maxDate) {\n minDate = date_tablevue_type_script_lang_js_getDateTimestamp(minDate);\n maxDate = date_tablevue_type_script_lang_js_getDateTimestamp(maxDate) || minDate;\n var _ref = [Math.min(minDate, maxDate), Math.max(minDate, maxDate)];\n minDate = _ref[0];\n maxDate = _ref[1];\n\n\n var startDate = this.startDate;\n var rows = this.rows;\n for (var i = 0, k = rows.length; i < k; i++) {\n var row = rows[i];\n for (var j = 0, l = row.length; j < l; j++) {\n if (this.showWeekNumber && j === 0) continue;\n\n var _cell = row[j];\n var index = i * 7 + j + (this.showWeekNumber ? -1 : 0);\n var time = Object(date_util_[\"nextDate\"])(startDate, index - this.offsetDay).getTime();\n\n _cell.inRange = minDate && time >= minDate && time <= maxDate;\n _cell.start = minDate && time === minDate;\n _cell.end = maxDate && time === maxDate;\n }\n }\n },\n handleMouseMove: function handleMouseMove(event) {\n if (!this.rangeState.selecting) return;\n\n var target = event.target;\n if (target.tagName === 'SPAN') {\n target = target.parentNode.parentNode;\n }\n if (target.tagName === 'DIV') {\n target = target.parentNode;\n }\n if (target.tagName !== 'TD') return;\n\n var row = target.parentNode.rowIndex - 1;\n var column = target.cellIndex;\n\n // can not select disabled date\n if (this.rows[row][column].disabled) return;\n\n // only update rangeState when mouse moves to a new cell\n // this avoids frequent Date object creation and improves performance\n if (row !== this.lastRow || column !== this.lastColumn) {\n this.lastRow = row;\n this.lastColumn = column;\n this.$emit('changerange', {\n minDate: this.minDate,\n maxDate: this.maxDate,\n rangeState: {\n selecting: true,\n endDate: this.getDateOfCell(row, column)\n }\n });\n }\n },\n handleClick: function handleClick(event) {\n var target = event.target;\n if (target.tagName === 'SPAN') {\n target = target.parentNode.parentNode;\n }\n if (target.tagName === 'DIV') {\n target = target.parentNode;\n }\n\n if (target.tagName !== 'TD') return;\n\n var row = target.parentNode.rowIndex - 1;\n var column = this.selectionMode === 'week' ? 1 : target.cellIndex;\n var cell = this.rows[row][column];\n\n if (cell.disabled || cell.type === 'week') return;\n\n var newDate = this.getDateOfCell(row, column);\n\n if (this.selectionMode === 'range') {\n if (!this.rangeState.selecting) {\n this.$emit('pick', { minDate: newDate, maxDate: null });\n this.rangeState.selecting = true;\n } else {\n if (newDate >= this.minDate) {\n this.$emit('pick', { minDate: this.minDate, maxDate: newDate });\n } else {\n this.$emit('pick', { minDate: newDate, maxDate: this.minDate });\n }\n this.rangeState.selecting = false;\n }\n } else if (this.selectionMode === 'day') {\n this.$emit('pick', newDate);\n } else if (this.selectionMode === 'week') {\n var weekNumber = Object(date_util_[\"getWeekNumber\"])(newDate);\n var value = newDate.getFullYear() + 'w' + weekNumber;\n this.$emit('pick', {\n year: newDate.getFullYear(),\n week: weekNumber,\n value: value,\n date: newDate\n });\n } else if (this.selectionMode === 'dates') {\n var _value = this.value || [];\n var newValue = cell.selected ? date_tablevue_type_script_lang_js_removeFromArray(_value, function (date) {\n return date.getTime() === newDate.getTime();\n }) : [].concat(_value, [newDate]);\n this.$emit('pick', newValue);\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/date-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_date_tablevue_type_script_lang_js_ = (date_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/date-table.vue\n\n\n\n\n\n/* normalize component */\n\nvar date_table_component = normalizeComponent(\n basic_date_tablevue_type_script_lang_js_,\n date_tablevue_type_template_id_5d1f3341_render,\n date_tablevue_type_template_id_5d1f3341_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var date_table_api; }\ndate_table_component.options.__file = \"packages/date-picker/src/basic/date-table.vue\"\n/* harmony default export */ var date_table = (date_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var datevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n directives: { Clickoutside: clickoutside_default.a },\n\n watch: {\n showTime: function showTime(val) {\n var _this = this;\n\n /* istanbul ignore if */\n if (!val) return;\n this.$nextTick(function (_) {\n var inputElm = _this.$refs.input.$el;\n if (inputElm) {\n _this.pickerWidth = inputElm.getBoundingClientRect().width + 10;\n }\n });\n },\n value: function value(val) {\n if (this.selectionMode === 'dates' && this.value) return;\n if (Object(date_util_[\"isDate\"])(val)) {\n this.date = new Date(val);\n } else {\n this.date = this.getDefaultValue();\n }\n },\n defaultValue: function defaultValue(val) {\n if (!Object(date_util_[\"isDate\"])(this.value)) {\n this.date = val ? new Date(val) : new Date();\n }\n },\n timePickerVisible: function timePickerVisible(val) {\n var _this2 = this;\n\n if (val) this.$nextTick(function () {\n return _this2.$refs.timepicker.adjustSpinners();\n });\n },\n selectionMode: function selectionMode(newVal) {\n if (newVal === 'month') {\n /* istanbul ignore next */\n if (this.currentView !== 'year' || this.currentView !== 'month') {\n this.currentView = 'month';\n }\n } else if (newVal === 'dates') {\n this.currentView = 'date';\n }\n }\n },\n\n methods: {\n proxyTimePickerDataProperties: function proxyTimePickerDataProperties() {\n var _this3 = this;\n\n var format = function format(timeFormat) {\n _this3.$refs.timepicker.format = timeFormat;\n };\n var value = function value(_value) {\n _this3.$refs.timepicker.value = _value;\n };\n var date = function date(_date) {\n _this3.$refs.timepicker.date = _date;\n };\n var selectableRange = function selectableRange(_selectableRange) {\n _this3.$refs.timepicker.selectableRange = _selectableRange;\n };\n\n this.$watch('value', value);\n this.$watch('date', date);\n this.$watch('selectableRange', selectableRange);\n\n format(this.timeFormat);\n value(this.value);\n date(this.date);\n selectableRange(this.selectableRange);\n },\n handleClear: function handleClear() {\n this.date = this.getDefaultValue();\n this.$emit('pick', null);\n },\n emit: function emit(value) {\n var _this4 = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (!value) {\n this.$emit.apply(this, ['pick', value].concat(args));\n } else if (Array.isArray(value)) {\n var dates = value.map(function (date) {\n return _this4.showTime ? Object(date_util_[\"clearMilliseconds\"])(date) : Object(date_util_[\"clearTime\"])(date);\n });\n this.$emit.apply(this, ['pick', dates].concat(args));\n } else {\n this.$emit.apply(this, ['pick', this.showTime ? Object(date_util_[\"clearMilliseconds\"])(value) : Object(date_util_[\"clearTime\"])(value)].concat(args));\n }\n this.userInputDate = null;\n this.userInputTime = null;\n },\n\n\n // resetDate() {\n // this.date = new Date(this.date);\n // },\n\n showMonthPicker: function showMonthPicker() {\n this.currentView = 'month';\n },\n showYearPicker: function showYearPicker() {\n this.currentView = 'year';\n },\n\n\n // XXX: 没用到\n // handleLabelClick() {\n // if (this.currentView === 'date') {\n // this.showMonthPicker();\n // } else if (this.currentView === 'month') {\n // this.showYearPicker();\n // }\n // },\n\n prevMonth: function prevMonth() {\n this.date = Object(date_util_[\"prevMonth\"])(this.date);\n },\n nextMonth: function nextMonth() {\n this.date = Object(date_util_[\"nextMonth\"])(this.date);\n },\n prevYear: function prevYear() {\n if (this.currentView === 'year') {\n this.date = Object(date_util_[\"prevYear\"])(this.date, 10);\n } else {\n this.date = Object(date_util_[\"prevYear\"])(this.date);\n }\n },\n nextYear: function nextYear() {\n if (this.currentView === 'year') {\n this.date = Object(date_util_[\"nextYear\"])(this.date, 10);\n } else {\n this.date = Object(date_util_[\"nextYear\"])(this.date);\n }\n },\n handleShortcutClick: function handleShortcutClick(shortcut) {\n if (shortcut.onClick) {\n shortcut.onClick(this);\n }\n },\n handleTimePick: function handleTimePick(value, visible, first) {\n if (Object(date_util_[\"isDate\"])(value)) {\n var newDate = this.value ? Object(date_util_[\"modifyTime\"])(this.value, value.getHours(), value.getMinutes(), value.getSeconds()) : Object(date_util_[\"modifyWithTimeString\"])(this.getDefaultValue(), this.defaultTime);\n this.date = newDate;\n this.emit(this.date, true);\n } else {\n this.emit(value, true);\n }\n if (!first) {\n this.timePickerVisible = visible;\n }\n },\n handleTimePickClose: function handleTimePickClose() {\n this.timePickerVisible = false;\n },\n handleMonthPick: function handleMonthPick(month) {\n if (this.selectionMode === 'month') {\n this.date = Object(date_util_[\"modifyDate\"])(this.date, this.year, month, 1);\n this.emit(this.date);\n } else {\n this.date = Object(date_util_[\"changeYearMonthAndClampDate\"])(this.date, this.year, month);\n // TODO: should emit intermediate value ??\n // this.emit(this.date);\n this.currentView = 'date';\n }\n },\n handleDatePick: function handleDatePick(value) {\n if (this.selectionMode === 'day') {\n var newDate = this.value ? Object(date_util_[\"modifyDate\"])(this.value, value.getFullYear(), value.getMonth(), value.getDate()) : Object(date_util_[\"modifyWithTimeString\"])(value, this.defaultTime);\n // change default time while out of selectableRange\n if (!this.checkDateWithinRange(newDate)) {\n newDate = Object(date_util_[\"modifyDate\"])(this.selectableRange[0][0], value.getFullYear(), value.getMonth(), value.getDate());\n }\n this.date = newDate;\n this.emit(this.date, this.showTime);\n } else if (this.selectionMode === 'week') {\n this.emit(value.date);\n } else if (this.selectionMode === 'dates') {\n this.emit(value, true); // set false to keep panel open\n }\n },\n handleYearPick: function handleYearPick(year) {\n if (this.selectionMode === 'year') {\n this.date = Object(date_util_[\"modifyDate\"])(this.date, year, 0, 1);\n this.emit(this.date);\n } else {\n this.date = Object(date_util_[\"changeYearMonthAndClampDate\"])(this.date, year, this.month);\n // TODO: should emit intermediate value ??\n // this.emit(this.date, true);\n this.currentView = 'month';\n }\n },\n changeToNow: function changeToNow() {\n // NOTE: not a permanent solution\n // consider disable \"now\" button in the future\n if ((!this.disabledDate || !this.disabledDate(new Date())) && this.checkDateWithinRange(new Date())) {\n this.date = new Date();\n this.emit(this.date);\n }\n },\n confirm: function confirm() {\n if (this.selectionMode === 'dates') {\n this.emit(this.value);\n } else {\n // value were emitted in handle{Date,Time}Pick, nothing to update here\n // deal with the scenario where: user opens the picker, then confirm without doing anything\n var value = this.value ? this.value : Object(date_util_[\"modifyWithTimeString\"])(this.getDefaultValue(), this.defaultTime);\n this.date = new Date(value); // refresh date\n this.emit(value);\n }\n },\n resetView: function resetView() {\n if (this.selectionMode === 'month') {\n this.currentView = 'month';\n } else if (this.selectionMode === 'year') {\n this.currentView = 'year';\n } else {\n this.currentView = 'date';\n }\n },\n handleEnter: function handleEnter() {\n document.body.addEventListener('keydown', this.handleKeydown);\n },\n handleLeave: function handleLeave() {\n this.$emit('dodestroy');\n document.body.removeEventListener('keydown', this.handleKeydown);\n },\n handleKeydown: function handleKeydown(event) {\n var keyCode = event.keyCode;\n var list = [38, 40, 37, 39];\n if (this.visible && !this.timePickerVisible) {\n if (list.indexOf(keyCode) !== -1) {\n this.handleKeyControl(keyCode);\n event.stopPropagation();\n event.preventDefault();\n }\n if (keyCode === 13 && this.userInputDate === null && this.userInputTime === null) {\n // Enter\n this.emit(this.date, false);\n }\n }\n },\n handleKeyControl: function handleKeyControl(keyCode) {\n var mapping = {\n 'year': {\n 38: -4, 40: 4, 37: -1, 39: 1, offset: function offset(date, step) {\n return date.setFullYear(date.getFullYear() + step);\n }\n },\n 'month': {\n 38: -4, 40: 4, 37: -1, 39: 1, offset: function offset(date, step) {\n return date.setMonth(date.getMonth() + step);\n }\n },\n 'week': {\n 38: -1, 40: 1, 37: -1, 39: 1, offset: function offset(date, step) {\n return date.setDate(date.getDate() + step * 7);\n }\n },\n 'day': {\n 38: -7, 40: 7, 37: -1, 39: 1, offset: function offset(date, step) {\n return date.setDate(date.getDate() + step);\n }\n }\n };\n var mode = this.selectionMode;\n var year = 3.1536e10;\n var now = this.date.getTime();\n var newDate = new Date(this.date.getTime());\n while (Math.abs(now - newDate.getTime()) <= year) {\n var map = mapping[mode];\n map.offset(newDate, map[keyCode]);\n if (typeof this.disabledDate === 'function' && this.disabledDate(newDate)) {\n continue;\n }\n this.date = newDate;\n this.$emit('pick', newDate, true);\n break;\n }\n },\n handleVisibleTimeChange: function handleVisibleTimeChange(value) {\n var time = Object(date_util_[\"parseDate\"])(value, this.timeFormat);\n if (time && this.checkDateWithinRange(time)) {\n this.date = Object(date_util_[\"modifyDate\"])(time, this.year, this.month, this.monthDate);\n this.userInputTime = null;\n this.$refs.timepicker.value = this.date;\n this.timePickerVisible = false;\n this.emit(this.date, true);\n }\n },\n handleVisibleDateChange: function handleVisibleDateChange(value) {\n var date = Object(date_util_[\"parseDate\"])(value, this.dateFormat);\n if (date) {\n if (typeof this.disabledDate === 'function' && this.disabledDate(date)) {\n return;\n }\n this.date = Object(date_util_[\"modifyTime\"])(date, this.date.getHours(), this.date.getMinutes(), this.date.getSeconds());\n this.userInputDate = null;\n this.resetView();\n this.emit(this.date, true);\n }\n },\n isValidValue: function isValidValue(value) {\n return value && !isNaN(value) && (typeof this.disabledDate === 'function' ? !this.disabledDate(value) : true) && this.checkDateWithinRange(value);\n },\n getDefaultValue: function getDefaultValue() {\n // if default-value is set, return it\n // otherwise, return now (the moment this method gets called)\n return this.defaultValue ? new Date(this.defaultValue) : new Date();\n },\n checkDateWithinRange: function checkDateWithinRange(date) {\n return this.selectableRange.length > 0 ? Object(date_util_[\"timeWithinRange\"])(date, this.selectableRange, this.format || 'HH:mm:ss') : true;\n }\n },\n\n components: {\n TimePicker: panel_time, YearTable: year_table, MonthTable: month_table, DateTable: date_table, ElInput: input_default.a, ElButton: button_default.a\n },\n\n data: function data() {\n return {\n popperClass: '',\n date: new Date(),\n value: '',\n defaultValue: null, // use getDefaultValue() for time computation\n defaultTime: null,\n showTime: false,\n selectionMode: 'day',\n shortcuts: '',\n visible: false,\n currentView: 'date',\n disabledDate: '',\n cellClassName: '',\n selectableRange: [],\n firstDayOfWeek: 7,\n showWeekNumber: false,\n timePickerVisible: false,\n format: '',\n arrowControl: false,\n userInputDate: null,\n userInputTime: null\n };\n },\n\n\n computed: {\n year: function year() {\n return this.date.getFullYear();\n },\n month: function month() {\n return this.date.getMonth();\n },\n week: function week() {\n return Object(date_util_[\"getWeekNumber\"])(this.date);\n },\n monthDate: function monthDate() {\n return this.date.getDate();\n },\n footerVisible: function footerVisible() {\n return this.showTime || this.selectionMode === 'dates';\n },\n visibleTime: function visibleTime() {\n if (this.userInputTime !== null) {\n return this.userInputTime;\n } else {\n return Object(date_util_[\"formatDate\"])(this.value || this.defaultValue, this.timeFormat);\n }\n },\n visibleDate: function visibleDate() {\n if (this.userInputDate !== null) {\n return this.userInputDate;\n } else {\n return Object(date_util_[\"formatDate\"])(this.value || this.defaultValue, this.dateFormat);\n }\n },\n yearLabel: function yearLabel() {\n var yearTranslation = this.t('el.datepicker.year');\n if (this.currentView === 'year') {\n var startYear = Math.floor(this.year / 10) * 10;\n if (yearTranslation) {\n return startYear + ' ' + yearTranslation + ' - ' + (startYear + 9) + ' ' + yearTranslation;\n }\n return startYear + ' - ' + (startYear + 9);\n }\n return this.year + ' ' + yearTranslation;\n },\n timeFormat: function timeFormat() {\n if (this.format) {\n return Object(date_util_[\"extractTimeFormat\"])(this.format);\n } else {\n return 'HH:mm:ss';\n }\n },\n dateFormat: function dateFormat() {\n if (this.format) {\n return Object(date_util_[\"extractDateFormat\"])(this.format);\n } else {\n return 'yyyy-MM-dd';\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_datevue_type_script_lang_js_ = (datevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date.vue\n\n\n\n\n\n/* normalize component */\n\nvar date_component = normalizeComponent(\n panel_datevue_type_script_lang_js_,\n datevue_type_template_id_2440d4ea_render,\n datevue_type_template_id_2440d4ea_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var date_api; }\ndate_component.options.__file = \"packages/date-picker/src/panel/date.vue\"\n/* harmony default export */ var panel_date = (date_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date-range.vue?vue&type=template&id=2652849a&\nvar date_rangevue_type_template_id_2652849a_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"after-leave\": function($event) {\n _vm.$emit(\"dodestroy\")\n }\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-picker-panel el-date-range-picker el-popper\",\n class: [\n {\n \"has-sidebar\": _vm.$slots.sidebar || _vm.shortcuts,\n \"has-time\": _vm.showTime\n },\n _vm.popperClass\n ]\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-picker-panel__body-wrapper\" },\n [\n _vm._t(\"sidebar\"),\n _vm.shortcuts\n ? _c(\n \"div\",\n { staticClass: \"el-picker-panel__sidebar\" },\n _vm._l(_vm.shortcuts, function(shortcut, key) {\n return _c(\n \"button\",\n {\n key: key,\n staticClass: \"el-picker-panel__shortcut\",\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.handleShortcutClick(shortcut)\n }\n }\n },\n [_vm._v(_vm._s(shortcut.text))]\n )\n }),\n 0\n )\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-picker-panel__body\" }, [\n _vm.showTime\n ? _c(\n \"div\",\n { staticClass: \"el-date-range-picker__time-header\" },\n [\n _c(\n \"span\",\n { staticClass: \"el-date-range-picker__editors-wrap\" },\n [\n _c(\n \"span\",\n {\n staticClass:\n \"el-date-range-picker__time-picker-wrap\"\n },\n [\n _c(\"el-input\", {\n ref: \"minInput\",\n staticClass: \"el-date-range-picker__editor\",\n attrs: {\n size: \"small\",\n disabled: _vm.rangeState.selecting,\n placeholder: _vm.t(\n \"el.datepicker.startDate\"\n ),\n value: _vm.minVisibleDate\n },\n on: {\n input: function(val) {\n return _vm.handleDateInput(val, \"min\")\n },\n change: function(val) {\n return _vm.handleDateChange(val, \"min\")\n }\n }\n })\n ],\n 1\n ),\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleMinTimeClose,\n expression: \"handleMinTimeClose\"\n }\n ],\n staticClass:\n \"el-date-range-picker__time-picker-wrap\"\n },\n [\n _c(\"el-input\", {\n staticClass: \"el-date-range-picker__editor\",\n attrs: {\n size: \"small\",\n disabled: _vm.rangeState.selecting,\n placeholder: _vm.t(\n \"el.datepicker.startTime\"\n ),\n value: _vm.minVisibleTime\n },\n on: {\n focus: function($event) {\n _vm.minTimePickerVisible = true\n },\n input: function(val) {\n return _vm.handleTimeInput(val, \"min\")\n },\n change: function(val) {\n return _vm.handleTimeChange(val, \"min\")\n }\n }\n }),\n _c(\"time-picker\", {\n ref: \"minTimePicker\",\n attrs: {\n \"time-arrow-control\": _vm.arrowControl,\n visible: _vm.minTimePickerVisible\n },\n on: {\n pick: _vm.handleMinTimePick,\n mounted: function($event) {\n _vm.$refs.minTimePicker.format =\n _vm.timeFormat\n }\n }\n })\n ],\n 1\n )\n ]\n ),\n _c(\"span\", { staticClass: \"el-icon-arrow-right\" }),\n _c(\n \"span\",\n {\n staticClass:\n \"el-date-range-picker__editors-wrap is-right\"\n },\n [\n _c(\n \"span\",\n {\n staticClass:\n \"el-date-range-picker__time-picker-wrap\"\n },\n [\n _c(\"el-input\", {\n staticClass: \"el-date-range-picker__editor\",\n attrs: {\n size: \"small\",\n disabled: _vm.rangeState.selecting,\n placeholder: _vm.t(\"el.datepicker.endDate\"),\n value: _vm.maxVisibleDate,\n readonly: !_vm.minDate\n },\n on: {\n input: function(val) {\n return _vm.handleDateInput(val, \"max\")\n },\n change: function(val) {\n return _vm.handleDateChange(val, \"max\")\n }\n }\n })\n ],\n 1\n ),\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleMaxTimeClose,\n expression: \"handleMaxTimeClose\"\n }\n ],\n staticClass:\n \"el-date-range-picker__time-picker-wrap\"\n },\n [\n _c(\"el-input\", {\n staticClass: \"el-date-range-picker__editor\",\n attrs: {\n size: \"small\",\n disabled: _vm.rangeState.selecting,\n placeholder: _vm.t(\"el.datepicker.endTime\"),\n value: _vm.maxVisibleTime,\n readonly: !_vm.minDate\n },\n on: {\n focus: function($event) {\n _vm.minDate &&\n (_vm.maxTimePickerVisible = true)\n },\n input: function(val) {\n return _vm.handleTimeInput(val, \"max\")\n },\n change: function(val) {\n return _vm.handleTimeChange(val, \"max\")\n }\n }\n }),\n _c(\"time-picker\", {\n ref: \"maxTimePicker\",\n attrs: {\n \"time-arrow-control\": _vm.arrowControl,\n visible: _vm.maxTimePickerVisible\n },\n on: {\n pick: _vm.handleMaxTimePick,\n mounted: function($event) {\n _vm.$refs.maxTimePicker.format =\n _vm.timeFormat\n }\n }\n })\n ],\n 1\n )\n ]\n )\n ]\n )\n : _vm._e(),\n _c(\n \"div\",\n {\n staticClass:\n \"el-picker-panel__content el-date-range-picker__content is-left\"\n },\n [\n _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n attrs: { type: \"button\" },\n on: { click: _vm.leftPrevYear }\n }),\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-arrow-left\",\n attrs: { type: \"button\" },\n on: { click: _vm.leftPrevMonth }\n }),\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n class: { \"is-disabled\": !_vm.enableYearArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableYearArrow\n },\n on: { click: _vm.leftNextYear }\n })\n : _vm._e(),\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-arrow-right\",\n class: { \"is-disabled\": !_vm.enableMonthArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableMonthArrow\n },\n on: { click: _vm.leftNextMonth }\n })\n : _vm._e(),\n _c(\"div\", [_vm._v(_vm._s(_vm.leftLabel))])\n ]),\n _c(\"date-table\", {\n attrs: {\n \"selection-mode\": \"range\",\n date: _vm.leftDate,\n \"default-value\": _vm.defaultValue,\n \"min-date\": _vm.minDate,\n \"max-date\": _vm.maxDate,\n \"range-state\": _vm.rangeState,\n \"disabled-date\": _vm.disabledDate,\n \"cell-class-name\": _vm.cellClassName,\n \"first-day-of-week\": _vm.firstDayOfWeek\n },\n on: {\n changerange: _vm.handleChangeRange,\n pick: _vm.handleRangePick\n }\n })\n ],\n 1\n ),\n _c(\n \"div\",\n {\n staticClass:\n \"el-picker-panel__content el-date-range-picker__content is-right\"\n },\n [\n _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n class: { \"is-disabled\": !_vm.enableYearArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableYearArrow\n },\n on: { click: _vm.rightPrevYear }\n })\n : _vm._e(),\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-arrow-left\",\n class: { \"is-disabled\": !_vm.enableMonthArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableMonthArrow\n },\n on: { click: _vm.rightPrevMonth }\n })\n : _vm._e(),\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n attrs: { type: \"button\" },\n on: { click: _vm.rightNextYear }\n }),\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-arrow-right\",\n attrs: { type: \"button\" },\n on: { click: _vm.rightNextMonth }\n }),\n _c(\"div\", [_vm._v(_vm._s(_vm.rightLabel))])\n ]),\n _c(\"date-table\", {\n attrs: {\n \"selection-mode\": \"range\",\n date: _vm.rightDate,\n \"default-value\": _vm.defaultValue,\n \"min-date\": _vm.minDate,\n \"max-date\": _vm.maxDate,\n \"range-state\": _vm.rangeState,\n \"disabled-date\": _vm.disabledDate,\n \"cell-class-name\": _vm.cellClassName,\n \"first-day-of-week\": _vm.firstDayOfWeek\n },\n on: {\n changerange: _vm.handleChangeRange,\n pick: _vm.handleRangePick\n }\n })\n ],\n 1\n )\n ])\n ],\n 2\n ),\n _vm.showTime\n ? _c(\n \"div\",\n { staticClass: \"el-picker-panel__footer\" },\n [\n _c(\n \"el-button\",\n {\n staticClass: \"el-picker-panel__link-btn\",\n attrs: { size: \"mini\", type: \"text\" },\n on: { click: _vm.handleClear }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.clear\")) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n staticClass: \"el-picker-panel__link-btn\",\n attrs: {\n plain: \"\",\n size: \"mini\",\n disabled: _vm.btnDisabled\n },\n on: {\n click: function($event) {\n _vm.handleConfirm(false)\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.confirm\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n : _vm._e()\n ]\n )\n ]\n )\n}\nvar date_rangevue_type_template_id_2652849a_staticRenderFns = []\ndate_rangevue_type_template_id_2652849a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date-range.vue?vue&type=template&id=2652849a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date-range.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\nvar date_rangevue_type_script_lang_js_calcDefaultValue = function calcDefaultValue(defaultValue) {\n if (Array.isArray(defaultValue)) {\n return [new Date(defaultValue[0]), new Date(defaultValue[1])];\n } else if (defaultValue) {\n return [new Date(defaultValue), Object(date_util_[\"nextDate\"])(new Date(defaultValue), 1)];\n } else {\n return [new Date(), Object(date_util_[\"nextDate\"])(new Date(), 1)];\n }\n};\n\n/* harmony default export */ var date_rangevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n directives: { Clickoutside: clickoutside_default.a },\n\n computed: {\n btnDisabled: function btnDisabled() {\n return !(this.minDate && this.maxDate && !this.selecting && this.isValidValue([this.minDate, this.maxDate]));\n },\n leftLabel: function leftLabel() {\n return this.leftDate.getFullYear() + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + (this.leftDate.getMonth() + 1));\n },\n rightLabel: function rightLabel() {\n return this.rightDate.getFullYear() + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + (this.rightDate.getMonth() + 1));\n },\n leftYear: function leftYear() {\n return this.leftDate.getFullYear();\n },\n leftMonth: function leftMonth() {\n return this.leftDate.getMonth();\n },\n leftMonthDate: function leftMonthDate() {\n return this.leftDate.getDate();\n },\n rightYear: function rightYear() {\n return this.rightDate.getFullYear();\n },\n rightMonth: function rightMonth() {\n return this.rightDate.getMonth();\n },\n rightMonthDate: function rightMonthDate() {\n return this.rightDate.getDate();\n },\n minVisibleDate: function minVisibleDate() {\n if (this.dateUserInput.min !== null) return this.dateUserInput.min;\n if (this.minDate) return Object(date_util_[\"formatDate\"])(this.minDate, this.dateFormat);\n return '';\n },\n maxVisibleDate: function maxVisibleDate() {\n if (this.dateUserInput.max !== null) return this.dateUserInput.max;\n if (this.maxDate || this.minDate) return Object(date_util_[\"formatDate\"])(this.maxDate || this.minDate, this.dateFormat);\n return '';\n },\n minVisibleTime: function minVisibleTime() {\n if (this.timeUserInput.min !== null) return this.timeUserInput.min;\n if (this.minDate) return Object(date_util_[\"formatDate\"])(this.minDate, this.timeFormat);\n return '';\n },\n maxVisibleTime: function maxVisibleTime() {\n if (this.timeUserInput.max !== null) return this.timeUserInput.max;\n if (this.maxDate || this.minDate) return Object(date_util_[\"formatDate\"])(this.maxDate || this.minDate, this.timeFormat);\n return '';\n },\n timeFormat: function timeFormat() {\n if (this.format) {\n return Object(date_util_[\"extractTimeFormat\"])(this.format);\n } else {\n return 'HH:mm:ss';\n }\n },\n dateFormat: function dateFormat() {\n if (this.format) {\n return Object(date_util_[\"extractDateFormat\"])(this.format);\n } else {\n return 'yyyy-MM-dd';\n }\n },\n enableMonthArrow: function enableMonthArrow() {\n var nextMonth = (this.leftMonth + 1) % 12;\n var yearOffset = this.leftMonth + 1 >= 12 ? 1 : 0;\n return this.unlinkPanels && new Date(this.leftYear + yearOffset, nextMonth) < new Date(this.rightYear, this.rightMonth);\n },\n enableYearArrow: function enableYearArrow() {\n return this.unlinkPanels && this.rightYear * 12 + this.rightMonth - (this.leftYear * 12 + this.leftMonth + 1) >= 12;\n }\n },\n\n data: function data() {\n return {\n popperClass: '',\n value: [],\n defaultValue: null,\n defaultTime: null,\n minDate: '',\n maxDate: '',\n leftDate: new Date(),\n rightDate: Object(date_util_[\"nextMonth\"])(new Date()),\n rangeState: {\n endDate: null,\n selecting: false,\n row: null,\n column: null\n },\n showTime: false,\n shortcuts: '',\n visible: '',\n disabledDate: '',\n cellClassName: '',\n firstDayOfWeek: 7,\n minTimePickerVisible: false,\n maxTimePickerVisible: false,\n format: '',\n arrowControl: false,\n unlinkPanels: false,\n dateUserInput: {\n min: null,\n max: null\n },\n timeUserInput: {\n min: null,\n max: null\n }\n };\n },\n\n\n watch: {\n minDate: function minDate(val) {\n var _this = this;\n\n this.dateUserInput.min = null;\n this.timeUserInput.min = null;\n this.$nextTick(function () {\n if (_this.$refs.maxTimePicker && _this.maxDate && _this.maxDate < _this.minDate) {\n var format = 'HH:mm:ss';\n _this.$refs.maxTimePicker.selectableRange = [[Object(date_util_[\"parseDate\"])(Object(date_util_[\"formatDate\"])(_this.minDate, format), format), Object(date_util_[\"parseDate\"])('23:59:59', format)]];\n }\n });\n if (val && this.$refs.minTimePicker) {\n this.$refs.minTimePicker.date = val;\n this.$refs.minTimePicker.value = val;\n }\n },\n maxDate: function maxDate(val) {\n this.dateUserInput.max = null;\n this.timeUserInput.max = null;\n if (val && this.$refs.maxTimePicker) {\n this.$refs.maxTimePicker.date = val;\n this.$refs.maxTimePicker.value = val;\n }\n },\n minTimePickerVisible: function minTimePickerVisible(val) {\n var _this2 = this;\n\n if (val) {\n this.$nextTick(function () {\n _this2.$refs.minTimePicker.date = _this2.minDate;\n _this2.$refs.minTimePicker.value = _this2.minDate;\n _this2.$refs.minTimePicker.adjustSpinners();\n });\n }\n },\n maxTimePickerVisible: function maxTimePickerVisible(val) {\n var _this3 = this;\n\n if (val) {\n this.$nextTick(function () {\n _this3.$refs.maxTimePicker.date = _this3.maxDate;\n _this3.$refs.maxTimePicker.value = _this3.maxDate;\n _this3.$refs.maxTimePicker.adjustSpinners();\n });\n }\n },\n value: function value(newVal) {\n if (!newVal) {\n this.minDate = null;\n this.maxDate = null;\n } else if (Array.isArray(newVal)) {\n this.minDate = Object(date_util_[\"isDate\"])(newVal[0]) ? new Date(newVal[0]) : null;\n this.maxDate = Object(date_util_[\"isDate\"])(newVal[1]) ? new Date(newVal[1]) : null;\n if (this.minDate) {\n this.leftDate = this.minDate;\n if (this.unlinkPanels && this.maxDate) {\n var minDateYear = this.minDate.getFullYear();\n var minDateMonth = this.minDate.getMonth();\n var maxDateYear = this.maxDate.getFullYear();\n var maxDateMonth = this.maxDate.getMonth();\n this.rightDate = minDateYear === maxDateYear && minDateMonth === maxDateMonth ? Object(date_util_[\"nextMonth\"])(this.maxDate) : this.maxDate;\n } else {\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n } else {\n this.leftDate = date_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n }\n },\n defaultValue: function defaultValue(val) {\n if (!Array.isArray(this.value)) {\n var _calcDefaultValue = date_rangevue_type_script_lang_js_calcDefaultValue(val),\n left = _calcDefaultValue[0],\n right = _calcDefaultValue[1];\n\n this.leftDate = left;\n this.rightDate = val && val[1] && this.unlinkPanels ? right : Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n }\n },\n\n methods: {\n handleClear: function handleClear() {\n this.minDate = null;\n this.maxDate = null;\n this.leftDate = date_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n this.$emit('pick', null);\n },\n handleChangeRange: function handleChangeRange(val) {\n this.minDate = val.minDate;\n this.maxDate = val.maxDate;\n this.rangeState = val.rangeState;\n },\n handleDateInput: function handleDateInput(value, type) {\n this.dateUserInput[type] = value;\n if (value.length !== this.dateFormat.length) return;\n var parsedValue = Object(date_util_[\"parseDate\"])(value, this.dateFormat);\n\n if (parsedValue) {\n if (typeof this.disabledDate === 'function' && this.disabledDate(new Date(parsedValue))) {\n return;\n }\n if (type === 'min') {\n this.minDate = Object(date_util_[\"modifyDate\"])(this.minDate || new Date(), parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n this.leftDate = new Date(parsedValue);\n if (!this.unlinkPanels) {\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n } else {\n this.maxDate = Object(date_util_[\"modifyDate\"])(this.maxDate || new Date(), parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n this.rightDate = new Date(parsedValue);\n if (!this.unlinkPanels) {\n this.leftDate = Object(date_util_[\"prevMonth\"])(parsedValue);\n }\n }\n }\n },\n handleDateChange: function handleDateChange(value, type) {\n var parsedValue = Object(date_util_[\"parseDate\"])(value, this.dateFormat);\n if (parsedValue) {\n if (type === 'min') {\n this.minDate = Object(date_util_[\"modifyDate\"])(this.minDate, parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n if (this.minDate > this.maxDate) {\n this.maxDate = this.minDate;\n }\n } else {\n this.maxDate = Object(date_util_[\"modifyDate\"])(this.maxDate, parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n if (this.maxDate < this.minDate) {\n this.minDate = this.maxDate;\n }\n }\n }\n },\n handleTimeInput: function handleTimeInput(value, type) {\n var _this4 = this;\n\n this.timeUserInput[type] = value;\n if (value.length !== this.timeFormat.length) return;\n var parsedValue = Object(date_util_[\"parseDate\"])(value, this.timeFormat);\n\n if (parsedValue) {\n if (type === 'min') {\n this.minDate = Object(date_util_[\"modifyTime\"])(this.minDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n this.$nextTick(function (_) {\n return _this4.$refs.minTimePicker.adjustSpinners();\n });\n } else {\n this.maxDate = Object(date_util_[\"modifyTime\"])(this.maxDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n this.$nextTick(function (_) {\n return _this4.$refs.maxTimePicker.adjustSpinners();\n });\n }\n }\n },\n handleTimeChange: function handleTimeChange(value, type) {\n var parsedValue = Object(date_util_[\"parseDate\"])(value, this.timeFormat);\n if (parsedValue) {\n if (type === 'min') {\n this.minDate = Object(date_util_[\"modifyTime\"])(this.minDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n if (this.minDate > this.maxDate) {\n this.maxDate = this.minDate;\n }\n this.$refs.minTimePicker.value = this.minDate;\n this.minTimePickerVisible = false;\n } else {\n this.maxDate = Object(date_util_[\"modifyTime\"])(this.maxDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n if (this.maxDate < this.minDate) {\n this.minDate = this.maxDate;\n }\n this.$refs.maxTimePicker.value = this.minDate;\n this.maxTimePickerVisible = false;\n }\n }\n },\n handleRangePick: function handleRangePick(val) {\n var _this5 = this;\n\n var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var defaultTime = this.defaultTime || [];\n var minDate = Object(date_util_[\"modifyWithTimeString\"])(val.minDate, defaultTime[0]);\n var maxDate = Object(date_util_[\"modifyWithTimeString\"])(val.maxDate, defaultTime[1]);\n\n if (this.maxDate === maxDate && this.minDate === minDate) {\n return;\n }\n this.onPick && this.onPick(val);\n this.maxDate = maxDate;\n this.minDate = minDate;\n\n // workaround for https://github.com/ElemeFE/element/issues/7539, should remove this block when we don't have to care about Chromium 55 - 57\n setTimeout(function () {\n _this5.maxDate = maxDate;\n _this5.minDate = minDate;\n }, 10);\n if (!close || this.showTime) return;\n this.handleConfirm();\n },\n handleShortcutClick: function handleShortcutClick(shortcut) {\n if (shortcut.onClick) {\n shortcut.onClick(this);\n }\n },\n handleMinTimePick: function handleMinTimePick(value, visible, first) {\n this.minDate = this.minDate || new Date();\n if (value) {\n this.minDate = Object(date_util_[\"modifyTime\"])(this.minDate, value.getHours(), value.getMinutes(), value.getSeconds());\n }\n\n if (!first) {\n this.minTimePickerVisible = visible;\n }\n\n if (!this.maxDate || this.maxDate && this.maxDate.getTime() < this.minDate.getTime()) {\n this.maxDate = new Date(this.minDate);\n }\n },\n handleMinTimeClose: function handleMinTimeClose() {\n this.minTimePickerVisible = false;\n },\n handleMaxTimePick: function handleMaxTimePick(value, visible, first) {\n if (this.maxDate && value) {\n this.maxDate = Object(date_util_[\"modifyTime\"])(this.maxDate, value.getHours(), value.getMinutes(), value.getSeconds());\n }\n\n if (!first) {\n this.maxTimePickerVisible = visible;\n }\n\n if (this.maxDate && this.minDate && this.minDate.getTime() > this.maxDate.getTime()) {\n this.minDate = new Date(this.maxDate);\n }\n },\n handleMaxTimeClose: function handleMaxTimeClose() {\n this.maxTimePickerVisible = false;\n },\n\n\n // leftPrev*, rightNext* need to take care of `unlinkPanels`\n leftPrevYear: function leftPrevYear() {\n this.leftDate = Object(date_util_[\"prevYear\"])(this.leftDate);\n if (!this.unlinkPanels) {\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n },\n leftPrevMonth: function leftPrevMonth() {\n this.leftDate = Object(date_util_[\"prevMonth\"])(this.leftDate);\n if (!this.unlinkPanels) {\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n },\n rightNextYear: function rightNextYear() {\n if (!this.unlinkPanels) {\n this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n } else {\n this.rightDate = Object(date_util_[\"nextYear\"])(this.rightDate);\n }\n },\n rightNextMonth: function rightNextMonth() {\n if (!this.unlinkPanels) {\n this.leftDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n } else {\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.rightDate);\n }\n },\n\n\n // leftNext*, rightPrev* are called when `unlinkPanels` is true\n leftNextYear: function leftNextYear() {\n this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n },\n leftNextMonth: function leftNextMonth() {\n this.leftDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n },\n rightPrevYear: function rightPrevYear() {\n this.rightDate = Object(date_util_[\"prevYear\"])(this.rightDate);\n },\n rightPrevMonth: function rightPrevMonth() {\n this.rightDate = Object(date_util_[\"prevMonth\"])(this.rightDate);\n },\n handleConfirm: function handleConfirm() {\n var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this.isValidValue([this.minDate, this.maxDate])) {\n this.$emit('pick', [this.minDate, this.maxDate], visible);\n }\n },\n isValidValue: function isValidValue(value) {\n return Array.isArray(value) && value && value[0] && value[1] && Object(date_util_[\"isDate\"])(value[0]) && Object(date_util_[\"isDate\"])(value[1]) && value[0].getTime() <= value[1].getTime() && (typeof this.disabledDate === 'function' ? !this.disabledDate(value[0]) && !this.disabledDate(value[1]) : true);\n },\n resetView: function resetView() {\n // NOTE: this is a hack to reset {min, max}Date on picker open.\n // TODO: correct way of doing so is to refactor {min, max}Date to be dependent on value and internal selection state\n // an alternative would be resetView whenever picker becomes visible, should also investigate date-panel's resetView\n if (this.minDate && this.maxDate == null) this.rangeState.selecting = false;\n this.minDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[0]) : null;\n this.maxDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[1]) : null;\n }\n },\n\n components: { TimePicker: panel_time, DateTable: date_table, ElInput: input_default.a, ElButton: button_default.a }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date-range.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_date_rangevue_type_script_lang_js_ = (date_rangevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date-range.vue\n\n\n\n\n\n/* normalize component */\n\nvar date_range_component = normalizeComponent(\n panel_date_rangevue_type_script_lang_js_,\n date_rangevue_type_template_id_2652849a_render,\n date_rangevue_type_template_id_2652849a_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var date_range_api; }\ndate_range_component.options.__file = \"packages/date-picker/src/panel/date-range.vue\"\n/* harmony default export */ var date_range = (date_range_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/month-range.vue?vue&type=template&id=f2645fb8&\nvar month_rangevue_type_template_id_f2645fb8_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"after-leave\": function($event) {\n _vm.$emit(\"dodestroy\")\n }\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-picker-panel el-date-range-picker el-popper\",\n class: [\n {\n \"has-sidebar\": _vm.$slots.sidebar || _vm.shortcuts\n },\n _vm.popperClass\n ]\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-picker-panel__body-wrapper\" },\n [\n _vm._t(\"sidebar\"),\n _vm.shortcuts\n ? _c(\n \"div\",\n { staticClass: \"el-picker-panel__sidebar\" },\n _vm._l(_vm.shortcuts, function(shortcut, key) {\n return _c(\n \"button\",\n {\n key: key,\n staticClass: \"el-picker-panel__shortcut\",\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.handleShortcutClick(shortcut)\n }\n }\n },\n [_vm._v(_vm._s(shortcut.text))]\n )\n }),\n 0\n )\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-picker-panel__body\" }, [\n _c(\n \"div\",\n {\n staticClass:\n \"el-picker-panel__content el-date-range-picker__content is-left\"\n },\n [\n _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n attrs: { type: \"button\" },\n on: { click: _vm.leftPrevYear }\n }),\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n class: { \"is-disabled\": !_vm.enableYearArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableYearArrow\n },\n on: { click: _vm.leftNextYear }\n })\n : _vm._e(),\n _c(\"div\", [_vm._v(_vm._s(_vm.leftLabel))])\n ]),\n _c(\"month-table\", {\n attrs: {\n \"selection-mode\": \"range\",\n date: _vm.leftDate,\n \"default-value\": _vm.defaultValue,\n \"min-date\": _vm.minDate,\n \"max-date\": _vm.maxDate,\n \"range-state\": _vm.rangeState,\n \"disabled-date\": _vm.disabledDate\n },\n on: {\n changerange: _vm.handleChangeRange,\n pick: _vm.handleRangePick\n }\n })\n ],\n 1\n ),\n _c(\n \"div\",\n {\n staticClass:\n \"el-picker-panel__content el-date-range-picker__content is-right\"\n },\n [\n _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n class: { \"is-disabled\": !_vm.enableYearArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableYearArrow\n },\n on: { click: _vm.rightPrevYear }\n })\n : _vm._e(),\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n attrs: { type: \"button\" },\n on: { click: _vm.rightNextYear }\n }),\n _c(\"div\", [_vm._v(_vm._s(_vm.rightLabel))])\n ]),\n _c(\"month-table\", {\n attrs: {\n \"selection-mode\": \"range\",\n date: _vm.rightDate,\n \"default-value\": _vm.defaultValue,\n \"min-date\": _vm.minDate,\n \"max-date\": _vm.maxDate,\n \"range-state\": _vm.rangeState,\n \"disabled-date\": _vm.disabledDate\n },\n on: {\n changerange: _vm.handleChangeRange,\n pick: _vm.handleRangePick\n }\n })\n ],\n 1\n )\n ])\n ],\n 2\n )\n ]\n )\n ]\n )\n}\nvar month_rangevue_type_template_id_f2645fb8_staticRenderFns = []\nmonth_rangevue_type_template_id_f2645fb8_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/month-range.vue?vue&type=template&id=f2645fb8&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/month-range.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar month_rangevue_type_script_lang_js_calcDefaultValue = function calcDefaultValue(defaultValue) {\n if (Array.isArray(defaultValue)) {\n return [new Date(defaultValue[0]), new Date(defaultValue[1])];\n } else if (defaultValue) {\n return [new Date(defaultValue), Object(date_util_[\"nextMonth\"])(new Date(defaultValue))];\n } else {\n return [new Date(), Object(date_util_[\"nextMonth\"])(new Date())];\n }\n};\n/* harmony default export */ var month_rangevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n directives: { Clickoutside: clickoutside_default.a },\n\n computed: {\n btnDisabled: function btnDisabled() {\n return !(this.minDate && this.maxDate && !this.selecting && this.isValidValue([this.minDate, this.maxDate]));\n },\n leftLabel: function leftLabel() {\n return this.leftDate.getFullYear() + ' ' + this.t('el.datepicker.year');\n },\n rightLabel: function rightLabel() {\n return this.rightDate.getFullYear() + ' ' + this.t('el.datepicker.year');\n },\n leftYear: function leftYear() {\n return this.leftDate.getFullYear();\n },\n rightYear: function rightYear() {\n return this.rightDate.getFullYear() === this.leftDate.getFullYear() ? this.leftDate.getFullYear() + 1 : this.rightDate.getFullYear();\n },\n enableYearArrow: function enableYearArrow() {\n return this.unlinkPanels && this.rightYear > this.leftYear + 1;\n }\n },\n\n data: function data() {\n return {\n popperClass: '',\n value: [],\n defaultValue: null,\n defaultTime: null,\n minDate: '',\n maxDate: '',\n leftDate: new Date(),\n rightDate: Object(date_util_[\"nextYear\"])(new Date()),\n rangeState: {\n endDate: null,\n selecting: false,\n row: null,\n column: null\n },\n shortcuts: '',\n visible: '',\n disabledDate: '',\n format: '',\n arrowControl: false,\n unlinkPanels: false\n };\n },\n\n\n watch: {\n value: function value(newVal) {\n if (!newVal) {\n this.minDate = null;\n this.maxDate = null;\n } else if (Array.isArray(newVal)) {\n this.minDate = Object(date_util_[\"isDate\"])(newVal[0]) ? new Date(newVal[0]) : null;\n this.maxDate = Object(date_util_[\"isDate\"])(newVal[1]) ? new Date(newVal[1]) : null;\n if (this.minDate) {\n this.leftDate = this.minDate;\n if (this.unlinkPanels && this.maxDate) {\n var minDateYear = this.minDate.getFullYear();\n var maxDateYear = this.maxDate.getFullYear();\n this.rightDate = minDateYear === maxDateYear ? Object(date_util_[\"nextYear\"])(this.maxDate) : this.maxDate;\n } else {\n this.rightDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n }\n } else {\n this.leftDate = month_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n this.rightDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n }\n }\n },\n defaultValue: function defaultValue(val) {\n if (!Array.isArray(this.value)) {\n var _calcDefaultValue = month_rangevue_type_script_lang_js_calcDefaultValue(val),\n left = _calcDefaultValue[0],\n right = _calcDefaultValue[1];\n\n this.leftDate = left;\n this.rightDate = val && val[1] && left.getFullYear() !== right.getFullYear() && this.unlinkPanels ? right : Object(date_util_[\"nextYear\"])(this.leftDate);\n }\n }\n },\n\n methods: {\n handleClear: function handleClear() {\n this.minDate = null;\n this.maxDate = null;\n this.leftDate = month_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n this.rightDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n this.$emit('pick', null);\n },\n handleChangeRange: function handleChangeRange(val) {\n this.minDate = val.minDate;\n this.maxDate = val.maxDate;\n this.rangeState = val.rangeState;\n },\n handleRangePick: function handleRangePick(val) {\n var _this = this;\n\n var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var defaultTime = this.defaultTime || [];\n var minDate = Object(date_util_[\"modifyWithTimeString\"])(val.minDate, defaultTime[0]);\n var maxDate = Object(date_util_[\"modifyWithTimeString\"])(val.maxDate, defaultTime[1]);\n if (this.maxDate === maxDate && this.minDate === minDate) {\n return;\n }\n this.onPick && this.onPick(val);\n this.maxDate = maxDate;\n this.minDate = minDate;\n\n // workaround for https://github.com/ElemeFE/element/issues/7539, should remove this block when we don't have to care about Chromium 55 - 57\n setTimeout(function () {\n _this.maxDate = maxDate;\n _this.minDate = minDate;\n }, 10);\n if (!close) return;\n this.handleConfirm();\n },\n handleShortcutClick: function handleShortcutClick(shortcut) {\n if (shortcut.onClick) {\n shortcut.onClick(this);\n }\n },\n\n\n // leftPrev*, rightNext* need to take care of `unlinkPanels`\n leftPrevYear: function leftPrevYear() {\n this.leftDate = Object(date_util_[\"prevYear\"])(this.leftDate);\n if (!this.unlinkPanels) {\n this.rightDate = Object(date_util_[\"prevYear\"])(this.rightDate);\n }\n },\n rightNextYear: function rightNextYear() {\n if (!this.unlinkPanels) {\n this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n }\n this.rightDate = Object(date_util_[\"nextYear\"])(this.rightDate);\n },\n\n\n // leftNext*, rightPrev* are called when `unlinkPanels` is true\n leftNextYear: function leftNextYear() {\n this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n },\n rightPrevYear: function rightPrevYear() {\n this.rightDate = Object(date_util_[\"prevYear\"])(this.rightDate);\n },\n handleConfirm: function handleConfirm() {\n var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this.isValidValue([this.minDate, this.maxDate])) {\n this.$emit('pick', [this.minDate, this.maxDate], visible);\n }\n },\n isValidValue: function isValidValue(value) {\n return Array.isArray(value) && value && value[0] && value[1] && Object(date_util_[\"isDate\"])(value[0]) && Object(date_util_[\"isDate\"])(value[1]) && value[0].getTime() <= value[1].getTime() && (typeof this.disabledDate === 'function' ? !this.disabledDate(value[0]) && !this.disabledDate(value[1]) : true);\n },\n resetView: function resetView() {\n // NOTE: this is a hack to reset {min, max}Date on picker open.\n // TODO: correct way of doing so is to refactor {min, max}Date to be dependent on value and internal selection state\n // an alternative would be resetView whenever picker becomes visible, should also investigate date-panel's resetView\n this.minDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[0]) : null;\n this.maxDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[1]) : null;\n }\n },\n\n components: { MonthTable: month_table, ElInput: input_default.a, ElButton: button_default.a }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/month-range.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_month_rangevue_type_script_lang_js_ = (month_rangevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/month-range.vue\n\n\n\n\n\n/* normalize component */\n\nvar month_range_component = normalizeComponent(\n panel_month_rangevue_type_script_lang_js_,\n month_rangevue_type_template_id_f2645fb8_render,\n month_rangevue_type_template_id_f2645fb8_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var month_range_api; }\nmonth_range_component.options.__file = \"packages/date-picker/src/panel/month-range.vue\"\n/* harmony default export */ var month_range = (month_range_component.exports);\n// CONCATENATED MODULE: ./packages/date-picker/src/picker/date-picker.js\n\n\n\n\n\nvar date_picker_getPanel = function getPanel(type) {\n if (type === 'daterange' || type === 'datetimerange') {\n return date_range;\n } else if (type === 'monthrange') {\n return month_range;\n }\n return panel_date;\n};\n\n/* harmony default export */ var date_picker = ({\n mixins: [picker],\n\n name: 'ElDatePicker',\n\n props: {\n type: {\n type: String,\n default: 'date'\n },\n timeArrowControl: Boolean\n },\n\n watch: {\n type: function type(_type) {\n if (this.picker) {\n this.unmountPicker();\n this.panel = date_picker_getPanel(_type);\n this.mountPicker();\n } else {\n this.panel = date_picker_getPanel(_type);\n }\n }\n },\n\n created: function created() {\n this.panel = date_picker_getPanel(this.type);\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/index.js\n\n\n/* istanbul ignore next */\ndate_picker.install = function install(Vue) {\n Vue.component(date_picker.name, date_picker);\n};\n\n/* harmony default export */ var packages_date_picker = (date_picker);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-select.vue?vue&type=template&id=51ab9320&\nvar time_selectvue_type_template_id_51ab9320_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"before-enter\": _vm.handleMenuEnter,\n \"after-leave\": function($event) {\n _vm.$emit(\"dodestroy\")\n }\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n ref: \"popper\",\n staticClass: \"el-picker-panel time-select el-popper\",\n class: _vm.popperClass,\n style: { width: _vm.width + \"px\" }\n },\n [\n _c(\n \"el-scrollbar\",\n {\n attrs: { noresize: \"\", \"wrap-class\": \"el-picker-panel__content\" }\n },\n _vm._l(_vm.items, function(item) {\n return _c(\n \"div\",\n {\n key: item.value,\n staticClass: \"time-select-item\",\n class: {\n selected: _vm.value === item.value,\n disabled: item.disabled,\n default: item.value === _vm.defaultValue\n },\n attrs: { disabled: item.disabled },\n on: {\n click: function($event) {\n _vm.handleClick(item)\n }\n }\n },\n [_vm._v(_vm._s(item.value))]\n )\n }),\n 0\n )\n ],\n 1\n )\n ]\n )\n}\nvar time_selectvue_type_template_id_51ab9320_staticRenderFns = []\ntime_selectvue_type_template_id_51ab9320_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-select.vue?vue&type=template&id=51ab9320&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-select.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\nvar parseTime = function parseTime(time) {\n var values = (time || '').split(':');\n if (values.length >= 2) {\n var hours = parseInt(values[0], 10);\n var minutes = parseInt(values[1], 10);\n\n return {\n hours: hours,\n minutes: minutes\n };\n }\n /* istanbul ignore next */\n return null;\n};\n\nvar compareTime = function compareTime(time1, time2) {\n var value1 = parseTime(time1);\n var value2 = parseTime(time2);\n\n var minutes1 = value1.minutes + value1.hours * 60;\n var minutes2 = value2.minutes + value2.hours * 60;\n\n if (minutes1 === minutes2) {\n return 0;\n }\n\n return minutes1 > minutes2 ? 1 : -1;\n};\n\nvar formatTime = function formatTime(time) {\n return (time.hours < 10 ? '0' + time.hours : time.hours) + ':' + (time.minutes < 10 ? '0' + time.minutes : time.minutes);\n};\n\nvar nextTime = function nextTime(time, step) {\n var timeValue = parseTime(time);\n var stepValue = parseTime(step);\n\n var next = {\n hours: timeValue.hours,\n minutes: timeValue.minutes\n };\n\n next.minutes += stepValue.minutes;\n next.hours += stepValue.hours;\n\n next.hours += Math.floor(next.minutes / 60);\n next.minutes = next.minutes % 60;\n\n return formatTime(next);\n};\n\n/* harmony default export */ var time_selectvue_type_script_lang_js_ = ({\n components: { ElScrollbar: scrollbar_default.a },\n\n watch: {\n value: function value(val) {\n var _this = this;\n\n if (!val) return;\n this.$nextTick(function () {\n return _this.scrollToOption();\n });\n }\n },\n\n methods: {\n handleClick: function handleClick(item) {\n if (!item.disabled) {\n this.$emit('pick', item.value);\n }\n },\n handleClear: function handleClear() {\n this.$emit('pick', null);\n },\n scrollToOption: function scrollToOption() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.selected';\n\n var menu = this.$refs.popper.querySelector('.el-picker-panel__content');\n scroll_into_view_default()(menu, menu.querySelector(selector));\n },\n handleMenuEnter: function handleMenuEnter() {\n var _this2 = this;\n\n var selected = this.items.map(function (item) {\n return item.value;\n }).indexOf(this.value) !== -1;\n var hasDefault = this.items.map(function (item) {\n return item.value;\n }).indexOf(this.defaultValue) !== -1;\n var option = selected && '.selected' || hasDefault && '.default' || '.time-select-item:not(.disabled)';\n this.$nextTick(function () {\n return _this2.scrollToOption(option);\n });\n },\n scrollDown: function scrollDown(step) {\n var items = this.items;\n var length = items.length;\n var total = items.length;\n var index = items.map(function (item) {\n return item.value;\n }).indexOf(this.value);\n while (total--) {\n index = (index + step + length) % length;\n if (!items[index].disabled) {\n this.$emit('pick', items[index].value, true);\n return;\n }\n }\n },\n isValidValue: function isValidValue(date) {\n return this.items.filter(function (item) {\n return !item.disabled;\n }).map(function (item) {\n return item.value;\n }).indexOf(date) !== -1;\n },\n handleKeydown: function handleKeydown(event) {\n var keyCode = event.keyCode;\n if (keyCode === 38 || keyCode === 40) {\n var mapping = { 40: 1, 38: -1 };\n var offset = mapping[keyCode.toString()];\n this.scrollDown(offset);\n event.stopPropagation();\n return;\n }\n }\n },\n\n data: function data() {\n return {\n popperClass: '',\n start: '09:00',\n end: '18:00',\n step: '00:30',\n value: '',\n defaultValue: '',\n visible: false,\n minTime: '',\n maxTime: '',\n width: 0\n };\n },\n\n\n computed: {\n items: function items() {\n var start = this.start;\n var end = this.end;\n var step = this.step;\n\n var result = [];\n\n if (start && end && step) {\n var current = start;\n while (compareTime(current, end) <= 0) {\n result.push({\n value: current,\n disabled: compareTime(current, this.minTime || '-1:-1') <= 0 || compareTime(current, this.maxTime || '100:100') >= 0\n });\n current = nextTime(current, step);\n }\n }\n\n return result;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-select.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_time_selectvue_type_script_lang_js_ = (time_selectvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-select.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_select_component = normalizeComponent(\n panel_time_selectvue_type_script_lang_js_,\n time_selectvue_type_template_id_51ab9320_render,\n time_selectvue_type_template_id_51ab9320_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var time_select_api; }\ntime_select_component.options.__file = \"packages/date-picker/src/panel/time-select.vue\"\n/* harmony default export */ var time_select = (time_select_component.exports);\n// CONCATENATED MODULE: ./packages/date-picker/src/picker/time-select.js\n\n\n\n/* harmony default export */ var picker_time_select = ({\n mixins: [picker],\n\n name: 'ElTimeSelect',\n\n componentName: 'ElTimeSelect',\n\n props: {\n type: {\n type: String,\n default: 'time-select'\n }\n },\n\n beforeCreate: function beforeCreate() {\n this.panel = time_select;\n }\n});\n// CONCATENATED MODULE: ./packages/time-select/index.js\n\n\n/* istanbul ignore next */\npicker_time_select.install = function (Vue) {\n Vue.component(picker_time_select.name, picker_time_select);\n};\n\n/* harmony default export */ var packages_time_select = (picker_time_select);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-range.vue?vue&type=template&id=fb28660e&\nvar time_rangevue_type_template_id_fb28660e_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"after-leave\": function($event) {\n _vm.$emit(\"dodestroy\")\n }\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-time-range-picker el-picker-panel el-popper\",\n class: _vm.popperClass\n },\n [\n _c(\"div\", { staticClass: \"el-time-range-picker__content\" }, [\n _c(\"div\", { staticClass: \"el-time-range-picker__cell\" }, [\n _c(\"div\", { staticClass: \"el-time-range-picker__header\" }, [\n _vm._v(_vm._s(_vm.t(\"el.datepicker.startTime\")))\n ]),\n _c(\n \"div\",\n {\n staticClass:\n \"el-time-range-picker__body el-time-panel__content\",\n class: {\n \"has-seconds\": _vm.showSeconds,\n \"is-arrow\": _vm.arrowControl\n }\n },\n [\n _c(\"time-spinner\", {\n ref: \"minSpinner\",\n attrs: {\n \"show-seconds\": _vm.showSeconds,\n \"am-pm-mode\": _vm.amPmMode,\n \"arrow-control\": _vm.arrowControl,\n date: _vm.minDate\n },\n on: {\n change: _vm.handleMinChange,\n \"select-range\": _vm.setMinSelectionRange\n }\n })\n ],\n 1\n )\n ]),\n _c(\"div\", { staticClass: \"el-time-range-picker__cell\" }, [\n _c(\"div\", { staticClass: \"el-time-range-picker__header\" }, [\n _vm._v(_vm._s(_vm.t(\"el.datepicker.endTime\")))\n ]),\n _c(\n \"div\",\n {\n staticClass:\n \"el-time-range-picker__body el-time-panel__content\",\n class: {\n \"has-seconds\": _vm.showSeconds,\n \"is-arrow\": _vm.arrowControl\n }\n },\n [\n _c(\"time-spinner\", {\n ref: \"maxSpinner\",\n attrs: {\n \"show-seconds\": _vm.showSeconds,\n \"am-pm-mode\": _vm.amPmMode,\n \"arrow-control\": _vm.arrowControl,\n date: _vm.maxDate\n },\n on: {\n change: _vm.handleMaxChange,\n \"select-range\": _vm.setMaxSelectionRange\n }\n })\n ],\n 1\n )\n ])\n ]),\n _c(\"div\", { staticClass: \"el-time-panel__footer\" }, [\n _c(\n \"button\",\n {\n staticClass: \"el-time-panel__btn cancel\",\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.handleCancel()\n }\n }\n },\n [_vm._v(_vm._s(_vm.t(\"el.datepicker.cancel\")))]\n ),\n _c(\n \"button\",\n {\n staticClass: \"el-time-panel__btn confirm\",\n attrs: { type: \"button\", disabled: _vm.btnDisabled },\n on: {\n click: function($event) {\n _vm.handleConfirm()\n }\n }\n },\n [_vm._v(_vm._s(_vm.t(\"el.datepicker.confirm\")))]\n )\n ])\n ]\n )\n ]\n )\n}\nvar time_rangevue_type_template_id_fb28660e_staticRenderFns = []\ntime_rangevue_type_template_id_fb28660e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue?vue&type=template&id=fb28660e&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-range.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar MIN_TIME = Object(date_util_[\"parseDate\"])('00:00:00', 'HH:mm:ss');\nvar MAX_TIME = Object(date_util_[\"parseDate\"])('23:59:59', 'HH:mm:ss');\n\nvar time_rangevue_type_script_lang_js_minTimeOfDay = function minTimeOfDay(date) {\n return Object(date_util_[\"modifyDate\"])(MIN_TIME, date.getFullYear(), date.getMonth(), date.getDate());\n};\n\nvar time_rangevue_type_script_lang_js_maxTimeOfDay = function maxTimeOfDay(date) {\n return Object(date_util_[\"modifyDate\"])(MAX_TIME, date.getFullYear(), date.getMonth(), date.getDate());\n};\n\n// increase time by amount of milliseconds, but within the range of day\nvar advanceTime = function advanceTime(date, amount) {\n return new Date(Math.min(date.getTime() + amount, time_rangevue_type_script_lang_js_maxTimeOfDay(date).getTime()));\n};\n\n/* harmony default export */ var time_rangevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n components: { TimeSpinner: time_spinner },\n\n computed: {\n showSeconds: function showSeconds() {\n return (this.format || '').indexOf('ss') !== -1;\n },\n offset: function offset() {\n return this.showSeconds ? 11 : 8;\n },\n spinner: function spinner() {\n return this.selectionRange[0] < this.offset ? this.$refs.minSpinner : this.$refs.maxSpinner;\n },\n btnDisabled: function btnDisabled() {\n return this.minDate.getTime() > this.maxDate.getTime();\n },\n amPmMode: function amPmMode() {\n if ((this.format || '').indexOf('A') !== -1) return 'A';\n if ((this.format || '').indexOf('a') !== -1) return 'a';\n return '';\n }\n },\n\n data: function data() {\n return {\n popperClass: '',\n minDate: new Date(),\n maxDate: new Date(),\n value: [],\n oldValue: [new Date(), new Date()],\n defaultValue: null,\n format: 'HH:mm:ss',\n visible: false,\n selectionRange: [0, 2],\n arrowControl: false\n };\n },\n\n\n watch: {\n value: function value(_value) {\n if (Array.isArray(_value)) {\n this.minDate = new Date(_value[0]);\n this.maxDate = new Date(_value[1]);\n } else {\n if (Array.isArray(this.defaultValue)) {\n this.minDate = new Date(this.defaultValue[0]);\n this.maxDate = new Date(this.defaultValue[1]);\n } else if (this.defaultValue) {\n this.minDate = new Date(this.defaultValue);\n this.maxDate = advanceTime(new Date(this.defaultValue), 60 * 60 * 1000);\n } else {\n this.minDate = new Date();\n this.maxDate = advanceTime(new Date(), 60 * 60 * 1000);\n }\n }\n },\n visible: function visible(val) {\n var _this = this;\n\n if (val) {\n this.oldValue = this.value;\n this.$nextTick(function () {\n return _this.$refs.minSpinner.emitSelectRange('hours');\n });\n }\n }\n },\n\n methods: {\n handleClear: function handleClear() {\n this.$emit('pick', null);\n },\n handleCancel: function handleCancel() {\n this.$emit('pick', this.oldValue);\n },\n handleMinChange: function handleMinChange(date) {\n this.minDate = Object(date_util_[\"clearMilliseconds\"])(date);\n this.handleChange();\n },\n handleMaxChange: function handleMaxChange(date) {\n this.maxDate = Object(date_util_[\"clearMilliseconds\"])(date);\n this.handleChange();\n },\n handleChange: function handleChange() {\n if (this.isValidValue([this.minDate, this.maxDate])) {\n this.$refs.minSpinner.selectableRange = [[time_rangevue_type_script_lang_js_minTimeOfDay(this.minDate), this.maxDate]];\n this.$refs.maxSpinner.selectableRange = [[this.minDate, time_rangevue_type_script_lang_js_maxTimeOfDay(this.maxDate)]];\n this.$emit('pick', [this.minDate, this.maxDate], true);\n }\n },\n setMinSelectionRange: function setMinSelectionRange(start, end) {\n this.$emit('select-range', start, end, 'min');\n this.selectionRange = [start, end];\n },\n setMaxSelectionRange: function setMaxSelectionRange(start, end) {\n this.$emit('select-range', start, end, 'max');\n this.selectionRange = [start + this.offset, end + this.offset];\n },\n handleConfirm: function handleConfirm() {\n var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var minSelectableRange = this.$refs.minSpinner.selectableRange;\n var maxSelectableRange = this.$refs.maxSpinner.selectableRange;\n\n this.minDate = Object(date_util_[\"limitTimeRange\"])(this.minDate, minSelectableRange, this.format);\n this.maxDate = Object(date_util_[\"limitTimeRange\"])(this.maxDate, maxSelectableRange, this.format);\n\n this.$emit('pick', [this.minDate, this.maxDate], visible);\n },\n adjustSpinners: function adjustSpinners() {\n this.$refs.minSpinner.adjustSpinners();\n this.$refs.maxSpinner.adjustSpinners();\n },\n changeSelectionRange: function changeSelectionRange(step) {\n var list = this.showSeconds ? [0, 3, 6, 11, 14, 17] : [0, 3, 8, 11];\n var mapping = ['hours', 'minutes'].concat(this.showSeconds ? ['seconds'] : []);\n var index = list.indexOf(this.selectionRange[0]);\n var next = (index + step + list.length) % list.length;\n var half = list.length / 2;\n if (next < half) {\n this.$refs.minSpinner.emitSelectRange(mapping[next]);\n } else {\n this.$refs.maxSpinner.emitSelectRange(mapping[next - half]);\n }\n },\n isValidValue: function isValidValue(date) {\n return Array.isArray(date) && Object(date_util_[\"timeWithinRange\"])(this.minDate, this.$refs.minSpinner.selectableRange) && Object(date_util_[\"timeWithinRange\"])(this.maxDate, this.$refs.maxSpinner.selectableRange);\n },\n handleKeydown: function handleKeydown(event) {\n var keyCode = event.keyCode;\n var mapping = { 38: -1, 40: 1, 37: -1, 39: 1 };\n\n // Left or Right\n if (keyCode === 37 || keyCode === 39) {\n var step = mapping[keyCode];\n this.changeSelectionRange(step);\n event.preventDefault();\n return;\n }\n\n // Up or Down\n if (keyCode === 38 || keyCode === 40) {\n var _step = mapping[keyCode];\n this.spinner.scrollDown(_step);\n event.preventDefault();\n return;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_time_rangevue_type_script_lang_js_ = (time_rangevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_range_component = normalizeComponent(\n panel_time_rangevue_type_script_lang_js_,\n time_rangevue_type_template_id_fb28660e_render,\n time_rangevue_type_template_id_fb28660e_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var time_range_api; }\ntime_range_component.options.__file = \"packages/date-picker/src/panel/time-range.vue\"\n/* harmony default export */ var time_range = (time_range_component.exports);\n// CONCATENATED MODULE: ./packages/date-picker/src/picker/time-picker.js\n\n\n\n\n/* harmony default export */ var time_picker = ({\n mixins: [picker],\n\n name: 'ElTimePicker',\n\n props: {\n isRange: Boolean,\n arrowControl: Boolean\n },\n\n data: function data() {\n return {\n type: ''\n };\n },\n\n\n watch: {\n isRange: function isRange(_isRange) {\n if (this.picker) {\n this.unmountPicker();\n this.type = _isRange ? 'timerange' : 'time';\n this.panel = _isRange ? time_range : panel_time;\n this.mountPicker();\n } else {\n this.type = _isRange ? 'timerange' : 'time';\n this.panel = _isRange ? time_range : panel_time;\n }\n }\n },\n\n created: function created() {\n this.type = this.isRange ? 'timerange' : 'time';\n this.panel = this.isRange ? time_range : panel_time;\n }\n});\n// CONCATENATED MODULE: ./packages/time-picker/index.js\n\n\n/* istanbul ignore next */\ntime_picker.install = function (Vue) {\n Vue.component(time_picker.name, time_picker);\n};\n\n/* harmony default export */ var packages_time_picker = (time_picker);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/popover/src/main.vue?vue&type=template&id=52060272&\nvar mainvue_type_template_id_52060272_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"span\",\n [\n _c(\n \"transition\",\n {\n attrs: { name: _vm.transition },\n on: {\n \"after-enter\": _vm.handleAfterEnter,\n \"after-leave\": _vm.handleAfterLeave\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.disabled && _vm.showPopper,\n expression: \"!disabled && showPopper\"\n }\n ],\n ref: \"popper\",\n staticClass: \"el-popover el-popper\",\n class: [_vm.popperClass, _vm.content && \"el-popover--plain\"],\n style: { width: _vm.width + \"px\" },\n attrs: {\n role: \"tooltip\",\n id: _vm.tooltipId,\n \"aria-hidden\":\n _vm.disabled || !_vm.showPopper ? \"true\" : \"false\"\n }\n },\n [\n _vm.title\n ? _c(\"div\", {\n staticClass: \"el-popover__title\",\n domProps: { textContent: _vm._s(_vm.title) }\n })\n : _vm._e(),\n _vm._t(\"default\", [_vm._v(_vm._s(_vm.content))])\n ],\n 2\n )\n ]\n ),\n _vm._t(\"reference\")\n ],\n 2\n )\n}\nvar mainvue_type_template_id_52060272_staticRenderFns = []\nmainvue_type_template_id_52060272_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/popover/src/main.vue?vue&type=template&id=52060272&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/popover/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var mainvue_type_script_lang_js_ = ({\n name: 'ElPopover',\n\n mixins: [vue_popper_default.a],\n\n props: {\n trigger: {\n type: String,\n default: 'click',\n validator: function validator(value) {\n return ['click', 'focus', 'hover', 'manual'].indexOf(value) > -1;\n }\n },\n openDelay: {\n type: Number,\n default: 0\n },\n closeDelay: {\n type: Number,\n default: 200\n },\n title: String,\n disabled: Boolean,\n content: String,\n reference: {},\n popperClass: String,\n width: {},\n visibleArrow: {\n default: true\n },\n arrowOffset: {\n type: Number,\n default: 0\n },\n transition: {\n type: String,\n default: 'fade-in-linear'\n },\n tabindex: {\n type: Number,\n default: 0\n }\n },\n\n computed: {\n tooltipId: function tooltipId() {\n return 'el-popover-' + Object(util_[\"generateId\"])();\n }\n },\n watch: {\n showPopper: function showPopper(val) {\n if (this.disabled) {\n return;\n }\n val ? this.$emit('show') : this.$emit('hide');\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n var reference = this.referenceElm = this.reference || this.$refs.reference;\n var popper = this.popper || this.$refs.popper;\n\n if (!reference && this.$slots.reference && this.$slots.reference[0]) {\n reference = this.referenceElm = this.$slots.reference[0].elm;\n }\n // 可访问性\n if (reference) {\n Object(dom_[\"addClass\"])(reference, 'el-popover__reference');\n reference.setAttribute('aria-describedby', this.tooltipId);\n reference.setAttribute('tabindex', this.tabindex); // tab序列\n popper.setAttribute('tabindex', 0);\n\n if (this.trigger !== 'click') {\n Object(dom_[\"on\"])(reference, 'focusin', function () {\n _this.handleFocus();\n var instance = reference.__vue__;\n if (instance && typeof instance.focus === 'function') {\n instance.focus();\n }\n });\n Object(dom_[\"on\"])(popper, 'focusin', this.handleFocus);\n Object(dom_[\"on\"])(reference, 'focusout', this.handleBlur);\n Object(dom_[\"on\"])(popper, 'focusout', this.handleBlur);\n }\n Object(dom_[\"on\"])(reference, 'keydown', this.handleKeydown);\n Object(dom_[\"on\"])(reference, 'click', this.handleClick);\n }\n if (this.trigger === 'click') {\n Object(dom_[\"on\"])(reference, 'click', this.doToggle);\n Object(dom_[\"on\"])(document, 'click', this.handleDocumentClick);\n } else if (this.trigger === 'hover') {\n Object(dom_[\"on\"])(reference, 'mouseenter', this.handleMouseEnter);\n Object(dom_[\"on\"])(popper, 'mouseenter', this.handleMouseEnter);\n Object(dom_[\"on\"])(reference, 'mouseleave', this.handleMouseLeave);\n Object(dom_[\"on\"])(popper, 'mouseleave', this.handleMouseLeave);\n } else if (this.trigger === 'focus') {\n if (this.tabindex < 0) {\n console.warn('[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key');\n }\n if (reference.querySelector('input, textarea')) {\n Object(dom_[\"on\"])(reference, 'focusin', this.doShow);\n Object(dom_[\"on\"])(reference, 'focusout', this.doClose);\n } else {\n Object(dom_[\"on\"])(reference, 'mousedown', this.doShow);\n Object(dom_[\"on\"])(reference, 'mouseup', this.doClose);\n }\n }\n },\n beforeDestroy: function beforeDestroy() {\n this.cleanup();\n },\n deactivated: function deactivated() {\n this.cleanup();\n },\n\n\n methods: {\n doToggle: function doToggle() {\n this.showPopper = !this.showPopper;\n },\n doShow: function doShow() {\n this.showPopper = true;\n },\n doClose: function doClose() {\n this.showPopper = false;\n },\n handleFocus: function handleFocus() {\n Object(dom_[\"addClass\"])(this.referenceElm, 'focusing');\n if (this.trigger === 'click' || this.trigger === 'focus') this.showPopper = true;\n },\n handleClick: function handleClick() {\n Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n },\n handleBlur: function handleBlur() {\n Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n if (this.trigger === 'click' || this.trigger === 'focus') this.showPopper = false;\n },\n handleMouseEnter: function handleMouseEnter() {\n var _this2 = this;\n\n clearTimeout(this._timer);\n if (this.openDelay) {\n this._timer = setTimeout(function () {\n _this2.showPopper = true;\n }, this.openDelay);\n } else {\n this.showPopper = true;\n }\n },\n handleKeydown: function handleKeydown(ev) {\n if (ev.keyCode === 27 && this.trigger !== 'manual') {\n // esc\n this.doClose();\n }\n },\n handleMouseLeave: function handleMouseLeave() {\n var _this3 = this;\n\n clearTimeout(this._timer);\n if (this.closeDelay) {\n this._timer = setTimeout(function () {\n _this3.showPopper = false;\n }, this.closeDelay);\n } else {\n this.showPopper = false;\n }\n },\n handleDocumentClick: function handleDocumentClick(e) {\n var reference = this.reference || this.$refs.reference;\n var popper = this.popper || this.$refs.popper;\n\n if (!reference && this.$slots.reference && this.$slots.reference[0]) {\n reference = this.referenceElm = this.$slots.reference[0].elm;\n }\n if (!this.$el || !reference || this.$el.contains(e.target) || reference.contains(e.target) || !popper || popper.contains(e.target)) return;\n this.showPopper = false;\n },\n handleAfterEnter: function handleAfterEnter() {\n this.$emit('after-enter');\n },\n handleAfterLeave: function handleAfterLeave() {\n this.$emit('after-leave');\n this.doDestroy();\n },\n cleanup: function cleanup() {\n if (this.openDelay || this.closeDelay) {\n clearTimeout(this._timer);\n }\n }\n },\n\n destroyed: function destroyed() {\n var reference = this.reference;\n\n Object(dom_[\"off\"])(reference, 'click', this.doToggle);\n Object(dom_[\"off\"])(reference, 'mouseup', this.doClose);\n Object(dom_[\"off\"])(reference, 'mousedown', this.doShow);\n Object(dom_[\"off\"])(reference, 'focusin', this.doShow);\n Object(dom_[\"off\"])(reference, 'focusout', this.doClose);\n Object(dom_[\"off\"])(reference, 'mousedown', this.doShow);\n Object(dom_[\"off\"])(reference, 'mouseup', this.doClose);\n Object(dom_[\"off\"])(reference, 'mouseleave', this.handleMouseLeave);\n Object(dom_[\"off\"])(reference, 'mouseenter', this.handleMouseEnter);\n Object(dom_[\"off\"])(document, 'click', this.handleDocumentClick);\n }\n});\n// CONCATENATED MODULE: ./packages/popover/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_mainvue_type_script_lang_js_ = (mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/popover/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar main_component = normalizeComponent(\n src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_52060272_render,\n mainvue_type_template_id_52060272_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var main_api; }\nmain_component.options.__file = \"packages/popover/src/main.vue\"\n/* harmony default export */ var main = (main_component.exports);\n// CONCATENATED MODULE: ./packages/popover/src/directive.js\nvar getReference = function getReference(el, binding, vnode) {\n var _ref = binding.expression ? binding.value : binding.arg;\n var popper = vnode.context.$refs[_ref];\n if (popper) {\n if (Array.isArray(popper)) {\n popper[0].$refs.reference = el;\n } else {\n popper.$refs.reference = el;\n }\n }\n};\n\n/* harmony default export */ var directive = ({\n bind: function bind(el, binding, vnode) {\n getReference(el, binding, vnode);\n },\n inserted: function inserted(el, binding, vnode) {\n getReference(el, binding, vnode);\n }\n});\n// CONCATENATED MODULE: ./packages/popover/index.js\n\n\n\n\nexternal_vue_default.a.directive('popover', directive);\n\n/* istanbul ignore next */\nmain.install = function (Vue) {\n Vue.directive('popover', directive);\n Vue.component(main.name, main);\n};\nmain.directive = directive;\n\n/* harmony default export */ var popover = (main);\n// CONCATENATED MODULE: ./packages/tooltip/src/main.js\n\n\n\n\n\n\n/* harmony default export */ var src_main = ({\n name: 'ElTooltip',\n\n mixins: [vue_popper_default.a],\n\n props: {\n openDelay: {\n type: Number,\n default: 0\n },\n disabled: Boolean,\n manual: Boolean,\n effect: {\n type: String,\n default: 'dark'\n },\n arrowOffset: {\n type: Number,\n default: 0\n },\n popperClass: String,\n content: String,\n visibleArrow: {\n default: true\n },\n transition: {\n type: String,\n default: 'el-fade-in-linear'\n },\n popperOptions: {\n default: function _default() {\n return {\n boundariesPadding: 10,\n gpuAcceleration: false\n };\n }\n },\n enterable: {\n type: Boolean,\n default: true\n },\n hideAfter: {\n type: Number,\n default: 0\n },\n tabindex: {\n type: Number,\n default: 0\n }\n },\n\n data: function data() {\n return {\n tooltipId: 'el-tooltip-' + Object(util_[\"generateId\"])(),\n timeoutPending: null,\n focusing: false\n };\n },\n beforeCreate: function beforeCreate() {\n var _this = this;\n\n if (this.$isServer) return;\n\n this.popperVM = new external_vue_default.a({\n data: { node: '' },\n render: function render(h) {\n return this.node;\n }\n }).$mount();\n\n this.debounceClose = debounce_default()(200, function () {\n return _this.handleClosePopper();\n });\n },\n render: function render(h) {\n var _this2 = this;\n\n if (this.popperVM) {\n this.popperVM.node = h(\n 'transition',\n {\n attrs: {\n name: this.transition\n },\n on: {\n 'afterLeave': this.doDestroy\n }\n },\n [h(\n 'div',\n {\n on: {\n 'mouseleave': function mouseleave() {\n _this2.setExpectedState(false);_this2.debounceClose();\n },\n 'mouseenter': function mouseenter() {\n _this2.setExpectedState(true);\n }\n },\n\n ref: 'popper',\n attrs: { role: 'tooltip',\n id: this.tooltipId,\n 'aria-hidden': this.disabled || !this.showPopper ? 'true' : 'false'\n },\n directives: [{\n name: 'show',\n value: !this.disabled && this.showPopper\n }],\n\n 'class': ['el-tooltip__popper', 'is-' + this.effect, this.popperClass] },\n [this.$slots.content || this.content]\n )]\n );\n }\n\n var firstElement = this.getFirstElement();\n if (!firstElement) return null;\n\n var data = firstElement.data = firstElement.data || {};\n data.staticClass = this.addTooltipClass(data.staticClass);\n\n return firstElement;\n },\n mounted: function mounted() {\n var _this3 = this;\n\n this.referenceElm = this.$el;\n if (this.$el.nodeType === 1) {\n this.$el.setAttribute('aria-describedby', this.tooltipId);\n this.$el.setAttribute('tabindex', this.tabindex);\n Object(dom_[\"on\"])(this.referenceElm, 'mouseenter', this.show);\n Object(dom_[\"on\"])(this.referenceElm, 'mouseleave', this.hide);\n Object(dom_[\"on\"])(this.referenceElm, 'focus', function () {\n if (!_this3.$slots.default || !_this3.$slots.default.length) {\n _this3.handleFocus();\n return;\n }\n var instance = _this3.$slots.default[0].componentInstance;\n if (instance && instance.focus) {\n instance.focus();\n } else {\n _this3.handleFocus();\n }\n });\n Object(dom_[\"on\"])(this.referenceElm, 'blur', this.handleBlur);\n Object(dom_[\"on\"])(this.referenceElm, 'click', this.removeFocusing);\n }\n // fix issue https://github.com/ElemeFE/element/issues/14424\n if (this.value && this.popperVM) {\n this.popperVM.$nextTick(function () {\n if (_this3.value) {\n _this3.updatePopper();\n }\n });\n }\n },\n\n watch: {\n focusing: function focusing(val) {\n if (val) {\n Object(dom_[\"addClass\"])(this.referenceElm, 'focusing');\n } else {\n Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n }\n }\n },\n methods: {\n show: function show() {\n this.setExpectedState(true);\n this.handleShowPopper();\n },\n hide: function hide() {\n this.setExpectedState(false);\n this.debounceClose();\n },\n handleFocus: function handleFocus() {\n this.focusing = true;\n this.show();\n },\n handleBlur: function handleBlur() {\n this.focusing = false;\n this.hide();\n },\n removeFocusing: function removeFocusing() {\n this.focusing = false;\n },\n addTooltipClass: function addTooltipClass(prev) {\n if (!prev) {\n return 'el-tooltip';\n } else {\n return 'el-tooltip ' + prev.replace('el-tooltip', '');\n }\n },\n handleShowPopper: function handleShowPopper() {\n var _this4 = this;\n\n if (!this.expectedState || this.manual) return;\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n _this4.showPopper = true;\n }, this.openDelay);\n\n if (this.hideAfter > 0) {\n this.timeoutPending = setTimeout(function () {\n _this4.showPopper = false;\n }, this.hideAfter);\n }\n },\n handleClosePopper: function handleClosePopper() {\n if (this.enterable && this.expectedState || this.manual) return;\n clearTimeout(this.timeout);\n\n if (this.timeoutPending) {\n clearTimeout(this.timeoutPending);\n }\n this.showPopper = false;\n\n if (this.disabled) {\n this.doDestroy();\n }\n },\n setExpectedState: function setExpectedState(expectedState) {\n if (expectedState === false) {\n clearTimeout(this.timeoutPending);\n }\n this.expectedState = expectedState;\n },\n getFirstElement: function getFirstElement() {\n var slots = this.$slots.default;\n if (!Array.isArray(slots)) return null;\n var element = null;\n for (var index = 0; index < slots.length; index++) {\n if (slots[index] && slots[index].tag) {\n element = slots[index];\n };\n }\n return element;\n }\n },\n\n beforeDestroy: function beforeDestroy() {\n this.popperVM && this.popperVM.$destroy();\n },\n destroyed: function destroyed() {\n var reference = this.referenceElm;\n if (reference.nodeType === 1) {\n Object(dom_[\"off\"])(reference, 'mouseenter', this.show);\n Object(dom_[\"off\"])(reference, 'mouseleave', this.hide);\n Object(dom_[\"off\"])(reference, 'focus', this.handleFocus);\n Object(dom_[\"off\"])(reference, 'blur', this.handleBlur);\n Object(dom_[\"off\"])(reference, 'click', this.removeFocusing);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/tooltip/index.js\n\n\n/* istanbul ignore next */\nsrc_main.install = function (Vue) {\n Vue.component(src_main.name, src_main);\n};\n\n/* harmony default export */ var packages_tooltip = (src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/message-box/src/main.vue?vue&type=template&id=6b29b012&\nvar mainvue_type_template_id_6b29b012_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"msgbox-fade\" } }, [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-message-box__wrapper\",\n attrs: {\n tabindex: \"-1\",\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": _vm.title || \"dialog\"\n },\n on: {\n click: function($event) {\n if ($event.target !== $event.currentTarget) {\n return null\n }\n return _vm.handleWrapperClick($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-message-box\",\n class: [_vm.customClass, _vm.center && \"el-message-box--center\"]\n },\n [\n _vm.title !== null\n ? _c(\"div\", { staticClass: \"el-message-box__header\" }, [\n _c(\"div\", { staticClass: \"el-message-box__title\" }, [\n _vm.icon && _vm.center\n ? _c(\"div\", {\n class: [\"el-message-box__status\", _vm.icon]\n })\n : _vm._e(),\n _c(\"span\", [_vm._v(_vm._s(_vm.title))])\n ]),\n _vm.showClose\n ? _c(\n \"button\",\n {\n staticClass: \"el-message-box__headerbtn\",\n attrs: { type: \"button\", \"aria-label\": \"Close\" },\n on: {\n click: function($event) {\n _vm.handleAction(\n _vm.distinguishCancelAndClose\n ? \"close\"\n : \"cancel\"\n )\n },\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n _vm.handleAction(\n _vm.distinguishCancelAndClose\n ? \"close\"\n : \"cancel\"\n )\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"el-message-box__close el-icon-close\"\n })\n ]\n )\n : _vm._e()\n ])\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-message-box__content\" }, [\n _c(\"div\", { staticClass: \"el-message-box__container\" }, [\n _vm.icon && !_vm.center && _vm.message !== \"\"\n ? _c(\"div\", { class: [\"el-message-box__status\", _vm.icon] })\n : _vm._e(),\n _vm.message !== \"\"\n ? _c(\n \"div\",\n { staticClass: \"el-message-box__message\" },\n [\n _vm._t(\"default\", [\n !_vm.dangerouslyUseHTMLString\n ? _c(\"p\", [_vm._v(_vm._s(_vm.message))])\n : _c(\"p\", {\n domProps: { innerHTML: _vm._s(_vm.message) }\n })\n ])\n ],\n 2\n )\n : _vm._e()\n ]),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showInput,\n expression: \"showInput\"\n }\n ],\n staticClass: \"el-message-box__input\"\n },\n [\n _c(\"el-input\", {\n ref: \"input\",\n attrs: {\n type: _vm.inputType,\n placeholder: _vm.inputPlaceholder\n },\n nativeOn: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n return _vm.handleInputEnter($event)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n }),\n _c(\n \"div\",\n {\n staticClass: \"el-message-box__errormsg\",\n style: {\n visibility: !!_vm.editorErrorMessage\n ? \"visible\"\n : \"hidden\"\n }\n },\n [_vm._v(_vm._s(_vm.editorErrorMessage))]\n )\n ],\n 1\n )\n ]),\n _c(\n \"div\",\n { staticClass: \"el-message-box__btns\" },\n [\n _vm.showCancelButton\n ? _c(\n \"el-button\",\n {\n class: [_vm.cancelButtonClasses],\n attrs: {\n loading: _vm.cancelButtonLoading,\n round: _vm.roundButton,\n size: \"small\"\n },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n _vm.handleAction(\"cancel\")\n }\n },\n nativeOn: {\n click: function($event) {\n _vm.handleAction(\"cancel\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.cancelButtonText ||\n _vm.t(\"el.messagebox.cancel\")\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _c(\n \"el-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showConfirmButton,\n expression: \"showConfirmButton\"\n }\n ],\n ref: \"confirm\",\n class: [_vm.confirmButtonClasses],\n attrs: {\n loading: _vm.confirmButtonLoading,\n round: _vm.roundButton,\n size: \"small\"\n },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n _vm.handleAction(\"confirm\")\n }\n },\n nativeOn: {\n click: function($event) {\n _vm.handleAction(\"confirm\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.confirmButtonText ||\n _vm.t(\"el.messagebox.confirm\")\n ) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]\n )\n ]\n )\n ])\n}\nvar mainvue_type_template_id_6b29b012_staticRenderFns = []\nmainvue_type_template_id_6b29b012_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/message-box/src/main.vue?vue&type=template&id=6b29b012&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/aria-dialog\"\nvar aria_dialog_ = __webpack_require__(39);\nvar aria_dialog_default = /*#__PURE__*/__webpack_require__.n(aria_dialog_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/message-box/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\nvar messageBox = void 0;\nvar typeMap = {\n success: 'success',\n info: 'info',\n warning: 'warning',\n error: 'error'\n};\n\n/* harmony default export */ var message_box_src_mainvue_type_script_lang_js_ = ({\n mixins: [popup_default.a, locale_default.a],\n\n props: {\n modal: {\n default: true\n },\n lockScroll: {\n default: true\n },\n showClose: {\n type: Boolean,\n default: true\n },\n closeOnClickModal: {\n default: true\n },\n closeOnPressEscape: {\n default: true\n },\n closeOnHashChange: {\n default: true\n },\n center: {\n default: false,\n type: Boolean\n },\n roundButton: {\n default: false,\n type: Boolean\n }\n },\n\n components: {\n ElInput: input_default.a,\n ElButton: button_default.a\n },\n\n computed: {\n icon: function icon() {\n var type = this.type,\n iconClass = this.iconClass;\n\n return iconClass || (type && typeMap[type] ? 'el-icon-' + typeMap[type] : '');\n },\n confirmButtonClasses: function confirmButtonClasses() {\n return 'el-button--primary ' + this.confirmButtonClass;\n },\n cancelButtonClasses: function cancelButtonClasses() {\n return '' + this.cancelButtonClass;\n }\n },\n\n methods: {\n getSafeClose: function getSafeClose() {\n var _this = this;\n\n var currentId = this.uid;\n return function () {\n _this.$nextTick(function () {\n if (currentId === _this.uid) _this.doClose();\n });\n };\n },\n doClose: function doClose() {\n var _this2 = this;\n\n if (!this.visible) return;\n this.visible = false;\n this._closing = true;\n\n this.onClose && this.onClose();\n messageBox.closeDialog(); // 解绑\n if (this.lockScroll) {\n setTimeout(this.restoreBodyStyle, 200);\n }\n this.opened = false;\n this.doAfterClose();\n setTimeout(function () {\n if (_this2.action) _this2.callback(_this2.action, _this2);\n });\n },\n handleWrapperClick: function handleWrapperClick() {\n if (this.closeOnClickModal) {\n this.handleAction(this.distinguishCancelAndClose ? 'close' : 'cancel');\n }\n },\n handleInputEnter: function handleInputEnter() {\n if (this.inputType !== 'textarea') {\n return this.handleAction('confirm');\n }\n },\n handleAction: function handleAction(action) {\n if (this.$type === 'prompt' && action === 'confirm' && !this.validate()) {\n return;\n }\n this.action = action;\n if (typeof this.beforeClose === 'function') {\n this.close = this.getSafeClose();\n this.beforeClose(action, this, this.close);\n } else {\n this.doClose();\n }\n },\n validate: function validate() {\n if (this.$type === 'prompt') {\n var inputPattern = this.inputPattern;\n if (inputPattern && !inputPattern.test(this.inputValue || '')) {\n this.editorErrorMessage = this.inputErrorMessage || Object(lib_locale_[\"t\"])('el.messagebox.error');\n Object(dom_[\"addClass\"])(this.getInputElement(), 'invalid');\n return false;\n }\n var inputValidator = this.inputValidator;\n if (typeof inputValidator === 'function') {\n var validateResult = inputValidator(this.inputValue);\n if (validateResult === false) {\n this.editorErrorMessage = this.inputErrorMessage || Object(lib_locale_[\"t\"])('el.messagebox.error');\n Object(dom_[\"addClass\"])(this.getInputElement(), 'invalid');\n return false;\n }\n if (typeof validateResult === 'string') {\n this.editorErrorMessage = validateResult;\n Object(dom_[\"addClass\"])(this.getInputElement(), 'invalid');\n return false;\n }\n }\n }\n this.editorErrorMessage = '';\n Object(dom_[\"removeClass\"])(this.getInputElement(), 'invalid');\n return true;\n },\n getFirstFocus: function getFirstFocus() {\n var btn = this.$el.querySelector('.el-message-box__btns .el-button');\n var title = this.$el.querySelector('.el-message-box__btns .el-message-box__title');\n return btn || title;\n },\n getInputElement: function getInputElement() {\n var inputRefs = this.$refs.input.$refs;\n return inputRefs.input || inputRefs.textarea;\n },\n handleClose: function handleClose() {\n this.handleAction('close');\n }\n },\n\n watch: {\n inputValue: {\n immediate: true,\n handler: function handler(val) {\n var _this3 = this;\n\n this.$nextTick(function (_) {\n if (_this3.$type === 'prompt' && val !== null) {\n _this3.validate();\n }\n });\n }\n },\n\n visible: function visible(val) {\n var _this4 = this;\n\n if (val) {\n this.uid++;\n if (this.$type === 'alert' || this.$type === 'confirm') {\n this.$nextTick(function () {\n _this4.$refs.confirm.$el.focus();\n });\n }\n this.focusAfterClosed = document.activeElement;\n messageBox = new aria_dialog_default.a(this.$el, this.focusAfterClosed, this.getFirstFocus());\n }\n\n // prompt\n if (this.$type !== 'prompt') return;\n if (val) {\n setTimeout(function () {\n if (_this4.$refs.input && _this4.$refs.input.$el) {\n _this4.getInputElement().focus();\n }\n }, 500);\n } else {\n this.editorErrorMessage = '';\n Object(dom_[\"removeClass\"])(this.getInputElement(), 'invalid');\n }\n }\n },\n\n mounted: function mounted() {\n var _this5 = this;\n\n this.$nextTick(function () {\n if (_this5.closeOnHashChange) {\n window.addEventListener('hashchange', _this5.close);\n }\n });\n },\n beforeDestroy: function beforeDestroy() {\n if (this.closeOnHashChange) {\n window.removeEventListener('hashchange', this.close);\n }\n setTimeout(function () {\n messageBox.closeDialog();\n });\n },\n data: function data() {\n return {\n uid: 1,\n title: undefined,\n message: '',\n type: '',\n iconClass: '',\n customClass: '',\n showInput: false,\n inputValue: null,\n inputPlaceholder: '',\n inputType: 'text',\n inputPattern: null,\n inputValidator: null,\n inputErrorMessage: '',\n showConfirmButton: true,\n showCancelButton: false,\n action: '',\n confirmButtonText: '',\n cancelButtonText: '',\n confirmButtonLoading: false,\n cancelButtonLoading: false,\n confirmButtonClass: '',\n confirmButtonDisabled: false,\n cancelButtonClass: '',\n editorErrorMessage: null,\n callback: null,\n dangerouslyUseHTMLString: false,\n focusAfterClosed: null,\n isOnComposition: false,\n distinguishCancelAndClose: false\n };\n }\n});\n// CONCATENATED MODULE: ./packages/message-box/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_message_box_src_mainvue_type_script_lang_js_ = (message_box_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/message-box/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_main_component = normalizeComponent(\n packages_message_box_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_6b29b012_render,\n mainvue_type_template_id_6b29b012_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_main_api; }\nsrc_main_component.options.__file = \"packages/message-box/src/main.vue\"\n/* harmony default export */ var message_box_src_main = (src_main_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vdom\"\nvar vdom_ = __webpack_require__(23);\n\n// CONCATENATED MODULE: ./packages/message-box/src/main.js\nvar main_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar main_defaults = {\n title: null,\n message: '',\n type: '',\n iconClass: '',\n showInput: false,\n showClose: true,\n modalFade: true,\n lockScroll: true,\n closeOnClickModal: true,\n closeOnPressEscape: true,\n closeOnHashChange: true,\n inputValue: null,\n inputPlaceholder: '',\n inputType: 'text',\n inputPattern: null,\n inputValidator: null,\n inputErrorMessage: '',\n showConfirmButton: true,\n showCancelButton: false,\n confirmButtonPosition: 'right',\n confirmButtonHighlight: false,\n cancelButtonHighlight: false,\n confirmButtonText: '',\n cancelButtonText: '',\n confirmButtonClass: '',\n cancelButtonClass: '',\n customClass: '',\n beforeClose: null,\n dangerouslyUseHTMLString: false,\n center: false,\n roundButton: false,\n distinguishCancelAndClose: false\n};\n\n\n\n\n\n\nvar MessageBoxConstructor = external_vue_default.a.extend(message_box_src_main);\n\nvar currentMsg = void 0,\n main_instance = void 0;\nvar msgQueue = [];\n\nvar defaultCallback = function defaultCallback(action) {\n if (currentMsg) {\n var callback = currentMsg.callback;\n if (typeof callback === 'function') {\n if (main_instance.showInput) {\n callback(main_instance.inputValue, action);\n } else {\n callback(action);\n }\n }\n if (currentMsg.resolve) {\n if (action === 'confirm') {\n if (main_instance.showInput) {\n currentMsg.resolve({ value: main_instance.inputValue, action: action });\n } else {\n currentMsg.resolve(action);\n }\n } else if (currentMsg.reject && (action === 'cancel' || action === 'close')) {\n currentMsg.reject(action);\n }\n }\n }\n};\n\nvar initInstance = function initInstance() {\n main_instance = new MessageBoxConstructor({\n el: document.createElement('div')\n });\n\n main_instance.callback = defaultCallback;\n};\n\nvar main_showNextMsg = function showNextMsg() {\n if (!main_instance) {\n initInstance();\n }\n main_instance.action = '';\n\n if (!main_instance.visible || main_instance.closeTimer) {\n if (msgQueue.length > 0) {\n currentMsg = msgQueue.shift();\n\n var options = currentMsg.options;\n for (var prop in options) {\n if (options.hasOwnProperty(prop)) {\n main_instance[prop] = options[prop];\n }\n }\n if (options.callback === undefined) {\n main_instance.callback = defaultCallback;\n }\n\n var oldCb = main_instance.callback;\n main_instance.callback = function (action, instance) {\n oldCb(action, instance);\n showNextMsg();\n };\n if (Object(vdom_[\"isVNode\"])(main_instance.message)) {\n main_instance.$slots.default = [main_instance.message];\n main_instance.message = null;\n } else {\n delete main_instance.$slots.default;\n }\n ['modal', 'showClose', 'closeOnClickModal', 'closeOnPressEscape', 'closeOnHashChange'].forEach(function (prop) {\n if (main_instance[prop] === undefined) {\n main_instance[prop] = true;\n }\n });\n document.body.appendChild(main_instance.$el);\n\n external_vue_default.a.nextTick(function () {\n main_instance.visible = true;\n });\n }\n }\n};\n\nvar main_MessageBox = function MessageBox(options, callback) {\n if (external_vue_default.a.prototype.$isServer) return;\n if (typeof options === 'string' || Object(vdom_[\"isVNode\"])(options)) {\n options = {\n message: options\n };\n if (typeof arguments[1] === 'string') {\n options.title = arguments[1];\n }\n } else if (options.callback && !callback) {\n callback = options.callback;\n }\n\n if (typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n // eslint-disable-line\n msgQueue.push({\n options: merge_default()({}, main_defaults, MessageBox.defaults, options),\n callback: callback,\n resolve: resolve,\n reject: reject\n });\n\n main_showNextMsg();\n });\n } else {\n msgQueue.push({\n options: merge_default()({}, main_defaults, MessageBox.defaults, options),\n callback: callback\n });\n\n main_showNextMsg();\n }\n};\n\nmain_MessageBox.setDefaults = function (defaults) {\n main_MessageBox.defaults = defaults;\n};\n\nmain_MessageBox.alert = function (message, title, options) {\n if ((typeof title === 'undefined' ? 'undefined' : main_typeof(title)) === 'object') {\n options = title;\n title = '';\n } else if (title === undefined) {\n title = '';\n }\n return main_MessageBox(merge_default()({\n title: title,\n message: message,\n $type: 'alert',\n closeOnPressEscape: false,\n closeOnClickModal: false\n }, options));\n};\n\nmain_MessageBox.confirm = function (message, title, options) {\n if ((typeof title === 'undefined' ? 'undefined' : main_typeof(title)) === 'object') {\n options = title;\n title = '';\n } else if (title === undefined) {\n title = '';\n }\n return main_MessageBox(merge_default()({\n title: title,\n message: message,\n $type: 'confirm',\n showCancelButton: true\n }, options));\n};\n\nmain_MessageBox.prompt = function (message, title, options) {\n if ((typeof title === 'undefined' ? 'undefined' : main_typeof(title)) === 'object') {\n options = title;\n title = '';\n } else if (title === undefined) {\n title = '';\n }\n return main_MessageBox(merge_default()({\n title: title,\n message: message,\n showCancelButton: true,\n showInput: true,\n $type: 'prompt'\n }, options));\n};\n\nmain_MessageBox.close = function () {\n main_instance.doClose();\n main_instance.visible = false;\n msgQueue = [];\n currentMsg = null;\n};\n\n/* harmony default export */ var packages_message_box_src_main = (main_MessageBox);\n\n// CONCATENATED MODULE: ./packages/message-box/index.js\n\n/* harmony default export */ var message_box = (packages_message_box_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb.vue?vue&type=template&id=4b464c06&\nvar breadcrumbvue_type_template_id_4b464c06_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-breadcrumb\",\n attrs: { \"aria-label\": \"Breadcrumb\", role: \"navigation\" }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar breadcrumbvue_type_template_id_4b464c06_staticRenderFns = []\nbreadcrumbvue_type_template_id_4b464c06_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb.vue?vue&type=template&id=4b464c06&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var breadcrumbvue_type_script_lang_js_ = ({\n name: 'ElBreadcrumb',\n\n props: {\n separator: {\n type: String,\n default: '/'\n },\n separatorClass: {\n type: String,\n default: ''\n }\n },\n\n provide: function provide() {\n return {\n elBreadcrumb: this\n };\n },\n mounted: function mounted() {\n var items = this.$el.querySelectorAll('.el-breadcrumb__item');\n if (items.length) {\n items[items.length - 1].setAttribute('aria-current', 'page');\n }\n }\n});\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_breadcrumbvue_type_script_lang_js_ = (breadcrumbvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb.vue\n\n\n\n\n\n/* normalize component */\n\nvar breadcrumb_component = normalizeComponent(\n src_breadcrumbvue_type_script_lang_js_,\n breadcrumbvue_type_template_id_4b464c06_render,\n breadcrumbvue_type_template_id_4b464c06_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var breadcrumb_api; }\nbreadcrumb_component.options.__file = \"packages/breadcrumb/src/breadcrumb.vue\"\n/* harmony default export */ var breadcrumb = (breadcrumb_component.exports);\n// CONCATENATED MODULE: ./packages/breadcrumb/index.js\n\n\n/* istanbul ignore next */\nbreadcrumb.install = function (Vue) {\n Vue.component(breadcrumb.name, breadcrumb);\n};\n\n/* harmony default export */ var packages_breadcrumb = (breadcrumb);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=template&id=fcf9eaac&\nvar breadcrumb_itemvue_type_template_id_fcf9eaac_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { staticClass: \"el-breadcrumb__item\" }, [\n _c(\n \"span\",\n {\n ref: \"link\",\n class: [\"el-breadcrumb__inner\", _vm.to ? \"is-link\" : \"\"],\n attrs: { role: \"link\" }\n },\n [_vm._t(\"default\")],\n 2\n ),\n _vm.separatorClass\n ? _c(\"i\", {\n staticClass: \"el-breadcrumb__separator\",\n class: _vm.separatorClass\n })\n : _c(\n \"span\",\n {\n staticClass: \"el-breadcrumb__separator\",\n attrs: { role: \"presentation\" }\n },\n [_vm._v(_vm._s(_vm.separator))]\n )\n ])\n}\nvar breadcrumb_itemvue_type_template_id_fcf9eaac_staticRenderFns = []\nbreadcrumb_itemvue_type_template_id_fcf9eaac_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=template&id=fcf9eaac&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var breadcrumb_itemvue_type_script_lang_js_ = ({\n name: 'ElBreadcrumbItem',\n props: {\n to: {},\n replace: Boolean\n },\n data: function data() {\n return {\n separator: '',\n separatorClass: ''\n };\n },\n\n\n inject: ['elBreadcrumb'],\n\n mounted: function mounted() {\n var _this = this;\n\n this.separator = this.elBreadcrumb.separator;\n this.separatorClass = this.elBreadcrumb.separatorClass;\n var link = this.$refs.link;\n link.setAttribute('role', 'link');\n link.addEventListener('click', function (_) {\n var to = _this.to,\n $router = _this.$router;\n\n if (!to || !$router) return;\n _this.replace ? $router.replace(to) : $router.push(to);\n });\n }\n});\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_breadcrumb_itemvue_type_script_lang_js_ = (breadcrumb_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar breadcrumb_item_component = normalizeComponent(\n src_breadcrumb_itemvue_type_script_lang_js_,\n breadcrumb_itemvue_type_template_id_fcf9eaac_render,\n breadcrumb_itemvue_type_template_id_fcf9eaac_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var breadcrumb_item_api; }\nbreadcrumb_item_component.options.__file = \"packages/breadcrumb/src/breadcrumb-item.vue\"\n/* harmony default export */ var breadcrumb_item = (breadcrumb_item_component.exports);\n// CONCATENATED MODULE: ./packages/breadcrumb-item/index.js\n\n\n/* istanbul ignore next */\nbreadcrumb_item.install = function (Vue) {\n Vue.component(breadcrumb_item.name, breadcrumb_item);\n};\n\n/* harmony default export */ var packages_breadcrumb_item = (breadcrumb_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form.vue?vue&type=template&id=a1b5ff34&\nvar formvue_type_template_id_a1b5ff34_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n staticClass: \"el-form\",\n class: [\n _vm.labelPosition ? \"el-form--label-\" + _vm.labelPosition : \"\",\n { \"el-form--inline\": _vm.inline }\n ]\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar formvue_type_template_id_a1b5ff34_staticRenderFns = []\nformvue_type_template_id_a1b5ff34_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/form/src/form.vue?vue&type=template&id=a1b5ff34&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var formvue_type_script_lang_js_ = ({\n name: 'ElForm',\n\n componentName: 'ElForm',\n\n provide: function provide() {\n return {\n elForm: this\n };\n },\n\n\n props: {\n model: Object,\n rules: Object,\n labelPosition: String,\n labelWidth: String,\n labelSuffix: {\n type: String,\n default: ''\n },\n inline: Boolean,\n inlineMessage: Boolean,\n statusIcon: Boolean,\n showMessage: {\n type: Boolean,\n default: true\n },\n size: String,\n disabled: Boolean,\n validateOnRuleChange: {\n type: Boolean,\n default: true\n },\n hideRequiredAsterisk: {\n type: Boolean,\n default: false\n }\n },\n watch: {\n rules: function rules() {\n // remove then add event listeners on form-item after form rules change\n this.fields.forEach(function (field) {\n field.removeValidateEvents();\n field.addValidateEvents();\n });\n\n if (this.validateOnRuleChange) {\n this.validate(function () {});\n }\n }\n },\n computed: {\n autoLabelWidth: function autoLabelWidth() {\n if (!this.potentialLabelWidthArr.length) return 0;\n var max = Math.max.apply(Math, this.potentialLabelWidthArr);\n return max ? max + 'px' : '';\n }\n },\n data: function data() {\n return {\n fields: [],\n potentialLabelWidthArr: [] // use this array to calculate auto width\n };\n },\n created: function created() {\n var _this = this;\n\n this.$on('el.form.addField', function (field) {\n if (field) {\n _this.fields.push(field);\n }\n });\n /* istanbul ignore next */\n this.$on('el.form.removeField', function (field) {\n if (field.prop) {\n _this.fields.splice(_this.fields.indexOf(field), 1);\n }\n });\n },\n\n methods: {\n resetFields: function resetFields() {\n if (!this.model) {\n console.warn('[Element Warn][Form]model is required for resetFields to work.');\n return;\n }\n this.fields.forEach(function (field) {\n field.resetField();\n });\n },\n clearValidate: function clearValidate() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n var fields = props.length ? typeof props === 'string' ? this.fields.filter(function (field) {\n return props === field.prop;\n }) : this.fields.filter(function (field) {\n return props.indexOf(field.prop) > -1;\n }) : this.fields;\n fields.forEach(function (field) {\n field.clearValidate();\n });\n },\n validate: function validate(callback) {\n var _this2 = this;\n\n if (!this.model) {\n console.warn('[Element Warn][Form]model is required for validate to work!');\n return;\n }\n\n var promise = void 0;\n // if no callback, return promise\n if (typeof callback !== 'function' && window.Promise) {\n promise = new window.Promise(function (resolve, reject) {\n callback = function callback(valid) {\n valid ? resolve(valid) : reject(valid);\n };\n });\n }\n\n var valid = true;\n var count = 0;\n // 如果需要验证的fields为空,调用验证时立刻返回callback\n if (this.fields.length === 0 && callback) {\n callback(true);\n }\n var invalidFields = {};\n this.fields.forEach(function (field) {\n field.validate('', function (message, field) {\n if (message) {\n valid = false;\n }\n invalidFields = merge_default()({}, invalidFields, field);\n if (typeof callback === 'function' && ++count === _this2.fields.length) {\n callback(valid, invalidFields);\n }\n });\n });\n\n if (promise) {\n return promise;\n }\n },\n validateField: function validateField(props, cb) {\n props = [].concat(props);\n var fields = this.fields.filter(function (field) {\n return props.indexOf(field.prop) !== -1;\n });\n if (!fields.length) {\n console.warn('[Element Warn]please pass correct props!');\n return;\n }\n\n fields.forEach(function (field) {\n field.validate('', cb);\n });\n },\n getLabelWidthIndex: function getLabelWidthIndex(width) {\n var index = this.potentialLabelWidthArr.indexOf(width);\n // it's impossible\n if (index === -1) {\n throw new Error('[ElementForm]unpected width ', width);\n }\n return index;\n },\n registerLabelWidth: function registerLabelWidth(val, oldVal) {\n if (val && oldVal) {\n var index = this.getLabelWidthIndex(oldVal);\n this.potentialLabelWidthArr.splice(index, 1, val);\n } else if (val) {\n this.potentialLabelWidthArr.push(val);\n }\n },\n deregisterLabelWidth: function deregisterLabelWidth(val) {\n var index = this.getLabelWidthIndex(val);\n this.potentialLabelWidthArr.splice(index, 1);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/form/src/form.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_formvue_type_script_lang_js_ = (formvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/form/src/form.vue\n\n\n\n\n\n/* normalize component */\n\nvar form_component = normalizeComponent(\n src_formvue_type_script_lang_js_,\n formvue_type_template_id_a1b5ff34_render,\n formvue_type_template_id_a1b5ff34_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var form_api; }\nform_component.options.__file = \"packages/form/src/form.vue\"\n/* harmony default export */ var src_form = (form_component.exports);\n// CONCATENATED MODULE: ./packages/form/index.js\n\n\n/* istanbul ignore next */\nsrc_form.install = function (Vue) {\n Vue.component(src_form.name, src_form);\n};\n\n/* harmony default export */ var packages_form = (src_form);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form-item.vue?vue&type=template&id=b6f3db6c&\nvar form_itemvue_type_template_id_b6f3db6c_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-form-item\",\n class: [\n {\n \"el-form-item--feedback\": _vm.elForm && _vm.elForm.statusIcon,\n \"is-error\": _vm.validateState === \"error\",\n \"is-validating\": _vm.validateState === \"validating\",\n \"is-success\": _vm.validateState === \"success\",\n \"is-required\": _vm.isRequired || _vm.required,\n \"is-no-asterisk\": _vm.elForm && _vm.elForm.hideRequiredAsterisk\n },\n _vm.sizeClass ? \"el-form-item--\" + _vm.sizeClass : \"\"\n ]\n },\n [\n _c(\n \"label-wrap\",\n {\n attrs: {\n \"is-auto-width\": _vm.labelStyle && _vm.labelStyle.width === \"auto\",\n \"update-all\": _vm.form.labelWidth === \"auto\"\n }\n },\n [\n _vm.label || _vm.$slots.label\n ? _c(\n \"label\",\n {\n staticClass: \"el-form-item__label\",\n style: _vm.labelStyle,\n attrs: { for: _vm.labelFor }\n },\n [\n _vm._t(\"label\", [\n _vm._v(_vm._s(_vm.label + _vm.form.labelSuffix))\n ])\n ],\n 2\n )\n : _vm._e()\n ]\n ),\n _c(\n \"div\",\n { staticClass: \"el-form-item__content\", style: _vm.contentStyle },\n [\n _vm._t(\"default\"),\n _c(\n \"transition\",\n { attrs: { name: \"el-zoom-in-top\" } },\n [\n _vm.validateState === \"error\" &&\n _vm.showMessage &&\n _vm.form.showMessage\n ? _vm._t(\n \"error\",\n [\n _c(\n \"div\",\n {\n staticClass: \"el-form-item__error\",\n class: {\n \"el-form-item__error--inline\":\n typeof _vm.inlineMessage === \"boolean\"\n ? _vm.inlineMessage\n : (_vm.elForm && _vm.elForm.inlineMessage) ||\n false\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.validateMessage) +\n \"\\n \"\n )\n ]\n )\n ],\n { error: _vm.validateMessage }\n )\n : _vm._e()\n ],\n 2\n )\n ],\n 2\n )\n ],\n 1\n )\n}\nvar form_itemvue_type_template_id_b6f3db6c_staticRenderFns = []\nform_itemvue_type_template_id_b6f3db6c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/form/src/form-item.vue?vue&type=template&id=b6f3db6c&\n\n// EXTERNAL MODULE: external \"async-validator\"\nvar external_async_validator_ = __webpack_require__(40);\nvar external_async_validator_default = /*#__PURE__*/__webpack_require__.n(external_async_validator_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/label-wrap.vue?vue&type=script&lang=js&\n\n\n/* harmony default export */ var label_wrapvue_type_script_lang_js_ = ({\n props: {\n isAutoWidth: Boolean,\n updateAll: Boolean\n },\n\n inject: ['elForm', 'elFormItem'],\n\n render: function render() {\n var h = arguments[0];\n\n var slots = this.$slots.default;\n if (!slots) return null;\n if (this.isAutoWidth) {\n var autoLabelWidth = this.elForm.autoLabelWidth;\n var style = {};\n if (autoLabelWidth && autoLabelWidth !== 'auto') {\n var marginLeft = parseInt(autoLabelWidth, 10) - this.computedWidth;\n if (marginLeft) {\n style.marginLeft = marginLeft + 'px';\n }\n }\n return h(\n 'div',\n { 'class': 'el-form-item__label-wrap', style: style },\n [slots]\n );\n } else {\n return slots[0];\n }\n },\n\n\n methods: {\n getLabelWidth: function getLabelWidth() {\n if (this.$el && this.$el.firstElementChild) {\n var computedWidth = window.getComputedStyle(this.$el.firstElementChild).width;\n return Math.ceil(parseFloat(computedWidth));\n } else {\n return 0;\n }\n },\n updateLabelWidth: function updateLabelWidth() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'update';\n\n if (this.$slots.default && this.isAutoWidth && this.$el.firstElementChild) {\n if (action === 'update') {\n this.computedWidth = this.getLabelWidth();\n } else if (action === 'remove') {\n this.elForm.deregisterLabelWidth(this.computedWidth);\n }\n }\n }\n },\n\n watch: {\n computedWidth: function computedWidth(val, oldVal) {\n if (this.updateAll) {\n this.elForm.registerLabelWidth(val, oldVal);\n this.elFormItem.updateComputedLabelWidth(val);\n }\n }\n },\n\n data: function data() {\n return {\n computedWidth: 0\n };\n },\n mounted: function mounted() {\n this.updateLabelWidth('update');\n },\n updated: function updated() {\n this.updateLabelWidth('update');\n },\n beforeDestroy: function beforeDestroy() {\n this.updateLabelWidth('remove');\n }\n});\n// CONCATENATED MODULE: ./packages/form/src/label-wrap.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_label_wrapvue_type_script_lang_js_ = (label_wrapvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/form/src/label-wrap.vue\nvar label_wrap_render, label_wrap_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar label_wrap_component = normalizeComponent(\n src_label_wrapvue_type_script_lang_js_,\n label_wrap_render,\n label_wrap_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var label_wrap_api; }\nlabel_wrap_component.options.__file = \"packages/form/src/label-wrap.vue\"\n/* harmony default export */ var label_wrap = (label_wrap_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var form_itemvue_type_script_lang_js_ = ({\n name: 'ElFormItem',\n\n componentName: 'ElFormItem',\n\n mixins: [emitter_default.a],\n\n provide: function provide() {\n return {\n elFormItem: this\n };\n },\n\n\n inject: ['elForm'],\n\n props: {\n label: String,\n labelWidth: String,\n prop: String,\n required: {\n type: Boolean,\n default: undefined\n },\n rules: [Object, Array],\n error: String,\n validateStatus: String,\n for: String,\n inlineMessage: {\n type: [String, Boolean],\n default: ''\n },\n showMessage: {\n type: Boolean,\n default: true\n },\n size: String\n },\n components: {\n // use this component to calculate auto width\n LabelWrap: label_wrap\n },\n watch: {\n error: {\n immediate: true,\n handler: function handler(value) {\n this.validateMessage = value;\n this.validateState = value ? 'error' : '';\n }\n },\n validateStatus: function validateStatus(value) {\n this.validateState = value;\n }\n },\n computed: {\n labelFor: function labelFor() {\n return this.for || this.prop;\n },\n labelStyle: function labelStyle() {\n var ret = {};\n if (this.form.labelPosition === 'top') return ret;\n var labelWidth = this.labelWidth || this.form.labelWidth;\n if (labelWidth) {\n ret.width = labelWidth;\n }\n return ret;\n },\n contentStyle: function contentStyle() {\n var ret = {};\n var label = this.label;\n if (this.form.labelPosition === 'top' || this.form.inline) return ret;\n if (!label && !this.labelWidth && this.isNested) return ret;\n var labelWidth = this.labelWidth || this.form.labelWidth;\n if (labelWidth === 'auto') {\n if (this.labelWidth === 'auto') {\n ret.marginLeft = this.computedLabelWidth;\n } else if (this.form.labelWidth === 'auto') {\n ret.marginLeft = this.elForm.autoLabelWidth;\n }\n } else {\n ret.marginLeft = labelWidth;\n }\n return ret;\n },\n form: function form() {\n var parent = this.$parent;\n var parentName = parent.$options.componentName;\n while (parentName !== 'ElForm') {\n if (parentName === 'ElFormItem') {\n this.isNested = true;\n }\n parent = parent.$parent;\n parentName = parent.$options.componentName;\n }\n return parent;\n },\n fieldValue: function fieldValue() {\n var model = this.form.model;\n if (!model || !this.prop) {\n return;\n }\n\n var path = this.prop;\n if (path.indexOf(':') !== -1) {\n path = path.replace(/:/, '.');\n }\n\n return Object(util_[\"getPropByPath\"])(model, path, true).v;\n },\n isRequired: function isRequired() {\n var rules = this.getRules();\n var isRequired = false;\n\n if (rules && rules.length) {\n rules.every(function (rule) {\n if (rule.required) {\n isRequired = true;\n return false;\n }\n return true;\n });\n }\n return isRequired;\n },\n _formSize: function _formSize() {\n return this.elForm.size;\n },\n elFormItemSize: function elFormItemSize() {\n return this.size || this._formSize;\n },\n sizeClass: function sizeClass() {\n return this.elFormItemSize || (this.$ELEMENT || {}).size;\n }\n },\n data: function data() {\n return {\n validateState: '',\n validateMessage: '',\n validateDisabled: false,\n validator: {},\n isNested: false,\n computedLabelWidth: ''\n };\n },\n\n methods: {\n validate: function validate(trigger) {\n var _this = this;\n\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : util_[\"noop\"];\n\n this.validateDisabled = false;\n var rules = this.getFilteredRule(trigger);\n if ((!rules || rules.length === 0) && this.required === undefined) {\n callback();\n return true;\n }\n\n this.validateState = 'validating';\n\n var descriptor = {};\n if (rules && rules.length > 0) {\n rules.forEach(function (rule) {\n delete rule.trigger;\n });\n }\n descriptor[this.prop] = rules;\n\n var validator = new external_async_validator_default.a(descriptor);\n var model = {};\n\n model[this.prop] = this.fieldValue;\n\n validator.validate(model, { firstFields: true }, function (errors, invalidFields) {\n _this.validateState = !errors ? 'success' : 'error';\n _this.validateMessage = errors ? errors[0].message : '';\n\n callback(_this.validateMessage, invalidFields);\n _this.elForm && _this.elForm.$emit('validate', _this.prop, !errors, _this.validateMessage || null);\n });\n },\n clearValidate: function clearValidate() {\n this.validateState = '';\n this.validateMessage = '';\n this.validateDisabled = false;\n },\n resetField: function resetField() {\n var _this2 = this;\n\n this.validateState = '';\n this.validateMessage = '';\n\n var model = this.form.model;\n var value = this.fieldValue;\n var path = this.prop;\n if (path.indexOf(':') !== -1) {\n path = path.replace(/:/, '.');\n }\n\n var prop = Object(util_[\"getPropByPath\"])(model, path, true);\n\n this.validateDisabled = true;\n if (Array.isArray(value)) {\n prop.o[prop.k] = [].concat(this.initialValue);\n } else {\n prop.o[prop.k] = this.initialValue;\n }\n\n // reset validateDisabled after onFieldChange triggered\n this.$nextTick(function () {\n _this2.validateDisabled = false;\n });\n\n this.broadcast('ElTimeSelect', 'fieldReset', this.initialValue);\n },\n getRules: function getRules() {\n var formRules = this.form.rules;\n var selfRules = this.rules;\n var requiredRule = this.required !== undefined ? { required: !!this.required } : [];\n\n var prop = Object(util_[\"getPropByPath\"])(formRules, this.prop || '');\n formRules = formRules ? prop.o[this.prop || ''] || prop.v : [];\n\n return [].concat(selfRules || formRules || []).concat(requiredRule);\n },\n getFilteredRule: function getFilteredRule(trigger) {\n var rules = this.getRules();\n\n return rules.filter(function (rule) {\n if (!rule.trigger || trigger === '') return true;\n if (Array.isArray(rule.trigger)) {\n return rule.trigger.indexOf(trigger) > -1;\n } else {\n return rule.trigger === trigger;\n }\n }).map(function (rule) {\n return merge_default()({}, rule);\n });\n },\n onFieldBlur: function onFieldBlur() {\n this.validate('blur');\n },\n onFieldChange: function onFieldChange() {\n if (this.validateDisabled) {\n this.validateDisabled = false;\n return;\n }\n\n this.validate('change');\n },\n updateComputedLabelWidth: function updateComputedLabelWidth(width) {\n this.computedLabelWidth = width ? width + 'px' : '';\n },\n addValidateEvents: function addValidateEvents() {\n var rules = this.getRules();\n\n if (rules.length || this.required !== undefined) {\n this.$on('el.form.blur', this.onFieldBlur);\n this.$on('el.form.change', this.onFieldChange);\n }\n },\n removeValidateEvents: function removeValidateEvents() {\n this.$off();\n }\n },\n mounted: function mounted() {\n if (this.prop) {\n this.dispatch('ElForm', 'el.form.addField', [this]);\n\n var initialValue = this.fieldValue;\n if (Array.isArray(initialValue)) {\n initialValue = [].concat(initialValue);\n }\n Object.defineProperty(this, 'initialValue', {\n value: initialValue\n });\n\n this.addValidateEvents();\n }\n },\n beforeDestroy: function beforeDestroy() {\n this.dispatch('ElForm', 'el.form.removeField', [this]);\n }\n});\n// CONCATENATED MODULE: ./packages/form/src/form-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_form_itemvue_type_script_lang_js_ = (form_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/form/src/form-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar form_item_component = normalizeComponent(\n src_form_itemvue_type_script_lang_js_,\n form_itemvue_type_template_id_b6f3db6c_render,\n form_itemvue_type_template_id_b6f3db6c_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var form_item_api; }\nform_item_component.options.__file = \"packages/form/src/form-item.vue\"\n/* harmony default export */ var form_item = (form_item_component.exports);\n// CONCATENATED MODULE: ./packages/form-item/index.js\n\n\n/* istanbul ignore next */\nform_item.install = function (Vue) {\n Vue.component(form_item.name, form_item);\n};\n\n/* harmony default export */ var packages_form_item = (form_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-bar.vue?vue&type=template&id=2031f33a&\nvar tab_barvue_type_template_id_2031f33a_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", {\n staticClass: \"el-tabs__active-bar\",\n class: \"is-\" + _vm.rootTabs.tabPosition,\n style: _vm.barStyle\n })\n}\nvar tab_barvue_type_template_id_2031f33a_staticRenderFns = []\ntab_barvue_type_template_id_2031f33a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue?vue&type=template&id=2031f33a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-bar.vue?vue&type=script&lang=js&\n//\n//\n//\n\n\n/* harmony default export */ var tab_barvue_type_script_lang_js_ = ({\n name: 'TabBar',\n\n props: {\n tabs: Array\n },\n\n inject: ['rootTabs'],\n\n computed: {\n barStyle: {\n get: function get() {\n var _this = this;\n\n var style = {};\n var offset = 0;\n var tabSize = 0;\n var sizeName = ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'width' : 'height';\n var sizeDir = sizeName === 'width' ? 'x' : 'y';\n var firstUpperCase = function firstUpperCase(str) {\n return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) {\n return L.toUpperCase();\n });\n };\n this.tabs.every(function (tab, index) {\n var $el = Object(util_[\"arrayFind\"])(_this.$parent.$refs.tabs || [], function (t) {\n return t.id.replace('tab-', '') === tab.paneName;\n });\n if (!$el) {\n return false;\n }\n\n if (!tab.active) {\n offset += $el['client' + firstUpperCase(sizeName)];\n return true;\n } else {\n tabSize = $el['client' + firstUpperCase(sizeName)];\n var tabStyles = window.getComputedStyle($el);\n if (sizeName === 'width' && _this.tabs.length > 1) {\n tabSize -= parseFloat(tabStyles.paddingLeft) + parseFloat(tabStyles.paddingRight);\n }\n if (sizeName === 'width') {\n offset += parseFloat(tabStyles.paddingLeft);\n }\n return false;\n }\n });\n\n var transform = 'translate' + firstUpperCase(sizeDir) + '(' + offset + 'px)';\n style[sizeName] = tabSize + 'px';\n style.transform = transform;\n style.msTransform = transform;\n style.webkitTransform = transform;\n\n return style;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tab_barvue_type_script_lang_js_ = (tab_barvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue\n\n\n\n\n\n/* normalize component */\n\nvar tab_bar_component = normalizeComponent(\n src_tab_barvue_type_script_lang_js_,\n tab_barvue_type_template_id_2031f33a_render,\n tab_barvue_type_template_id_2031f33a_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tab_bar_api; }\ntab_bar_component.options.__file = \"packages/tabs/src/tab-bar.vue\"\n/* harmony default export */ var tab_bar = (tab_bar_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-nav.vue?vue&type=script&lang=js&\n\n\n\n\nfunction noop() {}\nvar tab_navvue_type_script_lang_js_firstUpperCase = function firstUpperCase(str) {\n return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) {\n return L.toUpperCase();\n });\n};\n\n/* harmony default export */ var tab_navvue_type_script_lang_js_ = ({\n name: 'TabNav',\n\n components: {\n TabBar: tab_bar\n },\n\n inject: ['rootTabs'],\n\n props: {\n panes: Array,\n currentName: String,\n editable: Boolean,\n onTabClick: {\n type: Function,\n default: noop\n },\n onTabRemove: {\n type: Function,\n default: noop\n },\n type: String,\n stretch: Boolean\n },\n\n data: function data() {\n return {\n scrollable: false,\n navOffset: 0,\n isFocus: false,\n focusable: true\n };\n },\n\n\n computed: {\n navStyle: function navStyle() {\n var dir = ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'X' : 'Y';\n return {\n transform: 'translate' + dir + '(-' + this.navOffset + 'px)'\n };\n },\n sizeName: function sizeName() {\n return ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'width' : 'height';\n }\n },\n\n methods: {\n scrollPrev: function scrollPrev() {\n var containerSize = this.$refs.navScroll['offset' + tab_navvue_type_script_lang_js_firstUpperCase(this.sizeName)];\n var currentOffset = this.navOffset;\n\n if (!currentOffset) return;\n\n var newOffset = currentOffset > containerSize ? currentOffset - containerSize : 0;\n\n this.navOffset = newOffset;\n },\n scrollNext: function scrollNext() {\n var navSize = this.$refs.nav['offset' + tab_navvue_type_script_lang_js_firstUpperCase(this.sizeName)];\n var containerSize = this.$refs.navScroll['offset' + tab_navvue_type_script_lang_js_firstUpperCase(this.sizeName)];\n var currentOffset = this.navOffset;\n\n if (navSize - currentOffset <= containerSize) return;\n\n var newOffset = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize;\n\n this.navOffset = newOffset;\n },\n scrollToActiveTab: function scrollToActiveTab() {\n if (!this.scrollable) return;\n var nav = this.$refs.nav;\n var activeTab = this.$el.querySelector('.is-active');\n if (!activeTab) return;\n var navScroll = this.$refs.navScroll;\n var isHorizontal = ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1;\n var activeTabBounding = activeTab.getBoundingClientRect();\n var navScrollBounding = navScroll.getBoundingClientRect();\n var maxOffset = isHorizontal ? nav.offsetWidth - navScrollBounding.width : nav.offsetHeight - navScrollBounding.height;\n var currentOffset = this.navOffset;\n var newOffset = currentOffset;\n\n if (isHorizontal) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left);\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);\n }\n }\n newOffset = Math.max(newOffset, 0);\n this.navOffset = Math.min(newOffset, maxOffset);\n },\n update: function update() {\n if (!this.$refs.nav) return;\n var sizeName = this.sizeName;\n var navSize = this.$refs.nav['offset' + tab_navvue_type_script_lang_js_firstUpperCase(sizeName)];\n var containerSize = this.$refs.navScroll['offset' + tab_navvue_type_script_lang_js_firstUpperCase(sizeName)];\n var currentOffset = this.navOffset;\n\n if (containerSize < navSize) {\n var _currentOffset = this.navOffset;\n this.scrollable = this.scrollable || {};\n this.scrollable.prev = _currentOffset;\n this.scrollable.next = _currentOffset + containerSize < navSize;\n if (navSize - _currentOffset < containerSize) {\n this.navOffset = navSize - containerSize;\n }\n } else {\n this.scrollable = false;\n if (currentOffset > 0) {\n this.navOffset = 0;\n }\n }\n },\n changeTab: function changeTab(e) {\n var keyCode = e.keyCode;\n var nextIndex = void 0;\n var currentIndex = void 0,\n tabList = void 0;\n if ([37, 38, 39, 40].indexOf(keyCode) !== -1) {\n // 左右上下键更换tab\n tabList = e.currentTarget.querySelectorAll('[role=tab]');\n currentIndex = Array.prototype.indexOf.call(tabList, e.target);\n } else {\n return;\n }\n if (keyCode === 37 || keyCode === 38) {\n // left\n if (currentIndex === 0) {\n // first\n nextIndex = tabList.length - 1;\n } else {\n nextIndex = currentIndex - 1;\n }\n } else {\n // right\n if (currentIndex < tabList.length - 1) {\n // not last\n nextIndex = currentIndex + 1;\n } else {\n nextIndex = 0;\n }\n }\n tabList[nextIndex].focus(); // 改变焦点元素\n tabList[nextIndex].click(); // 选中下一个tab\n this.setFocus();\n },\n setFocus: function setFocus() {\n if (this.focusable) {\n this.isFocus = true;\n }\n },\n removeFocus: function removeFocus() {\n this.isFocus = false;\n },\n visibilityChangeHandler: function visibilityChangeHandler() {\n var _this = this;\n\n var visibility = document.visibilityState;\n if (visibility === 'hidden') {\n this.focusable = false;\n } else if (visibility === 'visible') {\n setTimeout(function () {\n _this.focusable = true;\n }, 50);\n }\n },\n windowBlurHandler: function windowBlurHandler() {\n this.focusable = false;\n },\n windowFocusHandler: function windowFocusHandler() {\n var _this2 = this;\n\n setTimeout(function () {\n _this2.focusable = true;\n }, 50);\n }\n },\n\n updated: function updated() {\n this.update();\n },\n render: function render(h) {\n var _this3 = this;\n\n var type = this.type,\n panes = this.panes,\n editable = this.editable,\n stretch = this.stretch,\n onTabClick = this.onTabClick,\n onTabRemove = this.onTabRemove,\n navStyle = this.navStyle,\n scrollable = this.scrollable,\n scrollNext = this.scrollNext,\n scrollPrev = this.scrollPrev,\n changeTab = this.changeTab,\n setFocus = this.setFocus,\n removeFocus = this.removeFocus;\n\n var scrollBtn = scrollable ? [h(\n 'span',\n { 'class': ['el-tabs__nav-prev', scrollable.prev ? '' : 'is-disabled'], on: {\n 'click': scrollPrev\n }\n },\n [h('i', { 'class': 'el-icon-arrow-left' })]\n ), h(\n 'span',\n { 'class': ['el-tabs__nav-next', scrollable.next ? '' : 'is-disabled'], on: {\n 'click': scrollNext\n }\n },\n [h('i', { 'class': 'el-icon-arrow-right' })]\n )] : null;\n\n var tabs = this._l(panes, function (pane, index) {\n var _ref;\n\n var tabName = pane.name || pane.index || index;\n var closable = pane.isClosable || editable;\n\n pane.index = '' + index;\n\n var btnClose = closable ? h('span', { 'class': 'el-icon-close', on: {\n 'click': function click(ev) {\n onTabRemove(pane, ev);\n }\n }\n }) : null;\n\n var tabLabelContent = pane.$slots.label || pane.label;\n var tabindex = pane.active ? 0 : -1;\n return h(\n 'div',\n {\n 'class': (_ref = {\n 'el-tabs__item': true\n }, _ref['is-' + _this3.rootTabs.tabPosition] = true, _ref['is-active'] = pane.active, _ref['is-disabled'] = pane.disabled, _ref['is-closable'] = closable, _ref['is-focus'] = _this3.isFocus, _ref),\n attrs: { id: 'tab-' + tabName,\n\n 'aria-controls': 'pane-' + tabName,\n role: 'tab',\n 'aria-selected': pane.active,\n\n tabindex: tabindex\n },\n key: 'tab-' + tabName, ref: 'tabs', refInFor: true,\n on: {\n 'focus': function focus() {\n setFocus();\n },\n 'blur': function blur() {\n removeFocus();\n },\n 'click': function click(ev) {\n removeFocus();onTabClick(pane, tabName, ev);\n },\n 'keydown': function keydown(ev) {\n if (closable && (ev.keyCode === 46 || ev.keyCode === 8)) {\n onTabRemove(pane, ev);\n }\n }\n }\n },\n [tabLabelContent, btnClose]\n );\n });\n return h(\n 'div',\n { 'class': ['el-tabs__nav-wrap', scrollable ? 'is-scrollable' : '', 'is-' + this.rootTabs.tabPosition] },\n [scrollBtn, h(\n 'div',\n { 'class': ['el-tabs__nav-scroll'], ref: 'navScroll' },\n [h(\n 'div',\n {\n 'class': ['el-tabs__nav', 'is-' + this.rootTabs.tabPosition, stretch && ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'is-stretch' : ''],\n ref: 'nav',\n style: navStyle,\n attrs: { role: 'tablist'\n },\n on: {\n 'keydown': changeTab\n }\n },\n [!type ? h('tab-bar', {\n attrs: { tabs: panes }\n }) : null, tabs]\n )]\n )]\n );\n },\n mounted: function mounted() {\n var _this4 = this;\n\n Object(resize_event_[\"addResizeListener\"])(this.$el, this.update);\n document.addEventListener('visibilitychange', this.visibilityChangeHandler);\n window.addEventListener('blur', this.windowBlurHandler);\n window.addEventListener('focus', this.windowFocusHandler);\n setTimeout(function () {\n _this4.scrollToActiveTab();\n }, 0);\n },\n beforeDestroy: function beforeDestroy() {\n if (this.$el && this.update) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.update);\n document.removeEventListener('visibilitychange', this.visibilityChangeHandler);\n window.removeEventListener('blur', this.windowBlurHandler);\n window.removeEventListener('focus', this.windowFocusHandler);\n }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tab-nav.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tab_navvue_type_script_lang_js_ = (tab_navvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tab-nav.vue\nvar tab_nav_render, tab_nav_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar tab_nav_component = normalizeComponent(\n src_tab_navvue_type_script_lang_js_,\n tab_nav_render,\n tab_nav_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tab_nav_api; }\ntab_nav_component.options.__file = \"packages/tabs/src/tab-nav.vue\"\n/* harmony default export */ var tab_nav = (tab_nav_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tabs.vue?vue&type=script&lang=js&\n\n\n\n/* harmony default export */ var tabsvue_type_script_lang_js_ = ({\n name: 'ElTabs',\n\n components: {\n TabNav: tab_nav\n },\n\n props: {\n type: String,\n activeName: String,\n closable: Boolean,\n addable: Boolean,\n value: {},\n editable: Boolean,\n tabPosition: {\n type: String,\n default: 'top'\n },\n beforeLeave: Function,\n stretch: Boolean\n },\n\n provide: function provide() {\n return {\n rootTabs: this\n };\n },\n data: function data() {\n return {\n currentName: this.value || this.activeName,\n panes: []\n };\n },\n\n\n watch: {\n activeName: function activeName(value) {\n this.setCurrentName(value);\n },\n value: function value(_value) {\n this.setCurrentName(_value);\n },\n currentName: function currentName(value) {\n var _this = this;\n\n if (this.$refs.nav) {\n this.$nextTick(function () {\n _this.$refs.nav.$nextTick(function (_) {\n _this.$refs.nav.scrollToActiveTab();\n });\n });\n }\n }\n },\n\n methods: {\n calcPaneInstances: function calcPaneInstances() {\n var _this2 = this;\n\n var isForceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this.$slots.default) {\n var paneSlots = this.$slots.default.filter(function (vnode) {\n return vnode.tag && vnode.componentOptions && vnode.componentOptions.Ctor.options.name === 'ElTabPane';\n });\n // update indeed\n var panes = paneSlots.map(function (_ref) {\n var componentInstance = _ref.componentInstance;\n return componentInstance;\n });\n var panesChanged = !(panes.length === this.panes.length && panes.every(function (pane, index) {\n return pane === _this2.panes[index];\n }));\n if (isForceUpdate || panesChanged) {\n this.panes = panes;\n }\n } else if (this.panes.length !== 0) {\n this.panes = [];\n }\n },\n handleTabClick: function handleTabClick(tab, tabName, event) {\n if (tab.disabled) return;\n this.setCurrentName(tabName);\n this.$emit('tab-click', tab, event);\n },\n handleTabRemove: function handleTabRemove(pane, ev) {\n if (pane.disabled) return;\n ev.stopPropagation();\n this.$emit('edit', pane.name, 'remove');\n this.$emit('tab-remove', pane.name);\n },\n handleTabAdd: function handleTabAdd() {\n this.$emit('edit', null, 'add');\n this.$emit('tab-add');\n },\n setCurrentName: function setCurrentName(value) {\n var _this3 = this;\n\n var changeCurrentName = function changeCurrentName() {\n _this3.currentName = value;\n _this3.$emit('input', value);\n };\n if (this.currentName !== value && this.beforeLeave) {\n var before = this.beforeLeave(value, this.currentName);\n if (before && before.then) {\n before.then(function () {\n changeCurrentName();\n _this3.$refs.nav && _this3.$refs.nav.removeFocus();\n }, function () {\n // https://github.com/ElemeFE/element/pull/14816\n // ignore promise rejection in `before-leave` hook\n });\n } else if (before !== false) {\n changeCurrentName();\n }\n } else {\n changeCurrentName();\n }\n }\n },\n\n render: function render(h) {\n var _ref2;\n\n var type = this.type,\n handleTabClick = this.handleTabClick,\n handleTabRemove = this.handleTabRemove,\n handleTabAdd = this.handleTabAdd,\n currentName = this.currentName,\n panes = this.panes,\n editable = this.editable,\n addable = this.addable,\n tabPosition = this.tabPosition,\n stretch = this.stretch;\n\n\n var newButton = editable || addable ? h(\n 'span',\n {\n 'class': 'el-tabs__new-tab',\n on: {\n 'click': handleTabAdd,\n 'keydown': function keydown(ev) {\n if (ev.keyCode === 13) {\n handleTabAdd();\n }\n }\n },\n attrs: {\n tabindex: '0'\n }\n },\n [h('i', { 'class': 'el-icon-plus' })]\n ) : null;\n\n var navData = {\n props: {\n currentName: currentName,\n onTabClick: handleTabClick,\n onTabRemove: handleTabRemove,\n editable: editable,\n type: type,\n panes: panes,\n stretch: stretch\n },\n ref: 'nav'\n };\n var header = h(\n 'div',\n { 'class': ['el-tabs__header', 'is-' + tabPosition] },\n [newButton, h('tab-nav', navData)]\n );\n var panels = h(\n 'div',\n { 'class': 'el-tabs__content' },\n [this.$slots.default]\n );\n\n return h(\n 'div',\n { 'class': (_ref2 = {\n 'el-tabs': true,\n 'el-tabs--card': type === 'card'\n }, _ref2['el-tabs--' + tabPosition] = true, _ref2['el-tabs--border-card'] = type === 'border-card', _ref2) },\n [tabPosition !== 'bottom' ? [header, panels] : [panels, header]]\n );\n },\n created: function created() {\n if (!this.currentName) {\n this.setCurrentName('0');\n }\n\n this.$on('tab-nav-update', this.calcPaneInstances.bind(null, true));\n },\n mounted: function mounted() {\n this.calcPaneInstances();\n },\n updated: function updated() {\n this.calcPaneInstances();\n }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tabs.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tabsvue_type_script_lang_js_ = (tabsvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tabs.vue\nvar tabs_render, tabs_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar tabs_component = normalizeComponent(\n src_tabsvue_type_script_lang_js_,\n tabs_render,\n tabs_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tabs_api; }\ntabs_component.options.__file = \"packages/tabs/src/tabs.vue\"\n/* harmony default export */ var tabs = (tabs_component.exports);\n// CONCATENATED MODULE: ./packages/tabs/index.js\n\n\n/* istanbul ignore next */\ntabs.install = function (Vue) {\n Vue.component(tabs.name, tabs);\n};\n\n/* harmony default export */ var packages_tabs = (tabs);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-pane.vue?vue&type=template&id=9145a070&\nvar tab_panevue_type_template_id_9145a070_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return !_vm.lazy || _vm.loaded || _vm.active\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.active,\n expression: \"active\"\n }\n ],\n staticClass: \"el-tab-pane\",\n attrs: {\n role: \"tabpanel\",\n \"aria-hidden\": !_vm.active,\n id: \"pane-\" + _vm.paneName,\n \"aria-labelledby\": \"tab-\" + _vm.paneName\n }\n },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e()\n}\nvar tab_panevue_type_template_id_9145a070_staticRenderFns = []\ntab_panevue_type_template_id_9145a070_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tabs/src/tab-pane.vue?vue&type=template&id=9145a070&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-pane.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var tab_panevue_type_script_lang_js_ = ({\n name: 'ElTabPane',\n\n componentName: 'ElTabPane',\n\n props: {\n label: String,\n labelContent: Function,\n name: String,\n closable: Boolean,\n disabled: Boolean,\n lazy: Boolean\n },\n\n data: function data() {\n return {\n index: null,\n loaded: false\n };\n },\n\n\n computed: {\n isClosable: function isClosable() {\n return this.closable || this.$parent.closable;\n },\n active: function active() {\n var active = this.$parent.currentName === (this.name || this.index);\n if (active) {\n this.loaded = true;\n }\n return active;\n },\n paneName: function paneName() {\n return this.name || this.index;\n }\n },\n\n updated: function updated() {\n this.$parent.$emit('tab-nav-update');\n }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tab-pane.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tab_panevue_type_script_lang_js_ = (tab_panevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tab-pane.vue\n\n\n\n\n\n/* normalize component */\n\nvar tab_pane_component = normalizeComponent(\n src_tab_panevue_type_script_lang_js_,\n tab_panevue_type_template_id_9145a070_render,\n tab_panevue_type_template_id_9145a070_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tab_pane_api; }\ntab_pane_component.options.__file = \"packages/tabs/src/tab-pane.vue\"\n/* harmony default export */ var tab_pane = (tab_pane_component.exports);\n// CONCATENATED MODULE: ./packages/tab-pane/index.js\n\n\n/* istanbul ignore next */\ntab_pane.install = function (Vue) {\n Vue.component(tab_pane.name, tab_pane);\n};\n\n/* harmony default export */ var packages_tab_pane = (tab_pane);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tag/src/tag.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var tagvue_type_script_lang_js_ = ({\n name: 'ElTag',\n props: {\n text: String,\n closable: Boolean,\n type: String,\n hit: Boolean,\n disableTransitions: Boolean,\n color: String,\n size: String,\n effect: {\n type: String,\n default: 'light',\n validator: function validator(val) {\n return ['dark', 'light', 'plain'].indexOf(val) !== -1;\n }\n }\n },\n methods: {\n handleClose: function handleClose(event) {\n event.stopPropagation();\n this.$emit('close', event);\n },\n handleClick: function handleClick(event) {\n this.$emit('click', event);\n }\n },\n computed: {\n tagSize: function tagSize() {\n return this.size || (this.$ELEMENT || {}).size;\n }\n },\n render: function render(h) {\n var type = this.type,\n tagSize = this.tagSize,\n hit = this.hit,\n effect = this.effect;\n\n var classes = ['el-tag', type ? 'el-tag--' + type : '', tagSize ? 'el-tag--' + tagSize : '', effect ? 'el-tag--' + effect : '', hit && 'is-hit'];\n var tagEl = h(\n 'span',\n {\n 'class': classes,\n style: { backgroundColor: this.color },\n on: {\n 'click': this.handleClick\n }\n },\n [this.$slots.default, this.closable && h('i', { 'class': 'el-tag__close el-icon-close', on: {\n 'click': this.handleClose\n }\n })]\n );\n\n return this.disableTransitions ? tagEl : h(\n 'transition',\n {\n attrs: { name: 'el-zoom-in-center' }\n },\n [tagEl]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/tag/src/tag.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tagvue_type_script_lang_js_ = (tagvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tag/src/tag.vue\nvar tag_render, tag_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar tag_component = normalizeComponent(\n src_tagvue_type_script_lang_js_,\n tag_render,\n tag_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tag_api; }\ntag_component.options.__file = \"packages/tag/src/tag.vue\"\n/* harmony default export */ var tag = (tag_component.exports);\n// CONCATENATED MODULE: ./packages/tag/index.js\n\n\n/* istanbul ignore next */\ntag.install = function (Vue) {\n Vue.component(tag.name, tag);\n};\n\n/* harmony default export */ var packages_tag = (tag);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree.vue?vue&type=template&id=547575a6&\nvar treevue_type_template_id_547575a6_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-tree\",\n class: {\n \"el-tree--highlight-current\": _vm.highlightCurrent,\n \"is-dragging\": !!_vm.dragState.draggingNode,\n \"is-drop-not-allow\": !_vm.dragState.allowDrop,\n \"is-drop-inner\": _vm.dragState.dropType === \"inner\"\n },\n attrs: { role: \"tree\" }\n },\n [\n _vm._l(_vm.root.childNodes, function(child) {\n return _c(\"el-tree-node\", {\n key: _vm.getNodeKey(child),\n attrs: {\n node: child,\n props: _vm.props,\n \"render-after-expand\": _vm.renderAfterExpand,\n \"show-checkbox\": _vm.showCheckbox,\n \"render-content\": _vm.renderContent\n },\n on: { \"node-expand\": _vm.handleNodeExpand }\n })\n }),\n _vm.isEmpty\n ? _c(\"div\", { staticClass: \"el-tree__empty-block\" }, [\n _c(\"span\", { staticClass: \"el-tree__empty-text\" }, [\n _vm._v(_vm._s(_vm.emptyText))\n ])\n ])\n : _vm._e(),\n _c(\"div\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.dragState.showDropIndicator,\n expression: \"dragState.showDropIndicator\"\n }\n ],\n ref: \"dropIndicator\",\n staticClass: \"el-tree__drop-indicator\"\n })\n ],\n 2\n )\n}\nvar treevue_type_template_id_547575a6_staticRenderFns = []\ntreevue_type_template_id_547575a6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tree/src/tree.vue?vue&type=template&id=547575a6&\n\n// CONCATENATED MODULE: ./packages/tree/src/model/util.js\nvar NODE_KEY = '$treeNodeId';\n\nvar markNodeData = function markNodeData(node, data) {\n if (!data || data[NODE_KEY]) return;\n Object.defineProperty(data, NODE_KEY, {\n value: node.id,\n enumerable: false,\n configurable: false,\n writable: false\n });\n};\n\nvar util_getNodeKey = function getNodeKey(key, data) {\n if (!key) return data[NODE_KEY];\n return data[key];\n};\n\nvar findNearestComponent = function findNearestComponent(element, componentName) {\n var target = element;\n while (target && target.tagName !== 'BODY') {\n if (target.__vue__ && target.__vue__.$options.name === componentName) {\n return target.__vue__;\n }\n target = target.parentNode;\n }\n return null;\n};\n// CONCATENATED MODULE: ./packages/tree/src/model/node.js\nvar _createClass = 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; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction node_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar getChildState = function getChildState(node) {\n var all = true;\n var none = true;\n var allWithoutDisable = true;\n for (var i = 0, j = node.length; i < j; i++) {\n var n = node[i];\n if (n.checked !== true || n.indeterminate) {\n all = false;\n if (!n.disabled) {\n allWithoutDisable = false;\n }\n }\n if (n.checked !== false || n.indeterminate) {\n none = false;\n }\n }\n\n return { all: all, none: none, allWithoutDisable: allWithoutDisable, half: !all && !none };\n};\n\nvar reInitChecked = function reInitChecked(node) {\n if (node.childNodes.length === 0) return;\n\n var _getChildState = getChildState(node.childNodes),\n all = _getChildState.all,\n none = _getChildState.none,\n half = _getChildState.half;\n\n if (all) {\n node.checked = true;\n node.indeterminate = false;\n } else if (half) {\n node.checked = false;\n node.indeterminate = true;\n } else if (none) {\n node.checked = false;\n node.indeterminate = false;\n }\n\n var parent = node.parent;\n if (!parent || parent.level === 0) return;\n\n if (!node.store.checkStrictly) {\n reInitChecked(parent);\n }\n};\n\nvar getPropertyFromData = function getPropertyFromData(node, prop) {\n var props = node.store.props;\n var data = node.data || {};\n var config = props[prop];\n\n if (typeof config === 'function') {\n return config(data, node);\n } else if (typeof config === 'string') {\n return data[config];\n } else if (typeof config === 'undefined') {\n var dataProp = data[prop];\n return dataProp === undefined ? '' : dataProp;\n }\n};\n\nvar nodeIdSeed = 0;\n\nvar node_Node = function () {\n function Node(options) {\n node_classCallCheck(this, Node);\n\n this.id = nodeIdSeed++;\n this.text = null;\n this.checked = false;\n this.indeterminate = false;\n this.data = null;\n this.expanded = false;\n this.parent = null;\n this.visible = true;\n this.isCurrent = false;\n\n for (var name in options) {\n if (options.hasOwnProperty(name)) {\n this[name] = options[name];\n }\n }\n\n // internal\n this.level = 0;\n this.loaded = false;\n this.childNodes = [];\n this.loading = false;\n\n if (this.parent) {\n this.level = this.parent.level + 1;\n }\n\n var store = this.store;\n if (!store) {\n throw new Error('[Node]store is required!');\n }\n store.registerNode(this);\n\n var props = store.props;\n if (props && typeof props.isLeaf !== 'undefined') {\n var isLeaf = getPropertyFromData(this, 'isLeaf');\n if (typeof isLeaf === 'boolean') {\n this.isLeafByUser = isLeaf;\n }\n }\n\n if (store.lazy !== true && this.data) {\n this.setData(this.data);\n\n if (store.defaultExpandAll) {\n this.expanded = true;\n }\n } else if (this.level > 0 && store.lazy && store.defaultExpandAll) {\n this.expand();\n }\n if (!Array.isArray(this.data)) {\n markNodeData(this, this.data);\n }\n if (!this.data) return;\n var defaultExpandedKeys = store.defaultExpandedKeys;\n var key = store.key;\n if (key && defaultExpandedKeys && defaultExpandedKeys.indexOf(this.key) !== -1) {\n this.expand(null, store.autoExpandParent);\n }\n\n if (key && store.currentNodeKey !== undefined && this.key === store.currentNodeKey) {\n store.currentNode = this;\n store.currentNode.isCurrent = true;\n }\n\n if (store.lazy) {\n store._initDefaultCheckedNode(this);\n }\n\n this.updateLeafState();\n }\n\n Node.prototype.setData = function setData(data) {\n if (!Array.isArray(data)) {\n markNodeData(this, data);\n }\n\n this.data = data;\n this.childNodes = [];\n\n var children = void 0;\n if (this.level === 0 && this.data instanceof Array) {\n children = this.data;\n } else {\n children = getPropertyFromData(this, 'children') || [];\n }\n\n for (var i = 0, j = children.length; i < j; i++) {\n this.insertChild({ data: children[i] });\n }\n };\n\n Node.prototype.contains = function contains(target) {\n var deep = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var walk = function walk(parent) {\n var children = parent.childNodes || [];\n var result = false;\n for (var i = 0, j = children.length; i < j; i++) {\n var child = children[i];\n if (child === target || deep && walk(child)) {\n result = true;\n break;\n }\n }\n return result;\n };\n\n return walk(this);\n };\n\n Node.prototype.remove = function remove() {\n var parent = this.parent;\n if (parent) {\n parent.removeChild(this);\n }\n };\n\n Node.prototype.insertChild = function insertChild(child, index, batch) {\n if (!child) throw new Error('insertChild error: child is required.');\n\n if (!(child instanceof Node)) {\n if (!batch) {\n var children = this.getChildren(true);\n if (children.indexOf(child.data) === -1) {\n if (typeof index === 'undefined' || index < 0) {\n children.push(child.data);\n } else {\n children.splice(index, 0, child.data);\n }\n }\n }\n merge_default()(child, {\n parent: this,\n store: this.store\n });\n child = new Node(child);\n }\n\n child.level = this.level + 1;\n\n if (typeof index === 'undefined' || index < 0) {\n this.childNodes.push(child);\n } else {\n this.childNodes.splice(index, 0, child);\n }\n\n this.updateLeafState();\n };\n\n Node.prototype.insertBefore = function insertBefore(child, ref) {\n var index = void 0;\n if (ref) {\n index = this.childNodes.indexOf(ref);\n }\n this.insertChild(child, index);\n };\n\n Node.prototype.insertAfter = function insertAfter(child, ref) {\n var index = void 0;\n if (ref) {\n index = this.childNodes.indexOf(ref);\n if (index !== -1) index += 1;\n }\n this.insertChild(child, index);\n };\n\n Node.prototype.removeChild = function removeChild(child) {\n var children = this.getChildren() || [];\n var dataIndex = children.indexOf(child.data);\n if (dataIndex > -1) {\n children.splice(dataIndex, 1);\n }\n\n var index = this.childNodes.indexOf(child);\n\n if (index > -1) {\n this.store && this.store.deregisterNode(child);\n child.parent = null;\n this.childNodes.splice(index, 1);\n }\n\n this.updateLeafState();\n };\n\n Node.prototype.removeChildByData = function removeChildByData(data) {\n var targetNode = null;\n\n for (var i = 0; i < this.childNodes.length; i++) {\n if (this.childNodes[i].data === data) {\n targetNode = this.childNodes[i];\n break;\n }\n }\n\n if (targetNode) {\n this.removeChild(targetNode);\n }\n };\n\n Node.prototype.expand = function expand(callback, expandParent) {\n var _this = this;\n\n var done = function done() {\n if (expandParent) {\n var parent = _this.parent;\n while (parent.level > 0) {\n parent.expanded = true;\n parent = parent.parent;\n }\n }\n _this.expanded = true;\n if (callback) callback();\n };\n\n if (this.shouldLoadData()) {\n this.loadData(function (data) {\n if (data instanceof Array) {\n if (_this.checked) {\n _this.setChecked(true, true);\n } else if (!_this.store.checkStrictly) {\n reInitChecked(_this);\n }\n done();\n }\n });\n } else {\n done();\n }\n };\n\n Node.prototype.doCreateChildren = function doCreateChildren(array) {\n var _this2 = this;\n\n var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n array.forEach(function (item) {\n _this2.insertChild(merge_default()({ data: item }, defaultProps), undefined, true);\n });\n };\n\n Node.prototype.collapse = function collapse() {\n this.expanded = false;\n };\n\n Node.prototype.shouldLoadData = function shouldLoadData() {\n return this.store.lazy === true && this.store.load && !this.loaded;\n };\n\n Node.prototype.updateLeafState = function updateLeafState() {\n if (this.store.lazy === true && this.loaded !== true && typeof this.isLeafByUser !== 'undefined') {\n this.isLeaf = this.isLeafByUser;\n return;\n }\n var childNodes = this.childNodes;\n if (!this.store.lazy || this.store.lazy === true && this.loaded === true) {\n this.isLeaf = !childNodes || childNodes.length === 0;\n return;\n }\n this.isLeaf = false;\n };\n\n Node.prototype.setChecked = function setChecked(value, deep, recursion, passValue) {\n var _this3 = this;\n\n this.indeterminate = value === 'half';\n this.checked = value === true;\n\n if (this.store.checkStrictly) return;\n\n if (!(this.shouldLoadData() && !this.store.checkDescendants)) {\n var _getChildState2 = getChildState(this.childNodes),\n all = _getChildState2.all,\n allWithoutDisable = _getChildState2.allWithoutDisable;\n\n if (!this.isLeaf && !all && allWithoutDisable) {\n this.checked = false;\n value = false;\n }\n\n var handleDescendants = function handleDescendants() {\n if (deep) {\n var childNodes = _this3.childNodes;\n for (var i = 0, j = childNodes.length; i < j; i++) {\n var child = childNodes[i];\n passValue = passValue || value !== false;\n var isCheck = child.disabled ? child.checked : passValue;\n child.setChecked(isCheck, deep, true, passValue);\n }\n\n var _getChildState3 = getChildState(childNodes),\n half = _getChildState3.half,\n _all = _getChildState3.all;\n\n if (!_all) {\n _this3.checked = _all;\n _this3.indeterminate = half;\n }\n }\n };\n\n if (this.shouldLoadData()) {\n // Only work on lazy load data.\n this.loadData(function () {\n handleDescendants();\n reInitChecked(_this3);\n }, {\n checked: value !== false\n });\n return;\n } else {\n handleDescendants();\n }\n }\n\n var parent = this.parent;\n if (!parent || parent.level === 0) return;\n\n if (!recursion) {\n reInitChecked(parent);\n }\n };\n\n Node.prototype.getChildren = function getChildren() {\n var forceInit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n // this is data\n if (this.level === 0) return this.data;\n var data = this.data;\n if (!data) return null;\n\n var props = this.store.props;\n var children = 'children';\n if (props) {\n children = props.children || 'children';\n }\n\n if (data[children] === undefined) {\n data[children] = null;\n }\n\n if (forceInit && !data[children]) {\n data[children] = [];\n }\n\n return data[children];\n };\n\n Node.prototype.updateChildren = function updateChildren() {\n var _this4 = this;\n\n var newData = this.getChildren() || [];\n var oldData = this.childNodes.map(function (node) {\n return node.data;\n });\n\n var newDataMap = {};\n var newNodes = [];\n\n newData.forEach(function (item, index) {\n var key = item[NODE_KEY];\n var isNodeExists = !!key && Object(util_[\"arrayFindIndex\"])(oldData, function (data) {\n return data[NODE_KEY] === key;\n }) >= 0;\n if (isNodeExists) {\n newDataMap[key] = { index: index, data: item };\n } else {\n newNodes.push({ index: index, data: item });\n }\n });\n\n if (!this.store.lazy) {\n oldData.forEach(function (item) {\n if (!newDataMap[item[NODE_KEY]]) _this4.removeChildByData(item);\n });\n }\n\n newNodes.forEach(function (_ref) {\n var index = _ref.index,\n data = _ref.data;\n\n _this4.insertChild({ data: data }, index);\n });\n\n this.updateLeafState();\n };\n\n Node.prototype.loadData = function loadData(callback) {\n var _this5 = this;\n\n var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.store.lazy === true && this.store.load && !this.loaded && (!this.loading || Object.keys(defaultProps).length)) {\n this.loading = true;\n\n var resolve = function resolve(children) {\n _this5.loaded = true;\n _this5.loading = false;\n _this5.childNodes = [];\n\n _this5.doCreateChildren(children, defaultProps);\n\n _this5.updateLeafState();\n if (callback) {\n callback.call(_this5, children);\n }\n };\n\n this.store.load(this, resolve);\n } else {\n if (callback) {\n callback.call(this);\n }\n }\n };\n\n _createClass(Node, [{\n key: 'label',\n get: function get() {\n return getPropertyFromData(this, 'label');\n }\n }, {\n key: 'key',\n get: function get() {\n var nodeKey = this.store.key;\n if (this.data) return this.data[nodeKey];\n return null;\n }\n }, {\n key: 'disabled',\n get: function get() {\n return getPropertyFromData(this, 'disabled');\n }\n }, {\n key: 'nextSibling',\n get: function get() {\n var parent = this.parent;\n if (parent) {\n var index = parent.childNodes.indexOf(this);\n if (index > -1) {\n return parent.childNodes[index + 1];\n }\n }\n return null;\n }\n }, {\n key: 'previousSibling',\n get: function get() {\n var parent = this.parent;\n if (parent) {\n var index = parent.childNodes.indexOf(this);\n if (index > -1) {\n return index > 0 ? parent.childNodes[index - 1] : null;\n }\n }\n return null;\n }\n }]);\n\n return Node;\n}();\n\n/* harmony default export */ var model_node = (node_Node);\n// CONCATENATED MODULE: ./packages/tree/src/model/tree-store.js\nvar tree_store_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction tree_store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar tree_store_TreeStore = function () {\n function TreeStore(options) {\n var _this = this;\n\n tree_store_classCallCheck(this, TreeStore);\n\n this.currentNode = null;\n this.currentNodeKey = null;\n\n for (var option in options) {\n if (options.hasOwnProperty(option)) {\n this[option] = options[option];\n }\n }\n\n this.nodesMap = {};\n\n this.root = new model_node({\n data: this.data,\n store: this\n });\n\n if (this.lazy && this.load) {\n var loadFn = this.load;\n loadFn(this.root, function (data) {\n _this.root.doCreateChildren(data);\n _this._initDefaultCheckedNodes();\n });\n } else {\n this._initDefaultCheckedNodes();\n }\n }\n\n TreeStore.prototype.filter = function filter(value) {\n var filterNodeMethod = this.filterNodeMethod;\n var lazy = this.lazy;\n var traverse = function traverse(node) {\n var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n childNodes.forEach(function (child) {\n child.visible = filterNodeMethod.call(child, value, child.data, child);\n\n traverse(child);\n });\n\n if (!node.visible && childNodes.length) {\n var allHidden = true;\n allHidden = !childNodes.some(function (child) {\n return child.visible;\n });\n\n if (node.root) {\n node.root.visible = allHidden === false;\n } else {\n node.visible = allHidden === false;\n }\n }\n if (!value) return;\n\n if (node.visible && !node.isLeaf && !lazy) node.expand();\n };\n\n traverse(this);\n };\n\n TreeStore.prototype.setData = function setData(newVal) {\n var instanceChanged = newVal !== this.root.data;\n if (instanceChanged) {\n this.root.setData(newVal);\n this._initDefaultCheckedNodes();\n } else {\n this.root.updateChildren();\n }\n };\n\n TreeStore.prototype.getNode = function getNode(data) {\n if (data instanceof model_node) return data;\n var key = (typeof data === 'undefined' ? 'undefined' : tree_store_typeof(data)) !== 'object' ? data : util_getNodeKey(this.key, data);\n return this.nodesMap[key] || null;\n };\n\n TreeStore.prototype.insertBefore = function insertBefore(data, refData) {\n var refNode = this.getNode(refData);\n refNode.parent.insertBefore({ data: data }, refNode);\n };\n\n TreeStore.prototype.insertAfter = function insertAfter(data, refData) {\n var refNode = this.getNode(refData);\n refNode.parent.insertAfter({ data: data }, refNode);\n };\n\n TreeStore.prototype.remove = function remove(data) {\n var node = this.getNode(data);\n\n if (node && node.parent) {\n if (node === this.currentNode) {\n this.currentNode = null;\n }\n node.parent.removeChild(node);\n }\n };\n\n TreeStore.prototype.append = function append(data, parentData) {\n var parentNode = parentData ? this.getNode(parentData) : this.root;\n\n if (parentNode) {\n parentNode.insertChild({ data: data });\n }\n };\n\n TreeStore.prototype._initDefaultCheckedNodes = function _initDefaultCheckedNodes() {\n var _this2 = this;\n\n var defaultCheckedKeys = this.defaultCheckedKeys || [];\n var nodesMap = this.nodesMap;\n\n defaultCheckedKeys.forEach(function (checkedKey) {\n var node = nodesMap[checkedKey];\n\n if (node) {\n node.setChecked(true, !_this2.checkStrictly);\n }\n });\n };\n\n TreeStore.prototype._initDefaultCheckedNode = function _initDefaultCheckedNode(node) {\n var defaultCheckedKeys = this.defaultCheckedKeys || [];\n\n if (defaultCheckedKeys.indexOf(node.key) !== -1) {\n node.setChecked(true, !this.checkStrictly);\n }\n };\n\n TreeStore.prototype.setDefaultCheckedKey = function setDefaultCheckedKey(newVal) {\n if (newVal !== this.defaultCheckedKeys) {\n this.defaultCheckedKeys = newVal;\n this._initDefaultCheckedNodes();\n }\n };\n\n TreeStore.prototype.registerNode = function registerNode(node) {\n var key = this.key;\n if (!key || !node || !node.data) return;\n\n var nodeKey = node.key;\n if (nodeKey !== undefined) this.nodesMap[node.key] = node;\n };\n\n TreeStore.prototype.deregisterNode = function deregisterNode(node) {\n var _this3 = this;\n\n var key = this.key;\n if (!key || !node || !node.data) return;\n\n node.childNodes.forEach(function (child) {\n _this3.deregisterNode(child);\n });\n\n delete this.nodesMap[node.key];\n };\n\n TreeStore.prototype.getCheckedNodes = function getCheckedNodes() {\n var leafOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var includeHalfChecked = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var checkedNodes = [];\n var traverse = function traverse(node) {\n var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n childNodes.forEach(function (child) {\n if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {\n checkedNodes.push(child.data);\n }\n\n traverse(child);\n });\n };\n\n traverse(this);\n\n return checkedNodes;\n };\n\n TreeStore.prototype.getCheckedKeys = function getCheckedKeys() {\n var _this4 = this;\n\n var leafOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n return this.getCheckedNodes(leafOnly).map(function (data) {\n return (data || {})[_this4.key];\n });\n };\n\n TreeStore.prototype.getHalfCheckedNodes = function getHalfCheckedNodes() {\n var nodes = [];\n var traverse = function traverse(node) {\n var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n childNodes.forEach(function (child) {\n if (child.indeterminate) {\n nodes.push(child.data);\n }\n\n traverse(child);\n });\n };\n\n traverse(this);\n\n return nodes;\n };\n\n TreeStore.prototype.getHalfCheckedKeys = function getHalfCheckedKeys() {\n var _this5 = this;\n\n return this.getHalfCheckedNodes().map(function (data) {\n return (data || {})[_this5.key];\n });\n };\n\n TreeStore.prototype._getAllNodes = function _getAllNodes() {\n var allNodes = [];\n var nodesMap = this.nodesMap;\n for (var nodeKey in nodesMap) {\n if (nodesMap.hasOwnProperty(nodeKey)) {\n allNodes.push(nodesMap[nodeKey]);\n }\n }\n\n return allNodes;\n };\n\n TreeStore.prototype.updateChildren = function updateChildren(key, data) {\n var node = this.nodesMap[key];\n if (!node) return;\n var childNodes = node.childNodes;\n for (var i = childNodes.length - 1; i >= 0; i--) {\n var child = childNodes[i];\n this.remove(child.data);\n }\n for (var _i = 0, j = data.length; _i < j; _i++) {\n var _child = data[_i];\n this.append(_child, node.data);\n }\n };\n\n TreeStore.prototype._setCheckedKeys = function _setCheckedKeys(key) {\n var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var checkedKeys = arguments[2];\n\n var allNodes = this._getAllNodes().sort(function (a, b) {\n return b.level - a.level;\n });\n var cache = Object.create(null);\n var keys = Object.keys(checkedKeys);\n allNodes.forEach(function (node) {\n return node.setChecked(false, false);\n });\n for (var i = 0, j = allNodes.length; i < j; i++) {\n var node = allNodes[i];\n var nodeKey = node.data[key].toString();\n var checked = keys.indexOf(nodeKey) > -1;\n if (!checked) {\n if (node.checked && !cache[nodeKey]) {\n node.setChecked(false, false);\n }\n continue;\n }\n\n var parent = node.parent;\n while (parent && parent.level > 0) {\n cache[parent.data[key]] = true;\n parent = parent.parent;\n }\n\n if (node.isLeaf || this.checkStrictly) {\n node.setChecked(true, false);\n continue;\n }\n node.setChecked(true, true);\n\n if (leafOnly) {\n (function () {\n node.setChecked(false, false);\n var traverse = function traverse(node) {\n var childNodes = node.childNodes;\n childNodes.forEach(function (child) {\n if (!child.isLeaf) {\n child.setChecked(false, false);\n }\n traverse(child);\n });\n };\n traverse(node);\n })();\n }\n }\n };\n\n TreeStore.prototype.setCheckedNodes = function setCheckedNodes(array) {\n var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var key = this.key;\n var checkedKeys = {};\n array.forEach(function (item) {\n checkedKeys[(item || {})[key]] = true;\n });\n\n this._setCheckedKeys(key, leafOnly, checkedKeys);\n };\n\n TreeStore.prototype.setCheckedKeys = function setCheckedKeys(keys) {\n var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n this.defaultCheckedKeys = keys;\n var key = this.key;\n var checkedKeys = {};\n keys.forEach(function (key) {\n checkedKeys[key] = true;\n });\n\n this._setCheckedKeys(key, leafOnly, checkedKeys);\n };\n\n TreeStore.prototype.setDefaultExpandedKeys = function setDefaultExpandedKeys(keys) {\n var _this6 = this;\n\n keys = keys || [];\n this.defaultExpandedKeys = keys;\n\n keys.forEach(function (key) {\n var node = _this6.getNode(key);\n if (node) node.expand(null, _this6.autoExpandParent);\n });\n };\n\n TreeStore.prototype.setChecked = function setChecked(data, checked, deep) {\n var node = this.getNode(data);\n\n if (node) {\n node.setChecked(!!checked, deep);\n }\n };\n\n TreeStore.prototype.getCurrentNode = function getCurrentNode() {\n return this.currentNode;\n };\n\n TreeStore.prototype.setCurrentNode = function setCurrentNode(currentNode) {\n var prevCurrentNode = this.currentNode;\n if (prevCurrentNode) {\n prevCurrentNode.isCurrent = false;\n }\n this.currentNode = currentNode;\n this.currentNode.isCurrent = true;\n };\n\n TreeStore.prototype.setUserCurrentNode = function setUserCurrentNode(node) {\n var key = node[this.key];\n var currNode = this.nodesMap[key];\n this.setCurrentNode(currNode);\n };\n\n TreeStore.prototype.setCurrentNodeKey = function setCurrentNodeKey(key) {\n if (key === null || key === undefined) {\n this.currentNode && (this.currentNode.isCurrent = false);\n this.currentNode = null;\n return;\n }\n var node = this.getNode(key);\n if (node) {\n this.setCurrentNode(node);\n }\n };\n\n return TreeStore;\n}();\n\n/* harmony default export */ var tree_store = (tree_store_TreeStore);\n;\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree-node.vue?vue&type=template&id=3ba3ef0e&\nvar tree_nodevue_type_template_id_3ba3ef0e_render = function() {\n var this$1 = this\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.node.visible,\n expression: \"node.visible\"\n }\n ],\n ref: \"node\",\n staticClass: \"el-tree-node\",\n class: {\n \"is-expanded\": _vm.expanded,\n \"is-current\": _vm.node.isCurrent,\n \"is-hidden\": !_vm.node.visible,\n \"is-focusable\": !_vm.node.disabled,\n \"is-checked\": !_vm.node.disabled && _vm.node.checked\n },\n attrs: {\n role: \"treeitem\",\n tabindex: \"-1\",\n \"aria-expanded\": _vm.expanded,\n \"aria-disabled\": _vm.node.disabled,\n \"aria-checked\": _vm.node.checked,\n draggable: _vm.tree.draggable\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.handleClick($event)\n },\n contextmenu: function($event) {\n return this$1.handleContextMenu($event)\n },\n dragstart: function($event) {\n $event.stopPropagation()\n return _vm.handleDragStart($event)\n },\n dragover: function($event) {\n $event.stopPropagation()\n return _vm.handleDragOver($event)\n },\n dragend: function($event) {\n $event.stopPropagation()\n return _vm.handleDragEnd($event)\n },\n drop: function($event) {\n $event.stopPropagation()\n return _vm.handleDrop($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-tree-node__content\",\n style: {\n \"padding-left\": (_vm.node.level - 1) * _vm.tree.indent + \"px\"\n }\n },\n [\n _c(\"span\", {\n class: [\n {\n \"is-leaf\": _vm.node.isLeaf,\n expanded: !_vm.node.isLeaf && _vm.expanded\n },\n \"el-tree-node__expand-icon\",\n _vm.tree.iconClass ? _vm.tree.iconClass : \"el-icon-caret-right\"\n ],\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.handleExpandIconClick($event)\n }\n }\n }),\n _vm.showCheckbox\n ? _c(\"el-checkbox\", {\n attrs: {\n indeterminate: _vm.node.indeterminate,\n disabled: !!_vm.node.disabled\n },\n on: { change: _vm.handleCheckChange },\n nativeOn: {\n click: function($event) {\n $event.stopPropagation()\n }\n },\n model: {\n value: _vm.node.checked,\n callback: function($$v) {\n _vm.$set(_vm.node, \"checked\", $$v)\n },\n expression: \"node.checked\"\n }\n })\n : _vm._e(),\n _vm.node.loading\n ? _c(\"span\", {\n staticClass: \"el-tree-node__loading-icon el-icon-loading\"\n })\n : _vm._e(),\n _c(\"node-content\", { attrs: { node: _vm.node } })\n ],\n 1\n ),\n _c(\"el-collapse-transition\", [\n !_vm.renderAfterExpand || _vm.childNodeRendered\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.expanded,\n expression: \"expanded\"\n }\n ],\n staticClass: \"el-tree-node__children\",\n attrs: { role: \"group\", \"aria-expanded\": _vm.expanded }\n },\n _vm._l(_vm.node.childNodes, function(child) {\n return _c(\"el-tree-node\", {\n key: _vm.getNodeKey(child),\n attrs: {\n \"render-content\": _vm.renderContent,\n \"render-after-expand\": _vm.renderAfterExpand,\n \"show-checkbox\": _vm.showCheckbox,\n node: child\n },\n on: { \"node-expand\": _vm.handleChildNodeExpand }\n })\n }),\n 1\n )\n : _vm._e()\n ])\n ],\n 1\n )\n}\nvar tree_nodevue_type_template_id_3ba3ef0e_staticRenderFns = []\ntree_nodevue_type_template_id_3ba3ef0e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tree/src/tree-node.vue?vue&type=template&id=3ba3ef0e&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree-node.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var tree_nodevue_type_script_lang_js_ = ({\n name: 'ElTreeNode',\n\n componentName: 'ElTreeNode',\n\n mixins: [emitter_default.a],\n\n props: {\n node: {\n default: function _default() {\n return {};\n }\n },\n props: {},\n renderContent: Function,\n renderAfterExpand: {\n type: Boolean,\n default: true\n },\n showCheckbox: {\n type: Boolean,\n default: false\n }\n },\n\n components: {\n ElCollapseTransition: collapse_transition_default.a,\n ElCheckbox: checkbox_default.a,\n NodeContent: {\n props: {\n node: {\n required: true\n }\n },\n render: function render(h) {\n var parent = this.$parent;\n var tree = parent.tree;\n var node = this.node;\n var data = node.data,\n store = node.store;\n\n return parent.renderContent ? parent.renderContent.call(parent._renderProxy, h, { _self: tree.$vnode.context, node: node, data: data, store: store }) : tree.$scopedSlots.default ? tree.$scopedSlots.default({ node: node, data: data }) : h(\n 'span',\n { 'class': 'el-tree-node__label' },\n [node.label]\n );\n }\n }\n },\n\n data: function data() {\n return {\n tree: null,\n expanded: false,\n childNodeRendered: false,\n oldChecked: null,\n oldIndeterminate: null\n };\n },\n\n\n watch: {\n 'node.indeterminate': function nodeIndeterminate(val) {\n this.handleSelectChange(this.node.checked, val);\n },\n 'node.checked': function nodeChecked(val) {\n this.handleSelectChange(val, this.node.indeterminate);\n },\n 'node.expanded': function nodeExpanded(val) {\n var _this = this;\n\n this.$nextTick(function () {\n return _this.expanded = val;\n });\n if (val) {\n this.childNodeRendered = true;\n }\n }\n },\n\n methods: {\n getNodeKey: function getNodeKey(node) {\n return util_getNodeKey(this.tree.nodeKey, node.data);\n },\n handleSelectChange: function handleSelectChange(checked, indeterminate) {\n if (this.oldChecked !== checked && this.oldIndeterminate !== indeterminate) {\n this.tree.$emit('check-change', this.node.data, checked, indeterminate);\n }\n this.oldChecked = checked;\n this.indeterminate = indeterminate;\n },\n handleClick: function handleClick() {\n var store = this.tree.store;\n store.setCurrentNode(this.node);\n this.tree.$emit('current-change', store.currentNode ? store.currentNode.data : null, store.currentNode);\n this.tree.currentNode = this;\n if (this.tree.expandOnClickNode) {\n this.handleExpandIconClick();\n }\n if (this.tree.checkOnClickNode && !this.node.disabled) {\n this.handleCheckChange(null, {\n target: { checked: !this.node.checked }\n });\n }\n this.tree.$emit('node-click', this.node.data, this.node, this);\n },\n handleContextMenu: function handleContextMenu(event) {\n if (this.tree._events['node-contextmenu'] && this.tree._events['node-contextmenu'].length > 0) {\n event.stopPropagation();\n event.preventDefault();\n }\n this.tree.$emit('node-contextmenu', event, this.node.data, this.node, this);\n },\n handleExpandIconClick: function handleExpandIconClick() {\n if (this.node.isLeaf) return;\n if (this.expanded) {\n this.tree.$emit('node-collapse', this.node.data, this.node, this);\n this.node.collapse();\n } else {\n this.node.expand();\n this.$emit('node-expand', this.node.data, this.node, this);\n }\n },\n handleCheckChange: function handleCheckChange(value, ev) {\n var _this2 = this;\n\n this.node.setChecked(ev.target.checked, !this.tree.checkStrictly);\n this.$nextTick(function () {\n var store = _this2.tree.store;\n _this2.tree.$emit('check', _this2.node.data, {\n checkedNodes: store.getCheckedNodes(),\n checkedKeys: store.getCheckedKeys(),\n halfCheckedNodes: store.getHalfCheckedNodes(),\n halfCheckedKeys: store.getHalfCheckedKeys()\n });\n });\n },\n handleChildNodeExpand: function handleChildNodeExpand(nodeData, node, instance) {\n this.broadcast('ElTreeNode', 'tree-node-expand', node);\n this.tree.$emit('node-expand', nodeData, node, instance);\n },\n handleDragStart: function handleDragStart(event) {\n if (!this.tree.draggable) return;\n this.tree.$emit('tree-node-drag-start', event, this);\n },\n handleDragOver: function handleDragOver(event) {\n if (!this.tree.draggable) return;\n this.tree.$emit('tree-node-drag-over', event, this);\n event.preventDefault();\n },\n handleDrop: function handleDrop(event) {\n event.preventDefault();\n },\n handleDragEnd: function handleDragEnd(event) {\n if (!this.tree.draggable) return;\n this.tree.$emit('tree-node-drag-end', event, this);\n }\n },\n\n created: function created() {\n var _this3 = this;\n\n var parent = this.$parent;\n\n if (parent.isTree) {\n this.tree = parent;\n } else {\n this.tree = parent.tree;\n }\n\n var tree = this.tree;\n if (!tree) {\n console.warn('Can not find node\\'s tree.');\n }\n\n var props = tree.props || {};\n var childrenKey = props['children'] || 'children';\n\n this.$watch('node.data.' + childrenKey, function () {\n _this3.node.updateChildren();\n });\n\n if (this.node.expanded) {\n this.expanded = true;\n this.childNodeRendered = true;\n }\n\n if (this.tree.accordion) {\n this.$on('tree-node-expand', function (node) {\n if (_this3.node !== node) {\n _this3.node.collapse();\n }\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/tree/src/tree-node.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tree_nodevue_type_script_lang_js_ = (tree_nodevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tree/src/tree-node.vue\n\n\n\n\n\n/* normalize component */\n\nvar tree_node_component = normalizeComponent(\n src_tree_nodevue_type_script_lang_js_,\n tree_nodevue_type_template_id_3ba3ef0e_render,\n tree_nodevue_type_template_id_3ba3ef0e_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tree_node_api; }\ntree_node_component.options.__file = \"packages/tree/src/tree-node.vue\"\n/* harmony default export */ var tree_node = (tree_node_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n/* harmony default export */ var treevue_type_script_lang_js_ = ({\n name: 'ElTree',\n\n mixins: [emitter_default.a],\n\n components: {\n ElTreeNode: tree_node\n },\n\n data: function data() {\n return {\n store: null,\n root: null,\n currentNode: null,\n treeItems: null,\n checkboxItems: [],\n dragState: {\n showDropIndicator: false,\n draggingNode: null,\n dropNode: null,\n allowDrop: true\n }\n };\n },\n\n\n props: {\n data: {\n type: Array\n },\n emptyText: {\n type: String,\n default: function _default() {\n return Object(lib_locale_[\"t\"])('el.tree.emptyText');\n }\n },\n renderAfterExpand: {\n type: Boolean,\n default: true\n },\n nodeKey: String,\n checkStrictly: Boolean,\n defaultExpandAll: Boolean,\n expandOnClickNode: {\n type: Boolean,\n default: true\n },\n checkOnClickNode: Boolean,\n checkDescendants: {\n type: Boolean,\n default: false\n },\n autoExpandParent: {\n type: Boolean,\n default: true\n },\n defaultCheckedKeys: Array,\n defaultExpandedKeys: Array,\n currentNodeKey: [String, Number],\n renderContent: Function,\n showCheckbox: {\n type: Boolean,\n default: false\n },\n draggable: {\n type: Boolean,\n default: false\n },\n allowDrag: Function,\n allowDrop: Function,\n props: {\n default: function _default() {\n return {\n children: 'children',\n label: 'label',\n disabled: 'disabled'\n };\n }\n },\n lazy: {\n type: Boolean,\n default: false\n },\n highlightCurrent: Boolean,\n load: Function,\n filterNodeMethod: Function,\n accordion: Boolean,\n indent: {\n type: Number,\n default: 18\n },\n iconClass: String\n },\n\n computed: {\n children: {\n set: function set(value) {\n this.data = value;\n },\n get: function get() {\n return this.data;\n }\n },\n\n treeItemArray: function treeItemArray() {\n return Array.prototype.slice.call(this.treeItems);\n },\n isEmpty: function isEmpty() {\n var childNodes = this.root.childNodes;\n\n return !childNodes || childNodes.length === 0 || childNodes.every(function (_ref) {\n var visible = _ref.visible;\n return !visible;\n });\n }\n },\n\n watch: {\n defaultCheckedKeys: function defaultCheckedKeys(newVal) {\n this.store.setDefaultCheckedKey(newVal);\n },\n defaultExpandedKeys: function defaultExpandedKeys(newVal) {\n this.store.defaultExpandedKeys = newVal;\n this.store.setDefaultExpandedKeys(newVal);\n },\n data: function data(newVal) {\n this.store.setData(newVal);\n },\n checkboxItems: function checkboxItems(val) {\n Array.prototype.forEach.call(val, function (checkbox) {\n checkbox.setAttribute('tabindex', -1);\n });\n },\n checkStrictly: function checkStrictly(newVal) {\n this.store.checkStrictly = newVal;\n }\n },\n\n methods: {\n filter: function filter(value) {\n if (!this.filterNodeMethod) throw new Error('[Tree] filterNodeMethod is required when filter');\n this.store.filter(value);\n },\n getNodeKey: function getNodeKey(node) {\n return util_getNodeKey(this.nodeKey, node.data);\n },\n getNodePath: function getNodePath(data) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in getNodePath');\n var node = this.store.getNode(data);\n if (!node) return [];\n var path = [node.data];\n var parent = node.parent;\n while (parent && parent !== this.root) {\n path.push(parent.data);\n parent = parent.parent;\n }\n return path.reverse();\n },\n getCheckedNodes: function getCheckedNodes(leafOnly, includeHalfChecked) {\n return this.store.getCheckedNodes(leafOnly, includeHalfChecked);\n },\n getCheckedKeys: function getCheckedKeys(leafOnly) {\n return this.store.getCheckedKeys(leafOnly);\n },\n getCurrentNode: function getCurrentNode() {\n var currentNode = this.store.getCurrentNode();\n return currentNode ? currentNode.data : null;\n },\n getCurrentKey: function getCurrentKey() {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in getCurrentKey');\n var currentNode = this.getCurrentNode();\n return currentNode ? currentNode[this.nodeKey] : null;\n },\n setCheckedNodes: function setCheckedNodes(nodes, leafOnly) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCheckedNodes');\n this.store.setCheckedNodes(nodes, leafOnly);\n },\n setCheckedKeys: function setCheckedKeys(keys, leafOnly) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCheckedKeys');\n this.store.setCheckedKeys(keys, leafOnly);\n },\n setChecked: function setChecked(data, checked, deep) {\n this.store.setChecked(data, checked, deep);\n },\n getHalfCheckedNodes: function getHalfCheckedNodes() {\n return this.store.getHalfCheckedNodes();\n },\n getHalfCheckedKeys: function getHalfCheckedKeys() {\n return this.store.getHalfCheckedKeys();\n },\n setCurrentNode: function setCurrentNode(node) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCurrentNode');\n this.store.setUserCurrentNode(node);\n },\n setCurrentKey: function setCurrentKey(key) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCurrentKey');\n this.store.setCurrentNodeKey(key);\n },\n getNode: function getNode(data) {\n return this.store.getNode(data);\n },\n remove: function remove(data) {\n this.store.remove(data);\n },\n append: function append(data, parentNode) {\n this.store.append(data, parentNode);\n },\n insertBefore: function insertBefore(data, refNode) {\n this.store.insertBefore(data, refNode);\n },\n insertAfter: function insertAfter(data, refNode) {\n this.store.insertAfter(data, refNode);\n },\n handleNodeExpand: function handleNodeExpand(nodeData, node, instance) {\n this.broadcast('ElTreeNode', 'tree-node-expand', node);\n this.$emit('node-expand', nodeData, node, instance);\n },\n updateKeyChildren: function updateKeyChildren(key, data) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in updateKeyChild');\n this.store.updateChildren(key, data);\n },\n initTabIndex: function initTabIndex() {\n this.treeItems = this.$el.querySelectorAll('.is-focusable[role=treeitem]');\n this.checkboxItems = this.$el.querySelectorAll('input[type=checkbox]');\n var checkedItem = this.$el.querySelectorAll('.is-checked[role=treeitem]');\n if (checkedItem.length) {\n checkedItem[0].setAttribute('tabindex', 0);\n return;\n }\n this.treeItems[0] && this.treeItems[0].setAttribute('tabindex', 0);\n },\n handleKeydown: function handleKeydown(ev) {\n var currentItem = ev.target;\n if (currentItem.className.indexOf('el-tree-node') === -1) return;\n var keyCode = ev.keyCode;\n this.treeItems = this.$el.querySelectorAll('.is-focusable[role=treeitem]');\n var currentIndex = this.treeItemArray.indexOf(currentItem);\n var nextIndex = void 0;\n if ([38, 40].indexOf(keyCode) > -1) {\n // up、down\n ev.preventDefault();\n if (keyCode === 38) {\n // up\n nextIndex = currentIndex !== 0 ? currentIndex - 1 : 0;\n } else {\n nextIndex = currentIndex < this.treeItemArray.length - 1 ? currentIndex + 1 : 0;\n }\n this.treeItemArray[nextIndex].focus(); // 选中\n }\n if ([37, 39].indexOf(keyCode) > -1) {\n // left、right 展开\n ev.preventDefault();\n currentItem.click(); // 选中\n }\n var hasInput = currentItem.querySelector('[type=\"checkbox\"]');\n if ([13, 32].indexOf(keyCode) > -1 && hasInput) {\n // space enter选中checkbox\n ev.preventDefault();\n hasInput.click();\n }\n }\n },\n\n created: function created() {\n var _this = this;\n\n this.isTree = true;\n\n this.store = new tree_store({\n key: this.nodeKey,\n data: this.data,\n lazy: this.lazy,\n props: this.props,\n load: this.load,\n currentNodeKey: this.currentNodeKey,\n checkStrictly: this.checkStrictly,\n checkDescendants: this.checkDescendants,\n defaultCheckedKeys: this.defaultCheckedKeys,\n defaultExpandedKeys: this.defaultExpandedKeys,\n autoExpandParent: this.autoExpandParent,\n defaultExpandAll: this.defaultExpandAll,\n filterNodeMethod: this.filterNodeMethod\n });\n\n this.root = this.store.root;\n\n var dragState = this.dragState;\n this.$on('tree-node-drag-start', function (event, treeNode) {\n if (typeof _this.allowDrag === 'function' && !_this.allowDrag(treeNode.node)) {\n event.preventDefault();\n return false;\n }\n event.dataTransfer.effectAllowed = 'move';\n\n // wrap in try catch to address IE's error when first param is 'text/plain'\n try {\n // setData is required for draggable to work in FireFox\n // the content has to be '' so dragging a node out of the tree won't open a new tab in FireFox\n event.dataTransfer.setData('text/plain', '');\n } catch (e) {}\n dragState.draggingNode = treeNode;\n _this.$emit('node-drag-start', treeNode.node, event);\n });\n\n this.$on('tree-node-drag-over', function (event, treeNode) {\n var dropNode = findNearestComponent(event.target, 'ElTreeNode');\n var oldDropNode = dragState.dropNode;\n if (oldDropNode && oldDropNode !== dropNode) {\n Object(dom_[\"removeClass\"])(oldDropNode.$el, 'is-drop-inner');\n }\n var draggingNode = dragState.draggingNode;\n if (!draggingNode || !dropNode) return;\n\n var dropPrev = true;\n var dropInner = true;\n var dropNext = true;\n var userAllowDropInner = true;\n if (typeof _this.allowDrop === 'function') {\n dropPrev = _this.allowDrop(draggingNode.node, dropNode.node, 'prev');\n userAllowDropInner = dropInner = _this.allowDrop(draggingNode.node, dropNode.node, 'inner');\n dropNext = _this.allowDrop(draggingNode.node, dropNode.node, 'next');\n }\n event.dataTransfer.dropEffect = dropInner ? 'move' : 'none';\n if ((dropPrev || dropInner || dropNext) && oldDropNode !== dropNode) {\n if (oldDropNode) {\n _this.$emit('node-drag-leave', draggingNode.node, oldDropNode.node, event);\n }\n _this.$emit('node-drag-enter', draggingNode.node, dropNode.node, event);\n }\n\n if (dropPrev || dropInner || dropNext) {\n dragState.dropNode = dropNode;\n }\n\n if (dropNode.node.nextSibling === draggingNode.node) {\n dropNext = false;\n }\n if (dropNode.node.previousSibling === draggingNode.node) {\n dropPrev = false;\n }\n if (dropNode.node.contains(draggingNode.node, false)) {\n dropInner = false;\n }\n if (draggingNode.node === dropNode.node || draggingNode.node.contains(dropNode.node)) {\n dropPrev = false;\n dropInner = false;\n dropNext = false;\n }\n\n var targetPosition = dropNode.$el.getBoundingClientRect();\n var treePosition = _this.$el.getBoundingClientRect();\n\n var dropType = void 0;\n var prevPercent = dropPrev ? dropInner ? 0.25 : dropNext ? 0.45 : 1 : -1;\n var nextPercent = dropNext ? dropInner ? 0.75 : dropPrev ? 0.55 : 0 : 1;\n\n var indicatorTop = -9999;\n var distance = event.clientY - targetPosition.top;\n if (distance < targetPosition.height * prevPercent) {\n dropType = 'before';\n } else if (distance > targetPosition.height * nextPercent) {\n dropType = 'after';\n } else if (dropInner) {\n dropType = 'inner';\n } else {\n dropType = 'none';\n }\n\n var iconPosition = dropNode.$el.querySelector('.el-tree-node__expand-icon').getBoundingClientRect();\n var dropIndicator = _this.$refs.dropIndicator;\n if (dropType === 'before') {\n indicatorTop = iconPosition.top - treePosition.top;\n } else if (dropType === 'after') {\n indicatorTop = iconPosition.bottom - treePosition.top;\n }\n dropIndicator.style.top = indicatorTop + 'px';\n dropIndicator.style.left = iconPosition.right - treePosition.left + 'px';\n\n if (dropType === 'inner') {\n Object(dom_[\"addClass\"])(dropNode.$el, 'is-drop-inner');\n } else {\n Object(dom_[\"removeClass\"])(dropNode.$el, 'is-drop-inner');\n }\n\n dragState.showDropIndicator = dropType === 'before' || dropType === 'after';\n dragState.allowDrop = dragState.showDropIndicator || userAllowDropInner;\n dragState.dropType = dropType;\n _this.$emit('node-drag-over', draggingNode.node, dropNode.node, event);\n });\n\n this.$on('tree-node-drag-end', function (event) {\n var draggingNode = dragState.draggingNode,\n dropType = dragState.dropType,\n dropNode = dragState.dropNode;\n\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n\n if (draggingNode && dropNode) {\n var draggingNodeCopy = { data: draggingNode.node.data };\n if (dropType !== 'none') {\n draggingNode.node.remove();\n }\n if (dropType === 'before') {\n dropNode.node.parent.insertBefore(draggingNodeCopy, dropNode.node);\n } else if (dropType === 'after') {\n dropNode.node.parent.insertAfter(draggingNodeCopy, dropNode.node);\n } else if (dropType === 'inner') {\n dropNode.node.insertChild(draggingNodeCopy);\n }\n if (dropType !== 'none') {\n _this.store.registerNode(draggingNodeCopy);\n }\n\n Object(dom_[\"removeClass\"])(dropNode.$el, 'is-drop-inner');\n\n _this.$emit('node-drag-end', draggingNode.node, dropNode.node, dropType, event);\n if (dropType !== 'none') {\n _this.$emit('node-drop', draggingNode.node, dropNode.node, dropType, event);\n }\n }\n if (draggingNode && !dropNode) {\n _this.$emit('node-drag-end', draggingNode.node, null, dropType, event);\n }\n\n dragState.showDropIndicator = false;\n dragState.draggingNode = null;\n dragState.dropNode = null;\n dragState.allowDrop = true;\n });\n },\n mounted: function mounted() {\n this.initTabIndex();\n this.$el.addEventListener('keydown', this.handleKeydown);\n },\n updated: function updated() {\n this.treeItems = this.$el.querySelectorAll('[role=treeitem]');\n this.checkboxItems = this.$el.querySelectorAll('input[type=checkbox]');\n }\n});\n// CONCATENATED MODULE: ./packages/tree/src/tree.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_treevue_type_script_lang_js_ = (treevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tree/src/tree.vue\n\n\n\n\n\n/* normalize component */\n\nvar tree_component = normalizeComponent(\n src_treevue_type_script_lang_js_,\n treevue_type_template_id_547575a6_render,\n treevue_type_template_id_547575a6_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tree_api; }\ntree_component.options.__file = \"packages/tree/src/tree.vue\"\n/* harmony default export */ var src_tree = (tree_component.exports);\n// CONCATENATED MODULE: ./packages/tree/index.js\n\n\n/* istanbul ignore next */\nsrc_tree.install = function (Vue) {\n Vue.component(src_tree.name, src_tree);\n};\n\n/* harmony default export */ var packages_tree = (src_tree);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/alert/src/main.vue?vue&type=template&id=6e53341b&\nvar mainvue_type_template_id_6e53341b_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"el-alert-fade\" } }, [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-alert\",\n class: [\n _vm.typeClass,\n _vm.center ? \"is-center\" : \"\",\n \"is-\" + _vm.effect\n ],\n attrs: { role: \"alert\" }\n },\n [\n _vm.showIcon\n ? _c(\"i\", {\n staticClass: \"el-alert__icon\",\n class: [_vm.iconClass, _vm.isBigIcon]\n })\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-alert__content\" }, [\n _vm.title || _vm.$slots.title\n ? _c(\n \"span\",\n { staticClass: \"el-alert__title\", class: [_vm.isBoldTitle] },\n [_vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])],\n 2\n )\n : _vm._e(),\n _vm.$slots.default && !_vm.description\n ? _c(\n \"p\",\n { staticClass: \"el-alert__description\" },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e(),\n _vm.description && !_vm.$slots.default\n ? _c(\"p\", { staticClass: \"el-alert__description\" }, [\n _vm._v(_vm._s(_vm.description))\n ])\n : _vm._e(),\n _c(\n \"i\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.closable,\n expression: \"closable\"\n }\n ],\n staticClass: \"el-alert__closebtn\",\n class: {\n \"is-customed\": _vm.closeText !== \"\",\n \"el-icon-close\": _vm.closeText === \"\"\n },\n on: {\n click: function($event) {\n _vm.close()\n }\n }\n },\n [_vm._v(_vm._s(_vm.closeText))]\n )\n ])\n ]\n )\n ])\n}\nvar mainvue_type_template_id_6e53341b_staticRenderFns = []\nmainvue_type_template_id_6e53341b_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/alert/src/main.vue?vue&type=template&id=6e53341b&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/alert/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar TYPE_CLASSES_MAP = {\n 'success': 'el-icon-success',\n 'warning': 'el-icon-warning',\n 'error': 'el-icon-error'\n};\n/* harmony default export */ var alert_src_mainvue_type_script_lang_js_ = ({\n name: 'ElAlert',\n\n props: {\n title: {\n type: String,\n default: ''\n },\n description: {\n type: String,\n default: ''\n },\n type: {\n type: String,\n default: 'info'\n },\n closable: {\n type: Boolean,\n default: true\n },\n closeText: {\n type: String,\n default: ''\n },\n showIcon: Boolean,\n center: Boolean,\n effect: {\n type: String,\n default: 'light',\n validator: function validator(value) {\n return ['light', 'dark'].indexOf(value) !== -1;\n }\n }\n },\n\n data: function data() {\n return {\n visible: true\n };\n },\n\n\n methods: {\n close: function close() {\n this.visible = false;\n this.$emit('close');\n }\n },\n\n computed: {\n typeClass: function typeClass() {\n return 'el-alert--' + this.type;\n },\n iconClass: function iconClass() {\n return TYPE_CLASSES_MAP[this.type] || 'el-icon-info';\n },\n isBigIcon: function isBigIcon() {\n return this.description || this.$slots.default ? 'is-big' : '';\n },\n isBoldTitle: function isBoldTitle() {\n return this.description || this.$slots.default ? 'is-bold' : '';\n }\n }\n});\n// CONCATENATED MODULE: ./packages/alert/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_alert_src_mainvue_type_script_lang_js_ = (alert_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/alert/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar alert_src_main_component = normalizeComponent(\n packages_alert_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_6e53341b_render,\n mainvue_type_template_id_6e53341b_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var alert_src_main_api; }\nalert_src_main_component.options.__file = \"packages/alert/src/main.vue\"\n/* harmony default export */ var alert_src_main = (alert_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/alert/index.js\n\n\n/* istanbul ignore next */\nalert_src_main.install = function (Vue) {\n Vue.component(alert_src_main.name, alert_src_main);\n};\n\n/* harmony default export */ var packages_alert = (alert_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/notification/src/main.vue?vue&type=template&id=43dbc3d8&\nvar mainvue_type_template_id_43dbc3d8_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"el-notification-fade\" } }, [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n class: [\"el-notification\", _vm.customClass, _vm.horizontalClass],\n style: _vm.positionStyle,\n attrs: { role: \"alert\" },\n on: {\n mouseenter: function($event) {\n _vm.clearTimer()\n },\n mouseleave: function($event) {\n _vm.startTimer()\n },\n click: _vm.click\n }\n },\n [\n _vm.type || _vm.iconClass\n ? _c(\"i\", {\n staticClass: \"el-notification__icon\",\n class: [_vm.typeClass, _vm.iconClass]\n })\n : _vm._e(),\n _c(\n \"div\",\n {\n staticClass: \"el-notification__group\",\n class: { \"is-with-icon\": _vm.typeClass || _vm.iconClass }\n },\n [\n _c(\"h2\", {\n staticClass: \"el-notification__title\",\n domProps: { textContent: _vm._s(_vm.title) }\n }),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.message,\n expression: \"message\"\n }\n ],\n staticClass: \"el-notification__content\"\n },\n [\n _vm._t(\"default\", [\n !_vm.dangerouslyUseHTMLString\n ? _c(\"p\", [_vm._v(_vm._s(_vm.message))])\n : _c(\"p\", { domProps: { innerHTML: _vm._s(_vm.message) } })\n ])\n ],\n 2\n ),\n _vm.showClose\n ? _c(\"div\", {\n staticClass: \"el-notification__closeBtn el-icon-close\",\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.close($event)\n }\n }\n })\n : _vm._e()\n ]\n )\n ]\n )\n ])\n}\nvar mainvue_type_template_id_43dbc3d8_staticRenderFns = []\nmainvue_type_template_id_43dbc3d8_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/notification/src/main.vue?vue&type=template&id=43dbc3d8&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/notification/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar mainvue_type_script_lang_js_typeMap = {\n success: 'success',\n info: 'info',\n warning: 'warning',\n error: 'error'\n};\n\n/* harmony default export */ var notification_src_mainvue_type_script_lang_js_ = ({\n data: function data() {\n return {\n visible: false,\n title: '',\n message: '',\n duration: 4500,\n type: '',\n showClose: true,\n customClass: '',\n iconClass: '',\n onClose: null,\n onClick: null,\n closed: false,\n verticalOffset: 0,\n timer: null,\n dangerouslyUseHTMLString: false,\n position: 'top-right'\n };\n },\n\n\n computed: {\n typeClass: function typeClass() {\n return this.type && mainvue_type_script_lang_js_typeMap[this.type] ? 'el-icon-' + mainvue_type_script_lang_js_typeMap[this.type] : '';\n },\n horizontalClass: function horizontalClass() {\n return this.position.indexOf('right') > -1 ? 'right' : 'left';\n },\n verticalProperty: function verticalProperty() {\n return (/^top-/.test(this.position) ? 'top' : 'bottom'\n );\n },\n positionStyle: function positionStyle() {\n var _ref;\n\n return _ref = {}, _ref[this.verticalProperty] = this.verticalOffset + 'px', _ref;\n }\n },\n\n watch: {\n closed: function closed(newVal) {\n if (newVal) {\n this.visible = false;\n this.$el.addEventListener('transitionend', this.destroyElement);\n }\n }\n },\n\n methods: {\n destroyElement: function destroyElement() {\n this.$el.removeEventListener('transitionend', this.destroyElement);\n this.$destroy(true);\n this.$el.parentNode.removeChild(this.$el);\n },\n click: function click() {\n if (typeof this.onClick === 'function') {\n this.onClick();\n }\n },\n close: function close() {\n this.closed = true;\n if (typeof this.onClose === 'function') {\n this.onClose();\n }\n },\n clearTimer: function clearTimer() {\n clearTimeout(this.timer);\n },\n startTimer: function startTimer() {\n var _this = this;\n\n if (this.duration > 0) {\n this.timer = setTimeout(function () {\n if (!_this.closed) {\n _this.close();\n }\n }, this.duration);\n }\n },\n keydown: function keydown(e) {\n if (e.keyCode === 46 || e.keyCode === 8) {\n this.clearTimer(); // detele 取消倒计时\n } else if (e.keyCode === 27) {\n // esc关闭消息\n if (!this.closed) {\n this.close();\n }\n } else {\n this.startTimer(); // 恢复倒计时\n }\n }\n },\n mounted: function mounted() {\n var _this2 = this;\n\n if (this.duration > 0) {\n this.timer = setTimeout(function () {\n if (!_this2.closed) {\n _this2.close();\n }\n }, this.duration);\n }\n document.addEventListener('keydown', this.keydown);\n },\n beforeDestroy: function beforeDestroy() {\n document.removeEventListener('keydown', this.keydown);\n }\n});\n// CONCATENATED MODULE: ./packages/notification/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_notification_src_mainvue_type_script_lang_js_ = (notification_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/notification/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar notification_src_main_component = normalizeComponent(\n packages_notification_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_43dbc3d8_render,\n mainvue_type_template_id_43dbc3d8_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var notification_src_main_api; }\nnotification_src_main_component.options.__file = \"packages/notification/src/main.vue\"\n/* harmony default export */ var notification_src_main = (notification_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/notification/src/main.js\n\n\n\n\n\nvar NotificationConstructor = external_vue_default.a.extend(notification_src_main);\n\nvar src_main_instance = void 0;\nvar instances = [];\nvar seed = 1;\n\nvar main_Notification = function Notification(options) {\n if (external_vue_default.a.prototype.$isServer) return;\n options = merge_default()({}, options);\n var userOnClose = options.onClose;\n var id = 'notification_' + seed++;\n var position = options.position || 'top-right';\n\n options.onClose = function () {\n Notification.close(id, userOnClose);\n };\n\n src_main_instance = new NotificationConstructor({\n data: options\n });\n\n if (Object(vdom_[\"isVNode\"])(options.message)) {\n src_main_instance.$slots.default = [options.message];\n options.message = 'REPLACED_BY_VNODE';\n }\n src_main_instance.id = id;\n src_main_instance.$mount();\n document.body.appendChild(src_main_instance.$el);\n src_main_instance.visible = true;\n src_main_instance.dom = src_main_instance.$el;\n src_main_instance.dom.style.zIndex = popup_[\"PopupManager\"].nextZIndex();\n\n var verticalOffset = options.offset || 0;\n instances.filter(function (item) {\n return item.position === position;\n }).forEach(function (item) {\n verticalOffset += item.$el.offsetHeight + 16;\n });\n verticalOffset += 16;\n src_main_instance.verticalOffset = verticalOffset;\n instances.push(src_main_instance);\n return src_main_instance;\n};\n\n['success', 'warning', 'info', 'error'].forEach(function (type) {\n main_Notification[type] = function (options) {\n if (typeof options === 'string' || Object(vdom_[\"isVNode\"])(options)) {\n options = {\n message: options\n };\n }\n options.type = type;\n return main_Notification(options);\n };\n});\n\nmain_Notification.close = function (id, userOnClose) {\n var index = -1;\n var len = instances.length;\n var instance = instances.filter(function (instance, i) {\n if (instance.id === id) {\n index = i;\n return true;\n }\n return false;\n })[0];\n if (!instance) return;\n\n if (typeof userOnClose === 'function') {\n userOnClose(instance);\n }\n instances.splice(index, 1);\n\n if (len <= 1) return;\n var position = instance.position;\n var removedHeight = instance.dom.offsetHeight;\n for (var i = index; i < len - 1; i++) {\n if (instances[i].position === position) {\n instances[i].dom.style[instance.verticalProperty] = parseInt(instances[i].dom.style[instance.verticalProperty], 10) - removedHeight - 16 + 'px';\n }\n }\n};\n\nmain_Notification.closeAll = function () {\n for (var i = instances.length - 1; i >= 0; i--) {\n instances[i].close();\n }\n};\n\n/* harmony default export */ var packages_notification_src_main = (main_Notification);\n// CONCATENATED MODULE: ./packages/notification/index.js\n\n/* harmony default export */ var notification = (packages_notification_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/main.vue?vue&type=template&id=32708644&\nvar mainvue_type_template_id_32708644_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-slider\",\n class: {\n \"is-vertical\": _vm.vertical,\n \"el-slider--with-input\": _vm.showInput\n },\n attrs: {\n role: \"slider\",\n \"aria-valuemin\": _vm.min,\n \"aria-valuemax\": _vm.max,\n \"aria-orientation\": _vm.vertical ? \"vertical\" : \"horizontal\",\n \"aria-disabled\": _vm.sliderDisabled\n }\n },\n [\n _vm.showInput && !_vm.range\n ? _c(\"el-input-number\", {\n ref: \"input\",\n staticClass: \"el-slider__input\",\n attrs: {\n step: _vm.step,\n disabled: _vm.sliderDisabled,\n controls: _vm.showInputControls,\n min: _vm.min,\n max: _vm.max,\n debounce: _vm.debounce,\n size: _vm.inputSize\n },\n on: { change: _vm.emitChange },\n model: {\n value: _vm.firstValue,\n callback: function($$v) {\n _vm.firstValue = $$v\n },\n expression: \"firstValue\"\n }\n })\n : _vm._e(),\n _c(\n \"div\",\n {\n ref: \"slider\",\n staticClass: \"el-slider__runway\",\n class: { \"show-input\": _vm.showInput, disabled: _vm.sliderDisabled },\n style: _vm.runwayStyle,\n on: { click: _vm.onSliderClick }\n },\n [\n _c(\"div\", { staticClass: \"el-slider__bar\", style: _vm.barStyle }),\n _c(\"slider-button\", {\n ref: \"button1\",\n attrs: {\n vertical: _vm.vertical,\n \"tooltip-class\": _vm.tooltipClass\n },\n model: {\n value: _vm.firstValue,\n callback: function($$v) {\n _vm.firstValue = $$v\n },\n expression: \"firstValue\"\n }\n }),\n _vm.range\n ? _c(\"slider-button\", {\n ref: \"button2\",\n attrs: {\n vertical: _vm.vertical,\n \"tooltip-class\": _vm.tooltipClass\n },\n model: {\n value: _vm.secondValue,\n callback: function($$v) {\n _vm.secondValue = $$v\n },\n expression: \"secondValue\"\n }\n })\n : _vm._e(),\n _vm._l(_vm.stops, function(item, key) {\n return _vm.showStops\n ? _c(\"div\", {\n key: key,\n staticClass: \"el-slider__stop\",\n style: _vm.getStopStyle(item)\n })\n : _vm._e()\n }),\n _vm.markList.length > 0\n ? [\n _c(\n \"div\",\n _vm._l(_vm.markList, function(item, key) {\n return _c(\"div\", {\n key: key,\n staticClass: \"el-slider__stop el-slider__marks-stop\",\n style: _vm.getStopStyle(item.position)\n })\n }),\n 0\n ),\n _c(\n \"div\",\n { staticClass: \"el-slider__marks\" },\n _vm._l(_vm.markList, function(item, key) {\n return _c(\"slider-marker\", {\n key: key,\n style: _vm.getStopStyle(item.position),\n attrs: { mark: item.mark }\n })\n }),\n 1\n )\n ]\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n )\n}\nvar mainvue_type_template_id_32708644_staticRenderFns = []\nmainvue_type_template_id_32708644_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/slider/src/main.vue?vue&type=template&id=32708644&\n\n// EXTERNAL MODULE: external \"element-ui/lib/input-number\"\nvar input_number_ = __webpack_require__(41);\nvar input_number_default = /*#__PURE__*/__webpack_require__.n(input_number_);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/button.vue?vue&type=template&id=e72d2ad2&\nvar buttonvue_type_template_id_e72d2ad2_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n ref: \"button\",\n staticClass: \"el-slider__button-wrapper\",\n class: { hover: _vm.hovering, dragging: _vm.dragging },\n style: _vm.wrapperStyle,\n attrs: { tabindex: \"0\" },\n on: {\n mouseenter: _vm.handleMouseEnter,\n mouseleave: _vm.handleMouseLeave,\n mousedown: _vm.onButtonDown,\n touchstart: _vm.onButtonDown,\n focus: _vm.handleMouseEnter,\n blur: _vm.handleMouseLeave,\n keydown: [\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"left\", 37, $event.key, [\n \"Left\",\n \"ArrowLeft\"\n ])\n ) {\n return null\n }\n if (\"button\" in $event && $event.button !== 0) {\n return null\n }\n return _vm.onLeftKeyDown($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"right\", 39, $event.key, [\n \"Right\",\n \"ArrowRight\"\n ])\n ) {\n return null\n }\n if (\"button\" in $event && $event.button !== 2) {\n return null\n }\n return _vm.onRightKeyDown($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.onLeftKeyDown($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.onRightKeyDown($event)\n }\n ]\n }\n },\n [\n _c(\n \"el-tooltip\",\n {\n ref: \"tooltip\",\n attrs: {\n placement: \"top\",\n \"popper-class\": _vm.tooltipClass,\n disabled: !_vm.showTooltip\n }\n },\n [\n _c(\"span\", { attrs: { slot: \"content\" }, slot: \"content\" }, [\n _vm._v(_vm._s(_vm.formatValue))\n ]),\n _c(\"div\", {\n staticClass: \"el-slider__button\",\n class: { hover: _vm.hovering, dragging: _vm.dragging }\n })\n ]\n )\n ],\n 1\n )\n}\nvar buttonvue_type_template_id_e72d2ad2_staticRenderFns = []\nbuttonvue_type_template_id_e72d2ad2_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/slider/src/button.vue?vue&type=template&id=e72d2ad2&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var slider_src_buttonvue_type_script_lang_js_ = ({\n name: 'ElSliderButton',\n\n components: {\n ElTooltip: tooltip_default.a\n },\n\n props: {\n value: {\n type: Number,\n default: 0\n },\n vertical: {\n type: Boolean,\n default: false\n },\n tooltipClass: String\n },\n\n data: function data() {\n return {\n hovering: false,\n dragging: false,\n isClick: false,\n startX: 0,\n currentX: 0,\n startY: 0,\n currentY: 0,\n startPosition: 0,\n newPosition: null,\n oldValue: this.value\n };\n },\n\n\n computed: {\n disabled: function disabled() {\n return this.$parent.sliderDisabled;\n },\n max: function max() {\n return this.$parent.max;\n },\n min: function min() {\n return this.$parent.min;\n },\n step: function step() {\n return this.$parent.step;\n },\n showTooltip: function showTooltip() {\n return this.$parent.showTooltip;\n },\n precision: function precision() {\n return this.$parent.precision;\n },\n currentPosition: function currentPosition() {\n return (this.value - this.min) / (this.max - this.min) * 100 + '%';\n },\n enableFormat: function enableFormat() {\n return this.$parent.formatTooltip instanceof Function;\n },\n formatValue: function formatValue() {\n return this.enableFormat && this.$parent.formatTooltip(this.value) || this.value;\n },\n wrapperStyle: function wrapperStyle() {\n return this.vertical ? { bottom: this.currentPosition } : { left: this.currentPosition };\n }\n },\n\n watch: {\n dragging: function dragging(val) {\n this.$parent.dragging = val;\n }\n },\n\n methods: {\n displayTooltip: function displayTooltip() {\n this.$refs.tooltip && (this.$refs.tooltip.showPopper = true);\n },\n hideTooltip: function hideTooltip() {\n this.$refs.tooltip && (this.$refs.tooltip.showPopper = false);\n },\n handleMouseEnter: function handleMouseEnter() {\n this.hovering = true;\n this.displayTooltip();\n },\n handleMouseLeave: function handleMouseLeave() {\n this.hovering = false;\n this.hideTooltip();\n },\n onButtonDown: function onButtonDown(event) {\n if (this.disabled) return;\n event.preventDefault();\n this.onDragStart(event);\n window.addEventListener('mousemove', this.onDragging);\n window.addEventListener('touchmove', this.onDragging);\n window.addEventListener('mouseup', this.onDragEnd);\n window.addEventListener('touchend', this.onDragEnd);\n window.addEventListener('contextmenu', this.onDragEnd);\n },\n onLeftKeyDown: function onLeftKeyDown() {\n if (this.disabled) return;\n this.newPosition = parseFloat(this.currentPosition) - this.step / (this.max - this.min) * 100;\n this.setPosition(this.newPosition);\n this.$parent.emitChange();\n },\n onRightKeyDown: function onRightKeyDown() {\n if (this.disabled) return;\n this.newPosition = parseFloat(this.currentPosition) + this.step / (this.max - this.min) * 100;\n this.setPosition(this.newPosition);\n this.$parent.emitChange();\n },\n onDragStart: function onDragStart(event) {\n this.dragging = true;\n this.isClick = true;\n if (event.type === 'touchstart') {\n event.clientY = event.touches[0].clientY;\n event.clientX = event.touches[0].clientX;\n }\n if (this.vertical) {\n this.startY = event.clientY;\n } else {\n this.startX = event.clientX;\n }\n this.startPosition = parseFloat(this.currentPosition);\n this.newPosition = this.startPosition;\n },\n onDragging: function onDragging(event) {\n if (this.dragging) {\n this.isClick = false;\n this.displayTooltip();\n this.$parent.resetSize();\n var diff = 0;\n if (event.type === 'touchmove') {\n event.clientY = event.touches[0].clientY;\n event.clientX = event.touches[0].clientX;\n }\n if (this.vertical) {\n this.currentY = event.clientY;\n diff = (this.startY - this.currentY) / this.$parent.sliderSize * 100;\n } else {\n this.currentX = event.clientX;\n diff = (this.currentX - this.startX) / this.$parent.sliderSize * 100;\n }\n this.newPosition = this.startPosition + diff;\n this.setPosition(this.newPosition);\n }\n },\n onDragEnd: function onDragEnd() {\n var _this = this;\n\n if (this.dragging) {\n /*\n * 防止在 mouseup 后立即触发 click,导致滑块有几率产生一小段位移\n * 不使用 preventDefault 是因为 mouseup 和 click 没有注册在同一个 DOM 上\n */\n setTimeout(function () {\n _this.dragging = false;\n _this.hideTooltip();\n if (!_this.isClick) {\n _this.setPosition(_this.newPosition);\n _this.$parent.emitChange();\n }\n }, 0);\n window.removeEventListener('mousemove', this.onDragging);\n window.removeEventListener('touchmove', this.onDragging);\n window.removeEventListener('mouseup', this.onDragEnd);\n window.removeEventListener('touchend', this.onDragEnd);\n window.removeEventListener('contextmenu', this.onDragEnd);\n }\n },\n setPosition: function setPosition(newPosition) {\n var _this2 = this;\n\n if (newPosition === null || isNaN(newPosition)) return;\n if (newPosition < 0) {\n newPosition = 0;\n } else if (newPosition > 100) {\n newPosition = 100;\n }\n var lengthPerStep = 100 / ((this.max - this.min) / this.step);\n var steps = Math.round(newPosition / lengthPerStep);\n var value = steps * lengthPerStep * (this.max - this.min) * 0.01 + this.min;\n value = parseFloat(value.toFixed(this.precision));\n this.$emit('input', value);\n this.$nextTick(function () {\n _this2.displayTooltip();\n _this2.$refs.tooltip && _this2.$refs.tooltip.updatePopper();\n });\n if (!this.dragging && this.value !== this.oldValue) {\n this.oldValue = this.value;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/slider/src/button.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_slider_src_buttonvue_type_script_lang_js_ = (slider_src_buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/slider/src/button.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_button_component = normalizeComponent(\n packages_slider_src_buttonvue_type_script_lang_js_,\n buttonvue_type_template_id_e72d2ad2_render,\n buttonvue_type_template_id_e72d2ad2_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_button_api; }\nsrc_button_component.options.__file = \"packages/slider/src/button.vue\"\n/* harmony default export */ var slider_src_button = (src_button_component.exports);\n// CONCATENATED MODULE: ./packages/slider/src/marker.js\n/* harmony default export */ var marker = ({\n name: 'ElMarker',\n\n props: {\n mark: {\n type: [String, Object]\n }\n },\n render: function render() {\n var h = arguments[0];\n\n var label = typeof this.mark === 'string' ? this.mark : this.mark.label;\n\n return h(\n 'div',\n { 'class': 'el-slider__marks-text', style: this.mark.style || {} },\n [label]\n );\n }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var slider_src_mainvue_type_script_lang_js_ = ({\n name: 'ElSlider',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n }\n },\n\n props: {\n min: {\n type: Number,\n default: 0\n },\n max: {\n type: Number,\n default: 100\n },\n step: {\n type: Number,\n default: 1\n },\n value: {\n type: [Number, Array],\n default: 0\n },\n showInput: {\n type: Boolean,\n default: false\n },\n showInputControls: {\n type: Boolean,\n default: true\n },\n inputSize: {\n type: String,\n default: 'small'\n },\n showStops: {\n type: Boolean,\n default: false\n },\n showTooltip: {\n type: Boolean,\n default: true\n },\n formatTooltip: Function,\n disabled: {\n type: Boolean,\n default: false\n },\n range: {\n type: Boolean,\n default: false\n },\n vertical: {\n type: Boolean,\n default: false\n },\n height: {\n type: String\n },\n debounce: {\n type: Number,\n default: 300\n },\n label: {\n type: String\n },\n tooltipClass: String,\n marks: Object\n },\n\n components: {\n ElInputNumber: input_number_default.a,\n SliderButton: slider_src_button,\n SliderMarker: marker\n },\n\n data: function data() {\n return {\n firstValue: null,\n secondValue: null,\n oldValue: null,\n dragging: false,\n sliderSize: 1\n };\n },\n\n\n watch: {\n value: function value(val, oldVal) {\n if (this.dragging || Array.isArray(val) && Array.isArray(oldVal) && val.every(function (item, index) {\n return item === oldVal[index];\n })) {\n return;\n }\n this.setValues();\n },\n dragging: function dragging(val) {\n if (!val) {\n this.setValues();\n }\n },\n firstValue: function firstValue(val) {\n if (this.range) {\n this.$emit('input', [this.minValue, this.maxValue]);\n } else {\n this.$emit('input', val);\n }\n },\n secondValue: function secondValue() {\n if (this.range) {\n this.$emit('input', [this.minValue, this.maxValue]);\n }\n },\n min: function min() {\n this.setValues();\n },\n max: function max() {\n this.setValues();\n }\n },\n\n methods: {\n valueChanged: function valueChanged() {\n var _this = this;\n\n if (this.range) {\n return ![this.minValue, this.maxValue].every(function (item, index) {\n return item === _this.oldValue[index];\n });\n } else {\n return this.value !== this.oldValue;\n }\n },\n setValues: function setValues() {\n if (this.min > this.max) {\n console.error('[Element Error][Slider]min should not be greater than max.');\n return;\n }\n var val = this.value;\n if (this.range && Array.isArray(val)) {\n if (val[1] < this.min) {\n this.$emit('input', [this.min, this.min]);\n } else if (val[0] > this.max) {\n this.$emit('input', [this.max, this.max]);\n } else if (val[0] < this.min) {\n this.$emit('input', [this.min, val[1]]);\n } else if (val[1] > this.max) {\n this.$emit('input', [val[0], this.max]);\n } else {\n this.firstValue = val[0];\n this.secondValue = val[1];\n if (this.valueChanged()) {\n this.dispatch('ElFormItem', 'el.form.change', [this.minValue, this.maxValue]);\n this.oldValue = val.slice();\n }\n }\n } else if (!this.range && typeof val === 'number' && !isNaN(val)) {\n if (val < this.min) {\n this.$emit('input', this.min);\n } else if (val > this.max) {\n this.$emit('input', this.max);\n } else {\n this.firstValue = val;\n if (this.valueChanged()) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n this.oldValue = val;\n }\n }\n }\n },\n setPosition: function setPosition(percent) {\n var targetValue = this.min + percent * (this.max - this.min) / 100;\n if (!this.range) {\n this.$refs.button1.setPosition(percent);\n return;\n }\n var button = void 0;\n if (Math.abs(this.minValue - targetValue) < Math.abs(this.maxValue - targetValue)) {\n button = this.firstValue < this.secondValue ? 'button1' : 'button2';\n } else {\n button = this.firstValue > this.secondValue ? 'button1' : 'button2';\n }\n this.$refs[button].setPosition(percent);\n },\n onSliderClick: function onSliderClick(event) {\n if (this.sliderDisabled || this.dragging) return;\n this.resetSize();\n if (this.vertical) {\n var sliderOffsetBottom = this.$refs.slider.getBoundingClientRect().bottom;\n this.setPosition((sliderOffsetBottom - event.clientY) / this.sliderSize * 100);\n } else {\n var sliderOffsetLeft = this.$refs.slider.getBoundingClientRect().left;\n this.setPosition((event.clientX - sliderOffsetLeft) / this.sliderSize * 100);\n }\n this.emitChange();\n },\n resetSize: function resetSize() {\n if (this.$refs.slider) {\n this.sliderSize = this.$refs.slider['client' + (this.vertical ? 'Height' : 'Width')];\n }\n },\n emitChange: function emitChange() {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.$emit('change', _this2.range ? [_this2.minValue, _this2.maxValue] : _this2.value);\n });\n },\n getStopStyle: function getStopStyle(position) {\n return this.vertical ? { 'bottom': position + '%' } : { 'left': position + '%' };\n }\n },\n\n computed: {\n stops: function stops() {\n var _this3 = this;\n\n if (!this.showStops || this.min > this.max) return [];\n if (this.step === 0) {\n false && false;\n return [];\n }\n var stopCount = (this.max - this.min) / this.step;\n var stepWidth = 100 * this.step / (this.max - this.min);\n var result = [];\n for (var i = 1; i < stopCount; i++) {\n result.push(i * stepWidth);\n }\n if (this.range) {\n return result.filter(function (step) {\n return step < 100 * (_this3.minValue - _this3.min) / (_this3.max - _this3.min) || step > 100 * (_this3.maxValue - _this3.min) / (_this3.max - _this3.min);\n });\n } else {\n return result.filter(function (step) {\n return step > 100 * (_this3.firstValue - _this3.min) / (_this3.max - _this3.min);\n });\n }\n },\n markList: function markList() {\n var _this4 = this;\n\n if (!this.marks) {\n return [];\n }\n\n var marksKeys = Object.keys(this.marks);\n return marksKeys.map(parseFloat).sort(function (a, b) {\n return a - b;\n }).filter(function (point) {\n return point <= _this4.max && point >= _this4.min;\n }).map(function (point) {\n return {\n point: point,\n position: (point - _this4.min) * 100 / (_this4.max - _this4.min),\n mark: _this4.marks[point]\n };\n });\n },\n minValue: function minValue() {\n return Math.min(this.firstValue, this.secondValue);\n },\n maxValue: function maxValue() {\n return Math.max(this.firstValue, this.secondValue);\n },\n barSize: function barSize() {\n return this.range ? 100 * (this.maxValue - this.minValue) / (this.max - this.min) + '%' : 100 * (this.firstValue - this.min) / (this.max - this.min) + '%';\n },\n barStart: function barStart() {\n return this.range ? 100 * (this.minValue - this.min) / (this.max - this.min) + '%' : '0%';\n },\n precision: function precision() {\n var precisions = [this.min, this.max, this.step].map(function (item) {\n var decimal = ('' + item).split('.')[1];\n return decimal ? decimal.length : 0;\n });\n return Math.max.apply(null, precisions);\n },\n runwayStyle: function runwayStyle() {\n return this.vertical ? { height: this.height } : {};\n },\n barStyle: function barStyle() {\n return this.vertical ? {\n height: this.barSize,\n bottom: this.barStart\n } : {\n width: this.barSize,\n left: this.barStart\n };\n },\n sliderDisabled: function sliderDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n\n mounted: function mounted() {\n var valuetext = void 0;\n if (this.range) {\n if (Array.isArray(this.value)) {\n this.firstValue = Math.max(this.min, this.value[0]);\n this.secondValue = Math.min(this.max, this.value[1]);\n } else {\n this.firstValue = this.min;\n this.secondValue = this.max;\n }\n this.oldValue = [this.firstValue, this.secondValue];\n valuetext = this.firstValue + '-' + this.secondValue;\n } else {\n if (typeof this.value !== 'number' || isNaN(this.value)) {\n this.firstValue = this.min;\n } else {\n this.firstValue = Math.min(this.max, Math.max(this.min, this.value));\n }\n this.oldValue = this.firstValue;\n valuetext = this.firstValue;\n }\n this.$el.setAttribute('aria-valuetext', valuetext);\n\n // label screen reader\n this.$el.setAttribute('aria-label', this.label ? this.label : 'slider between ' + this.min + ' and ' + this.max);\n\n this.resetSize();\n window.addEventListener('resize', this.resetSize);\n },\n beforeDestroy: function beforeDestroy() {\n window.removeEventListener('resize', this.resetSize);\n }\n});\n// CONCATENATED MODULE: ./packages/slider/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_slider_src_mainvue_type_script_lang_js_ = (slider_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/slider/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar slider_src_main_component = normalizeComponent(\n packages_slider_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_32708644_render,\n mainvue_type_template_id_32708644_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var slider_src_main_api; }\nslider_src_main_component.options.__file = \"packages/slider/src/main.vue\"\n/* harmony default export */ var slider_src_main = (slider_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/slider/index.js\n\n\n/* istanbul ignore next */\nslider_src_main.install = function (Vue) {\n Vue.component(slider_src_main.name, slider_src_main);\n};\n\n/* harmony default export */ var slider = (slider_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/loading/src/loading.vue?vue&type=template&id=eee0a7ac&\nvar loadingvue_type_template_id_eee0a7ac_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-loading-fade\" },\n on: { \"after-leave\": _vm.handleAfterLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-loading-mask\",\n class: [_vm.customClass, { \"is-fullscreen\": _vm.fullscreen }],\n style: { backgroundColor: _vm.background || \"\" }\n },\n [\n _c(\"div\", { staticClass: \"el-loading-spinner\" }, [\n !_vm.spinner\n ? _c(\n \"svg\",\n {\n staticClass: \"circular\",\n attrs: { viewBox: \"25 25 50 50\" }\n },\n [\n _c(\"circle\", {\n staticClass: \"path\",\n attrs: { cx: \"50\", cy: \"50\", r: \"20\", fill: \"none\" }\n })\n ]\n )\n : _c(\"i\", { class: _vm.spinner }),\n _vm.text\n ? _c(\"p\", { staticClass: \"el-loading-text\" }, [\n _vm._v(_vm._s(_vm.text))\n ])\n : _vm._e()\n ])\n ]\n )\n ]\n )\n}\nvar loadingvue_type_template_id_eee0a7ac_staticRenderFns = []\nloadingvue_type_template_id_eee0a7ac_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/loading/src/loading.vue?vue&type=template&id=eee0a7ac&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/loading/src/loading.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var loadingvue_type_script_lang_js_ = ({\n data: function data() {\n return {\n text: null,\n spinner: null,\n background: null,\n fullscreen: true,\n visible: false,\n customClass: ''\n };\n },\n\n\n methods: {\n handleAfterLeave: function handleAfterLeave() {\n this.$emit('after-leave');\n },\n setText: function setText(text) {\n this.text = text;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/loading/src/loading.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_loadingvue_type_script_lang_js_ = (loadingvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/loading/src/loading.vue\n\n\n\n\n\n/* normalize component */\n\nvar loading_component = normalizeComponent(\n src_loadingvue_type_script_lang_js_,\n loadingvue_type_template_id_eee0a7ac_render,\n loadingvue_type_template_id_eee0a7ac_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var loading_api; }\nloading_component.options.__file = \"packages/loading/src/loading.vue\"\n/* harmony default export */ var loading = (loading_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/after-leave\"\nvar after_leave_ = __webpack_require__(33);\nvar after_leave_default = /*#__PURE__*/__webpack_require__.n(after_leave_);\n\n// CONCATENATED MODULE: ./packages/loading/src/directive.js\n\n\n\n\n\nvar Mask = external_vue_default.a.extend(loading);\n\nvar loadingDirective = {};\nloadingDirective.install = function (Vue) {\n if (Vue.prototype.$isServer) return;\n var toggleLoading = function toggleLoading(el, binding) {\n if (binding.value) {\n Vue.nextTick(function () {\n if (binding.modifiers.fullscreen) {\n el.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n el.originalOverflow = Object(dom_[\"getStyle\"])(document.body, 'overflow');\n el.maskStyle.zIndex = popup_[\"PopupManager\"].nextZIndex();\n\n Object(dom_[\"addClass\"])(el.mask, 'is-fullscreen');\n insertDom(document.body, el, binding);\n } else {\n Object(dom_[\"removeClass\"])(el.mask, 'is-fullscreen');\n\n if (binding.modifiers.body) {\n el.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n\n ['top', 'left'].forEach(function (property) {\n var scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';\n el.maskStyle[property] = el.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] - parseInt(Object(dom_[\"getStyle\"])(document.body, 'margin-' + property), 10) + 'px';\n });\n ['height', 'width'].forEach(function (property) {\n el.maskStyle[property] = el.getBoundingClientRect()[property] + 'px';\n });\n\n insertDom(document.body, el, binding);\n } else {\n el.originalPosition = Object(dom_[\"getStyle\"])(el, 'position');\n insertDom(el, el, binding);\n }\n }\n });\n } else {\n after_leave_default()(el.instance, function (_) {\n if (!el.instance.hiding) return;\n el.domVisible = false;\n var target = binding.modifiers.fullscreen || binding.modifiers.body ? document.body : el;\n Object(dom_[\"removeClass\"])(target, 'el-loading-parent--relative');\n Object(dom_[\"removeClass\"])(target, 'el-loading-parent--hidden');\n el.instance.hiding = false;\n }, 300, true);\n el.instance.visible = false;\n el.instance.hiding = true;\n }\n };\n var insertDom = function insertDom(parent, el, binding) {\n if (!el.domVisible && Object(dom_[\"getStyle\"])(el, 'display') !== 'none' && Object(dom_[\"getStyle\"])(el, 'visibility') !== 'hidden') {\n Object.keys(el.maskStyle).forEach(function (property) {\n el.mask.style[property] = el.maskStyle[property];\n });\n\n if (el.originalPosition !== 'absolute' && el.originalPosition !== 'fixed') {\n Object(dom_[\"addClass\"])(parent, 'el-loading-parent--relative');\n }\n if (binding.modifiers.fullscreen && binding.modifiers.lock) {\n Object(dom_[\"addClass\"])(parent, 'el-loading-parent--hidden');\n }\n el.domVisible = true;\n\n parent.appendChild(el.mask);\n Vue.nextTick(function () {\n if (el.instance.hiding) {\n el.instance.$emit('after-leave');\n } else {\n el.instance.visible = true;\n }\n });\n el.domInserted = true;\n } else if (el.domVisible && el.instance.hiding === true) {\n el.instance.visible = true;\n el.instance.hiding = false;\n }\n };\n\n Vue.directive('loading', {\n bind: function bind(el, binding, vnode) {\n var textExr = el.getAttribute('element-loading-text');\n var spinnerExr = el.getAttribute('element-loading-spinner');\n var backgroundExr = el.getAttribute('element-loading-background');\n var customClassExr = el.getAttribute('element-loading-custom-class');\n var vm = vnode.context;\n var mask = new Mask({\n el: document.createElement('div'),\n data: {\n text: vm && vm[textExr] || textExr,\n spinner: vm && vm[spinnerExr] || spinnerExr,\n background: vm && vm[backgroundExr] || backgroundExr,\n customClass: vm && vm[customClassExr] || customClassExr,\n fullscreen: !!binding.modifiers.fullscreen\n }\n });\n el.instance = mask;\n el.mask = mask.$el;\n el.maskStyle = {};\n\n binding.value && toggleLoading(el, binding);\n },\n\n update: function update(el, binding) {\n el.instance.setText(el.getAttribute('element-loading-text'));\n if (binding.oldValue !== binding.value) {\n toggleLoading(el, binding);\n }\n },\n\n unbind: function unbind(el, binding) {\n if (el.domInserted) {\n el.mask && el.mask.parentNode && el.mask.parentNode.removeChild(el.mask);\n toggleLoading(el, { value: false, modifiers: binding.modifiers });\n }\n el.instance && el.instance.$destroy();\n }\n });\n};\n\n/* harmony default export */ var src_directive = (loadingDirective);\n// CONCATENATED MODULE: ./packages/loading/src/index.js\n\n\n\n\n\n\n\nvar LoadingConstructor = external_vue_default.a.extend(loading);\n\nvar src_defaults = {\n text: null,\n fullscreen: true,\n body: false,\n lock: false,\n customClass: ''\n};\n\nvar fullscreenLoading = void 0;\n\nLoadingConstructor.prototype.originalPosition = '';\nLoadingConstructor.prototype.originalOverflow = '';\n\nLoadingConstructor.prototype.close = function () {\n var _this = this;\n\n if (this.fullscreen) {\n fullscreenLoading = undefined;\n }\n after_leave_default()(this, function (_) {\n var target = _this.fullscreen || _this.body ? document.body : _this.target;\n Object(dom_[\"removeClass\"])(target, 'el-loading-parent--relative');\n Object(dom_[\"removeClass\"])(target, 'el-loading-parent--hidden');\n if (_this.$el && _this.$el.parentNode) {\n _this.$el.parentNode.removeChild(_this.$el);\n }\n _this.$destroy();\n }, 300);\n this.visible = false;\n};\n\nvar src_addStyle = function addStyle(options, parent, instance) {\n var maskStyle = {};\n if (options.fullscreen) {\n instance.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n instance.originalOverflow = Object(dom_[\"getStyle\"])(document.body, 'overflow');\n maskStyle.zIndex = popup_[\"PopupManager\"].nextZIndex();\n } else if (options.body) {\n instance.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n ['top', 'left'].forEach(function (property) {\n var scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';\n maskStyle[property] = options.target.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] + 'px';\n });\n ['height', 'width'].forEach(function (property) {\n maskStyle[property] = options.target.getBoundingClientRect()[property] + 'px';\n });\n } else {\n instance.originalPosition = Object(dom_[\"getStyle\"])(parent, 'position');\n }\n Object.keys(maskStyle).forEach(function (property) {\n instance.$el.style[property] = maskStyle[property];\n });\n};\n\nvar src_Loading = function Loading() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (external_vue_default.a.prototype.$isServer) return;\n options = merge_default()({}, src_defaults, options);\n if (typeof options.target === 'string') {\n options.target = document.querySelector(options.target);\n }\n options.target = options.target || document.body;\n if (options.target !== document.body) {\n options.fullscreen = false;\n } else {\n options.body = true;\n }\n if (options.fullscreen && fullscreenLoading) {\n return fullscreenLoading;\n }\n\n var parent = options.body ? document.body : options.target;\n var instance = new LoadingConstructor({\n el: document.createElement('div'),\n data: options\n });\n\n src_addStyle(options, parent, instance);\n if (instance.originalPosition !== 'absolute' && instance.originalPosition !== 'fixed') {\n Object(dom_[\"addClass\"])(parent, 'el-loading-parent--relative');\n }\n if (options.fullscreen && options.lock) {\n Object(dom_[\"addClass\"])(parent, 'el-loading-parent--hidden');\n }\n parent.appendChild(instance.$el);\n external_vue_default.a.nextTick(function () {\n instance.visible = true;\n });\n if (options.fullscreen) {\n fullscreenLoading = instance;\n }\n return instance;\n};\n\n/* harmony default export */ var src = (src_Loading);\n// CONCATENATED MODULE: ./packages/loading/index.js\n\n\n\n/* harmony default export */ var packages_loading = ({\n install: function install(Vue) {\n Vue.use(src_directive);\n Vue.prototype.$loading = src;\n },\n\n directive: src_directive,\n service: src\n});\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/icon/src/icon.vue?vue&type=template&id=cb3fe7f4&\nvar iconvue_type_template_id_cb3fe7f4_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"i\", { class: \"el-icon-\" + _vm.name })\n}\nvar iconvue_type_template_id_cb3fe7f4_staticRenderFns = []\niconvue_type_template_id_cb3fe7f4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/icon/src/icon.vue?vue&type=template&id=cb3fe7f4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/icon/src/icon.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n\n/* harmony default export */ var iconvue_type_script_lang_js_ = ({\n name: 'ElIcon',\n\n props: {\n name: String\n }\n});\n// CONCATENATED MODULE: ./packages/icon/src/icon.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_iconvue_type_script_lang_js_ = (iconvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/icon/src/icon.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_component = normalizeComponent(\n src_iconvue_type_script_lang_js_,\n iconvue_type_template_id_cb3fe7f4_render,\n iconvue_type_template_id_cb3fe7f4_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var icon_api; }\nicon_component.options.__file = \"packages/icon/src/icon.vue\"\n/* harmony default export */ var icon = (icon_component.exports);\n// CONCATENATED MODULE: ./packages/icon/index.js\n\n\n/* istanbul ignore next */\nicon.install = function (Vue) {\n Vue.component(icon.name, icon);\n};\n\n/* harmony default export */ var packages_icon = (icon);\n// CONCATENATED MODULE: ./packages/row/src/row.js\n/* harmony default export */ var src_row = ({\n name: 'ElRow',\n\n componentName: 'ElRow',\n\n props: {\n tag: {\n type: String,\n default: 'div'\n },\n gutter: Number,\n type: String,\n justify: {\n type: String,\n default: 'start'\n },\n align: {\n type: String,\n default: 'top'\n }\n },\n\n computed: {\n style: function style() {\n var ret = {};\n\n if (this.gutter) {\n ret.marginLeft = '-' + this.gutter / 2 + 'px';\n ret.marginRight = ret.marginLeft;\n }\n\n return ret;\n }\n },\n\n render: function render(h) {\n return h(this.tag, {\n class: ['el-row', this.justify !== 'start' ? 'is-justify-' + this.justify : '', this.align !== 'top' ? 'is-align-' + this.align : '', { 'el-row--flex': this.type === 'flex' }],\n style: this.style\n }, this.$slots.default);\n }\n});\n// CONCATENATED MODULE: ./packages/row/index.js\n\n\n/* istanbul ignore next */\nsrc_row.install = function (Vue) {\n Vue.component(src_row.name, src_row);\n};\n\n/* harmony default export */ var packages_row = (src_row);\n// CONCATENATED MODULE: ./packages/col/src/col.js\nvar col_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/* harmony default export */ var col = ({\n name: 'ElCol',\n\n props: {\n span: {\n type: Number,\n default: 24\n },\n tag: {\n type: String,\n default: 'div'\n },\n offset: Number,\n pull: Number,\n push: Number,\n xs: [Number, Object],\n sm: [Number, Object],\n md: [Number, Object],\n lg: [Number, Object],\n xl: [Number, Object]\n },\n\n computed: {\n gutter: function gutter() {\n var parent = this.$parent;\n while (parent && parent.$options.componentName !== 'ElRow') {\n parent = parent.$parent;\n }\n return parent ? parent.gutter : 0;\n }\n },\n render: function render(h) {\n var _this = this;\n\n var classList = [];\n var style = {};\n\n if (this.gutter) {\n style.paddingLeft = this.gutter / 2 + 'px';\n style.paddingRight = style.paddingLeft;\n }\n\n ['span', 'offset', 'pull', 'push'].forEach(function (prop) {\n if (_this[prop] || _this[prop] === 0) {\n classList.push(prop !== 'span' ? 'el-col-' + prop + '-' + _this[prop] : 'el-col-' + _this[prop]);\n }\n });\n\n ['xs', 'sm', 'md', 'lg', 'xl'].forEach(function (size) {\n if (typeof _this[size] === 'number') {\n classList.push('el-col-' + size + '-' + _this[size]);\n } else if (col_typeof(_this[size]) === 'object') {\n var props = _this[size];\n Object.keys(props).forEach(function (prop) {\n classList.push(prop !== 'span' ? 'el-col-' + size + '-' + prop + '-' + props[prop] : 'el-col-' + size + '-' + props[prop]);\n });\n }\n });\n\n return h(this.tag, {\n class: ['el-col', classList],\n style: style\n }, this.$slots.default);\n }\n});\n// CONCATENATED MODULE: ./packages/col/index.js\n\n\n/* istanbul ignore next */\ncol.install = function (Vue) {\n Vue.component(col.name, col);\n};\n\n/* harmony default export */ var packages_col = (col);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-list.vue?vue&type=template&id=173fedf5&\nvar upload_listvue_type_template_id_173fedf5_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition-group\",\n {\n class: [\n \"el-upload-list\",\n \"el-upload-list--\" + _vm.listType,\n { \"is-disabled\": _vm.disabled }\n ],\n attrs: { tag: \"ul\", name: \"el-list\" }\n },\n _vm._l(_vm.files, function(file) {\n return _c(\n \"li\",\n {\n key: file.uid,\n class: [\n \"el-upload-list__item\",\n \"is-\" + file.status,\n _vm.focusing ? \"focusing\" : \"\"\n ],\n attrs: { tabindex: \"0\" },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"delete\", [8, 46], $event.key, [\n \"Backspace\",\n \"Delete\",\n \"Del\"\n ])\n ) {\n return null\n }\n !_vm.disabled && _vm.$emit(\"remove\", file)\n },\n focus: function($event) {\n _vm.focusing = true\n },\n blur: function($event) {\n _vm.focusing = false\n },\n click: function($event) {\n _vm.focusing = false\n }\n }\n },\n [\n _vm._t(\n \"default\",\n [\n file.status !== \"uploading\" &&\n [\"picture-card\", \"picture\"].indexOf(_vm.listType) > -1\n ? _c(\"img\", {\n staticClass: \"el-upload-list__item-thumbnail\",\n attrs: { src: file.url, alt: \"\" }\n })\n : _vm._e(),\n _c(\n \"a\",\n {\n staticClass: \"el-upload-list__item-name\",\n on: {\n click: function($event) {\n _vm.handleClick(file)\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"el-icon-document\" }),\n _vm._v(_vm._s(file.name) + \"\\n \")\n ]\n ),\n _c(\n \"label\",\n { staticClass: \"el-upload-list__item-status-label\" },\n [\n _c(\"i\", {\n class: {\n \"el-icon-upload-success\": true,\n \"el-icon-circle-check\": _vm.listType === \"text\",\n \"el-icon-check\":\n [\"picture-card\", \"picture\"].indexOf(_vm.listType) > -1\n }\n })\n ]\n ),\n !_vm.disabled\n ? _c(\"i\", {\n staticClass: \"el-icon-close\",\n on: {\n click: function($event) {\n _vm.$emit(\"remove\", file)\n }\n }\n })\n : _vm._e(),\n !_vm.disabled\n ? _c(\"i\", { staticClass: \"el-icon-close-tip\" }, [\n _vm._v(_vm._s(_vm.t(\"el.upload.deleteTip\")))\n ])\n : _vm._e(),\n file.status === \"uploading\"\n ? _c(\"el-progress\", {\n attrs: {\n type: _vm.listType === \"picture-card\" ? \"circle\" : \"line\",\n \"stroke-width\": _vm.listType === \"picture-card\" ? 6 : 2,\n percentage: _vm.parsePercentage(file.percentage)\n }\n })\n : _vm._e(),\n _vm.listType === \"picture-card\"\n ? _c(\"span\", { staticClass: \"el-upload-list__item-actions\" }, [\n _vm.handlePreview && _vm.listType === \"picture-card\"\n ? _c(\n \"span\",\n {\n staticClass: \"el-upload-list__item-preview\",\n on: {\n click: function($event) {\n _vm.handlePreview(file)\n }\n }\n },\n [_c(\"i\", { staticClass: \"el-icon-zoom-in\" })]\n )\n : _vm._e(),\n !_vm.disabled\n ? _c(\n \"span\",\n {\n staticClass: \"el-upload-list__item-delete\",\n on: {\n click: function($event) {\n _vm.$emit(\"remove\", file)\n }\n }\n },\n [_c(\"i\", { staticClass: \"el-icon-delete\" })]\n )\n : _vm._e()\n ])\n : _vm._e()\n ],\n { file: file }\n )\n ],\n 2\n )\n }),\n 0\n )\n}\nvar upload_listvue_type_template_id_173fedf5_staticRenderFns = []\nupload_listvue_type_template_id_173fedf5_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue?vue&type=template&id=173fedf5&\n\n// EXTERNAL MODULE: external \"element-ui/lib/progress\"\nvar progress_ = __webpack_require__(34);\nvar progress_default = /*#__PURE__*/__webpack_require__.n(progress_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-list.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var upload_listvue_type_script_lang_js_ = ({\n\n name: 'ElUploadList',\n\n mixins: [locale_default.a],\n\n data: function data() {\n return {\n focusing: false\n };\n },\n\n components: { ElProgress: progress_default.a },\n\n props: {\n files: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n disabled: {\n type: Boolean,\n default: false\n },\n handlePreview: Function,\n listType: String\n },\n methods: {\n parsePercentage: function parsePercentage(val) {\n return parseInt(val, 10);\n },\n handleClick: function handleClick(file) {\n this.handlePreview && this.handlePreview(file);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_upload_listvue_type_script_lang_js_ = (upload_listvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue\n\n\n\n\n\n/* normalize component */\n\nvar upload_list_component = normalizeComponent(\n src_upload_listvue_type_script_lang_js_,\n upload_listvue_type_template_id_173fedf5_render,\n upload_listvue_type_template_id_173fedf5_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var upload_list_api; }\nupload_list_component.options.__file = \"packages/upload/src/upload-list.vue\"\n/* harmony default export */ var upload_list = (upload_list_component.exports);\n// EXTERNAL MODULE: external \"babel-helper-vue-jsx-merge-props\"\nvar external_babel_helper_vue_jsx_merge_props_ = __webpack_require__(24);\nvar external_babel_helper_vue_jsx_merge_props_default = /*#__PURE__*/__webpack_require__.n(external_babel_helper_vue_jsx_merge_props_);\n\n// CONCATENATED MODULE: ./packages/upload/src/ajax.js\nfunction getError(action, option, xhr) {\n var msg = void 0;\n if (xhr.response) {\n msg = '' + (xhr.response.error || xhr.response);\n } else if (xhr.responseText) {\n msg = '' + xhr.responseText;\n } else {\n msg = 'fail to post ' + action + ' ' + xhr.status;\n }\n\n var err = new Error(msg);\n err.status = xhr.status;\n err.method = 'post';\n err.url = action;\n return err;\n}\n\nfunction getBody(xhr) {\n var text = xhr.responseText || xhr.response;\n if (!text) {\n return text;\n }\n\n try {\n return JSON.parse(text);\n } catch (e) {\n return text;\n }\n}\n\nfunction upload(option) {\n if (typeof XMLHttpRequest === 'undefined') {\n return;\n }\n\n var xhr = new XMLHttpRequest();\n var action = option.action;\n\n if (xhr.upload) {\n xhr.upload.onprogress = function progress(e) {\n if (e.total > 0) {\n e.percent = e.loaded / e.total * 100;\n }\n option.onProgress(e);\n };\n }\n\n var formData = new FormData();\n\n if (option.data) {\n Object.keys(option.data).forEach(function (key) {\n formData.append(key, option.data[key]);\n });\n }\n\n formData.append(option.filename, option.file, option.file.name);\n\n xhr.onerror = function error(e) {\n option.onError(e);\n };\n\n xhr.onload = function onload() {\n if (xhr.status < 200 || xhr.status >= 300) {\n return option.onError(getError(action, option, xhr));\n }\n\n option.onSuccess(getBody(xhr));\n };\n\n xhr.open('post', action, true);\n\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n var headers = option.headers || {};\n\n for (var item in headers) {\n if (headers.hasOwnProperty(item) && headers[item] !== null) {\n xhr.setRequestHeader(item, headers[item]);\n }\n }\n xhr.send(formData);\n return xhr;\n}\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-dragger.vue?vue&type=template&id=7ebbf219&\nvar upload_draggervue_type_template_id_7ebbf219_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-upload-dragger\",\n class: {\n \"is-dragover\": _vm.dragover\n },\n on: {\n drop: function($event) {\n $event.preventDefault()\n return _vm.onDrop($event)\n },\n dragover: function($event) {\n $event.preventDefault()\n return _vm.onDragover($event)\n },\n dragleave: function($event) {\n $event.preventDefault()\n _vm.dragover = false\n }\n }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar upload_draggervue_type_template_id_7ebbf219_staticRenderFns = []\nupload_draggervue_type_template_id_7ebbf219_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue?vue&type=template&id=7ebbf219&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-dragger.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var upload_draggervue_type_script_lang_js_ = ({\n name: 'ElUploadDrag',\n props: {\n disabled: Boolean\n },\n inject: {\n uploader: {\n default: ''\n }\n },\n data: function data() {\n return {\n dragover: false\n };\n },\n\n methods: {\n onDragover: function onDragover() {\n if (!this.disabled) {\n this.dragover = true;\n }\n },\n onDrop: function onDrop(e) {\n if (this.disabled || !this.uploader) return;\n var accept = this.uploader.accept;\n this.dragover = false;\n if (!accept) {\n this.$emit('file', e.dataTransfer.files);\n return;\n }\n this.$emit('file', [].slice.call(e.dataTransfer.files).filter(function (file) {\n var type = file.type,\n name = file.name;\n\n var extension = name.indexOf('.') > -1 ? '.' + name.split('.').pop() : '';\n var baseType = type.replace(/\\/.*$/, '');\n return accept.split(',').map(function (type) {\n return type.trim();\n }).filter(function (type) {\n return type;\n }).some(function (acceptedType) {\n if (/\\..+$/.test(acceptedType)) {\n return extension === acceptedType;\n }\n if (/\\/\\*$/.test(acceptedType)) {\n return baseType === acceptedType.replace(/\\/\\*$/, '');\n }\n if (/^[^\\/]+\\/[^\\/]+$/.test(acceptedType)) {\n return type === acceptedType;\n }\n return false;\n });\n }));\n }\n }\n});\n// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_upload_draggervue_type_script_lang_js_ = (upload_draggervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue\n\n\n\n\n\n/* normalize component */\n\nvar upload_dragger_component = normalizeComponent(\n src_upload_draggervue_type_script_lang_js_,\n upload_draggervue_type_template_id_7ebbf219_render,\n upload_draggervue_type_template_id_7ebbf219_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var upload_dragger_api; }\nupload_dragger_component.options.__file = \"packages/upload/src/upload-dragger.vue\"\n/* harmony default export */ var upload_dragger = (upload_dragger_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload.vue?vue&type=script&lang=js&\n\n\n\n\n\n/* harmony default export */ var uploadvue_type_script_lang_js_ = ({\n inject: ['uploader'],\n components: {\n UploadDragger: upload_dragger\n },\n props: {\n type: String,\n action: {\n type: String,\n required: true\n },\n name: {\n type: String,\n default: 'file'\n },\n data: Object,\n headers: Object,\n withCredentials: Boolean,\n multiple: Boolean,\n accept: String,\n onStart: Function,\n onProgress: Function,\n onSuccess: Function,\n onError: Function,\n beforeUpload: Function,\n drag: Boolean,\n onPreview: {\n type: Function,\n default: function _default() {}\n },\n onRemove: {\n type: Function,\n default: function _default() {}\n },\n fileList: Array,\n autoUpload: Boolean,\n listType: String,\n httpRequest: {\n type: Function,\n default: upload\n },\n disabled: Boolean,\n limit: Number,\n onExceed: Function\n },\n\n data: function data() {\n return {\n mouseover: false,\n reqs: {}\n };\n },\n\n\n methods: {\n isImage: function isImage(str) {\n return str.indexOf('image') !== -1;\n },\n handleChange: function handleChange(ev) {\n var files = ev.target.files;\n\n if (!files) return;\n this.uploadFiles(files);\n },\n uploadFiles: function uploadFiles(files) {\n var _this = this;\n\n if (this.limit && this.fileList.length + files.length > this.limit) {\n this.onExceed && this.onExceed(files, this.fileList);\n return;\n }\n\n var postFiles = Array.prototype.slice.call(files);\n if (!this.multiple) {\n postFiles = postFiles.slice(0, 1);\n }\n\n if (postFiles.length === 0) {\n return;\n }\n\n postFiles.forEach(function (rawFile) {\n _this.onStart(rawFile);\n if (_this.autoUpload) _this.upload(rawFile);\n });\n },\n upload: function upload(rawFile) {\n var _this2 = this;\n\n this.$refs.input.value = null;\n\n if (!this.beforeUpload) {\n return this.post(rawFile);\n }\n\n var before = this.beforeUpload(rawFile);\n if (before && before.then) {\n before.then(function (processedFile) {\n var fileType = Object.prototype.toString.call(processedFile);\n\n if (fileType === '[object File]' || fileType === '[object Blob]') {\n if (fileType === '[object Blob]') {\n processedFile = new File([processedFile], rawFile.name, {\n type: rawFile.type\n });\n }\n for (var p in rawFile) {\n if (rawFile.hasOwnProperty(p)) {\n processedFile[p] = rawFile[p];\n }\n }\n _this2.post(processedFile);\n } else {\n _this2.post(rawFile);\n }\n }, function () {\n _this2.onRemove(null, rawFile);\n });\n } else if (before !== false) {\n this.post(rawFile);\n } else {\n this.onRemove(null, rawFile);\n }\n },\n abort: function abort(file) {\n var reqs = this.reqs;\n\n if (file) {\n var uid = file;\n if (file.uid) uid = file.uid;\n if (reqs[uid]) {\n reqs[uid].abort();\n }\n } else {\n Object.keys(reqs).forEach(function (uid) {\n if (reqs[uid]) reqs[uid].abort();\n delete reqs[uid];\n });\n }\n },\n post: function post(rawFile) {\n var _this3 = this;\n\n var uid = rawFile.uid;\n\n var options = {\n headers: this.headers,\n withCredentials: this.withCredentials,\n file: rawFile,\n data: this.data,\n filename: this.name,\n action: this.action,\n onProgress: function onProgress(e) {\n _this3.onProgress(e, rawFile);\n },\n onSuccess: function onSuccess(res) {\n _this3.onSuccess(res, rawFile);\n delete _this3.reqs[uid];\n },\n onError: function onError(err) {\n _this3.onError(err, rawFile);\n delete _this3.reqs[uid];\n }\n };\n var req = this.httpRequest(options);\n this.reqs[uid] = req;\n if (req && req.then) {\n req.then(options.onSuccess, options.onError);\n }\n },\n handleClick: function handleClick() {\n if (!this.disabled) {\n this.$refs.input.value = null;\n this.$refs.input.click();\n }\n },\n handleKeydown: function handleKeydown(e) {\n if (e.target !== e.currentTarget) return;\n if (e.keyCode === 13 || e.keyCode === 32) {\n this.handleClick();\n }\n }\n },\n\n render: function render(h) {\n var handleClick = this.handleClick,\n drag = this.drag,\n name = this.name,\n handleChange = this.handleChange,\n multiple = this.multiple,\n accept = this.accept,\n listType = this.listType,\n uploadFiles = this.uploadFiles,\n disabled = this.disabled,\n handleKeydown = this.handleKeydown;\n\n var data = {\n class: {\n 'el-upload': true\n },\n on: {\n click: handleClick,\n keydown: handleKeydown\n }\n };\n data.class['el-upload--' + listType] = true;\n return h(\n 'div',\n external_babel_helper_vue_jsx_merge_props_default()([data, {\n attrs: { tabindex: '0' }\n }]),\n [drag ? h(\n 'upload-dragger',\n {\n attrs: { disabled: disabled },\n on: {\n 'file': uploadFiles\n }\n },\n [this.$slots.default]\n ) : this.$slots.default, h('input', { 'class': 'el-upload__input', attrs: { type: 'file', name: name, multiple: multiple, accept: accept },\n ref: 'input', on: {\n 'change': handleChange\n }\n })]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/upload/src/upload.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_uploadvue_type_script_lang_js_ = (uploadvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/upload.vue\nvar upload_render, upload_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar upload_component = normalizeComponent(\n src_uploadvue_type_script_lang_js_,\n upload_render,\n upload_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var upload_api; }\nupload_component.options.__file = \"packages/upload/src/upload.vue\"\n/* harmony default export */ var src_upload = (upload_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/index.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nfunction srcvue_type_script_lang_js_noop() {}\n\n/* harmony default export */ var srcvue_type_script_lang_js_ = ({\n name: 'ElUpload',\n\n mixins: [migrating_default.a],\n\n components: {\n ElProgress: progress_default.a,\n UploadList: upload_list,\n Upload: src_upload\n },\n\n provide: function provide() {\n return {\n uploader: this\n };\n },\n\n\n inject: {\n elForm: {\n default: ''\n }\n },\n\n props: {\n action: {\n type: String,\n required: true\n },\n headers: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n data: Object,\n multiple: Boolean,\n name: {\n type: String,\n default: 'file'\n },\n drag: Boolean,\n dragger: Boolean,\n withCredentials: Boolean,\n showFileList: {\n type: Boolean,\n default: true\n },\n accept: String,\n type: {\n type: String,\n default: 'select'\n },\n beforeUpload: Function,\n beforeRemove: Function,\n onRemove: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n },\n onChange: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n },\n onPreview: {\n type: Function\n },\n onSuccess: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n },\n onProgress: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n },\n onError: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n },\n fileList: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n autoUpload: {\n type: Boolean,\n default: true\n },\n listType: {\n type: String,\n default: 'text' // text,picture,picture-card\n },\n httpRequest: Function,\n disabled: Boolean,\n limit: Number,\n onExceed: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n }\n },\n\n data: function data() {\n return {\n uploadFiles: [],\n dragOver: false,\n draging: false,\n tempIndex: 1\n };\n },\n\n\n computed: {\n uploadDisabled: function uploadDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n\n watch: {\n listType: function listType(type) {\n if (type === 'picture-card' || type === 'picture') {\n this.uploadFiles = this.uploadFiles.map(function (file) {\n if (!file.url && file.raw) {\n try {\n file.url = URL.createObjectURL(file.raw);\n } catch (err) {\n console.error('[Element Error][Upload]', err);\n }\n }\n return file;\n });\n }\n },\n\n fileList: {\n immediate: true,\n handler: function handler(fileList) {\n var _this = this;\n\n this.uploadFiles = fileList.map(function (item) {\n item.uid = item.uid || Date.now() + _this.tempIndex++;\n item.status = item.status || 'success';\n return item;\n });\n }\n }\n },\n\n methods: {\n handleStart: function handleStart(rawFile) {\n rawFile.uid = Date.now() + this.tempIndex++;\n var file = {\n status: 'ready',\n name: rawFile.name,\n size: rawFile.size,\n percentage: 0,\n uid: rawFile.uid,\n raw: rawFile\n };\n\n if (this.listType === 'picture-card' || this.listType === 'picture') {\n try {\n file.url = URL.createObjectURL(rawFile);\n } catch (err) {\n console.error('[Element Error][Upload]', err);\n return;\n }\n }\n\n this.uploadFiles.push(file);\n this.onChange(file, this.uploadFiles);\n },\n handleProgress: function handleProgress(ev, rawFile) {\n var file = this.getFile(rawFile);\n this.onProgress(ev, file, this.uploadFiles);\n file.status = 'uploading';\n file.percentage = ev.percent || 0;\n },\n handleSuccess: function handleSuccess(res, rawFile) {\n var file = this.getFile(rawFile);\n\n if (file) {\n file.status = 'success';\n file.response = res;\n\n this.onSuccess(res, file, this.uploadFiles);\n this.onChange(file, this.uploadFiles);\n }\n },\n handleError: function handleError(err, rawFile) {\n var file = this.getFile(rawFile);\n var fileList = this.uploadFiles;\n\n file.status = 'fail';\n\n fileList.splice(fileList.indexOf(file), 1);\n\n this.onError(err, file, this.uploadFiles);\n this.onChange(file, this.uploadFiles);\n },\n handleRemove: function handleRemove(file, raw) {\n var _this2 = this;\n\n if (raw) {\n file = this.getFile(raw);\n }\n var doRemove = function doRemove() {\n _this2.abort(file);\n var fileList = _this2.uploadFiles;\n fileList.splice(fileList.indexOf(file), 1);\n _this2.onRemove(file, fileList);\n };\n\n if (!this.beforeRemove) {\n doRemove();\n } else if (typeof this.beforeRemove === 'function') {\n var before = this.beforeRemove(file, this.uploadFiles);\n if (before && before.then) {\n before.then(function () {\n doRemove();\n }, srcvue_type_script_lang_js_noop);\n } else if (before !== false) {\n doRemove();\n }\n }\n },\n getFile: function getFile(rawFile) {\n var fileList = this.uploadFiles;\n var target = void 0;\n fileList.every(function (item) {\n target = rawFile.uid === item.uid ? item : null;\n return !target;\n });\n return target;\n },\n abort: function abort(file) {\n this.$refs['upload-inner'].abort(file);\n },\n clearFiles: function clearFiles() {\n this.uploadFiles = [];\n },\n submit: function submit() {\n var _this3 = this;\n\n this.uploadFiles.filter(function (file) {\n return file.status === 'ready';\n }).forEach(function (file) {\n _this3.$refs['upload-inner'].upload(file.raw);\n });\n },\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'default-file-list': 'default-file-list is renamed to file-list.',\n 'show-upload-list': 'show-upload-list is renamed to show-file-list.',\n 'thumbnail-mode': 'thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan'\n }\n };\n }\n },\n\n beforeDestroy: function beforeDestroy() {\n this.uploadFiles.forEach(function (file) {\n if (file.url && file.url.indexOf('blob:') === 0) {\n URL.revokeObjectURL(file.url);\n }\n });\n },\n render: function render(h) {\n var _this4 = this;\n\n var uploadList = void 0;\n\n if (this.showFileList) {\n uploadList = h(\n upload_list,\n {\n attrs: {\n disabled: this.uploadDisabled,\n listType: this.listType,\n files: this.uploadFiles,\n\n handlePreview: this.onPreview },\n on: {\n 'remove': this.handleRemove\n }\n },\n [function (props) {\n if (_this4.$scopedSlots.file) {\n return _this4.$scopedSlots.file({\n file: props.file\n });\n }\n }]\n );\n }\n\n var uploadData = {\n props: {\n type: this.type,\n drag: this.drag,\n action: this.action,\n multiple: this.multiple,\n 'before-upload': this.beforeUpload,\n 'with-credentials': this.withCredentials,\n headers: this.headers,\n name: this.name,\n data: this.data,\n accept: this.accept,\n fileList: this.uploadFiles,\n autoUpload: this.autoUpload,\n listType: this.listType,\n disabled: this.uploadDisabled,\n limit: this.limit,\n 'on-exceed': this.onExceed,\n 'on-start': this.handleStart,\n 'on-progress': this.handleProgress,\n 'on-success': this.handleSuccess,\n 'on-error': this.handleError,\n 'on-preview': this.onPreview,\n 'on-remove': this.handleRemove,\n 'http-request': this.httpRequest\n },\n ref: 'upload-inner'\n };\n\n var trigger = this.$slots.trigger || this.$slots.default;\n var uploadComponent = h(\n 'upload',\n uploadData,\n [trigger]\n );\n\n return h('div', [this.listType === 'picture-card' ? uploadList : '', this.$slots.trigger ? [uploadComponent, this.$slots.default] : uploadComponent, this.$slots.tip, this.listType !== 'picture-card' ? uploadList : '']);\n }\n});\n// CONCATENATED MODULE: ./packages/upload/src/index.vue?vue&type=script&lang=js&\n /* harmony default export */ var upload_srcvue_type_script_lang_js_ = (srcvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/index.vue\nvar src_render, src_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar upload_src_component = normalizeComponent(\n upload_srcvue_type_script_lang_js_,\n src_render,\n src_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_api; }\nupload_src_component.options.__file = \"packages/upload/src/index.vue\"\n/* harmony default export */ var upload_src = (upload_src_component.exports);\n// CONCATENATED MODULE: ./packages/upload/index.js\n\n\n/* istanbul ignore next */\nupload_src.install = function (Vue) {\n Vue.component(upload_src.name, upload_src);\n};\n\n/* harmony default export */ var packages_upload = (upload_src);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/progress/src/progress.vue?vue&type=template&id=229ee406&\nvar progressvue_type_template_id_229ee406_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-progress\",\n class: [\n \"el-progress--\" + _vm.type,\n _vm.status ? \"is-\" + _vm.status : \"\",\n {\n \"el-progress--without-text\": !_vm.showText,\n \"el-progress--text-inside\": _vm.textInside\n }\n ],\n attrs: {\n role: \"progressbar\",\n \"aria-valuenow\": _vm.percentage,\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\"\n }\n },\n [\n _vm.type === \"line\"\n ? _c(\"div\", { staticClass: \"el-progress-bar\" }, [\n _c(\n \"div\",\n {\n staticClass: \"el-progress-bar__outer\",\n style: { height: _vm.strokeWidth + \"px\" }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-progress-bar__inner\",\n style: _vm.barStyle\n },\n [\n _vm.showText && _vm.textInside\n ? _c(\n \"div\",\n { staticClass: \"el-progress-bar__innerText\" },\n [_vm._v(_vm._s(_vm.content))]\n )\n : _vm._e()\n ]\n )\n ]\n )\n ])\n : _c(\n \"div\",\n {\n staticClass: \"el-progress-circle\",\n style: { height: _vm.width + \"px\", width: _vm.width + \"px\" }\n },\n [\n _c(\"svg\", { attrs: { viewBox: \"0 0 100 100\" } }, [\n _c(\"path\", {\n staticClass: \"el-progress-circle__track\",\n style: _vm.trailPathStyle,\n attrs: {\n d: _vm.trackPath,\n stroke: \"#e5e9f2\",\n \"stroke-width\": _vm.relativeStrokeWidth,\n fill: \"none\"\n }\n }),\n _c(\"path\", {\n staticClass: \"el-progress-circle__path\",\n style: _vm.circlePathStyle,\n attrs: {\n d: _vm.trackPath,\n stroke: _vm.stroke,\n fill: \"none\",\n \"stroke-linecap\": _vm.strokeLinecap,\n \"stroke-width\": _vm.percentage ? _vm.relativeStrokeWidth : 0\n }\n })\n ])\n ]\n ),\n _vm.showText && !_vm.textInside\n ? _c(\n \"div\",\n {\n staticClass: \"el-progress__text\",\n style: { fontSize: _vm.progressTextSize + \"px\" }\n },\n [\n !_vm.status\n ? [_vm._v(_vm._s(_vm.content))]\n : _c(\"i\", { class: _vm.iconClass })\n ],\n 2\n )\n : _vm._e()\n ]\n )\n}\nvar progressvue_type_template_id_229ee406_staticRenderFns = []\nprogressvue_type_template_id_229ee406_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue?vue&type=template&id=229ee406&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/progress/src/progress.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var progressvue_type_script_lang_js_ = ({\n name: 'ElProgress',\n props: {\n type: {\n type: String,\n default: 'line',\n validator: function validator(val) {\n return ['line', 'circle', 'dashboard'].indexOf(val) > -1;\n }\n },\n percentage: {\n type: Number,\n default: 0,\n required: true,\n validator: function validator(val) {\n return val >= 0 && val <= 100;\n }\n },\n status: {\n type: String,\n validator: function validator(val) {\n return ['success', 'exception', 'warning'].indexOf(val) > -1;\n }\n },\n strokeWidth: {\n type: Number,\n default: 6\n },\n strokeLinecap: {\n type: String,\n default: 'round'\n },\n textInside: {\n type: Boolean,\n default: false\n },\n width: {\n type: Number,\n default: 126\n },\n showText: {\n type: Boolean,\n default: true\n },\n color: {\n type: [String, Array, Function],\n default: ''\n },\n format: Function\n },\n computed: {\n barStyle: function barStyle() {\n var style = {};\n style.width = this.percentage + '%';\n style.backgroundColor = this.getCurrentColor(this.percentage);\n return style;\n },\n relativeStrokeWidth: function relativeStrokeWidth() {\n return (this.strokeWidth / this.width * 100).toFixed(1);\n },\n radius: function radius() {\n if (this.type === 'circle' || this.type === 'dashboard') {\n return parseInt(50 - parseFloat(this.relativeStrokeWidth) / 2, 10);\n } else {\n return 0;\n }\n },\n trackPath: function trackPath() {\n var radius = this.radius;\n var isDashboard = this.type === 'dashboard';\n return '\\n M 50 50\\n m 0 ' + (isDashboard ? '' : '-') + radius + '\\n a ' + radius + ' ' + radius + ' 0 1 1 0 ' + (isDashboard ? '-' : '') + radius * 2 + '\\n a ' + radius + ' ' + radius + ' 0 1 1 0 ' + (isDashboard ? '' : '-') + radius * 2 + '\\n ';\n },\n perimeter: function perimeter() {\n return 2 * Math.PI * this.radius;\n },\n rate: function rate() {\n return this.type === 'dashboard' ? 0.75 : 1;\n },\n strokeDashoffset: function strokeDashoffset() {\n var offset = -1 * this.perimeter * (1 - this.rate) / 2;\n return offset + 'px';\n },\n trailPathStyle: function trailPathStyle() {\n return {\n strokeDasharray: this.perimeter * this.rate + 'px, ' + this.perimeter + 'px',\n strokeDashoffset: this.strokeDashoffset\n };\n },\n circlePathStyle: function circlePathStyle() {\n return {\n strokeDasharray: this.perimeter * this.rate * (this.percentage / 100) + 'px, ' + this.perimeter + 'px',\n strokeDashoffset: this.strokeDashoffset,\n transition: 'stroke-dasharray 0.6s ease 0s, stroke 0.6s ease'\n };\n },\n stroke: function stroke() {\n var ret = void 0;\n if (this.color) {\n ret = this.getCurrentColor(this.percentage);\n } else {\n switch (this.status) {\n case 'success':\n ret = '#13ce66';\n break;\n case 'exception':\n ret = '#ff4949';\n break;\n case 'warning':\n ret = '#e6a23c';\n break;\n default:\n ret = '#20a0ff';\n }\n }\n return ret;\n },\n iconClass: function iconClass() {\n if (this.status === 'warning') {\n return 'el-icon-warning';\n }\n if (this.type === 'line') {\n return this.status === 'success' ? 'el-icon-circle-check' : 'el-icon-circle-close';\n } else {\n return this.status === 'success' ? 'el-icon-check' : 'el-icon-close';\n }\n },\n progressTextSize: function progressTextSize() {\n return this.type === 'line' ? 12 + this.strokeWidth * 0.4 : this.width * 0.111111 + 2;\n },\n content: function content() {\n if (typeof this.format === 'function') {\n return this.format(this.percentage) || '';\n } else {\n return this.percentage + '%';\n }\n }\n },\n methods: {\n getCurrentColor: function getCurrentColor(percentage) {\n if (typeof this.color === 'function') {\n return this.color(percentage);\n } else if (typeof this.color === 'string') {\n return this.color;\n } else {\n return this.getLevelColor(percentage);\n }\n },\n getLevelColor: function getLevelColor(percentage) {\n var colorArray = this.getColorArray().sort(function (a, b) {\n return a.percentage - b.percentage;\n });\n\n for (var i = 0; i < colorArray.length; i++) {\n if (colorArray[i].percentage > percentage) {\n return colorArray[i].color;\n }\n }\n return colorArray[colorArray.length - 1].color;\n },\n getColorArray: function getColorArray() {\n var color = this.color;\n var span = 100 / color.length;\n return color.map(function (seriesColor, index) {\n if (typeof seriesColor === 'string') {\n return {\n color: seriesColor,\n percentage: (index + 1) * span\n };\n }\n return seriesColor;\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_progressvue_type_script_lang_js_ = (progressvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/progress/src/progress.vue\n\n\n\n\n\n/* normalize component */\n\nvar progress_component = normalizeComponent(\n src_progressvue_type_script_lang_js_,\n progressvue_type_template_id_229ee406_render,\n progressvue_type_template_id_229ee406_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var progress_api; }\nprogress_component.options.__file = \"packages/progress/src/progress.vue\"\n/* harmony default export */ var progress = (progress_component.exports);\n// CONCATENATED MODULE: ./packages/progress/index.js\n\n\n/* istanbul ignore next */\nprogress.install = function (Vue) {\n Vue.component(progress.name, progress);\n};\n\n/* harmony default export */ var packages_progress = (progress);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/spinner/src/spinner.vue?vue&type=template&id=697b8538&\nvar spinnervue_type_template_id_697b8538_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { staticClass: \"el-spinner\" }, [\n _c(\n \"svg\",\n {\n staticClass: \"el-spinner-inner\",\n style: { width: _vm.radius / 2 + \"px\", height: _vm.radius / 2 + \"px\" },\n attrs: { viewBox: \"0 0 50 50\" }\n },\n [\n _c(\"circle\", {\n staticClass: \"path\",\n attrs: {\n cx: \"25\",\n cy: \"25\",\n r: \"20\",\n fill: \"none\",\n stroke: _vm.strokeColor,\n \"stroke-width\": _vm.strokeWidth\n }\n })\n ]\n )\n ])\n}\nvar spinnervue_type_template_id_697b8538_staticRenderFns = []\nspinnervue_type_template_id_697b8538_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/spinner/src/spinner.vue?vue&type=template&id=697b8538&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/spinner/src/spinner.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var spinnervue_type_script_lang_js_ = ({\n name: 'ElSpinner',\n props: {\n type: String,\n radius: {\n type: Number,\n default: 100\n },\n strokeWidth: {\n type: Number,\n default: 5\n },\n strokeColor: {\n type: String,\n default: '#efefef'\n }\n }\n});\n// CONCATENATED MODULE: ./packages/spinner/src/spinner.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_spinnervue_type_script_lang_js_ = (spinnervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/spinner/src/spinner.vue\n\n\n\n\n\n/* normalize component */\n\nvar spinner_component = normalizeComponent(\n src_spinnervue_type_script_lang_js_,\n spinnervue_type_template_id_697b8538_render,\n spinnervue_type_template_id_697b8538_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var spinner_api; }\nspinner_component.options.__file = \"packages/spinner/src/spinner.vue\"\n/* harmony default export */ var spinner = (spinner_component.exports);\n// CONCATENATED MODULE: ./packages/spinner/index.js\n\n\n/* istanbul ignore next */\nspinner.install = function (Vue) {\n Vue.component(spinner.name, spinner);\n};\n\n/* harmony default export */ var packages_spinner = (spinner);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/message/src/main.vue?vue&type=template&id=455b9f60&\nvar mainvue_type_template_id_455b9f60_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-message-fade\" },\n on: { \"after-leave\": _vm.handleAfterLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n class: [\n \"el-message\",\n _vm.type && !_vm.iconClass ? \"el-message--\" + _vm.type : \"\",\n _vm.center ? \"is-center\" : \"\",\n _vm.showClose ? \"is-closable\" : \"\",\n _vm.customClass\n ],\n style: _vm.positionStyle,\n attrs: { role: \"alert\" },\n on: { mouseenter: _vm.clearTimer, mouseleave: _vm.startTimer }\n },\n [\n _vm.iconClass\n ? _c(\"i\", { class: _vm.iconClass })\n : _c(\"i\", { class: _vm.typeClass }),\n _vm._t(\"default\", [\n !_vm.dangerouslyUseHTMLString\n ? _c(\"p\", { staticClass: \"el-message__content\" }, [\n _vm._v(_vm._s(_vm.message))\n ])\n : _c(\"p\", {\n staticClass: \"el-message__content\",\n domProps: { innerHTML: _vm._s(_vm.message) }\n })\n ]),\n _vm.showClose\n ? _c(\"i\", {\n staticClass: \"el-message__closeBtn el-icon-close\",\n on: { click: _vm.close }\n })\n : _vm._e()\n ],\n 2\n )\n ]\n )\n}\nvar mainvue_type_template_id_455b9f60_staticRenderFns = []\nmainvue_type_template_id_455b9f60_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/message/src/main.vue?vue&type=template&id=455b9f60&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/message/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar src_mainvue_type_script_lang_js_typeMap = {\n success: 'success',\n info: 'info',\n warning: 'warning',\n error: 'error'\n};\n\n/* harmony default export */ var message_src_mainvue_type_script_lang_js_ = ({\n data: function data() {\n return {\n visible: false,\n message: '',\n duration: 3000,\n type: 'info',\n iconClass: '',\n customClass: '',\n onClose: null,\n showClose: false,\n closed: false,\n verticalOffset: 20,\n timer: null,\n dangerouslyUseHTMLString: false,\n center: false\n };\n },\n\n\n computed: {\n typeClass: function typeClass() {\n return this.type && !this.iconClass ? 'el-message__icon el-icon-' + src_mainvue_type_script_lang_js_typeMap[this.type] : '';\n },\n positionStyle: function positionStyle() {\n return {\n 'top': this.verticalOffset + 'px'\n };\n }\n },\n\n watch: {\n closed: function closed(newVal) {\n if (newVal) {\n this.visible = false;\n }\n }\n },\n\n methods: {\n handleAfterLeave: function handleAfterLeave() {\n this.$destroy(true);\n this.$el.parentNode.removeChild(this.$el);\n },\n close: function close() {\n this.closed = true;\n if (typeof this.onClose === 'function') {\n this.onClose(this);\n }\n },\n clearTimer: function clearTimer() {\n clearTimeout(this.timer);\n },\n startTimer: function startTimer() {\n var _this = this;\n\n if (this.duration > 0) {\n this.timer = setTimeout(function () {\n if (!_this.closed) {\n _this.close();\n }\n }, this.duration);\n }\n },\n keydown: function keydown(e) {\n if (e.keyCode === 27) {\n // esc关闭消息\n if (!this.closed) {\n this.close();\n }\n }\n }\n },\n mounted: function mounted() {\n this.startTimer();\n document.addEventListener('keydown', this.keydown);\n },\n beforeDestroy: function beforeDestroy() {\n document.removeEventListener('keydown', this.keydown);\n }\n});\n// CONCATENATED MODULE: ./packages/message/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_message_src_mainvue_type_script_lang_js_ = (message_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/message/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar message_src_main_component = normalizeComponent(\n packages_message_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_455b9f60_render,\n mainvue_type_template_id_455b9f60_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var message_src_main_api; }\nmessage_src_main_component.options.__file = \"packages/message/src/main.vue\"\n/* harmony default export */ var message_src_main = (message_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/message/src/main.js\n\n\n\n\nvar MessageConstructor = external_vue_default.a.extend(message_src_main);\n\nvar message_src_main_instance = void 0;\nvar main_instances = [];\nvar main_seed = 1;\n\nvar main_Message = function Message(options) {\n if (external_vue_default.a.prototype.$isServer) return;\n options = options || {};\n if (typeof options === 'string') {\n options = {\n message: options\n };\n }\n var userOnClose = options.onClose;\n var id = 'message_' + main_seed++;\n\n options.onClose = function () {\n Message.close(id, userOnClose);\n };\n message_src_main_instance = new MessageConstructor({\n data: options\n });\n message_src_main_instance.id = id;\n if (Object(vdom_[\"isVNode\"])(message_src_main_instance.message)) {\n message_src_main_instance.$slots.default = [message_src_main_instance.message];\n message_src_main_instance.message = null;\n }\n message_src_main_instance.$mount();\n document.body.appendChild(message_src_main_instance.$el);\n var verticalOffset = options.offset || 20;\n main_instances.forEach(function (item) {\n verticalOffset += item.$el.offsetHeight + 16;\n });\n message_src_main_instance.verticalOffset = verticalOffset;\n message_src_main_instance.visible = true;\n message_src_main_instance.$el.style.zIndex = popup_[\"PopupManager\"].nextZIndex();\n main_instances.push(message_src_main_instance);\n return message_src_main_instance;\n};\n\n['success', 'warning', 'info', 'error'].forEach(function (type) {\n main_Message[type] = function (options) {\n if (typeof options === 'string') {\n options = {\n message: options\n };\n }\n options.type = type;\n return main_Message(options);\n };\n});\n\nmain_Message.close = function (id, userOnClose) {\n var len = main_instances.length;\n var index = -1;\n var removedHeight = void 0;\n for (var i = 0; i < len; i++) {\n if (id === main_instances[i].id) {\n removedHeight = main_instances[i].$el.offsetHeight;\n index = i;\n if (typeof userOnClose === 'function') {\n userOnClose(main_instances[i]);\n }\n main_instances.splice(i, 1);\n break;\n }\n }\n if (len <= 1 || index === -1 || index > main_instances.length - 1) return;\n for (var _i = index; _i < len - 1; _i++) {\n var dom = main_instances[_i].$el;\n dom.style['top'] = parseInt(dom.style['top'], 10) - removedHeight - 16 + 'px';\n }\n};\n\nmain_Message.closeAll = function () {\n for (var i = main_instances.length - 1; i >= 0; i--) {\n main_instances[i].close();\n }\n};\n\n/* harmony default export */ var packages_message_src_main = (main_Message);\n// CONCATENATED MODULE: ./packages/message/index.js\n\n/* harmony default export */ var packages_message = (packages_message_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/badge/src/main.vue?vue&type=template&id=7ccb6598&\nvar mainvue_type_template_id_7ccb6598_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"el-badge\" },\n [\n _vm._t(\"default\"),\n _c(\"transition\", { attrs: { name: \"el-zoom-in-center\" } }, [\n _c(\"sup\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n !_vm.hidden && (_vm.content || _vm.content === 0 || _vm.isDot),\n expression: \"!hidden && (content || content === 0 || isDot)\"\n }\n ],\n staticClass: \"el-badge__content\",\n class: [\n \"el-badge__content--\" + _vm.type,\n {\n \"is-fixed\": _vm.$slots.default,\n \"is-dot\": _vm.isDot\n }\n ],\n domProps: { textContent: _vm._s(_vm.content) }\n })\n ])\n ],\n 2\n )\n}\nvar mainvue_type_template_id_7ccb6598_staticRenderFns = []\nmainvue_type_template_id_7ccb6598_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/badge/src/main.vue?vue&type=template&id=7ccb6598&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/badge/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var badge_src_mainvue_type_script_lang_js_ = ({\n name: 'ElBadge',\n\n props: {\n value: [String, Number],\n max: Number,\n isDot: Boolean,\n hidden: Boolean,\n type: {\n type: String,\n validator: function validator(val) {\n return ['primary', 'success', 'warning', 'info', 'danger'].indexOf(val) > -1;\n }\n }\n },\n\n computed: {\n content: function content() {\n if (this.isDot) return;\n\n var value = this.value;\n var max = this.max;\n\n if (typeof value === 'number' && typeof max === 'number') {\n return max < value ? max + '+' : value;\n }\n\n return value;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/badge/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_badge_src_mainvue_type_script_lang_js_ = (badge_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/badge/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar badge_src_main_component = normalizeComponent(\n packages_badge_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_7ccb6598_render,\n mainvue_type_template_id_7ccb6598_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var badge_src_main_api; }\nbadge_src_main_component.options.__file = \"packages/badge/src/main.vue\"\n/* harmony default export */ var badge_src_main = (badge_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/badge/index.js\n\n\n/* istanbul ignore next */\nbadge_src_main.install = function (Vue) {\n Vue.component(badge_src_main.name, badge_src_main);\n};\n\n/* harmony default export */ var badge = (badge_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/card/src/main.vue?vue&type=template&id=59a4a40f&\nvar mainvue_type_template_id_59a4a40f_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-card\",\n class: _vm.shadow ? \"is-\" + _vm.shadow + \"-shadow\" : \"is-always-shadow\"\n },\n [\n _vm.$slots.header || _vm.header\n ? _c(\n \"div\",\n { staticClass: \"el-card__header\" },\n [_vm._t(\"header\", [_vm._v(_vm._s(_vm.header))])],\n 2\n )\n : _vm._e(),\n _c(\n \"div\",\n { staticClass: \"el-card__body\", style: _vm.bodyStyle },\n [_vm._t(\"default\")],\n 2\n )\n ]\n )\n}\nvar mainvue_type_template_id_59a4a40f_staticRenderFns = []\nmainvue_type_template_id_59a4a40f_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/card/src/main.vue?vue&type=template&id=59a4a40f&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/card/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var card_src_mainvue_type_script_lang_js_ = ({\n name: 'ElCard',\n props: {\n header: {},\n bodyStyle: {},\n shadow: {\n type: String\n }\n }\n});\n// CONCATENATED MODULE: ./packages/card/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_card_src_mainvue_type_script_lang_js_ = (card_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/card/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar card_src_main_component = normalizeComponent(\n packages_card_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_59a4a40f_render,\n mainvue_type_template_id_59a4a40f_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var card_src_main_api; }\ncard_src_main_component.options.__file = \"packages/card/src/main.vue\"\n/* harmony default export */ var card_src_main = (card_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/card/index.js\n\n\n/* istanbul ignore next */\ncard_src_main.install = function (Vue) {\n Vue.component(card_src_main.name, card_src_main);\n};\n\n/* harmony default export */ var card = (card_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/rate/src/main.vue?vue&type=template&id=ada57782&\nvar mainvue_type_template_id_ada57782_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-rate\",\n attrs: {\n role: \"slider\",\n \"aria-valuenow\": _vm.currentValue,\n \"aria-valuetext\": _vm.text,\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": _vm.max,\n tabindex: \"0\"\n },\n on: { keydown: _vm.handleKey }\n },\n [\n _vm._l(_vm.max, function(item, key) {\n return _c(\n \"span\",\n {\n key: key,\n staticClass: \"el-rate__item\",\n style: { cursor: _vm.rateDisabled ? \"auto\" : \"pointer\" },\n on: {\n mousemove: function($event) {\n _vm.setCurrentValue(item, $event)\n },\n mouseleave: _vm.resetCurrentValue,\n click: function($event) {\n _vm.selectValue(item)\n }\n }\n },\n [\n _c(\n \"i\",\n {\n staticClass: \"el-rate__icon\",\n class: [\n _vm.classes[item - 1],\n { hover: _vm.hoverIndex === item }\n ],\n style: _vm.getIconStyle(item)\n },\n [\n _vm.showDecimalIcon(item)\n ? _c(\"i\", {\n staticClass: \"el-rate__decimal\",\n class: _vm.decimalIconClass,\n style: _vm.decimalStyle\n })\n : _vm._e()\n ]\n )\n ]\n )\n }),\n _vm.showText || _vm.showScore\n ? _c(\n \"span\",\n { staticClass: \"el-rate__text\", style: { color: _vm.textColor } },\n [_vm._v(_vm._s(_vm.text))]\n )\n : _vm._e()\n ],\n 2\n )\n}\nvar mainvue_type_template_id_ada57782_staticRenderFns = []\nmainvue_type_template_id_ada57782_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/rate/src/main.vue?vue&type=template&id=ada57782&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/types\"\nvar types_ = __webpack_require__(18);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/rate/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var rate_src_mainvue_type_script_lang_js_ = ({\n name: 'ElRate',\n\n mixins: [migrating_default.a],\n\n inject: {\n elForm: {\n default: ''\n }\n },\n\n data: function data() {\n return {\n pointerAtLeftHalf: true,\n currentValue: this.value,\n hoverIndex: -1\n };\n },\n\n\n props: {\n value: {\n type: Number,\n default: 0\n },\n lowThreshold: {\n type: Number,\n default: 2\n },\n highThreshold: {\n type: Number,\n default: 4\n },\n max: {\n type: Number,\n default: 5\n },\n colors: {\n type: [Array, Object],\n default: function _default() {\n return ['#F7BA2A', '#F7BA2A', '#F7BA2A'];\n }\n },\n voidColor: {\n type: String,\n default: '#C6D1DE'\n },\n disabledVoidColor: {\n type: String,\n default: '#EFF2F7'\n },\n iconClasses: {\n type: [Array, Object],\n default: function _default() {\n return ['el-icon-star-on', 'el-icon-star-on', 'el-icon-star-on'];\n }\n },\n voidIconClass: {\n type: String,\n default: 'el-icon-star-off'\n },\n disabledVoidIconClass: {\n type: String,\n default: 'el-icon-star-on'\n },\n disabled: {\n type: Boolean,\n default: false\n },\n allowHalf: {\n type: Boolean,\n default: false\n },\n showText: {\n type: Boolean,\n default: false\n },\n showScore: {\n type: Boolean,\n default: false\n },\n textColor: {\n type: String,\n default: '#1f2d3d'\n },\n texts: {\n type: Array,\n default: function _default() {\n return ['极差', '失望', '一般', '满意', '惊喜'];\n }\n },\n scoreTemplate: {\n type: String,\n default: '{value}'\n }\n },\n\n computed: {\n text: function text() {\n var result = '';\n if (this.showScore) {\n result = this.scoreTemplate.replace(/\\{\\s*value\\s*\\}/, this.rateDisabled ? this.value : this.currentValue);\n } else if (this.showText) {\n result = this.texts[Math.ceil(this.currentValue) - 1];\n }\n return result;\n },\n decimalStyle: function decimalStyle() {\n var width = '';\n if (this.rateDisabled) {\n width = this.valueDecimal + '%';\n } else if (this.allowHalf) {\n width = '50%';\n }\n return {\n color: this.activeColor,\n width: width\n };\n },\n valueDecimal: function valueDecimal() {\n return this.value * 100 - Math.floor(this.value) * 100;\n },\n classMap: function classMap() {\n var _ref;\n\n return Array.isArray(this.iconClasses) ? (_ref = {}, _ref[this.lowThreshold] = this.iconClasses[0], _ref[this.highThreshold] = { value: this.iconClasses[1], excluded: true }, _ref[this.max] = this.iconClasses[2], _ref) : this.iconClasses;\n },\n decimalIconClass: function decimalIconClass() {\n return this.getValueFromMap(this.value, this.classMap);\n },\n voidClass: function voidClass() {\n return this.rateDisabled ? this.disabledVoidIconClass : this.voidIconClass;\n },\n activeClass: function activeClass() {\n return this.getValueFromMap(this.currentValue, this.classMap);\n },\n colorMap: function colorMap() {\n var _ref2;\n\n return Array.isArray(this.colors) ? (_ref2 = {}, _ref2[this.lowThreshold] = this.colors[0], _ref2[this.highThreshold] = { value: this.colors[1], excluded: true }, _ref2[this.max] = this.colors[2], _ref2) : this.colors;\n },\n activeColor: function activeColor() {\n return this.getValueFromMap(this.currentValue, this.colorMap);\n },\n classes: function classes() {\n var result = [];\n var i = 0;\n var threshold = this.currentValue;\n if (this.allowHalf && this.currentValue !== Math.floor(this.currentValue)) {\n threshold--;\n }\n for (; i < threshold; i++) {\n result.push(this.activeClass);\n }\n for (; i < this.max; i++) {\n result.push(this.voidClass);\n }\n return result;\n },\n rateDisabled: function rateDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n\n watch: {\n value: function value(val) {\n this.currentValue = val;\n this.pointerAtLeftHalf = this.value !== Math.floor(this.value);\n }\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'text-template': 'text-template is renamed to score-template.'\n }\n };\n },\n getValueFromMap: function getValueFromMap(value, map) {\n var matchedKeys = Object.keys(map).filter(function (key) {\n var val = map[key];\n var excluded = Object(types_[\"isObject\"])(val) ? val.excluded : false;\n return excluded ? value < key : value <= key;\n }).sort(function (a, b) {\n return a - b;\n });\n var matchedValue = map[matchedKeys[0]];\n return Object(types_[\"isObject\"])(matchedValue) ? matchedValue.value : matchedValue || '';\n },\n showDecimalIcon: function showDecimalIcon(item) {\n var showWhenDisabled = this.rateDisabled && this.valueDecimal > 0 && item - 1 < this.value && item > this.value;\n /* istanbul ignore next */\n var showWhenAllowHalf = this.allowHalf && this.pointerAtLeftHalf && item - 0.5 <= this.currentValue && item > this.currentValue;\n return showWhenDisabled || showWhenAllowHalf;\n },\n getIconStyle: function getIconStyle(item) {\n var voidColor = this.rateDisabled ? this.disabledVoidColor : this.voidColor;\n return {\n color: item <= this.currentValue ? this.activeColor : voidColor\n };\n },\n selectValue: function selectValue(value) {\n if (this.rateDisabled) {\n return;\n }\n if (this.allowHalf && this.pointerAtLeftHalf) {\n this.$emit('input', this.currentValue);\n this.$emit('change', this.currentValue);\n } else {\n this.$emit('input', value);\n this.$emit('change', value);\n }\n },\n handleKey: function handleKey(e) {\n if (this.rateDisabled) {\n return;\n }\n var currentValue = this.currentValue;\n var keyCode = e.keyCode;\n if (keyCode === 38 || keyCode === 39) {\n // left / down\n if (this.allowHalf) {\n currentValue += 0.5;\n } else {\n currentValue += 1;\n }\n e.stopPropagation();\n e.preventDefault();\n } else if (keyCode === 37 || keyCode === 40) {\n if (this.allowHalf) {\n currentValue -= 0.5;\n } else {\n currentValue -= 1;\n }\n e.stopPropagation();\n e.preventDefault();\n }\n currentValue = currentValue < 0 ? 0 : currentValue;\n currentValue = currentValue > this.max ? this.max : currentValue;\n\n this.$emit('input', currentValue);\n this.$emit('change', currentValue);\n },\n setCurrentValue: function setCurrentValue(value, event) {\n if (this.rateDisabled) {\n return;\n }\n /* istanbul ignore if */\n if (this.allowHalf) {\n var target = event.target;\n if (Object(dom_[\"hasClass\"])(target, 'el-rate__item')) {\n target = target.querySelector('.el-rate__icon');\n }\n if (Object(dom_[\"hasClass\"])(target, 'el-rate__decimal')) {\n target = target.parentNode;\n }\n this.pointerAtLeftHalf = event.offsetX * 2 <= target.clientWidth;\n this.currentValue = this.pointerAtLeftHalf ? value - 0.5 : value;\n } else {\n this.currentValue = value;\n }\n this.hoverIndex = value;\n },\n resetCurrentValue: function resetCurrentValue() {\n if (this.rateDisabled) {\n return;\n }\n if (this.allowHalf) {\n this.pointerAtLeftHalf = this.value !== Math.floor(this.value);\n }\n this.currentValue = this.value;\n this.hoverIndex = -1;\n }\n },\n\n created: function created() {\n if (!this.value) {\n this.$emit('input', 0);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/rate/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_rate_src_mainvue_type_script_lang_js_ = (rate_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/rate/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar rate_src_main_component = normalizeComponent(\n packages_rate_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_ada57782_render,\n mainvue_type_template_id_ada57782_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var rate_src_main_api; }\nrate_src_main_component.options.__file = \"packages/rate/src/main.vue\"\n/* harmony default export */ var rate_src_main = (rate_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/rate/index.js\n\n\n/* istanbul ignore next */\nrate_src_main.install = function (Vue) {\n Vue.component(rate_src_main.name, rate_src_main);\n};\n\n/* harmony default export */ var rate = (rate_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/steps.vue?vue&type=template&id=3c6b6dc0&\nvar stepsvue_type_template_id_3c6b6dc0_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-steps\",\n class: [\n !_vm.simple && \"el-steps--\" + _vm.direction,\n _vm.simple && \"el-steps--simple\"\n ]\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar stepsvue_type_template_id_3c6b6dc0_staticRenderFns = []\nstepsvue_type_template_id_3c6b6dc0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/steps/src/steps.vue?vue&type=template&id=3c6b6dc0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/steps.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var stepsvue_type_script_lang_js_ = ({\n name: 'ElSteps',\n\n mixins: [migrating_default.a],\n\n props: {\n space: [Number, String],\n active: Number,\n direction: {\n type: String,\n default: 'horizontal'\n },\n alignCenter: Boolean,\n simple: Boolean,\n finishStatus: {\n type: String,\n default: 'finish'\n },\n processStatus: {\n type: String,\n default: 'process'\n }\n },\n\n data: function data() {\n return {\n steps: [],\n stepOffset: 0\n };\n },\n\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'center': 'center is removed.'\n }\n };\n }\n },\n\n watch: {\n active: function active(newVal, oldVal) {\n this.$emit('change', newVal, oldVal);\n },\n steps: function steps(_steps) {\n _steps.forEach(function (child, index) {\n child.index = index;\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/steps/src/steps.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_stepsvue_type_script_lang_js_ = (stepsvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/steps/src/steps.vue\n\n\n\n\n\n/* normalize component */\n\nvar steps_component = normalizeComponent(\n src_stepsvue_type_script_lang_js_,\n stepsvue_type_template_id_3c6b6dc0_render,\n stepsvue_type_template_id_3c6b6dc0_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var steps_api; }\nsteps_component.options.__file = \"packages/steps/src/steps.vue\"\n/* harmony default export */ var steps = (steps_component.exports);\n// CONCATENATED MODULE: ./packages/steps/index.js\n\n\n/* istanbul ignore next */\nsteps.install = function (Vue) {\n Vue.component(steps.name, steps);\n};\n\n/* harmony default export */ var packages_steps = (steps);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/step.vue?vue&type=template&id=f414a87a&\nvar stepvue_type_template_id_f414a87a_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-step\",\n class: [\n !_vm.isSimple && \"is-\" + _vm.$parent.direction,\n _vm.isSimple && \"is-simple\",\n _vm.isLast && !_vm.space && !_vm.isCenter && \"is-flex\",\n _vm.isCenter && !_vm.isVertical && !_vm.isSimple && \"is-center\"\n ],\n style: _vm.style\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-step__head\", class: \"is-\" + _vm.currentStatus },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-step__line\",\n style: _vm.isLast\n ? \"\"\n : { marginRight: _vm.$parent.stepOffset + \"px\" }\n },\n [\n _c(\"i\", {\n staticClass: \"el-step__line-inner\",\n style: _vm.lineStyle\n })\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"el-step__icon\",\n class: \"is-\" + (_vm.icon ? \"icon\" : \"text\")\n },\n [\n _vm.currentStatus !== \"success\" && _vm.currentStatus !== \"error\"\n ? _vm._t(\"icon\", [\n _vm.icon\n ? _c(\"i\", {\n staticClass: \"el-step__icon-inner\",\n class: [_vm.icon]\n })\n : _vm._e(),\n !_vm.icon && !_vm.isSimple\n ? _c(\"div\", { staticClass: \"el-step__icon-inner\" }, [\n _vm._v(_vm._s(_vm.index + 1))\n ])\n : _vm._e()\n ])\n : _c(\"i\", {\n staticClass: \"el-step__icon-inner is-status\",\n class: [\n \"el-icon-\" +\n (_vm.currentStatus === \"success\" ? \"check\" : \"close\")\n ]\n })\n ],\n 2\n )\n ]\n ),\n _c(\"div\", { staticClass: \"el-step__main\" }, [\n _c(\n \"div\",\n {\n ref: \"title\",\n staticClass: \"el-step__title\",\n class: [\"is-\" + _vm.currentStatus]\n },\n [_vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])],\n 2\n ),\n _vm.isSimple\n ? _c(\"div\", { staticClass: \"el-step__arrow\" })\n : _c(\n \"div\",\n {\n staticClass: \"el-step__description\",\n class: [\"is-\" + _vm.currentStatus]\n },\n [_vm._t(\"description\", [_vm._v(_vm._s(_vm.description))])],\n 2\n )\n ])\n ]\n )\n}\nvar stepvue_type_template_id_f414a87a_staticRenderFns = []\nstepvue_type_template_id_f414a87a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/steps/src/step.vue?vue&type=template&id=f414a87a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/step.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var stepvue_type_script_lang_js_ = ({\n name: 'ElStep',\n\n props: {\n title: String,\n icon: String,\n description: String,\n status: String\n },\n\n data: function data() {\n return {\n index: -1,\n lineStyle: {},\n internalStatus: ''\n };\n },\n beforeCreate: function beforeCreate() {\n this.$parent.steps.push(this);\n },\n beforeDestroy: function beforeDestroy() {\n var steps = this.$parent.steps;\n var index = steps.indexOf(this);\n if (index >= 0) {\n steps.splice(index, 1);\n }\n },\n\n\n computed: {\n currentStatus: function currentStatus() {\n return this.status || this.internalStatus;\n },\n prevStatus: function prevStatus() {\n var prevStep = this.$parent.steps[this.index - 1];\n return prevStep ? prevStep.currentStatus : 'wait';\n },\n isCenter: function isCenter() {\n return this.$parent.alignCenter;\n },\n isVertical: function isVertical() {\n return this.$parent.direction === 'vertical';\n },\n isSimple: function isSimple() {\n return this.$parent.simple;\n },\n isLast: function isLast() {\n var parent = this.$parent;\n return parent.steps[parent.steps.length - 1] === this;\n },\n stepsCount: function stepsCount() {\n return this.$parent.steps.length;\n },\n space: function space() {\n var isSimple = this.isSimple,\n space = this.$parent.space;\n\n return isSimple ? '' : space;\n },\n\n style: function style() {\n var style = {};\n var parent = this.$parent;\n var len = parent.steps.length;\n\n var space = typeof this.space === 'number' ? this.space + 'px' : this.space ? this.space : 100 / (len - (this.isCenter ? 0 : 1)) + '%';\n style.flexBasis = space;\n if (this.isVertical) return style;\n if (this.isLast) {\n style.maxWidth = 100 / this.stepsCount + '%';\n } else {\n style.marginRight = -this.$parent.stepOffset + 'px';\n }\n\n return style;\n }\n },\n\n methods: {\n updateStatus: function updateStatus(val) {\n var prevChild = this.$parent.$children[this.index - 1];\n\n if (val > this.index) {\n this.internalStatus = this.$parent.finishStatus;\n } else if (val === this.index && this.prevStatus !== 'error') {\n this.internalStatus = this.$parent.processStatus;\n } else {\n this.internalStatus = 'wait';\n }\n\n if (prevChild) prevChild.calcProgress(this.internalStatus);\n },\n calcProgress: function calcProgress(status) {\n var step = 100;\n var style = {};\n\n style.transitionDelay = 150 * this.index + 'ms';\n if (status === this.$parent.processStatus) {\n step = this.currentStatus !== 'error' ? 0 : 0;\n } else if (status === 'wait') {\n step = 0;\n style.transitionDelay = -150 * this.index + 'ms';\n }\n\n style.borderWidth = step && !this.isSimple ? '1px' : 0;\n this.$parent.direction === 'vertical' ? style.height = step + '%' : style.width = step + '%';\n\n this.lineStyle = style;\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n var unwatch = this.$watch('index', function (val) {\n _this.$watch('$parent.active', _this.updateStatus, { immediate: true });\n _this.$watch('$parent.processStatus', function () {\n var activeIndex = _this.$parent.active;\n _this.updateStatus(activeIndex);\n }, { immediate: true });\n unwatch();\n });\n }\n});\n// CONCATENATED MODULE: ./packages/steps/src/step.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_stepvue_type_script_lang_js_ = (stepvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/steps/src/step.vue\n\n\n\n\n\n/* normalize component */\n\nvar step_component = normalizeComponent(\n src_stepvue_type_script_lang_js_,\n stepvue_type_template_id_f414a87a_render,\n stepvue_type_template_id_f414a87a_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var step_api; }\nstep_component.options.__file = \"packages/steps/src/step.vue\"\n/* harmony default export */ var step = (step_component.exports);\n// CONCATENATED MODULE: ./packages/step/index.js\n\n\n/* istanbul ignore next */\nstep.install = function (Vue) {\n Vue.component(step.name, step);\n};\n\n/* harmony default export */ var packages_step = (step);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/main.vue?vue&type=template&id=5d5d1482&\nvar mainvue_type_template_id_5d5d1482_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: _vm.carouselClasses,\n on: {\n mouseenter: function($event) {\n $event.stopPropagation()\n return _vm.handleMouseEnter($event)\n },\n mouseleave: function($event) {\n $event.stopPropagation()\n return _vm.handleMouseLeave($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-carousel__container\",\n style: { height: _vm.height }\n },\n [\n _vm.arrowDisplay\n ? _c(\"transition\", { attrs: { name: \"carousel-arrow-left\" } }, [\n _c(\n \"button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n (_vm.arrow === \"always\" || _vm.hover) &&\n (_vm.loop || _vm.activeIndex > 0),\n expression:\n \"(arrow === 'always' || hover) && (loop || activeIndex > 0)\"\n }\n ],\n staticClass: \"el-carousel__arrow el-carousel__arrow--left\",\n attrs: { type: \"button\" },\n on: {\n mouseenter: function($event) {\n _vm.handleButtonEnter(\"left\")\n },\n mouseleave: _vm.handleButtonLeave,\n click: function($event) {\n $event.stopPropagation()\n _vm.throttledArrowClick(_vm.activeIndex - 1)\n }\n }\n },\n [_c(\"i\", { staticClass: \"el-icon-arrow-left\" })]\n )\n ])\n : _vm._e(),\n _vm.arrowDisplay\n ? _c(\"transition\", { attrs: { name: \"carousel-arrow-right\" } }, [\n _c(\n \"button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n (_vm.arrow === \"always\" || _vm.hover) &&\n (_vm.loop || _vm.activeIndex < _vm.items.length - 1),\n expression:\n \"(arrow === 'always' || hover) && (loop || activeIndex < items.length - 1)\"\n }\n ],\n staticClass: \"el-carousel__arrow el-carousel__arrow--right\",\n attrs: { type: \"button\" },\n on: {\n mouseenter: function($event) {\n _vm.handleButtonEnter(\"right\")\n },\n mouseleave: _vm.handleButtonLeave,\n click: function($event) {\n $event.stopPropagation()\n _vm.throttledArrowClick(_vm.activeIndex + 1)\n }\n }\n },\n [_c(\"i\", { staticClass: \"el-icon-arrow-right\" })]\n )\n ])\n : _vm._e(),\n _vm._t(\"default\")\n ],\n 2\n ),\n _vm.indicatorPosition !== \"none\"\n ? _c(\n \"ul\",\n { class: _vm.indicatorsClasses },\n _vm._l(_vm.items, function(item, index) {\n return _c(\n \"li\",\n {\n key: index,\n class: [\n \"el-carousel__indicator\",\n \"el-carousel__indicator--\" + _vm.direction,\n { \"is-active\": index === _vm.activeIndex }\n ],\n on: {\n mouseenter: function($event) {\n _vm.throttledIndicatorHover(index)\n },\n click: function($event) {\n $event.stopPropagation()\n _vm.handleIndicatorClick(index)\n }\n }\n },\n [\n _c(\"button\", { staticClass: \"el-carousel__button\" }, [\n _vm.hasLabel\n ? _c(\"span\", [_vm._v(_vm._s(item.label))])\n : _vm._e()\n ])\n ]\n )\n }),\n 0\n )\n : _vm._e()\n ]\n )\n}\nvar mainvue_type_template_id_5d5d1482_staticRenderFns = []\nmainvue_type_template_id_5d5d1482_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/carousel/src/main.vue?vue&type=template&id=5d5d1482&\n\n// EXTERNAL MODULE: external \"throttle-debounce/throttle\"\nvar throttle_ = __webpack_require__(25);\nvar throttle_default = /*#__PURE__*/__webpack_require__.n(throttle_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var carousel_src_mainvue_type_script_lang_js_ = ({\n name: 'ElCarousel',\n\n props: {\n initialIndex: {\n type: Number,\n default: 0\n },\n height: String,\n trigger: {\n type: String,\n default: 'hover'\n },\n autoplay: {\n type: Boolean,\n default: true\n },\n interval: {\n type: Number,\n default: 3000\n },\n indicatorPosition: String,\n indicator: {\n type: Boolean,\n default: true\n },\n arrow: {\n type: String,\n default: 'hover'\n },\n type: String,\n loop: {\n type: Boolean,\n default: true\n },\n direction: {\n type: String,\n default: 'horizontal',\n validator: function validator(val) {\n return ['horizontal', 'vertical'].indexOf(val) !== -1;\n }\n }\n },\n\n data: function data() {\n return {\n items: [],\n activeIndex: -1,\n containerWidth: 0,\n timer: null,\n hover: false\n };\n },\n\n\n computed: {\n arrowDisplay: function arrowDisplay() {\n return this.arrow !== 'never' && this.direction !== 'vertical';\n },\n hasLabel: function hasLabel() {\n return this.items.some(function (item) {\n return item.label.toString().length > 0;\n });\n },\n carouselClasses: function carouselClasses() {\n var classes = ['el-carousel', 'el-carousel--' + this.direction];\n if (this.type === 'card') {\n classes.push('el-carousel--card');\n }\n return classes;\n },\n indicatorsClasses: function indicatorsClasses() {\n var classes = ['el-carousel__indicators', 'el-carousel__indicators--' + this.direction];\n if (this.hasLabel) {\n classes.push('el-carousel__indicators--labels');\n }\n if (this.indicatorPosition === 'outside' || this.type === 'card') {\n classes.push('el-carousel__indicators--outside');\n }\n return classes;\n }\n },\n\n watch: {\n items: function items(val) {\n if (val.length > 0) this.setActiveItem(this.initialIndex);\n },\n activeIndex: function activeIndex(val, oldVal) {\n this.resetItemPosition(oldVal);\n if (oldVal > -1) {\n this.$emit('change', val, oldVal);\n }\n },\n autoplay: function autoplay(val) {\n val ? this.startTimer() : this.pauseTimer();\n },\n loop: function loop() {\n this.setActiveItem(this.activeIndex);\n }\n },\n\n methods: {\n handleMouseEnter: function handleMouseEnter() {\n this.hover = true;\n this.pauseTimer();\n },\n handleMouseLeave: function handleMouseLeave() {\n this.hover = false;\n this.startTimer();\n },\n itemInStage: function itemInStage(item, index) {\n var length = this.items.length;\n if (index === length - 1 && item.inStage && this.items[0].active || item.inStage && this.items[index + 1] && this.items[index + 1].active) {\n return 'left';\n } else if (index === 0 && item.inStage && this.items[length - 1].active || item.inStage && this.items[index - 1] && this.items[index - 1].active) {\n return 'right';\n }\n return false;\n },\n handleButtonEnter: function handleButtonEnter(arrow) {\n var _this = this;\n\n if (this.direction === 'vertical') return;\n this.items.forEach(function (item, index) {\n if (arrow === _this.itemInStage(item, index)) {\n item.hover = true;\n }\n });\n },\n handleButtonLeave: function handleButtonLeave() {\n if (this.direction === 'vertical') return;\n this.items.forEach(function (item) {\n item.hover = false;\n });\n },\n updateItems: function updateItems() {\n this.items = this.$children.filter(function (child) {\n return child.$options.name === 'ElCarouselItem';\n });\n },\n resetItemPosition: function resetItemPosition(oldIndex) {\n var _this2 = this;\n\n this.items.forEach(function (item, index) {\n item.translateItem(index, _this2.activeIndex, oldIndex);\n });\n },\n playSlides: function playSlides() {\n if (this.activeIndex < this.items.length - 1) {\n this.activeIndex++;\n } else if (this.loop) {\n this.activeIndex = 0;\n }\n },\n pauseTimer: function pauseTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n },\n startTimer: function startTimer() {\n if (this.interval <= 0 || !this.autoplay || this.timer) return;\n this.timer = setInterval(this.playSlides, this.interval);\n },\n setActiveItem: function setActiveItem(index) {\n if (typeof index === 'string') {\n var filteredItems = this.items.filter(function (item) {\n return item.name === index;\n });\n if (filteredItems.length > 0) {\n index = this.items.indexOf(filteredItems[0]);\n }\n }\n index = Number(index);\n if (isNaN(index) || index !== Math.floor(index)) {\n console.warn('[Element Warn][Carousel]index must be an integer.');\n return;\n }\n var length = this.items.length;\n var oldIndex = this.activeIndex;\n if (index < 0) {\n this.activeIndex = this.loop ? length - 1 : 0;\n } else if (index >= length) {\n this.activeIndex = this.loop ? 0 : length - 1;\n } else {\n this.activeIndex = index;\n }\n if (oldIndex === this.activeIndex) {\n this.resetItemPosition(oldIndex);\n }\n },\n prev: function prev() {\n this.setActiveItem(this.activeIndex - 1);\n },\n next: function next() {\n this.setActiveItem(this.activeIndex + 1);\n },\n handleIndicatorClick: function handleIndicatorClick(index) {\n this.activeIndex = index;\n },\n handleIndicatorHover: function handleIndicatorHover(index) {\n if (this.trigger === 'hover' && index !== this.activeIndex) {\n this.activeIndex = index;\n }\n }\n },\n\n created: function created() {\n var _this3 = this;\n\n this.throttledArrowClick = throttle_default()(300, true, function (index) {\n _this3.setActiveItem(index);\n });\n this.throttledIndicatorHover = throttle_default()(300, function (index) {\n _this3.handleIndicatorHover(index);\n });\n },\n mounted: function mounted() {\n var _this4 = this;\n\n this.updateItems();\n this.$nextTick(function () {\n Object(resize_event_[\"addResizeListener\"])(_this4.$el, _this4.resetItemPosition);\n if (_this4.initialIndex < _this4.items.length && _this4.initialIndex >= 0) {\n _this4.activeIndex = _this4.initialIndex;\n }\n _this4.startTimer();\n });\n },\n beforeDestroy: function beforeDestroy() {\n if (this.$el) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.resetItemPosition);\n this.pauseTimer();\n }\n});\n// CONCATENATED MODULE: ./packages/carousel/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_carousel_src_mainvue_type_script_lang_js_ = (carousel_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/carousel/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar carousel_src_main_component = normalizeComponent(\n packages_carousel_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_5d5d1482_render,\n mainvue_type_template_id_5d5d1482_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var carousel_src_main_api; }\ncarousel_src_main_component.options.__file = \"packages/carousel/src/main.vue\"\n/* harmony default export */ var carousel_src_main = (carousel_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/carousel/index.js\n\n\n/* istanbul ignore next */\ncarousel_src_main.install = function (Vue) {\n Vue.component(carousel_src_main.name, carousel_src_main);\n};\n\n/* harmony default export */ var carousel = (carousel_src_main);\n// CONCATENATED MODULE: ./packages/scrollbar/src/util.js\nvar BAR_MAP = {\n vertical: {\n offset: 'offsetHeight',\n scroll: 'scrollTop',\n scrollSize: 'scrollHeight',\n size: 'height',\n key: 'vertical',\n axis: 'Y',\n client: 'clientY',\n direction: 'top'\n },\n horizontal: {\n offset: 'offsetWidth',\n scroll: 'scrollLeft',\n scrollSize: 'scrollWidth',\n size: 'width',\n key: 'horizontal',\n axis: 'X',\n client: 'clientX',\n direction: 'left'\n }\n};\n\nfunction renderThumbStyle(_ref) {\n var move = _ref.move,\n size = _ref.size,\n bar = _ref.bar;\n\n var style = {};\n var translate = 'translate' + bar.axis + '(' + move + '%)';\n\n style[bar.size] = size;\n style.transform = translate;\n style.msTransform = translate;\n style.webkitTransform = translate;\n\n return style;\n};\n// CONCATENATED MODULE: ./packages/scrollbar/src/bar.js\n\n\n\n/* istanbul ignore next */\n/* harmony default export */ var src_bar = ({\n name: 'Bar',\n\n props: {\n vertical: Boolean,\n size: String,\n move: Number\n },\n\n computed: {\n bar: function bar() {\n return BAR_MAP[this.vertical ? 'vertical' : 'horizontal'];\n },\n wrap: function wrap() {\n return this.$parent.wrap;\n }\n },\n\n render: function render(h) {\n var size = this.size,\n move = this.move,\n bar = this.bar;\n\n\n return h(\n 'div',\n {\n 'class': ['el-scrollbar__bar', 'is-' + bar.key],\n on: {\n 'mousedown': this.clickTrackHandler\n }\n },\n [h('div', {\n ref: 'thumb',\n 'class': 'el-scrollbar__thumb',\n on: {\n 'mousedown': this.clickThumbHandler\n },\n\n style: renderThumbStyle({ size: size, move: move, bar: bar }) })]\n );\n },\n\n\n methods: {\n clickThumbHandler: function clickThumbHandler(e) {\n // prevent click event of right button\n if (e.ctrlKey || e.button === 2) {\n return;\n }\n this.startDrag(e);\n this[this.bar.axis] = e.currentTarget[this.bar.offset] - (e[this.bar.client] - e.currentTarget.getBoundingClientRect()[this.bar.direction]);\n },\n clickTrackHandler: function clickTrackHandler(e) {\n var offset = Math.abs(e.target.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]);\n var thumbHalf = this.$refs.thumb[this.bar.offset] / 2;\n var thumbPositionPercentage = (offset - thumbHalf) * 100 / this.$el[this.bar.offset];\n\n this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n },\n startDrag: function startDrag(e) {\n e.stopImmediatePropagation();\n this.cursorDown = true;\n\n Object(dom_[\"on\"])(document, 'mousemove', this.mouseMoveDocumentHandler);\n Object(dom_[\"on\"])(document, 'mouseup', this.mouseUpDocumentHandler);\n document.onselectstart = function () {\n return false;\n };\n },\n mouseMoveDocumentHandler: function mouseMoveDocumentHandler(e) {\n if (this.cursorDown === false) return;\n var prevPage = this[this.bar.axis];\n\n if (!prevPage) return;\n\n var offset = (this.$el.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]) * -1;\n var thumbClickPosition = this.$refs.thumb[this.bar.offset] - prevPage;\n var thumbPositionPercentage = (offset - thumbClickPosition) * 100 / this.$el[this.bar.offset];\n\n this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n },\n mouseUpDocumentHandler: function mouseUpDocumentHandler(e) {\n this.cursorDown = false;\n this[this.bar.axis] = 0;\n Object(dom_[\"off\"])(document, 'mousemove', this.mouseMoveDocumentHandler);\n document.onselectstart = null;\n }\n },\n\n destroyed: function destroyed() {\n Object(dom_[\"off\"])(document, 'mouseup', this.mouseUpDocumentHandler);\n }\n});\n// CONCATENATED MODULE: ./packages/scrollbar/src/main.js\n// reference https://github.com/noeldelgado/gemini-scrollbar/blob/master/index.js\n\n\n\n\n\n\n/* istanbul ignore next */\n/* harmony default export */ var scrollbar_src_main = ({\n name: 'ElScrollbar',\n\n components: { Bar: src_bar },\n\n props: {\n native: Boolean,\n wrapStyle: {},\n wrapClass: {},\n viewClass: {},\n viewStyle: {},\n noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能\n tag: {\n type: String,\n default: 'div'\n }\n },\n\n data: function data() {\n return {\n sizeWidth: '0',\n sizeHeight: '0',\n moveX: 0,\n moveY: 0\n };\n },\n\n\n computed: {\n wrap: function wrap() {\n return this.$refs.wrap;\n }\n },\n\n render: function render(h) {\n var gutter = scrollbar_width_default()();\n var style = this.wrapStyle;\n\n if (gutter) {\n var gutterWith = '-' + gutter + 'px';\n var gutterStyle = 'margin-bottom: ' + gutterWith + '; margin-right: ' + gutterWith + ';';\n\n if (Array.isArray(this.wrapStyle)) {\n style = Object(util_[\"toObject\"])(this.wrapStyle);\n style.marginRight = style.marginBottom = gutterWith;\n } else if (typeof this.wrapStyle === 'string') {\n style += gutterStyle;\n } else {\n style = gutterStyle;\n }\n }\n var view = h(this.tag, {\n class: ['el-scrollbar__view', this.viewClass],\n style: this.viewStyle,\n ref: 'resize'\n }, this.$slots.default);\n var wrap = h(\n 'div',\n {\n ref: 'wrap',\n style: style,\n on: {\n 'scroll': this.handleScroll\n },\n\n 'class': [this.wrapClass, 'el-scrollbar__wrap', gutter ? '' : 'el-scrollbar__wrap--hidden-default'] },\n [[view]]\n );\n var nodes = void 0;\n\n if (!this.native) {\n nodes = [wrap, h(src_bar, {\n attrs: {\n move: this.moveX,\n size: this.sizeWidth }\n }), h(src_bar, {\n attrs: {\n vertical: true,\n move: this.moveY,\n size: this.sizeHeight }\n })];\n } else {\n nodes = [h(\n 'div',\n {\n ref: 'wrap',\n 'class': [this.wrapClass, 'el-scrollbar__wrap'],\n style: style },\n [[view]]\n )];\n }\n return h('div', { class: 'el-scrollbar' }, nodes);\n },\n\n\n methods: {\n handleScroll: function handleScroll() {\n var wrap = this.wrap;\n\n this.moveY = wrap.scrollTop * 100 / wrap.clientHeight;\n this.moveX = wrap.scrollLeft * 100 / wrap.clientWidth;\n },\n update: function update() {\n var heightPercentage = void 0,\n widthPercentage = void 0;\n var wrap = this.wrap;\n if (!wrap) return;\n\n heightPercentage = wrap.clientHeight * 100 / wrap.scrollHeight;\n widthPercentage = wrap.clientWidth * 100 / wrap.scrollWidth;\n\n this.sizeHeight = heightPercentage < 100 ? heightPercentage + '%' : '';\n this.sizeWidth = widthPercentage < 100 ? widthPercentage + '%' : '';\n }\n },\n\n mounted: function mounted() {\n if (this.native) return;\n this.$nextTick(this.update);\n !this.noresize && Object(resize_event_[\"addResizeListener\"])(this.$refs.resize, this.update);\n },\n beforeDestroy: function beforeDestroy() {\n if (this.native) return;\n !this.noresize && Object(resize_event_[\"removeResizeListener\"])(this.$refs.resize, this.update);\n }\n});\n// CONCATENATED MODULE: ./packages/scrollbar/index.js\n\n\n/* istanbul ignore next */\nscrollbar_src_main.install = function (Vue) {\n Vue.component(scrollbar_src_main.name, scrollbar_src_main);\n};\n\n/* harmony default export */ var scrollbar = (scrollbar_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/item.vue?vue&type=template&id=1801ae19&\nvar itemvue_type_template_id_1801ae19_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.ready,\n expression: \"ready\"\n }\n ],\n staticClass: \"el-carousel__item\",\n class: {\n \"is-active\": _vm.active,\n \"el-carousel__item--card\": _vm.$parent.type === \"card\",\n \"is-in-stage\": _vm.inStage,\n \"is-hover\": _vm.hover,\n \"is-animating\": _vm.animating\n },\n style: _vm.itemStyle,\n on: { click: _vm.handleItemClick }\n },\n [\n _vm.$parent.type === \"card\"\n ? _c(\"div\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.active,\n expression: \"!active\"\n }\n ],\n staticClass: \"el-carousel__mask\"\n })\n : _vm._e(),\n _vm._t(\"default\")\n ],\n 2\n )\n}\nvar itemvue_type_template_id_1801ae19_staticRenderFns = []\nitemvue_type_template_id_1801ae19_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/carousel/src/item.vue?vue&type=template&id=1801ae19&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\nvar CARD_SCALE = 0.83;\n/* harmony default export */ var itemvue_type_script_lang_js_ = ({\n name: 'ElCarouselItem',\n\n props: {\n name: String,\n label: {\n type: [String, Number],\n default: ''\n }\n },\n\n data: function data() {\n return {\n hover: false,\n translate: 0,\n scale: 1,\n active: false,\n ready: false,\n inStage: false,\n animating: false\n };\n },\n\n\n methods: {\n processIndex: function processIndex(index, activeIndex, length) {\n if (activeIndex === 0 && index === length - 1) {\n return -1;\n } else if (activeIndex === length - 1 && index === 0) {\n return length;\n } else if (index < activeIndex - 1 && activeIndex - index >= length / 2) {\n return length + 1;\n } else if (index > activeIndex + 1 && index - activeIndex >= length / 2) {\n return -2;\n }\n return index;\n },\n calcCardTranslate: function calcCardTranslate(index, activeIndex) {\n var parentWidth = this.$parent.$el.offsetWidth;\n if (this.inStage) {\n return parentWidth * ((2 - CARD_SCALE) * (index - activeIndex) + 1) / 4;\n } else if (index < activeIndex) {\n return -(1 + CARD_SCALE) * parentWidth / 4;\n } else {\n return (3 + CARD_SCALE) * parentWidth / 4;\n }\n },\n calcTranslate: function calcTranslate(index, activeIndex, isVertical) {\n var distance = this.$parent.$el[isVertical ? 'offsetHeight' : 'offsetWidth'];\n return distance * (index - activeIndex);\n },\n translateItem: function translateItem(index, activeIndex, oldIndex) {\n var parentType = this.$parent.type;\n var parentDirection = this.parentDirection;\n var length = this.$parent.items.length;\n if (parentType !== 'card' && oldIndex !== undefined) {\n this.animating = index === activeIndex || index === oldIndex;\n }\n if (index !== activeIndex && length > 2 && this.$parent.loop) {\n index = this.processIndex(index, activeIndex, length);\n }\n if (parentType === 'card') {\n if (parentDirection === 'vertical') {\n console.warn('[Element Warn][Carousel]vertical direction is not supported in card mode');\n }\n this.inStage = Math.round(Math.abs(index - activeIndex)) <= 1;\n this.active = index === activeIndex;\n this.translate = this.calcCardTranslate(index, activeIndex);\n this.scale = this.active ? 1 : CARD_SCALE;\n } else {\n this.active = index === activeIndex;\n var isVertical = parentDirection === 'vertical';\n this.translate = this.calcTranslate(index, activeIndex, isVertical);\n }\n this.ready = true;\n },\n handleItemClick: function handleItemClick() {\n var parent = this.$parent;\n if (parent && parent.type === 'card') {\n var index = parent.items.indexOf(this);\n parent.setActiveItem(index);\n }\n }\n },\n\n computed: {\n parentDirection: function parentDirection() {\n return this.$parent.direction;\n },\n itemStyle: function itemStyle() {\n var translateType = this.parentDirection === 'vertical' ? 'translateY' : 'translateX';\n var value = translateType + '(' + this.translate + 'px) scale(' + this.scale + ')';\n var style = {\n transform: value\n };\n return Object(util_[\"autoprefixer\"])(style);\n }\n },\n\n created: function created() {\n this.$parent && this.$parent.updateItems();\n },\n destroyed: function destroyed() {\n this.$parent && this.$parent.updateItems();\n }\n});\n// CONCATENATED MODULE: ./packages/carousel/src/item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_itemvue_type_script_lang_js_ = (itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/carousel/src/item.vue\n\n\n\n\n\n/* normalize component */\n\nvar item_component = normalizeComponent(\n src_itemvue_type_script_lang_js_,\n itemvue_type_template_id_1801ae19_render,\n itemvue_type_template_id_1801ae19_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var item_api; }\nitem_component.options.__file = \"packages/carousel/src/item.vue\"\n/* harmony default export */ var src_item = (item_component.exports);\n// CONCATENATED MODULE: ./packages/carousel-item/index.js\n\n\n/* istanbul ignore next */\nsrc_item.install = function (Vue) {\n Vue.component(src_item.name, src_item);\n};\n\n/* harmony default export */ var carousel_item = (src_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse.vue?vue&type=template&id=461d57f4&\nvar collapsevue_type_template_id_461d57f4_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-collapse\",\n attrs: { role: \"tablist\", \"aria-multiselectable\": \"true\" }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar collapsevue_type_template_id_461d57f4_staticRenderFns = []\ncollapsevue_type_template_id_461d57f4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/collapse/src/collapse.vue?vue&type=template&id=461d57f4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var collapsevue_type_script_lang_js_ = ({\n name: 'ElCollapse',\n\n componentName: 'ElCollapse',\n\n props: {\n accordion: Boolean,\n value: {\n type: [Array, String, Number],\n default: function _default() {\n return [];\n }\n }\n },\n\n data: function data() {\n return {\n activeNames: [].concat(this.value)\n };\n },\n provide: function provide() {\n return {\n collapse: this\n };\n },\n\n\n watch: {\n value: function value(_value) {\n this.activeNames = [].concat(_value);\n }\n },\n\n methods: {\n setActiveNames: function setActiveNames(activeNames) {\n activeNames = [].concat(activeNames);\n var value = this.accordion ? activeNames[0] : activeNames;\n this.activeNames = activeNames;\n this.$emit('input', value);\n this.$emit('change', value);\n },\n handleItemClick: function handleItemClick(item) {\n if (this.accordion) {\n this.setActiveNames((this.activeNames[0] || this.activeNames[0] === 0) && this.activeNames[0] === item.name ? '' : item.name);\n } else {\n var activeNames = this.activeNames.slice(0);\n var index = activeNames.indexOf(item.name);\n\n if (index > -1) {\n activeNames.splice(index, 1);\n } else {\n activeNames.push(item.name);\n }\n this.setActiveNames(activeNames);\n }\n }\n },\n\n created: function created() {\n this.$on('item-click', this.handleItemClick);\n }\n});\n// CONCATENATED MODULE: ./packages/collapse/src/collapse.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_collapsevue_type_script_lang_js_ = (collapsevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/collapse/src/collapse.vue\n\n\n\n\n\n/* normalize component */\n\nvar collapse_component = normalizeComponent(\n src_collapsevue_type_script_lang_js_,\n collapsevue_type_template_id_461d57f4_render,\n collapsevue_type_template_id_461d57f4_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var collapse_api; }\ncollapse_component.options.__file = \"packages/collapse/src/collapse.vue\"\n/* harmony default export */ var collapse = (collapse_component.exports);\n// CONCATENATED MODULE: ./packages/collapse/index.js\n\n\n/* istanbul ignore next */\ncollapse.install = function (Vue) {\n Vue.component(collapse.name, collapse);\n};\n\n/* harmony default export */ var packages_collapse = (collapse);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse-item.vue?vue&type=template&id=2d05faac&\nvar collapse_itemvue_type_template_id_2d05faac_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-collapse-item\",\n class: { \"is-active\": _vm.isActive, \"is-disabled\": _vm.disabled }\n },\n [\n _c(\n \"div\",\n {\n attrs: {\n role: \"tab\",\n \"aria-expanded\": _vm.isActive,\n \"aria-controls\": \"el-collapse-content-\" + _vm.id,\n \"aria-describedby\": \"el-collapse-content-\" + _vm.id\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-collapse-item__header\",\n class: {\n focusing: _vm.focusing,\n \"is-active\": _vm.isActive\n },\n attrs: {\n role: \"button\",\n id: \"el-collapse-head-\" + _vm.id,\n tabindex: _vm.disabled ? undefined : 0\n },\n on: {\n click: _vm.handleHeaderClick,\n keyup: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"space\", 32, $event.key, [\n \" \",\n \"Spacebar\"\n ]) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n $event.stopPropagation()\n return _vm.handleEnterClick($event)\n },\n focus: _vm.handleFocus,\n blur: function($event) {\n _vm.focusing = false\n }\n }\n },\n [\n _vm._t(\"title\", [_vm._v(_vm._s(_vm.title))]),\n _c(\"i\", {\n staticClass: \"el-collapse-item__arrow el-icon-arrow-right\",\n class: { \"is-active\": _vm.isActive }\n })\n ],\n 2\n )\n ]\n ),\n _c(\"el-collapse-transition\", [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isActive,\n expression: \"isActive\"\n }\n ],\n staticClass: \"el-collapse-item__wrap\",\n attrs: {\n role: \"tabpanel\",\n \"aria-hidden\": !_vm.isActive,\n \"aria-labelledby\": \"el-collapse-head-\" + _vm.id,\n id: \"el-collapse-content-\" + _vm.id\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-collapse-item__content\" },\n [_vm._t(\"default\")],\n 2\n )\n ]\n )\n ])\n ],\n 1\n )\n}\nvar collapse_itemvue_type_template_id_2d05faac_staticRenderFns = []\ncollapse_itemvue_type_template_id_2d05faac_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/collapse/src/collapse-item.vue?vue&type=template&id=2d05faac&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var collapse_itemvue_type_script_lang_js_ = ({\n name: 'ElCollapseItem',\n\n componentName: 'ElCollapseItem',\n\n mixins: [emitter_default.a],\n\n components: { ElCollapseTransition: collapse_transition_default.a },\n\n data: function data() {\n return {\n contentWrapStyle: {\n height: 'auto',\n display: 'block'\n },\n contentHeight: 0,\n focusing: false,\n isClick: false,\n id: Object(util_[\"generateId\"])()\n };\n },\n\n\n inject: ['collapse'],\n\n props: {\n title: String,\n name: {\n type: [String, Number],\n default: function _default() {\n return this._uid;\n }\n },\n disabled: Boolean\n },\n\n computed: {\n isActive: function isActive() {\n return this.collapse.activeNames.indexOf(this.name) > -1;\n }\n },\n\n methods: {\n handleFocus: function handleFocus() {\n var _this = this;\n\n setTimeout(function () {\n if (!_this.isClick) {\n _this.focusing = true;\n } else {\n _this.isClick = false;\n }\n }, 50);\n },\n handleHeaderClick: function handleHeaderClick() {\n if (this.disabled) return;\n this.dispatch('ElCollapse', 'item-click', this);\n this.focusing = false;\n this.isClick = true;\n },\n handleEnterClick: function handleEnterClick() {\n this.dispatch('ElCollapse', 'item-click', this);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/collapse/src/collapse-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_collapse_itemvue_type_script_lang_js_ = (collapse_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/collapse/src/collapse-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar collapse_item_component = normalizeComponent(\n src_collapse_itemvue_type_script_lang_js_,\n collapse_itemvue_type_template_id_2d05faac_render,\n collapse_itemvue_type_template_id_2d05faac_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var collapse_item_api; }\ncollapse_item_component.options.__file = \"packages/collapse/src/collapse-item.vue\"\n/* harmony default export */ var collapse_item = (collapse_item_component.exports);\n// CONCATENATED MODULE: ./packages/collapse-item/index.js\n\n\n/* istanbul ignore next */\ncollapse_item.install = function (Vue) {\n Vue.component(collapse_item.name, collapse_item);\n};\n\n/* harmony default export */ var packages_collapse_item = (collapse_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader/src/cascader.vue?vue&type=template&id=032537a6&\nvar cascadervue_type_template_id_032537a6_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: function() {\n return _vm.toggleDropDownVisible(false)\n },\n expression: \"() => toggleDropDownVisible(false)\"\n }\n ],\n ref: \"reference\",\n class: [\n \"el-cascader\",\n _vm.realSize && \"el-cascader--\" + _vm.realSize,\n { \"is-disabled\": _vm.isDisabled }\n ],\n on: {\n mouseenter: function($event) {\n _vm.inputHover = true\n },\n mouseleave: function($event) {\n _vm.inputHover = false\n },\n click: function() {\n return _vm.toggleDropDownVisible(_vm.readonly ? undefined : true)\n },\n keydown: _vm.handleKeyDown\n }\n },\n [\n _c(\n \"el-input\",\n {\n ref: \"input\",\n class: { \"is-focus\": _vm.dropDownVisible },\n attrs: {\n size: _vm.realSize,\n placeholder: _vm.placeholder,\n readonly: _vm.readonly,\n disabled: _vm.isDisabled,\n \"validate-event\": false\n },\n on: {\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n input: _vm.handleInput\n },\n model: {\n value: _vm.multiple ? _vm.presentText : _vm.inputValue,\n callback: function($$v) {\n _vm.multiple ? _vm.presentText : (_vm.inputValue = $$v)\n },\n expression: \"multiple ? presentText : inputValue\"\n }\n },\n [\n _c(\"template\", { slot: \"suffix\" }, [\n _vm.clearBtnVisible\n ? _c(\"i\", {\n key: \"clear\",\n staticClass: \"el-input__icon el-icon-circle-close\",\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.handleClear($event)\n }\n }\n })\n : _c(\"i\", {\n key: \"arrow-down\",\n class: [\n \"el-input__icon\",\n \"el-icon-arrow-down\",\n _vm.dropDownVisible && \"is-reverse\"\n ],\n on: {\n click: function($event) {\n $event.stopPropagation()\n _vm.toggleDropDownVisible()\n }\n }\n })\n ])\n ],\n 2\n ),\n _vm.multiple\n ? _c(\n \"div\",\n { staticClass: \"el-cascader__tags\" },\n [\n _vm._l(_vm.presentTags, function(tag, index) {\n return _c(\n \"el-tag\",\n {\n key: tag.key,\n attrs: {\n type: \"info\",\n size: _vm.tagSize,\n hit: tag.hitState,\n closable: tag.closable,\n \"disable-transitions\": \"\"\n },\n on: {\n close: function($event) {\n _vm.deleteTag(index)\n }\n }\n },\n [_c(\"span\", [_vm._v(_vm._s(tag.text))])]\n )\n }),\n _vm.filterable && !_vm.isDisabled\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model.trim\",\n value: _vm.inputValue,\n expression: \"inputValue\",\n modifiers: { trim: true }\n }\n ],\n staticClass: \"el-cascader__search-input\",\n attrs: {\n type: \"text\",\n placeholder: _vm.presentTags.length ? \"\" : _vm.placeholder\n },\n domProps: { value: _vm.inputValue },\n on: {\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.inputValue = $event.target.value.trim()\n },\n function(e) {\n return _vm.handleInput(_vm.inputValue, e)\n }\n ],\n click: function($event) {\n $event.stopPropagation()\n _vm.toggleDropDownVisible(true)\n },\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"delete\",\n [8, 46],\n $event.key,\n [\"Backspace\", \"Delete\", \"Del\"]\n )\n ) {\n return null\n }\n return _vm.handleDelete($event)\n },\n blur: function($event) {\n _vm.$forceUpdate()\n }\n }\n })\n : _vm._e()\n ],\n 2\n )\n : _vm._e(),\n _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: { \"after-leave\": _vm.handleDropdownLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.dropDownVisible,\n expression: \"dropDownVisible\"\n }\n ],\n ref: \"popper\",\n class: [\"el-popper\", \"el-cascader__dropdown\", _vm.popperClass]\n },\n [\n _c(\"el-cascader-panel\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.filtering,\n expression: \"!filtering\"\n }\n ],\n ref: \"panel\",\n attrs: {\n options: _vm.options,\n props: _vm.config,\n border: false,\n \"render-label\": _vm.$scopedSlots.default\n },\n on: {\n \"expand-change\": _vm.handleExpandChange,\n close: function($event) {\n _vm.toggleDropDownVisible(false)\n }\n },\n model: {\n value: _vm.checkedValue,\n callback: function($$v) {\n _vm.checkedValue = $$v\n },\n expression: \"checkedValue\"\n }\n }),\n _vm.filterable\n ? _c(\n \"el-scrollbar\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.filtering,\n expression: \"filtering\"\n }\n ],\n ref: \"suggestionPanel\",\n staticClass: \"el-cascader__suggestion-panel\",\n attrs: {\n tag: \"ul\",\n \"view-class\": \"el-cascader__suggestion-list\"\n },\n nativeOn: {\n keydown: function($event) {\n return _vm.handleSuggestionKeyDown($event)\n }\n }\n },\n [\n _vm.suggestions.length\n ? _vm._l(_vm.suggestions, function(item, index) {\n return _c(\n \"li\",\n {\n key: item.uid,\n class: [\n \"el-cascader__suggestion-item\",\n item.checked && \"is-checked\"\n ],\n attrs: { tabindex: -1 },\n on: {\n click: function($event) {\n _vm.handleSuggestionClick(index)\n }\n }\n },\n [\n _c(\"span\", [_vm._v(_vm._s(item.text))]),\n item.checked\n ? _c(\"i\", { staticClass: \"el-icon-check\" })\n : _vm._e()\n ]\n )\n })\n : _vm._t(\"empty\", [\n _c(\n \"li\",\n { staticClass: \"el-cascader__empty-text\" },\n [_vm._v(_vm._s(_vm.t(\"el.cascader.noMatch\")))]\n )\n ])\n ],\n 2\n )\n : _vm._e()\n ],\n 1\n )\n ]\n )\n ],\n 1\n )\n}\nvar cascadervue_type_template_id_032537a6_staticRenderFns = []\ncascadervue_type_template_id_032537a6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/cascader/src/cascader.vue?vue&type=template&id=032537a6&\n\n// EXTERNAL MODULE: external \"element-ui/lib/cascader-panel\"\nvar cascader_panel_ = __webpack_require__(42);\nvar cascader_panel_default = /*#__PURE__*/__webpack_require__.n(cascader_panel_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/aria-utils\"\nvar aria_utils_ = __webpack_require__(28);\nvar aria_utils_default = /*#__PURE__*/__webpack_require__.n(aria_utils_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader/src/cascader.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KeyCode = aria_utils_default.a.keys;\n\nvar MigratingProps = {\n expandTrigger: {\n newProp: 'expandTrigger',\n type: String\n },\n changeOnSelect: {\n newProp: 'checkStrictly',\n type: Boolean\n },\n hoverThreshold: {\n newProp: 'hoverThreshold',\n type: Number\n }\n};\n\nvar PopperMixin = {\n props: {\n placement: {\n type: String,\n default: 'bottom-start'\n },\n appendToBody: vue_popper_default.a.props.appendToBody,\n visibleArrow: {\n type: Boolean,\n default: true\n },\n arrowOffset: vue_popper_default.a.props.arrowOffset,\n offset: vue_popper_default.a.props.offset,\n boundariesPadding: vue_popper_default.a.props.boundariesPadding,\n popperOptions: vue_popper_default.a.props.popperOptions\n },\n methods: vue_popper_default.a.methods,\n data: vue_popper_default.a.data,\n beforeDestroy: vue_popper_default.a.beforeDestroy\n};\n\nvar InputSizeMap = {\n medium: 36,\n small: 32,\n mini: 28\n};\n\n/* harmony default export */ var cascadervue_type_script_lang_js_ = ({\n name: 'ElCascader',\n\n directives: { Clickoutside: clickoutside_default.a },\n\n mixins: [PopperMixin, emitter_default.a, locale_default.a, migrating_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n components: {\n ElInput: input_default.a,\n ElTag: tag_default.a,\n ElScrollbar: scrollbar_default.a,\n ElCascaderPanel: cascader_panel_default.a\n },\n\n props: {\n value: {},\n options: Array,\n props: Object,\n size: String,\n placeholder: {\n type: String,\n default: function _default() {\n return Object(lib_locale_[\"t\"])('el.cascader.placeholder');\n }\n },\n disabled: Boolean,\n clearable: Boolean,\n filterable: Boolean,\n filterMethod: Function,\n separator: {\n type: String,\n default: ' / '\n },\n showAllLevels: {\n type: Boolean,\n default: true\n },\n collapseTags: Boolean,\n debounce: {\n type: Number,\n default: 300\n },\n beforeFilter: {\n type: Function,\n default: function _default() {\n return function () {};\n }\n },\n popperClass: String\n },\n\n data: function data() {\n return {\n dropDownVisible: false,\n checkedValue: this.value || null,\n inputHover: false,\n inputValue: null,\n presentText: null,\n presentTags: [],\n checkedNodes: [],\n filtering: false,\n suggestions: [],\n inputInitialHeight: 0,\n pressDeleteCount: 0\n };\n },\n\n\n computed: {\n realSize: function realSize() {\n var _elFormItemSize = (this.elFormItem || {}).elFormItemSize;\n return this.size || _elFormItemSize || (this.$ELEMENT || {}).size;\n },\n tagSize: function tagSize() {\n return ['small', 'mini'].indexOf(this.realSize) > -1 ? 'mini' : 'small';\n },\n isDisabled: function isDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n },\n config: function config() {\n var config = this.props || {};\n var $attrs = this.$attrs;\n\n\n Object.keys(MigratingProps).forEach(function (oldProp) {\n var _MigratingProps$oldPr = MigratingProps[oldProp],\n newProp = _MigratingProps$oldPr.newProp,\n type = _MigratingProps$oldPr.type;\n\n var oldValue = $attrs[oldProp] || $attrs[Object(util_[\"kebabCase\"])(oldProp)];\n if (Object(shared_[\"isDef\"])(oldProp) && !Object(shared_[\"isDef\"])(config[newProp])) {\n if (type === Boolean && oldValue === '') {\n oldValue = true;\n }\n config[newProp] = oldValue;\n }\n });\n\n return config;\n },\n multiple: function multiple() {\n return this.config.multiple;\n },\n leafOnly: function leafOnly() {\n return !this.config.checkStrictly;\n },\n readonly: function readonly() {\n return !this.filterable || this.multiple;\n },\n clearBtnVisible: function clearBtnVisible() {\n if (!this.clearable || this.isDisabled || this.filtering || !this.inputHover) {\n return false;\n }\n\n return this.multiple ? !!this.checkedNodes.filter(function (node) {\n return !node.isDisabled;\n }).length : !!this.presentText;\n },\n panel: function panel() {\n return this.$refs.panel;\n }\n },\n\n watch: {\n disabled: function disabled() {\n this.computePresentContent();\n },\n value: function value(val) {\n if (!Object(util_[\"isEqual\"])(val, this.checkedValue)) {\n this.checkedValue = val;\n this.computePresentContent();\n }\n },\n checkedValue: function checkedValue(val) {\n var value = this.value,\n dropDownVisible = this.dropDownVisible;\n var _config = this.config,\n checkStrictly = _config.checkStrictly,\n multiple = _config.multiple;\n\n\n if (!Object(util_[\"isEqual\"])(val, value) || Object(types_[\"isUndefined\"])(value)) {\n this.computePresentContent();\n // hide dropdown when single mode\n if (!multiple && !checkStrictly && dropDownVisible) {\n this.toggleDropDownVisible(false);\n }\n\n this.$emit('input', val);\n this.$emit('change', val);\n this.dispatch('ElFormItem', 'el.form.change', [val]);\n }\n },\n\n options: {\n handler: function handler() {\n this.$nextTick(this.computePresentContent);\n },\n deep: true\n },\n presentText: function presentText(val) {\n this.inputValue = val;\n },\n presentTags: function presentTags(val, oldVal) {\n if (this.multiple && (val.length || oldVal.length)) {\n this.$nextTick(this.updateStyle);\n }\n },\n filtering: function filtering(val) {\n this.$nextTick(this.updatePopper);\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n var input = this.$refs.input;\n\n if (input && input.$el) {\n this.inputInitialHeight = input.$el.offsetHeight || InputSizeMap[this.realSize] || 40;\n }\n\n if (!Object(util_[\"isEmpty\"])(this.value)) {\n this.computePresentContent();\n }\n\n this.filterHandler = debounce_default()(this.debounce, function () {\n var inputValue = _this.inputValue;\n\n\n if (!inputValue) {\n _this.filtering = false;\n return;\n }\n\n var before = _this.beforeFilter(inputValue);\n if (before && before.then) {\n before.then(_this.getSuggestions);\n } else if (before !== false) {\n _this.getSuggestions();\n } else {\n _this.filtering = false;\n }\n });\n\n Object(resize_event_[\"addResizeListener\"])(this.$el, this.updateStyle);\n },\n beforeDestroy: function beforeDestroy() {\n Object(resize_event_[\"removeResizeListener\"])(this.$el, this.updateStyle);\n },\n\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'expand-trigger': 'expand-trigger is removed, use `props.expandTrigger` instead.',\n 'change-on-select': 'change-on-select is removed, use `props.checkStrictly` instead.',\n 'hover-threshold': 'hover-threshold is removed, use `props.hoverThreshold` instead'\n },\n events: {\n 'active-item-change': 'active-item-change is renamed to expand-change'\n }\n };\n },\n toggleDropDownVisible: function toggleDropDownVisible(visible) {\n var _this2 = this;\n\n if (this.isDisabled) return;\n\n var dropDownVisible = this.dropDownVisible;\n var input = this.$refs.input;\n\n visible = Object(shared_[\"isDef\"])(visible) ? visible : !dropDownVisible;\n if (visible !== dropDownVisible) {\n this.dropDownVisible = visible;\n if (visible) {\n this.$nextTick(function () {\n _this2.updatePopper();\n _this2.panel.scrollIntoView();\n });\n }\n input.$refs.input.setAttribute('aria-expanded', visible);\n this.$emit('visible-change', visible);\n }\n },\n handleDropdownLeave: function handleDropdownLeave() {\n this.filtering = false;\n this.inputValue = this.presentText;\n },\n handleKeyDown: function handleKeyDown(event) {\n switch (event.keyCode) {\n case KeyCode.enter:\n this.toggleDropDownVisible();\n break;\n case KeyCode.down:\n this.toggleDropDownVisible(true);\n this.focusFirstNode();\n event.preventDefault();\n break;\n case KeyCode.esc:\n case KeyCode.tab:\n this.toggleDropDownVisible(false);\n break;\n }\n },\n handleFocus: function handleFocus(e) {\n this.$emit('focus', e);\n },\n handleBlur: function handleBlur(e) {\n this.$emit('blur', e);\n },\n handleInput: function handleInput(val, event) {\n !this.dropDownVisible && this.toggleDropDownVisible(true);\n\n if (event && event.isComposing) return;\n if (val) {\n this.filterHandler();\n } else {\n this.filtering = false;\n }\n },\n handleClear: function handleClear() {\n this.presentText = '';\n this.panel.clearCheckedNodes();\n },\n handleExpandChange: function handleExpandChange(value) {\n this.$nextTick(this.updatePopper.bind(this));\n this.$emit('expand-change', value);\n this.$emit('active-item-change', value); // Deprecated\n },\n focusFirstNode: function focusFirstNode() {\n var _this3 = this;\n\n this.$nextTick(function () {\n var filtering = _this3.filtering;\n var _$refs = _this3.$refs,\n popper = _$refs.popper,\n suggestionPanel = _$refs.suggestionPanel;\n\n var firstNode = null;\n\n if (filtering && suggestionPanel) {\n firstNode = suggestionPanel.$el.querySelector('.el-cascader__suggestion-item');\n } else {\n var firstMenu = popper.querySelector('.el-cascader-menu');\n firstNode = firstMenu.querySelector('.el-cascader-node[tabindex=\"-1\"]');\n }\n\n if (firstNode) {\n firstNode.focus();\n !filtering && firstNode.click();\n }\n });\n },\n computePresentContent: function computePresentContent() {\n var _this4 = this;\n\n // nextTick is required, because checked nodes may not change right now\n this.$nextTick(function () {\n if (_this4.config.multiple) {\n _this4.computePresentTags();\n _this4.presentText = _this4.presentTags.length ? ' ' : null;\n } else {\n _this4.computePresentText();\n }\n });\n },\n computePresentText: function computePresentText() {\n var checkedValue = this.checkedValue,\n config = this.config;\n\n if (!Object(util_[\"isEmpty\"])(checkedValue)) {\n var node = this.panel.getNodeByValue(checkedValue);\n if (node && (config.checkStrictly || node.isLeaf)) {\n this.presentText = node.getText(this.showAllLevels, this.separator);\n return;\n }\n }\n this.presentText = null;\n },\n computePresentTags: function computePresentTags() {\n var isDisabled = this.isDisabled,\n leafOnly = this.leafOnly,\n showAllLevels = this.showAllLevels,\n separator = this.separator,\n collapseTags = this.collapseTags;\n\n var checkedNodes = this.getCheckedNodes(leafOnly);\n var tags = [];\n\n var genTag = function genTag(node) {\n return {\n node: node,\n key: node.uid,\n text: node.getText(showAllLevels, separator),\n hitState: false,\n closable: !isDisabled && !node.isDisabled\n };\n };\n\n if (checkedNodes.length) {\n var first = checkedNodes[0],\n rest = checkedNodes.slice(1);\n\n var restCount = rest.length;\n tags.push(genTag(first));\n\n if (restCount) {\n if (collapseTags) {\n tags.push({\n key: -1,\n text: '+ ' + restCount,\n closable: false\n });\n } else {\n rest.forEach(function (node) {\n return tags.push(genTag(node));\n });\n }\n }\n }\n\n this.checkedNodes = checkedNodes;\n this.presentTags = tags;\n },\n getSuggestions: function getSuggestions() {\n var _this5 = this;\n\n var filterMethod = this.filterMethod;\n\n\n if (!Object(types_[\"isFunction\"])(filterMethod)) {\n filterMethod = function filterMethod(node, keyword) {\n return node.text.includes(keyword);\n };\n }\n\n var suggestions = this.panel.getFlattedNodes(this.leafOnly).filter(function (node) {\n if (node.isDisabled) return false;\n node.text = node.getText(_this5.showAllLevels, _this5.separator) || '';\n return filterMethod(node, _this5.inputValue);\n });\n\n if (this.multiple) {\n this.presentTags.forEach(function (tag) {\n tag.hitState = false;\n });\n } else {\n suggestions.forEach(function (node) {\n node.checked = Object(util_[\"isEqual\"])(_this5.checkedValue, node.getValueByOption());\n });\n }\n\n this.filtering = true;\n this.suggestions = suggestions;\n this.$nextTick(this.updatePopper);\n },\n handleSuggestionKeyDown: function handleSuggestionKeyDown(event) {\n var keyCode = event.keyCode,\n target = event.target;\n\n switch (keyCode) {\n case KeyCode.enter:\n target.click();\n break;\n case KeyCode.up:\n var prev = target.previousElementSibling;\n prev && prev.focus();\n break;\n case KeyCode.down:\n var next = target.nextElementSibling;\n next && next.focus();\n break;\n case KeyCode.esc:\n case KeyCode.tab:\n this.toggleDropDownVisible(false);\n break;\n }\n },\n handleDelete: function handleDelete() {\n var inputValue = this.inputValue,\n pressDeleteCount = this.pressDeleteCount,\n presentTags = this.presentTags;\n\n var lastIndex = presentTags.length - 1;\n var lastTag = presentTags[lastIndex];\n this.pressDeleteCount = inputValue ? 0 : pressDeleteCount + 1;\n\n if (!lastTag) return;\n\n if (this.pressDeleteCount) {\n if (lastTag.hitState) {\n this.deleteTag(lastIndex);\n } else {\n lastTag.hitState = true;\n }\n }\n },\n handleSuggestionClick: function handleSuggestionClick(index) {\n var multiple = this.multiple;\n\n var targetNode = this.suggestions[index];\n\n if (multiple) {\n var checked = targetNode.checked;\n\n targetNode.doCheck(!checked);\n this.panel.calculateMultiCheckedValue();\n } else {\n this.checkedValue = targetNode.getValueByOption();\n this.toggleDropDownVisible(false);\n }\n },\n deleteTag: function deleteTag(index) {\n var checkedValue = this.checkedValue;\n\n var val = checkedValue[index];\n this.checkedValue = checkedValue.filter(function (n, i) {\n return i !== index;\n });\n this.$emit('remove-tag', val);\n },\n updateStyle: function updateStyle() {\n var $el = this.$el,\n inputInitialHeight = this.inputInitialHeight;\n\n if (this.$isServer || !$el) return;\n\n var suggestionPanel = this.$refs.suggestionPanel;\n\n var inputInner = $el.querySelector('.el-input__inner');\n\n if (!inputInner) return;\n\n var tags = $el.querySelector('.el-cascader__tags');\n var suggestionPanelEl = null;\n\n if (suggestionPanel && (suggestionPanelEl = suggestionPanel.$el)) {\n var suggestionList = suggestionPanelEl.querySelector('.el-cascader__suggestion-list');\n suggestionList.style.minWidth = inputInner.offsetWidth + 'px';\n }\n\n if (tags) {\n var offsetHeight = tags.offsetHeight;\n\n var height = Math.max(offsetHeight + 6, inputInitialHeight) + 'px';\n inputInner.style.height = height;\n this.updatePopper();\n }\n },\n\n\n /**\n * public methods\n */\n getCheckedNodes: function getCheckedNodes(leafOnly) {\n return this.panel.getCheckedNodes(leafOnly);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/cascader/src/cascader.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascadervue_type_script_lang_js_ = (cascadervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader/src/cascader.vue\n\n\n\n\n\n/* normalize component */\n\nvar cascader_component = normalizeComponent(\n src_cascadervue_type_script_lang_js_,\n cascadervue_type_template_id_032537a6_render,\n cascadervue_type_template_id_032537a6_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var cascader_api; }\ncascader_component.options.__file = \"packages/cascader/src/cascader.vue\"\n/* harmony default export */ var cascader = (cascader_component.exports);\n// CONCATENATED MODULE: ./packages/cascader/index.js\n\n\n/* istanbul ignore next */\ncascader.install = function (Vue) {\n Vue.component(cascader.name, cascader);\n};\n\n/* harmony default export */ var packages_cascader = (cascader);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/main.vue?vue&type=template&id=55c8ade7&\nvar mainvue_type_template_id_55c8ade7_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.hide,\n expression: \"hide\"\n }\n ],\n class: [\n \"el-color-picker\",\n _vm.colorDisabled ? \"is-disabled\" : \"\",\n _vm.colorSize ? \"el-color-picker--\" + _vm.colorSize : \"\"\n ]\n },\n [\n _vm.colorDisabled\n ? _c(\"div\", { staticClass: \"el-color-picker__mask\" })\n : _vm._e(),\n _c(\n \"div\",\n {\n staticClass: \"el-color-picker__trigger\",\n on: { click: _vm.handleTrigger }\n },\n [\n _c(\n \"span\",\n {\n staticClass: \"el-color-picker__color\",\n class: { \"is-alpha\": _vm.showAlpha }\n },\n [\n _c(\"span\", {\n staticClass: \"el-color-picker__color-inner\",\n style: {\n backgroundColor: _vm.displayedColor\n }\n }),\n !_vm.value && !_vm.showPanelColor\n ? _c(\"span\", {\n staticClass: \"el-color-picker__empty el-icon-close\"\n })\n : _vm._e()\n ]\n ),\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.value || _vm.showPanelColor,\n expression: \"value || showPanelColor\"\n }\n ],\n staticClass: \"el-color-picker__icon el-icon-arrow-down\"\n })\n ]\n ),\n _c(\"picker-dropdown\", {\n ref: \"dropdown\",\n class: [\"el-color-picker__panel\", _vm.popperClass || \"\"],\n attrs: {\n color: _vm.color,\n \"show-alpha\": _vm.showAlpha,\n predefine: _vm.predefine\n },\n on: { pick: _vm.confirmValue, clear: _vm.clearValue },\n model: {\n value: _vm.showPicker,\n callback: function($$v) {\n _vm.showPicker = $$v\n },\n expression: \"showPicker\"\n }\n })\n ],\n 1\n )\n}\nvar mainvue_type_template_id_55c8ade7_staticRenderFns = []\nmainvue_type_template_id_55c8ade7_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/main.vue?vue&type=template&id=55c8ade7&\n\n// CONCATENATED MODULE: ./packages/color-picker/src/color.js\nvar color_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction color_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hsv2hsl = function hsv2hsl(hue, sat, val) {\n return [hue, sat * val / ((hue = (2 - sat) * val) < 1 ? hue : 2 - hue) || 0, hue / 2];\n};\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nvar isOnePointZero = function isOnePointZero(n) {\n return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;\n};\n\nvar isPercentage = function isPercentage(n) {\n return typeof n === 'string' && n.indexOf('%') !== -1;\n};\n\n// Take input from [0, n] and return it as [0, 1]\nvar bound01 = function bound01(value, max) {\n if (isOnePointZero(value)) value = '100%';\n\n var processPercent = isPercentage(value);\n value = Math.min(max, Math.max(0, parseFloat(value)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n value = parseInt(value * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(value - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return value % max / parseFloat(max);\n};\n\nvar INT_HEX_MAP = { 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F' };\n\nvar toHex = function toHex(_ref) {\n var r = _ref.r,\n g = _ref.g,\n b = _ref.b;\n\n var hexOne = function hexOne(value) {\n value = Math.min(Math.round(value), 255);\n var high = Math.floor(value / 16);\n var low = value % 16;\n return '' + (INT_HEX_MAP[high] || high) + (INT_HEX_MAP[low] || low);\n };\n\n if (isNaN(r) || isNaN(g) || isNaN(b)) return '';\n\n return '#' + hexOne(r) + hexOne(g) + hexOne(b);\n};\n\nvar HEX_INT_MAP = { A: 10, B: 11, C: 12, D: 13, E: 14, F: 15 };\n\nvar parseHexChannel = function parseHexChannel(hex) {\n if (hex.length === 2) {\n return (HEX_INT_MAP[hex[0].toUpperCase()] || +hex[0]) * 16 + (HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]);\n }\n\n return HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1];\n};\n\nvar hsl2hsv = function hsl2hsv(hue, sat, light) {\n sat = sat / 100;\n light = light / 100;\n var smin = sat;\n var lmin = Math.max(light, 0.01);\n var sv = void 0;\n var v = void 0;\n\n light *= 2;\n sat *= light <= 1 ? light : 2 - light;\n smin *= lmin <= 1 ? lmin : 2 - lmin;\n v = (light + sat) / 2;\n sv = light === 0 ? 2 * smin / (lmin + smin) : 2 * sat / (light + sat);\n\n return {\n h: hue,\n s: sv * 100,\n v: v * 100\n };\n};\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nvar rgb2hsv = function rgb2hsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = void 0,\n s = void 0;\n var v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if (max === min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return { h: h * 360, s: s * 100, v: v * 100 };\n};\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nvar hsv2rgb = function hsv2rgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - f * s);\n var t = v * (1 - (1 - f) * s);\n var mod = i % 6;\n var r = [v, q, p, p, t, v][mod];\n var g = [t, v, v, q, p, p][mod];\n var b = [p, p, t, v, v, q][mod];\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255)\n };\n};\n\nvar Color = function () {\n function Color(options) {\n color_classCallCheck(this, Color);\n\n this._hue = 0;\n this._saturation = 100;\n this._value = 100;\n this._alpha = 100;\n\n this.enableAlpha = false;\n this.format = 'hex';\n this.value = '';\n\n options = options || {};\n\n for (var option in options) {\n if (options.hasOwnProperty(option)) {\n this[option] = options[option];\n }\n }\n\n this.doOnChange();\n }\n\n Color.prototype.set = function set(prop, value) {\n if (arguments.length === 1 && (typeof prop === 'undefined' ? 'undefined' : color_typeof(prop)) === 'object') {\n for (var p in prop) {\n if (prop.hasOwnProperty(p)) {\n this.set(p, prop[p]);\n }\n }\n\n return;\n }\n\n this['_' + prop] = value;\n this.doOnChange();\n };\n\n Color.prototype.get = function get(prop) {\n return this['_' + prop];\n };\n\n Color.prototype.toRgb = function toRgb() {\n return hsv2rgb(this._hue, this._saturation, this._value);\n };\n\n Color.prototype.fromString = function fromString(value) {\n var _this = this;\n\n if (!value) {\n this._hue = 0;\n this._saturation = 100;\n this._value = 100;\n\n this.doOnChange();\n return;\n }\n\n var fromHSV = function fromHSV(h, s, v) {\n _this._hue = Math.max(0, Math.min(360, h));\n _this._saturation = Math.max(0, Math.min(100, s));\n _this._value = Math.max(0, Math.min(100, v));\n\n _this.doOnChange();\n };\n\n if (value.indexOf('hsl') !== -1) {\n var parts = value.replace(/hsla|hsl|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n return val !== '';\n }).map(function (val, index) {\n return index > 2 ? parseFloat(val) : parseInt(val, 10);\n });\n\n if (parts.length === 4) {\n this._alpha = Math.floor(parseFloat(parts[3]) * 100);\n } else if (parts.length === 3) {\n this._alpha = 100;\n }\n if (parts.length >= 3) {\n var _hsl2hsv = hsl2hsv(parts[0], parts[1], parts[2]),\n h = _hsl2hsv.h,\n s = _hsl2hsv.s,\n v = _hsl2hsv.v;\n\n fromHSV(h, s, v);\n }\n } else if (value.indexOf('hsv') !== -1) {\n var _parts = value.replace(/hsva|hsv|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n return val !== '';\n }).map(function (val, index) {\n return index > 2 ? parseFloat(val) : parseInt(val, 10);\n });\n\n if (_parts.length === 4) {\n this._alpha = Math.floor(parseFloat(_parts[3]) * 100);\n } else if (_parts.length === 3) {\n this._alpha = 100;\n }\n if (_parts.length >= 3) {\n fromHSV(_parts[0], _parts[1], _parts[2]);\n }\n } else if (value.indexOf('rgb') !== -1) {\n var _parts2 = value.replace(/rgba|rgb|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n return val !== '';\n }).map(function (val, index) {\n return index > 2 ? parseFloat(val) : parseInt(val, 10);\n });\n\n if (_parts2.length === 4) {\n this._alpha = Math.floor(parseFloat(_parts2[3]) * 100);\n } else if (_parts2.length === 3) {\n this._alpha = 100;\n }\n if (_parts2.length >= 3) {\n var _rgb2hsv = rgb2hsv(_parts2[0], _parts2[1], _parts2[2]),\n _h = _rgb2hsv.h,\n _s = _rgb2hsv.s,\n _v = _rgb2hsv.v;\n\n fromHSV(_h, _s, _v);\n }\n } else if (value.indexOf('#') !== -1) {\n var hex = value.replace('#', '').trim();\n if (!/^(?:[0-9a-fA-F]{3}){1,2}$/.test(hex)) return;\n var r = void 0,\n g = void 0,\n b = void 0;\n\n if (hex.length === 3) {\n r = parseHexChannel(hex[0] + hex[0]);\n g = parseHexChannel(hex[1] + hex[1]);\n b = parseHexChannel(hex[2] + hex[2]);\n } else if (hex.length === 6 || hex.length === 8) {\n r = parseHexChannel(hex.substring(0, 2));\n g = parseHexChannel(hex.substring(2, 4));\n b = parseHexChannel(hex.substring(4, 6));\n }\n\n if (hex.length === 8) {\n this._alpha = Math.floor(parseHexChannel(hex.substring(6)) / 255 * 100);\n } else if (hex.length === 3 || hex.length === 6) {\n this._alpha = 100;\n }\n\n var _rgb2hsv2 = rgb2hsv(r, g, b),\n _h2 = _rgb2hsv2.h,\n _s2 = _rgb2hsv2.s,\n _v2 = _rgb2hsv2.v;\n\n fromHSV(_h2, _s2, _v2);\n }\n };\n\n Color.prototype.compare = function compare(color) {\n return Math.abs(color._hue - this._hue) < 2 && Math.abs(color._saturation - this._saturation) < 1 && Math.abs(color._value - this._value) < 1 && Math.abs(color._alpha - this._alpha) < 1;\n };\n\n Color.prototype.doOnChange = function doOnChange() {\n var _hue = this._hue,\n _saturation = this._saturation,\n _value = this._value,\n _alpha = this._alpha,\n format = this.format;\n\n\n if (this.enableAlpha) {\n switch (format) {\n case 'hsl':\n var hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);\n this.value = 'hsla(' + _hue + ', ' + Math.round(hsl[1] * 100) + '%, ' + Math.round(hsl[2] * 100) + '%, ' + _alpha / 100 + ')';\n break;\n case 'hsv':\n this.value = 'hsva(' + _hue + ', ' + Math.round(_saturation) + '%, ' + Math.round(_value) + '%, ' + _alpha / 100 + ')';\n break;\n default:\n var _hsv2rgb = hsv2rgb(_hue, _saturation, _value),\n r = _hsv2rgb.r,\n g = _hsv2rgb.g,\n b = _hsv2rgb.b;\n\n this.value = 'rgba(' + r + ', ' + g + ', ' + b + ', ' + _alpha / 100 + ')';\n }\n } else {\n switch (format) {\n case 'hsl':\n var _hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);\n this.value = 'hsl(' + _hue + ', ' + Math.round(_hsl[1] * 100) + '%, ' + Math.round(_hsl[2] * 100) + '%)';\n break;\n case 'hsv':\n this.value = 'hsv(' + _hue + ', ' + Math.round(_saturation) + '%, ' + Math.round(_value) + '%)';\n break;\n case 'rgb':\n var _hsv2rgb2 = hsv2rgb(_hue, _saturation, _value),\n _r = _hsv2rgb2.r,\n _g = _hsv2rgb2.g,\n _b = _hsv2rgb2.b;\n\n this.value = 'rgb(' + _r + ', ' + _g + ', ' + _b + ')';\n break;\n default:\n this.value = toHex(hsv2rgb(_hue, _saturation, _value));\n }\n }\n };\n\n return Color;\n}();\n\n/* harmony default export */ var src_color = (Color);\n;\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/picker-dropdown.vue?vue&type=template&id=06601625&\nvar picker_dropdownvue_type_template_id_06601625_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { name: \"el-zoom-in-top\" }, on: { \"after-leave\": _vm.doDestroy } },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPopper,\n expression: \"showPopper\"\n }\n ],\n staticClass: \"el-color-dropdown\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-color-dropdown__main-wrapper\" },\n [\n _c(\"hue-slider\", {\n ref: \"hue\",\n staticStyle: { float: \"right\" },\n attrs: { color: _vm.color, vertical: \"\" }\n }),\n _c(\"sv-panel\", { ref: \"sl\", attrs: { color: _vm.color } })\n ],\n 1\n ),\n _vm.showAlpha\n ? _c(\"alpha-slider\", { ref: \"alpha\", attrs: { color: _vm.color } })\n : _vm._e(),\n _vm.predefine\n ? _c(\"predefine\", {\n attrs: { color: _vm.color, colors: _vm.predefine }\n })\n : _vm._e(),\n _c(\n \"div\",\n { staticClass: \"el-color-dropdown__btns\" },\n [\n _c(\n \"span\",\n { staticClass: \"el-color-dropdown__value\" },\n [\n _c(\"el-input\", {\n attrs: { \"validate-event\": false, size: \"mini\" },\n on: { blur: _vm.handleConfirm },\n nativeOn: {\n keyup: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n return _vm.handleConfirm($event)\n }\n },\n model: {\n value: _vm.customInput,\n callback: function($$v) {\n _vm.customInput = $$v\n },\n expression: \"customInput\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-button\",\n {\n staticClass: \"el-color-dropdown__link-btn\",\n attrs: { size: \"mini\", type: \"text\" },\n on: {\n click: function($event) {\n _vm.$emit(\"clear\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.colorpicker.clear\")) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n staticClass: \"el-color-dropdown__btn\",\n attrs: { plain: \"\", size: \"mini\" },\n on: { click: _vm.confirmValue }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.colorpicker.confirm\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar picker_dropdownvue_type_template_id_06601625_staticRenderFns = []\npicker_dropdownvue_type_template_id_06601625_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/picker-dropdown.vue?vue&type=template&id=06601625&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/sv-panel.vue?vue&type=template&id=d8583596&\nvar sv_panelvue_type_template_id_d8583596_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-color-svpanel\",\n style: {\n backgroundColor: _vm.background\n }\n },\n [\n _c(\"div\", { staticClass: \"el-color-svpanel__white\" }),\n _c(\"div\", { staticClass: \"el-color-svpanel__black\" }),\n _c(\n \"div\",\n {\n staticClass: \"el-color-svpanel__cursor\",\n style: {\n top: _vm.cursorTop + \"px\",\n left: _vm.cursorLeft + \"px\"\n }\n },\n [_c(\"div\")]\n )\n ]\n )\n}\nvar sv_panelvue_type_template_id_d8583596_staticRenderFns = []\nsv_panelvue_type_template_id_d8583596_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/sv-panel.vue?vue&type=template&id=d8583596&\n\n// CONCATENATED MODULE: ./packages/color-picker/src/draggable.js\n\nvar isDragging = false;\n\n/* harmony default export */ var draggable = (function (element, options) {\n if (external_vue_default.a.prototype.$isServer) return;\n var moveFn = function moveFn(event) {\n if (options.drag) {\n options.drag(event);\n }\n };\n var upFn = function upFn(event) {\n document.removeEventListener('mousemove', moveFn);\n document.removeEventListener('mouseup', upFn);\n document.onselectstart = null;\n document.ondragstart = null;\n\n isDragging = false;\n\n if (options.end) {\n options.end(event);\n }\n };\n element.addEventListener('mousedown', function (event) {\n if (isDragging) return;\n document.onselectstart = function () {\n return false;\n };\n document.ondragstart = function () {\n return false;\n };\n\n document.addEventListener('mousemove', moveFn);\n document.addEventListener('mouseup', upFn);\n isDragging = true;\n\n if (options.start) {\n options.start(event);\n }\n });\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/sv-panel.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var sv_panelvue_type_script_lang_js_ = ({\n name: 'el-sl-panel',\n\n props: {\n color: {\n required: true\n }\n },\n\n computed: {\n colorValue: function colorValue() {\n var hue = this.color.get('hue');\n var value = this.color.get('value');\n return { hue: hue, value: value };\n }\n },\n\n watch: {\n colorValue: function colorValue() {\n this.update();\n }\n },\n\n methods: {\n update: function update() {\n var saturation = this.color.get('saturation');\n var value = this.color.get('value');\n\n var el = this.$el;\n var width = el.clientWidth,\n height = el.clientHeight;\n\n\n this.cursorLeft = saturation * width / 100;\n this.cursorTop = (100 - value) * height / 100;\n\n this.background = 'hsl(' + this.color.get('hue') + ', 100%, 50%)';\n },\n handleDrag: function handleDrag(event) {\n var el = this.$el;\n var rect = el.getBoundingClientRect();\n\n var left = event.clientX - rect.left;\n var top = event.clientY - rect.top;\n left = Math.max(0, left);\n left = Math.min(left, rect.width);\n\n top = Math.max(0, top);\n top = Math.min(top, rect.height);\n\n this.cursorLeft = left;\n this.cursorTop = top;\n this.color.set({\n saturation: left / rect.width * 100,\n value: 100 - top / rect.height * 100\n });\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n draggable(this.$el, {\n drag: function drag(event) {\n _this.handleDrag(event);\n },\n end: function end(event) {\n _this.handleDrag(event);\n }\n });\n\n this.update();\n },\n data: function data() {\n return {\n cursorTop: 0,\n cursorLeft: 0,\n background: 'hsl(0, 100%, 50%)'\n };\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/sv-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_sv_panelvue_type_script_lang_js_ = (sv_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/sv-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar sv_panel_component = normalizeComponent(\n components_sv_panelvue_type_script_lang_js_,\n sv_panelvue_type_template_id_d8583596_render,\n sv_panelvue_type_template_id_d8583596_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var sv_panel_api; }\nsv_panel_component.options.__file = \"packages/color-picker/src/components/sv-panel.vue\"\n/* harmony default export */ var sv_panel = (sv_panel_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/hue-slider.vue?vue&type=template&id=5cdc43b1&\nvar hue_slidervue_type_template_id_5cdc43b1_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-color-hue-slider\",\n class: { \"is-vertical\": _vm.vertical }\n },\n [\n _c(\"div\", {\n ref: \"bar\",\n staticClass: \"el-color-hue-slider__bar\",\n on: { click: _vm.handleClick }\n }),\n _c(\"div\", {\n ref: \"thumb\",\n staticClass: \"el-color-hue-slider__thumb\",\n style: {\n left: _vm.thumbLeft + \"px\",\n top: _vm.thumbTop + \"px\"\n }\n })\n ]\n )\n}\nvar hue_slidervue_type_template_id_5cdc43b1_staticRenderFns = []\nhue_slidervue_type_template_id_5cdc43b1_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/hue-slider.vue?vue&type=template&id=5cdc43b1&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/hue-slider.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var hue_slidervue_type_script_lang_js_ = ({\n name: 'el-color-hue-slider',\n\n props: {\n color: {\n required: true\n },\n\n vertical: Boolean\n },\n\n data: function data() {\n return {\n thumbLeft: 0,\n thumbTop: 0\n };\n },\n\n\n computed: {\n hueValue: function hueValue() {\n var hue = this.color.get('hue');\n return hue;\n }\n },\n\n watch: {\n hueValue: function hueValue() {\n this.update();\n }\n },\n\n methods: {\n handleClick: function handleClick(event) {\n var thumb = this.$refs.thumb;\n var target = event.target;\n\n if (target !== thumb) {\n this.handleDrag(event);\n }\n },\n handleDrag: function handleDrag(event) {\n var rect = this.$el.getBoundingClientRect();\n var thumb = this.$refs.thumb;\n\n var hue = void 0;\n\n if (!this.vertical) {\n var left = event.clientX - rect.left;\n left = Math.min(left, rect.width - thumb.offsetWidth / 2);\n left = Math.max(thumb.offsetWidth / 2, left);\n\n hue = Math.round((left - thumb.offsetWidth / 2) / (rect.width - thumb.offsetWidth) * 360);\n } else {\n var top = event.clientY - rect.top;\n top = Math.min(top, rect.height - thumb.offsetHeight / 2);\n top = Math.max(thumb.offsetHeight / 2, top);\n\n hue = Math.round((top - thumb.offsetHeight / 2) / (rect.height - thumb.offsetHeight) * 360);\n }\n\n this.color.set('hue', hue);\n },\n getThumbLeft: function getThumbLeft() {\n if (this.vertical) return 0;\n var el = this.$el;\n var hue = this.color.get('hue');\n\n if (!el) return 0;\n var thumb = this.$refs.thumb;\n return Math.round(hue * (el.offsetWidth - thumb.offsetWidth / 2) / 360);\n },\n getThumbTop: function getThumbTop() {\n if (!this.vertical) return 0;\n var el = this.$el;\n var hue = this.color.get('hue');\n\n if (!el) return 0;\n var thumb = this.$refs.thumb;\n return Math.round(hue * (el.offsetHeight - thumb.offsetHeight / 2) / 360);\n },\n update: function update() {\n this.thumbLeft = this.getThumbLeft();\n this.thumbTop = this.getThumbTop();\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n var _$refs = this.$refs,\n bar = _$refs.bar,\n thumb = _$refs.thumb;\n\n\n var dragConfig = {\n drag: function drag(event) {\n _this.handleDrag(event);\n },\n end: function end(event) {\n _this.handleDrag(event);\n }\n };\n\n draggable(bar, dragConfig);\n draggable(thumb, dragConfig);\n this.update();\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/hue-slider.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_hue_slidervue_type_script_lang_js_ = (hue_slidervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/hue-slider.vue\n\n\n\n\n\n/* normalize component */\n\nvar hue_slider_component = normalizeComponent(\n components_hue_slidervue_type_script_lang_js_,\n hue_slidervue_type_template_id_5cdc43b1_render,\n hue_slidervue_type_template_id_5cdc43b1_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var hue_slider_api; }\nhue_slider_component.options.__file = \"packages/color-picker/src/components/hue-slider.vue\"\n/* harmony default export */ var hue_slider = (hue_slider_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/alpha-slider.vue?vue&type=template&id=068c66cb&\nvar alpha_slidervue_type_template_id_068c66cb_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-color-alpha-slider\",\n class: { \"is-vertical\": _vm.vertical }\n },\n [\n _c(\"div\", {\n ref: \"bar\",\n staticClass: \"el-color-alpha-slider__bar\",\n style: {\n background: _vm.background\n },\n on: { click: _vm.handleClick }\n }),\n _c(\"div\", {\n ref: \"thumb\",\n staticClass: \"el-color-alpha-slider__thumb\",\n style: {\n left: _vm.thumbLeft + \"px\",\n top: _vm.thumbTop + \"px\"\n }\n })\n ]\n )\n}\nvar alpha_slidervue_type_template_id_068c66cb_staticRenderFns = []\nalpha_slidervue_type_template_id_068c66cb_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/alpha-slider.vue?vue&type=template&id=068c66cb&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/alpha-slider.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var alpha_slidervue_type_script_lang_js_ = ({\n name: 'el-color-alpha-slider',\n\n props: {\n color: {\n required: true\n },\n vertical: Boolean\n },\n\n watch: {\n 'color._alpha': function color_alpha() {\n this.update();\n },\n 'color.value': function colorValue() {\n this.update();\n }\n },\n\n methods: {\n handleClick: function handleClick(event) {\n var thumb = this.$refs.thumb;\n var target = event.target;\n\n if (target !== thumb) {\n this.handleDrag(event);\n }\n },\n handleDrag: function handleDrag(event) {\n var rect = this.$el.getBoundingClientRect();\n var thumb = this.$refs.thumb;\n\n\n if (!this.vertical) {\n var left = event.clientX - rect.left;\n left = Math.max(thumb.offsetWidth / 2, left);\n left = Math.min(left, rect.width - thumb.offsetWidth / 2);\n\n this.color.set('alpha', Math.round((left - thumb.offsetWidth / 2) / (rect.width - thumb.offsetWidth) * 100));\n } else {\n var top = event.clientY - rect.top;\n top = Math.max(thumb.offsetHeight / 2, top);\n top = Math.min(top, rect.height - thumb.offsetHeight / 2);\n\n this.color.set('alpha', Math.round((top - thumb.offsetHeight / 2) / (rect.height - thumb.offsetHeight) * 100));\n }\n },\n getThumbLeft: function getThumbLeft() {\n if (this.vertical) return 0;\n var el = this.$el;\n var alpha = this.color._alpha;\n\n if (!el) return 0;\n var thumb = this.$refs.thumb;\n return Math.round(alpha * (el.offsetWidth - thumb.offsetWidth / 2) / 100);\n },\n getThumbTop: function getThumbTop() {\n if (!this.vertical) return 0;\n var el = this.$el;\n var alpha = this.color._alpha;\n\n if (!el) return 0;\n var thumb = this.$refs.thumb;\n return Math.round(alpha * (el.offsetHeight - thumb.offsetHeight / 2) / 100);\n },\n getBackground: function getBackground() {\n if (this.color && this.color.value) {\n var _color$toRgb = this.color.toRgb(),\n r = _color$toRgb.r,\n g = _color$toRgb.g,\n b = _color$toRgb.b;\n\n return 'linear-gradient(to right, rgba(' + r + ', ' + g + ', ' + b + ', 0) 0%, rgba(' + r + ', ' + g + ', ' + b + ', 1) 100%)';\n }\n return null;\n },\n update: function update() {\n this.thumbLeft = this.getThumbLeft();\n this.thumbTop = this.getThumbTop();\n this.background = this.getBackground();\n }\n },\n\n data: function data() {\n return {\n thumbLeft: 0,\n thumbTop: 0,\n background: null\n };\n },\n mounted: function mounted() {\n var _this = this;\n\n var _$refs = this.$refs,\n bar = _$refs.bar,\n thumb = _$refs.thumb;\n\n\n var dragConfig = {\n drag: function drag(event) {\n _this.handleDrag(event);\n },\n end: function end(event) {\n _this.handleDrag(event);\n }\n };\n\n draggable(bar, dragConfig);\n draggable(thumb, dragConfig);\n this.update();\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/alpha-slider.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_alpha_slidervue_type_script_lang_js_ = (alpha_slidervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/alpha-slider.vue\n\n\n\n\n\n/* normalize component */\n\nvar alpha_slider_component = normalizeComponent(\n components_alpha_slidervue_type_script_lang_js_,\n alpha_slidervue_type_template_id_068c66cb_render,\n alpha_slidervue_type_template_id_068c66cb_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var alpha_slider_api; }\nalpha_slider_component.options.__file = \"packages/color-picker/src/components/alpha-slider.vue\"\n/* harmony default export */ var alpha_slider = (alpha_slider_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/predefine.vue?vue&type=template&id=06e03093&\nvar predefinevue_type_template_id_06e03093_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-color-predefine\" }, [\n _c(\n \"div\",\n { staticClass: \"el-color-predefine__colors\" },\n _vm._l(_vm.rgbaColors, function(item, index) {\n return _c(\n \"div\",\n {\n key: _vm.colors[index],\n staticClass: \"el-color-predefine__color-selector\",\n class: { selected: item.selected, \"is-alpha\": item._alpha < 100 },\n on: {\n click: function($event) {\n _vm.handleSelect(index)\n }\n }\n },\n [_c(\"div\", { style: { \"background-color\": item.value } })]\n )\n }),\n 0\n )\n ])\n}\nvar predefinevue_type_template_id_06e03093_staticRenderFns = []\npredefinevue_type_template_id_06e03093_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/predefine.vue?vue&type=template&id=06e03093&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/predefine.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var predefinevue_type_script_lang_js_ = ({\n props: {\n colors: { type: Array, required: true },\n color: { required: true }\n },\n data: function data() {\n return {\n rgbaColors: this.parseColors(this.colors, this.color)\n };\n },\n\n methods: {\n handleSelect: function handleSelect(index) {\n this.color.fromString(this.colors[index]);\n },\n parseColors: function parseColors(colors, color) {\n return colors.map(function (value) {\n var c = new src_color();\n c.enableAlpha = true;\n c.format = 'rgba';\n c.fromString(value);\n c.selected = c.value === color.value;\n return c;\n });\n }\n },\n watch: {\n '$parent.currentColor': function $parentCurrentColor(val) {\n var color = new src_color();\n color.fromString(val);\n\n this.rgbaColors.forEach(function (item) {\n item.selected = color.compare(item);\n });\n },\n colors: function colors(newVal) {\n this.rgbaColors = this.parseColors(newVal, this.color);\n },\n color: function color(newVal) {\n this.rgbaColors = this.parseColors(this.colors, newVal);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/predefine.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_predefinevue_type_script_lang_js_ = (predefinevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/predefine.vue\n\n\n\n\n\n/* normalize component */\n\nvar predefine_component = normalizeComponent(\n components_predefinevue_type_script_lang_js_,\n predefinevue_type_template_id_06e03093_render,\n predefinevue_type_template_id_06e03093_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var predefine_api; }\npredefine_component.options.__file = \"packages/color-picker/src/components/predefine.vue\"\n/* harmony default export */ var predefine = (predefine_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/picker-dropdown.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var picker_dropdownvue_type_script_lang_js_ = ({\n name: 'el-color-picker-dropdown',\n\n mixins: [vue_popper_default.a, locale_default.a],\n\n components: {\n SvPanel: sv_panel,\n HueSlider: hue_slider,\n AlphaSlider: alpha_slider,\n ElInput: input_default.a,\n ElButton: button_default.a,\n Predefine: predefine\n },\n\n props: {\n color: {\n required: true\n },\n showAlpha: Boolean,\n predefine: Array\n },\n\n data: function data() {\n return {\n customInput: ''\n };\n },\n\n\n computed: {\n currentColor: function currentColor() {\n var parent = this.$parent;\n return !parent.value && !parent.showPanelColor ? '' : parent.color.value;\n }\n },\n\n methods: {\n confirmValue: function confirmValue() {\n this.$emit('pick');\n },\n handleConfirm: function handleConfirm() {\n this.color.fromString(this.customInput);\n }\n },\n\n mounted: function mounted() {\n this.$parent.popperElm = this.popperElm = this.$el;\n this.referenceElm = this.$parent.$el;\n },\n\n\n watch: {\n showPopper: function showPopper(val) {\n var _this = this;\n\n if (val === true) {\n this.$nextTick(function () {\n var _$refs = _this.$refs,\n sl = _$refs.sl,\n hue = _$refs.hue,\n alpha = _$refs.alpha;\n\n sl && sl.update();\n hue && hue.update();\n alpha && alpha.update();\n });\n }\n },\n\n\n currentColor: {\n immediate: true,\n handler: function handler(val) {\n this.customInput = val;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/picker-dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_picker_dropdownvue_type_script_lang_js_ = (picker_dropdownvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/picker-dropdown.vue\n\n\n\n\n\n/* normalize component */\n\nvar picker_dropdown_component = normalizeComponent(\n components_picker_dropdownvue_type_script_lang_js_,\n picker_dropdownvue_type_template_id_06601625_render,\n picker_dropdownvue_type_template_id_06601625_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var picker_dropdown_api; }\npicker_dropdown_component.options.__file = \"packages/color-picker/src/components/picker-dropdown.vue\"\n/* harmony default export */ var picker_dropdown = (picker_dropdown_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var color_picker_src_mainvue_type_script_lang_js_ = ({\n name: 'ElColorPicker',\n\n mixins: [emitter_default.a],\n\n props: {\n value: String,\n showAlpha: Boolean,\n colorFormat: String,\n disabled: Boolean,\n size: String,\n popperClass: String,\n predefine: Array\n },\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n directives: { Clickoutside: clickoutside_default.a },\n\n computed: {\n displayedColor: function displayedColor() {\n if (!this.value && !this.showPanelColor) {\n return 'transparent';\n }\n\n return this.displayedRgb(this.color, this.showAlpha);\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n colorSize: function colorSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n colorDisabled: function colorDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n\n watch: {\n value: function value(val) {\n if (!val) {\n this.showPanelColor = false;\n } else if (val && val !== this.color.value) {\n this.color.fromString(val);\n }\n },\n\n color: {\n deep: true,\n handler: function handler() {\n this.showPanelColor = true;\n }\n },\n displayedColor: function displayedColor(val) {\n if (!this.showPicker) return;\n var currentValueColor = new src_color({\n enableAlpha: this.showAlpha,\n format: this.colorFormat\n });\n currentValueColor.fromString(this.value);\n\n var currentValueColorRgb = this.displayedRgb(currentValueColor, this.showAlpha);\n if (val !== currentValueColorRgb) {\n this.$emit('active-change', val);\n }\n }\n },\n\n methods: {\n handleTrigger: function handleTrigger() {\n if (this.colorDisabled) return;\n this.showPicker = !this.showPicker;\n },\n confirmValue: function confirmValue() {\n var value = this.color.value;\n this.$emit('input', value);\n this.$emit('change', value);\n this.dispatch('ElFormItem', 'el.form.change', value);\n this.showPicker = false;\n },\n clearValue: function clearValue() {\n this.$emit('input', null);\n this.$emit('change', null);\n if (this.value !== null) {\n this.dispatch('ElFormItem', 'el.form.change', null);\n }\n this.showPanelColor = false;\n this.showPicker = false;\n this.resetColor();\n },\n hide: function hide() {\n this.showPicker = false;\n this.resetColor();\n },\n resetColor: function resetColor() {\n var _this = this;\n\n this.$nextTick(function (_) {\n if (_this.value) {\n _this.color.fromString(_this.value);\n } else {\n _this.showPanelColor = false;\n }\n });\n },\n displayedRgb: function displayedRgb(color, showAlpha) {\n if (!(color instanceof src_color)) {\n throw Error('color should be instance of Color Class');\n }\n\n var _color$toRgb = color.toRgb(),\n r = _color$toRgb.r,\n g = _color$toRgb.g,\n b = _color$toRgb.b;\n\n return showAlpha ? 'rgba(' + r + ', ' + g + ', ' + b + ', ' + color.get('alpha') / 100 + ')' : 'rgb(' + r + ', ' + g + ', ' + b + ')';\n }\n },\n\n mounted: function mounted() {\n var value = this.value;\n if (value) {\n this.color.fromString(value);\n }\n this.popperElm = this.$refs.dropdown.$el;\n },\n data: function data() {\n var color = new src_color({\n enableAlpha: this.showAlpha,\n format: this.colorFormat\n });\n\n return {\n color: color,\n showPicker: false,\n showPanelColor: false\n };\n },\n\n\n components: {\n PickerDropdown: picker_dropdown\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_color_picker_src_mainvue_type_script_lang_js_ = (color_picker_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar color_picker_src_main_component = normalizeComponent(\n packages_color_picker_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_55c8ade7_render,\n mainvue_type_template_id_55c8ade7_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var color_picker_src_main_api; }\ncolor_picker_src_main_component.options.__file = \"packages/color-picker/src/main.vue\"\n/* harmony default export */ var color_picker_src_main = (color_picker_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/color-picker/index.js\n\n\n/* istanbul ignore next */\ncolor_picker_src_main.install = function (Vue) {\n Vue.component(color_picker_src_main.name, color_picker_src_main);\n};\n\n/* harmony default export */ var color_picker = (color_picker_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/main.vue?vue&type=template&id=5c654dd8&\nvar mainvue_type_template_id_5c654dd8_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"el-transfer\" },\n [\n _c(\n \"transfer-panel\",\n _vm._b(\n {\n ref: \"leftPanel\",\n attrs: {\n data: _vm.sourceData,\n title: _vm.titles[0] || _vm.t(\"el.transfer.titles.0\"),\n \"default-checked\": _vm.leftDefaultChecked,\n placeholder:\n _vm.filterPlaceholder || _vm.t(\"el.transfer.filterPlaceholder\")\n },\n on: { \"checked-change\": _vm.onSourceCheckedChange }\n },\n \"transfer-panel\",\n _vm.$props,\n false\n ),\n [_vm._t(\"left-footer\")],\n 2\n ),\n _c(\n \"div\",\n { staticClass: \"el-transfer__buttons\" },\n [\n _c(\n \"el-button\",\n {\n class: [\n \"el-transfer__button\",\n _vm.hasButtonTexts ? \"is-with-texts\" : \"\"\n ],\n attrs: {\n type: \"primary\",\n disabled: _vm.rightChecked.length === 0\n },\n nativeOn: {\n click: function($event) {\n return _vm.addToLeft($event)\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"el-icon-arrow-left\" }),\n _vm.buttonTexts[0] !== undefined\n ? _c(\"span\", [_vm._v(_vm._s(_vm.buttonTexts[0]))])\n : _vm._e()\n ]\n ),\n _c(\n \"el-button\",\n {\n class: [\n \"el-transfer__button\",\n _vm.hasButtonTexts ? \"is-with-texts\" : \"\"\n ],\n attrs: {\n type: \"primary\",\n disabled: _vm.leftChecked.length === 0\n },\n nativeOn: {\n click: function($event) {\n return _vm.addToRight($event)\n }\n }\n },\n [\n _vm.buttonTexts[1] !== undefined\n ? _c(\"span\", [_vm._v(_vm._s(_vm.buttonTexts[1]))])\n : _vm._e(),\n _c(\"i\", { staticClass: \"el-icon-arrow-right\" })\n ]\n )\n ],\n 1\n ),\n _c(\n \"transfer-panel\",\n _vm._b(\n {\n ref: \"rightPanel\",\n attrs: {\n data: _vm.targetData,\n title: _vm.titles[1] || _vm.t(\"el.transfer.titles.1\"),\n \"default-checked\": _vm.rightDefaultChecked,\n placeholder:\n _vm.filterPlaceholder || _vm.t(\"el.transfer.filterPlaceholder\")\n },\n on: { \"checked-change\": _vm.onTargetCheckedChange }\n },\n \"transfer-panel\",\n _vm.$props,\n false\n ),\n [_vm._t(\"right-footer\")],\n 2\n )\n ],\n 1\n )\n}\nvar mainvue_type_template_id_5c654dd8_staticRenderFns = []\nmainvue_type_template_id_5c654dd8_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/transfer/src/main.vue?vue&type=template&id=5c654dd8&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/transfer-panel.vue?vue&type=template&id=2ddab8bd&\nvar transfer_panelvue_type_template_id_2ddab8bd_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-transfer-panel\" }, [\n _c(\n \"p\",\n { staticClass: \"el-transfer-panel__header\" },\n [\n _c(\n \"el-checkbox\",\n {\n attrs: { indeterminate: _vm.isIndeterminate },\n on: { change: _vm.handleAllCheckedChange },\n model: {\n value: _vm.allChecked,\n callback: function($$v) {\n _vm.allChecked = $$v\n },\n expression: \"allChecked\"\n }\n },\n [\n _vm._v(\"\\n \" + _vm._s(_vm.title) + \"\\n \"),\n _c(\"span\", [_vm._v(_vm._s(_vm.checkedSummary))])\n ]\n )\n ],\n 1\n ),\n _c(\n \"div\",\n {\n class: [\n \"el-transfer-panel__body\",\n _vm.hasFooter ? \"is-with-footer\" : \"\"\n ]\n },\n [\n _vm.filterable\n ? _c(\n \"el-input\",\n {\n staticClass: \"el-transfer-panel__filter\",\n attrs: { size: \"small\", placeholder: _vm.placeholder },\n nativeOn: {\n mouseenter: function($event) {\n _vm.inputHover = true\n },\n mouseleave: function($event) {\n _vm.inputHover = false\n }\n },\n model: {\n value: _vm.query,\n callback: function($$v) {\n _vm.query = $$v\n },\n expression: \"query\"\n }\n },\n [\n _c(\"i\", {\n class: [\"el-input__icon\", \"el-icon-\" + _vm.inputIcon],\n attrs: { slot: \"prefix\" },\n on: { click: _vm.clearQuery },\n slot: \"prefix\"\n })\n ]\n )\n : _vm._e(),\n _c(\n \"el-checkbox-group\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.hasNoMatch && _vm.data.length > 0,\n expression: \"!hasNoMatch && data.length > 0\"\n }\n ],\n staticClass: \"el-transfer-panel__list\",\n class: { \"is-filterable\": _vm.filterable },\n model: {\n value: _vm.checked,\n callback: function($$v) {\n _vm.checked = $$v\n },\n expression: \"checked\"\n }\n },\n _vm._l(_vm.filteredData, function(item) {\n return _c(\n \"el-checkbox\",\n {\n key: item[_vm.keyProp],\n staticClass: \"el-transfer-panel__item\",\n attrs: {\n label: item[_vm.keyProp],\n disabled: item[_vm.disabledProp]\n }\n },\n [_c(\"option-content\", { attrs: { option: item } })],\n 1\n )\n }),\n 1\n ),\n _c(\n \"p\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.hasNoMatch,\n expression: \"hasNoMatch\"\n }\n ],\n staticClass: \"el-transfer-panel__empty\"\n },\n [_vm._v(_vm._s(_vm.t(\"el.transfer.noMatch\")))]\n ),\n _c(\n \"p\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.data.length === 0 && !_vm.hasNoMatch,\n expression: \"data.length === 0 && !hasNoMatch\"\n }\n ],\n staticClass: \"el-transfer-panel__empty\"\n },\n [_vm._v(_vm._s(_vm.t(\"el.transfer.noData\")))]\n )\n ],\n 1\n ),\n _vm.hasFooter\n ? _c(\n \"p\",\n { staticClass: \"el-transfer-panel__footer\" },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e()\n ])\n}\nvar transfer_panelvue_type_template_id_2ddab8bd_staticRenderFns = []\ntransfer_panelvue_type_template_id_2ddab8bd_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/transfer/src/transfer-panel.vue?vue&type=template&id=2ddab8bd&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/transfer-panel.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var transfer_panelvue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n name: 'ElTransferPanel',\n\n componentName: 'ElTransferPanel',\n\n components: {\n ElCheckboxGroup: checkbox_group_default.a,\n ElCheckbox: checkbox_default.a,\n ElInput: input_default.a,\n OptionContent: {\n props: {\n option: Object\n },\n render: function render(h) {\n var getParent = function getParent(vm) {\n if (vm.$options.componentName === 'ElTransferPanel') {\n return vm;\n } else if (vm.$parent) {\n return getParent(vm.$parent);\n } else {\n return vm;\n }\n };\n var panel = getParent(this);\n var transfer = panel.$parent || panel;\n return panel.renderContent ? panel.renderContent(h, this.option) : transfer.$scopedSlots.default ? transfer.$scopedSlots.default({ option: this.option }) : h('span', [this.option[panel.labelProp] || this.option[panel.keyProp]]);\n }\n }\n },\n\n props: {\n data: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n renderContent: Function,\n placeholder: String,\n title: String,\n filterable: Boolean,\n format: Object,\n filterMethod: Function,\n defaultChecked: Array,\n props: Object\n },\n\n data: function data() {\n return {\n checked: [],\n allChecked: false,\n query: '',\n inputHover: false,\n checkChangeByUser: true\n };\n },\n\n\n watch: {\n checked: function checked(val, oldVal) {\n this.updateAllChecked();\n if (this.checkChangeByUser) {\n var movedKeys = val.concat(oldVal).filter(function (v) {\n return val.indexOf(v) === -1 || oldVal.indexOf(v) === -1;\n });\n this.$emit('checked-change', val, movedKeys);\n } else {\n this.$emit('checked-change', val);\n this.checkChangeByUser = true;\n }\n },\n data: function data() {\n var _this = this;\n\n var checked = [];\n var filteredDataKeys = this.filteredData.map(function (item) {\n return item[_this.keyProp];\n });\n this.checked.forEach(function (item) {\n if (filteredDataKeys.indexOf(item) > -1) {\n checked.push(item);\n }\n });\n this.checkChangeByUser = false;\n this.checked = checked;\n },\n checkableData: function checkableData() {\n this.updateAllChecked();\n },\n\n\n defaultChecked: {\n immediate: true,\n handler: function handler(val, oldVal) {\n var _this2 = this;\n\n if (oldVal && val.length === oldVal.length && val.every(function (item) {\n return oldVal.indexOf(item) > -1;\n })) return;\n var checked = [];\n var checkableDataKeys = this.checkableData.map(function (item) {\n return item[_this2.keyProp];\n });\n val.forEach(function (item) {\n if (checkableDataKeys.indexOf(item) > -1) {\n checked.push(item);\n }\n });\n this.checkChangeByUser = false;\n this.checked = checked;\n }\n }\n },\n\n computed: {\n filteredData: function filteredData() {\n var _this3 = this;\n\n return this.data.filter(function (item) {\n if (typeof _this3.filterMethod === 'function') {\n return _this3.filterMethod(_this3.query, item);\n } else {\n var label = item[_this3.labelProp] || item[_this3.keyProp].toString();\n return label.toLowerCase().indexOf(_this3.query.toLowerCase()) > -1;\n }\n });\n },\n checkableData: function checkableData() {\n var _this4 = this;\n\n return this.filteredData.filter(function (item) {\n return !item[_this4.disabledProp];\n });\n },\n checkedSummary: function checkedSummary() {\n var checkedLength = this.checked.length;\n var dataLength = this.data.length;\n var _format = this.format,\n noChecked = _format.noChecked,\n hasChecked = _format.hasChecked;\n\n if (noChecked && hasChecked) {\n return checkedLength > 0 ? hasChecked.replace(/\\${checked}/g, checkedLength).replace(/\\${total}/g, dataLength) : noChecked.replace(/\\${total}/g, dataLength);\n } else {\n return checkedLength + '/' + dataLength;\n }\n },\n isIndeterminate: function isIndeterminate() {\n var checkedLength = this.checked.length;\n return checkedLength > 0 && checkedLength < this.checkableData.length;\n },\n hasNoMatch: function hasNoMatch() {\n return this.query.length > 0 && this.filteredData.length === 0;\n },\n inputIcon: function inputIcon() {\n return this.query.length > 0 && this.inputHover ? 'circle-close' : 'search';\n },\n labelProp: function labelProp() {\n return this.props.label || 'label';\n },\n keyProp: function keyProp() {\n return this.props.key || 'key';\n },\n disabledProp: function disabledProp() {\n return this.props.disabled || 'disabled';\n },\n hasFooter: function hasFooter() {\n return !!this.$slots.default;\n }\n },\n\n methods: {\n updateAllChecked: function updateAllChecked() {\n var _this5 = this;\n\n var checkableDataKeys = this.checkableData.map(function (item) {\n return item[_this5.keyProp];\n });\n this.allChecked = checkableDataKeys.length > 0 && checkableDataKeys.every(function (item) {\n return _this5.checked.indexOf(item) > -1;\n });\n },\n handleAllCheckedChange: function handleAllCheckedChange(value) {\n var _this6 = this;\n\n this.checked = value ? this.checkableData.map(function (item) {\n return item[_this6.keyProp];\n }) : [];\n },\n clearQuery: function clearQuery() {\n if (this.inputIcon === 'circle-close') {\n this.query = '';\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/transfer/src/transfer-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_transfer_panelvue_type_script_lang_js_ = (transfer_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/transfer/src/transfer-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar transfer_panel_component = normalizeComponent(\n src_transfer_panelvue_type_script_lang_js_,\n transfer_panelvue_type_template_id_2ddab8bd_render,\n transfer_panelvue_type_template_id_2ddab8bd_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var transfer_panel_api; }\ntransfer_panel_component.options.__file = \"packages/transfer/src/transfer-panel.vue\"\n/* harmony default export */ var transfer_panel = (transfer_panel_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n/* harmony default export */ var transfer_src_mainvue_type_script_lang_js_ = ({\n name: 'ElTransfer',\n\n mixins: [emitter_default.a, locale_default.a, migrating_default.a],\n\n components: {\n TransferPanel: transfer_panel,\n ElButton: button_default.a\n },\n\n props: {\n data: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n titles: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n buttonTexts: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n filterPlaceholder: {\n type: String,\n default: ''\n },\n filterMethod: Function,\n leftDefaultChecked: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n rightDefaultChecked: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n renderContent: Function,\n value: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n format: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n filterable: Boolean,\n props: {\n type: Object,\n default: function _default() {\n return {\n label: 'label',\n key: 'key',\n disabled: 'disabled'\n };\n }\n },\n targetOrder: {\n type: String,\n default: 'original'\n }\n },\n\n data: function data() {\n return {\n leftChecked: [],\n rightChecked: []\n };\n },\n\n\n computed: {\n dataObj: function dataObj() {\n var key = this.props.key;\n return this.data.reduce(function (o, cur) {\n return (o[cur[key]] = cur) && o;\n }, {});\n },\n sourceData: function sourceData() {\n var _this = this;\n\n return this.data.filter(function (item) {\n return _this.value.indexOf(item[_this.props.key]) === -1;\n });\n },\n targetData: function targetData() {\n var _this2 = this;\n\n if (this.targetOrder === 'original') {\n return this.data.filter(function (item) {\n return _this2.value.indexOf(item[_this2.props.key]) > -1;\n });\n } else {\n return this.value.reduce(function (arr, cur) {\n var val = _this2.dataObj[cur];\n if (val) {\n arr.push(val);\n }\n return arr;\n }, []);\n }\n },\n hasButtonTexts: function hasButtonTexts() {\n return this.buttonTexts.length === 2;\n }\n },\n\n watch: {\n value: function value(val) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n }\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'footer-format': 'footer-format is renamed to format.'\n }\n };\n },\n onSourceCheckedChange: function onSourceCheckedChange(val, movedKeys) {\n this.leftChecked = val;\n if (movedKeys === undefined) return;\n this.$emit('left-check-change', val, movedKeys);\n },\n onTargetCheckedChange: function onTargetCheckedChange(val, movedKeys) {\n this.rightChecked = val;\n if (movedKeys === undefined) return;\n this.$emit('right-check-change', val, movedKeys);\n },\n addToLeft: function addToLeft() {\n var currentValue = this.value.slice();\n this.rightChecked.forEach(function (item) {\n var index = currentValue.indexOf(item);\n if (index > -1) {\n currentValue.splice(index, 1);\n }\n });\n this.$emit('input', currentValue);\n this.$emit('change', currentValue, 'left', this.rightChecked);\n },\n addToRight: function addToRight() {\n var _this3 = this;\n\n var currentValue = this.value.slice();\n var itemsToBeMoved = [];\n var key = this.props.key;\n this.data.forEach(function (item) {\n var itemKey = item[key];\n if (_this3.leftChecked.indexOf(itemKey) > -1 && _this3.value.indexOf(itemKey) === -1) {\n itemsToBeMoved.push(itemKey);\n }\n });\n currentValue = this.targetOrder === 'unshift' ? itemsToBeMoved.concat(currentValue) : currentValue.concat(itemsToBeMoved);\n this.$emit('input', currentValue);\n this.$emit('change', currentValue, 'right', this.leftChecked);\n },\n clearQuery: function clearQuery(which) {\n if (which === 'left') {\n this.$refs.leftPanel.query = '';\n } else if (which === 'right') {\n this.$refs.rightPanel.query = '';\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/transfer/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_transfer_src_mainvue_type_script_lang_js_ = (transfer_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/transfer/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar transfer_src_main_component = normalizeComponent(\n packages_transfer_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_5c654dd8_render,\n mainvue_type_template_id_5c654dd8_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var transfer_src_main_api; }\ntransfer_src_main_component.options.__file = \"packages/transfer/src/main.vue\"\n/* harmony default export */ var transfer_src_main = (transfer_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/transfer/index.js\n\n\n/* istanbul ignore next */\ntransfer_src_main.install = function (Vue) {\n Vue.component(transfer_src_main.name, transfer_src_main);\n};\n\n/* harmony default export */ var transfer = (transfer_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/container/src/main.vue?vue&type=template&id=5bf181d4&\nvar mainvue_type_template_id_5bf181d4_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"section\",\n { staticClass: \"el-container\", class: { \"is-vertical\": _vm.isVertical } },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar mainvue_type_template_id_5bf181d4_staticRenderFns = []\nmainvue_type_template_id_5bf181d4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/container/src/main.vue?vue&type=template&id=5bf181d4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/container/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var container_src_mainvue_type_script_lang_js_ = ({\n name: 'ElContainer',\n\n componentName: 'ElContainer',\n\n props: {\n direction: String\n },\n\n computed: {\n isVertical: function isVertical() {\n if (this.direction === 'vertical') {\n return true;\n } else if (this.direction === 'horizontal') {\n return false;\n }\n return this.$slots && this.$slots.default ? this.$slots.default.some(function (vnode) {\n var tag = vnode.componentOptions && vnode.componentOptions.tag;\n return tag === 'el-header' || tag === 'el-footer';\n }) : false;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/container/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_container_src_mainvue_type_script_lang_js_ = (container_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/container/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar container_src_main_component = normalizeComponent(\n packages_container_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_5bf181d4_render,\n mainvue_type_template_id_5bf181d4_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var container_src_main_api; }\ncontainer_src_main_component.options.__file = \"packages/container/src/main.vue\"\n/* harmony default export */ var container_src_main = (container_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/container/index.js\n\n\n/* istanbul ignore next */\ncontainer_src_main.install = function (Vue) {\n Vue.component(container_src_main.name, container_src_main);\n};\n\n/* harmony default export */ var packages_container = (container_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/header/src/main.vue?vue&type=template&id=2b296ab2&\nvar mainvue_type_template_id_2b296ab2_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"header\",\n { staticClass: \"el-header\", style: { height: _vm.height } },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar mainvue_type_template_id_2b296ab2_staticRenderFns = []\nmainvue_type_template_id_2b296ab2_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/header/src/main.vue?vue&type=template&id=2b296ab2&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/header/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var header_src_mainvue_type_script_lang_js_ = ({\n name: 'ElHeader',\n\n componentName: 'ElHeader',\n\n props: {\n height: {\n type: String,\n default: '60px'\n }\n }\n});\n// CONCATENATED MODULE: ./packages/header/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_header_src_mainvue_type_script_lang_js_ = (header_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/header/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar header_src_main_component = normalizeComponent(\n packages_header_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_2b296ab2_render,\n mainvue_type_template_id_2b296ab2_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var header_src_main_api; }\nheader_src_main_component.options.__file = \"packages/header/src/main.vue\"\n/* harmony default export */ var header_src_main = (header_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/header/index.js\n\n\n/* istanbul ignore next */\nheader_src_main.install = function (Vue) {\n Vue.component(header_src_main.name, header_src_main);\n};\n\n/* harmony default export */ var header = (header_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/aside/src/main.vue?vue&type=template&id=03411dbf&\nvar mainvue_type_template_id_03411dbf_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"aside\",\n { staticClass: \"el-aside\", style: { width: _vm.width } },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar mainvue_type_template_id_03411dbf_staticRenderFns = []\nmainvue_type_template_id_03411dbf_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/aside/src/main.vue?vue&type=template&id=03411dbf&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/aside/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var aside_src_mainvue_type_script_lang_js_ = ({\n name: 'ElAside',\n\n componentName: 'ElAside',\n\n props: {\n width: {\n type: String,\n default: '300px'\n }\n }\n});\n// CONCATENATED MODULE: ./packages/aside/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_aside_src_mainvue_type_script_lang_js_ = (aside_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/aside/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar aside_src_main_component = normalizeComponent(\n packages_aside_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_03411dbf_render,\n mainvue_type_template_id_03411dbf_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var aside_src_main_api; }\naside_src_main_component.options.__file = \"packages/aside/src/main.vue\"\n/* harmony default export */ var aside_src_main = (aside_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/aside/index.js\n\n\n/* istanbul ignore next */\naside_src_main.install = function (Vue) {\n Vue.component(aside_src_main.name, aside_src_main);\n};\n\n/* harmony default export */ var aside = (aside_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/main/src/main.vue?vue&type=template&id=2a3a7406&\nvar mainvue_type_template_id_2a3a7406_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"main\", { staticClass: \"el-main\" }, [_vm._t(\"default\")], 2)\n}\nvar mainvue_type_template_id_2a3a7406_staticRenderFns = []\nmainvue_type_template_id_2a3a7406_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/main/src/main.vue?vue&type=template&id=2a3a7406&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/main/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var main_src_mainvue_type_script_lang_js_ = ({\n name: 'ElMain',\n componentName: 'ElMain'\n});\n// CONCATENATED MODULE: ./packages/main/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_main_src_mainvue_type_script_lang_js_ = (main_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/main/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar main_src_main_component = normalizeComponent(\n packages_main_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_2a3a7406_render,\n mainvue_type_template_id_2a3a7406_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var main_src_main_api; }\nmain_src_main_component.options.__file = \"packages/main/src/main.vue\"\n/* harmony default export */ var main_src_main = (main_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/main/index.js\n\n\n/* istanbul ignore next */\nmain_src_main.install = function (Vue) {\n Vue.component(main_src_main.name, main_src_main);\n};\n\n/* harmony default export */ var packages_main = (main_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/footer/src/main.vue?vue&type=template&id=80210338&\nvar mainvue_type_template_id_80210338_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"footer\",\n { staticClass: \"el-footer\", style: { height: _vm.height } },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar mainvue_type_template_id_80210338_staticRenderFns = []\nmainvue_type_template_id_80210338_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/footer/src/main.vue?vue&type=template&id=80210338&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/footer/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var footer_src_mainvue_type_script_lang_js_ = ({\n name: 'ElFooter',\n\n componentName: 'ElFooter',\n\n props: {\n height: {\n type: String,\n default: '60px'\n }\n }\n});\n// CONCATENATED MODULE: ./packages/footer/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_footer_src_mainvue_type_script_lang_js_ = (footer_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/footer/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar footer_src_main_component = normalizeComponent(\n packages_footer_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_80210338_render,\n mainvue_type_template_id_80210338_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var footer_src_main_api; }\nfooter_src_main_component.options.__file = \"packages/footer/src/main.vue\"\n/* harmony default export */ var footer_src_main = (footer_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/footer/index.js\n\n\n/* istanbul ignore next */\nfooter_src_main.install = function (Vue) {\n Vue.component(footer_src_main.name, footer_src_main);\n};\n\n/* harmony default export */ var footer = (footer_src_main);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/timeline/src/main.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var timeline_src_mainvue_type_script_lang_js_ = ({\n name: 'ElTimeline',\n\n props: {\n reverse: {\n type: Boolean,\n default: false\n }\n },\n\n provide: function provide() {\n return {\n timeline: this\n };\n },\n render: function render() {\n var h = arguments[0];\n\n var reverse = this.reverse;\n var classes = {\n 'el-timeline': true,\n 'is-reverse': reverse\n };\n var slots = this.$slots.default || [];\n if (reverse) {\n slots = slots.reverse();\n }\n return h(\n 'ul',\n { 'class': classes },\n [slots]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/timeline/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_timeline_src_mainvue_type_script_lang_js_ = (timeline_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/timeline/src/main.vue\nvar main_render, main_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar timeline_src_main_component = normalizeComponent(\n packages_timeline_src_mainvue_type_script_lang_js_,\n main_render,\n main_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var timeline_src_main_api; }\ntimeline_src_main_component.options.__file = \"packages/timeline/src/main.vue\"\n/* harmony default export */ var timeline_src_main = (timeline_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/timeline/index.js\n\n\n/* istanbul ignore next */\ntimeline_src_main.install = function (Vue) {\n Vue.component(timeline_src_main.name, timeline_src_main);\n};\n\n/* harmony default export */ var timeline = (timeline_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/timeline/src/item.vue?vue&type=template&id=61a69e50&\nvar itemvue_type_template_id_61a69e50_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"li\", { staticClass: \"el-timeline-item\" }, [\n _c(\"div\", { staticClass: \"el-timeline-item__tail\" }),\n !_vm.$slots.dot\n ? _c(\n \"div\",\n {\n staticClass: \"el-timeline-item__node\",\n class: [\n \"el-timeline-item__node--\" + (_vm.size || \"\"),\n \"el-timeline-item__node--\" + (_vm.type || \"\")\n ],\n style: {\n backgroundColor: _vm.color\n }\n },\n [\n _vm.icon\n ? _c(\"i\", {\n staticClass: \"el-timeline-item__icon\",\n class: _vm.icon\n })\n : _vm._e()\n ]\n )\n : _vm._e(),\n _vm.$slots.dot\n ? _c(\"div\", { staticClass: \"el-timeline-item__dot\" }, [_vm._t(\"dot\")], 2)\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-timeline-item__wrapper\" }, [\n !_vm.hideTimestamp && _vm.placement === \"top\"\n ? _c(\"div\", { staticClass: \"el-timeline-item__timestamp is-top\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.timestamp) + \"\\n \")\n ])\n : _vm._e(),\n _c(\n \"div\",\n { staticClass: \"el-timeline-item__content\" },\n [_vm._t(\"default\")],\n 2\n ),\n !_vm.hideTimestamp && _vm.placement === \"bottom\"\n ? _c(\"div\", { staticClass: \"el-timeline-item__timestamp is-bottom\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.timestamp) + \"\\n \")\n ])\n : _vm._e()\n ])\n ])\n}\nvar itemvue_type_template_id_61a69e50_staticRenderFns = []\nitemvue_type_template_id_61a69e50_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/timeline/src/item.vue?vue&type=template&id=61a69e50&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/timeline/src/item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var timeline_src_itemvue_type_script_lang_js_ = ({\n name: 'ElTimelineItem',\n\n inject: ['timeline'],\n\n props: {\n timestamp: String,\n\n hideTimestamp: {\n type: Boolean,\n default: false\n },\n\n placement: {\n type: String,\n default: 'bottom'\n },\n\n type: String,\n\n color: String,\n\n size: {\n type: String,\n default: 'normal'\n },\n\n icon: String\n }\n});\n// CONCATENATED MODULE: ./packages/timeline/src/item.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_timeline_src_itemvue_type_script_lang_js_ = (timeline_src_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/timeline/src/item.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_item_component = normalizeComponent(\n packages_timeline_src_itemvue_type_script_lang_js_,\n itemvue_type_template_id_61a69e50_render,\n itemvue_type_template_id_61a69e50_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_item_api; }\nsrc_item_component.options.__file = \"packages/timeline/src/item.vue\"\n/* harmony default export */ var timeline_src_item = (src_item_component.exports);\n// CONCATENATED MODULE: ./packages/timeline-item/index.js\n\n\n/* istanbul ignore next */\ntimeline_src_item.install = function (Vue) {\n Vue.component(timeline_src_item.name, timeline_src_item);\n};\n\n/* harmony default export */ var timeline_item = (timeline_src_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/link/src/main.vue?vue&type=template&id=01cf3b65&\nvar mainvue_type_template_id_01cf3b65_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"a\",\n _vm._b(\n {\n class: [\n \"el-link\",\n _vm.type ? \"el-link--\" + _vm.type : \"\",\n _vm.disabled && \"is-disabled\",\n _vm.underline && !_vm.disabled && \"is-underline\"\n ],\n attrs: { href: _vm.disabled ? null : _vm.href },\n on: { click: _vm.handleClick }\n },\n \"a\",\n _vm.$attrs,\n false\n ),\n [\n _vm.icon ? _c(\"i\", { class: _vm.icon }) : _vm._e(),\n _vm.$slots.default\n ? _c(\"span\", { staticClass: \"el-link--inner\" }, [_vm._t(\"default\")], 2)\n : _vm._e(),\n _vm.$slots.icon ? [_vm.$slots.icon ? _vm._t(\"icon\") : _vm._e()] : _vm._e()\n ],\n 2\n )\n}\nvar mainvue_type_template_id_01cf3b65_staticRenderFns = []\nmainvue_type_template_id_01cf3b65_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/link/src/main.vue?vue&type=template&id=01cf3b65&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/link/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ var link_src_mainvue_type_script_lang_js_ = ({\n name: 'ElLink',\n\n props: {\n type: {\n type: String,\n default: 'default'\n },\n underline: {\n type: Boolean,\n default: true\n },\n disabled: Boolean,\n href: String,\n icon: String\n },\n\n methods: {\n handleClick: function handleClick(event) {\n if (!this.disabled) {\n if (!this.href) {\n this.$emit('click', event);\n }\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/link/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_link_src_mainvue_type_script_lang_js_ = (link_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/link/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar link_src_main_component = normalizeComponent(\n packages_link_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_01cf3b65_render,\n mainvue_type_template_id_01cf3b65_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var link_src_main_api; }\nlink_src_main_component.options.__file = \"packages/link/src/main.vue\"\n/* harmony default export */ var link_src_main = (link_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/link/index.js\n\n\n/* istanbul ignore next */\nlink_src_main.install = function (Vue) {\n Vue.component(link_src_main.name, link_src_main);\n};\n\n/* harmony default export */ var packages_link = (link_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/divider/src/main.vue?vue&type=template&id=7fa02a7e&functional=true&\nvar mainvue_type_template_id_7fa02a7e_functional_true_render = function(_h, _vm) {\n var _c = _vm._c\n return _c(\n \"div\",\n _vm._g(\n _vm._b(\n {\n class: [\n _vm.data.staticClass,\n \"el-divider\",\n \"el-divider--\" + _vm.props.direction\n ]\n },\n \"div\",\n _vm.data.attrs,\n false\n ),\n _vm.listeners\n ),\n [\n _vm.slots().default && _vm.props.direction !== \"vertical\"\n ? _c(\n \"div\",\n { class: [\"el-divider__text\", \"is-\" + _vm.props.contentPosition] },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e()\n ]\n )\n}\nvar mainvue_type_template_id_7fa02a7e_functional_true_staticRenderFns = []\nmainvue_type_template_id_7fa02a7e_functional_true_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/divider/src/main.vue?vue&type=template&id=7fa02a7e&functional=true&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/divider/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var divider_src_mainvue_type_script_lang_js_ = ({\n name: 'ElDivider',\n props: {\n direction: {\n type: String,\n default: 'horizontal',\n validator: function validator(val) {\n return ['horizontal', 'vertical'].indexOf(val) !== -1;\n }\n },\n contentPosition: {\n type: String,\n default: 'center',\n validator: function validator(val) {\n return ['left', 'center', 'right'].indexOf(val) !== -1;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/divider/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_divider_src_mainvue_type_script_lang_js_ = (divider_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/divider/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar divider_src_main_component = normalizeComponent(\n packages_divider_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_7fa02a7e_functional_true_render,\n mainvue_type_template_id_7fa02a7e_functional_true_staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var divider_src_main_api; }\ndivider_src_main_component.options.__file = \"packages/divider/src/main.vue\"\n/* harmony default export */ var divider_src_main = (divider_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/divider/index.js\n\n\n/* istanbul ignore next */\ndivider_src_main.install = function (Vue) {\n Vue.component(divider_src_main.name, divider_src_main);\n};\n\n/* harmony default export */ var divider = (divider_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/main.vue?vue&type=template&id=44d84a7c&\nvar mainvue_type_template_id_44d84a7c_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"el-image\" },\n [\n _vm.loading\n ? _vm._t(\"placeholder\", [\n _c(\"div\", { staticClass: \"el-image__placeholder\" })\n ])\n : _vm.error\n ? _vm._t(\"error\", [\n _c(\"div\", { staticClass: \"el-image__error\" }, [\n _vm._v(_vm._s(_vm.t(\"el.image.error\")))\n ])\n ])\n : _c(\n \"img\",\n _vm._g(\n _vm._b(\n {\n staticClass: \"el-image__inner\",\n class: {\n \"el-image__inner--center\": _vm.alignCenter,\n \"el-image__preview\": _vm.preview\n },\n style: _vm.imageStyle,\n attrs: { src: _vm.src },\n on: { click: _vm.clickHandler }\n },\n \"img\",\n _vm.$attrs,\n false\n ),\n _vm.$listeners\n )\n ),\n _vm.preview\n ? [\n _vm.showViewer\n ? _c(\"image-viewer\", {\n attrs: {\n \"z-index\": _vm.zIndex,\n \"initial-index\": _vm.imageIndex,\n \"on-close\": _vm.closeViewer,\n \"url-list\": _vm.previewSrcList\n }\n })\n : _vm._e()\n ]\n : _vm._e()\n ],\n 2\n )\n}\nvar mainvue_type_template_id_44d84a7c_staticRenderFns = []\nmainvue_type_template_id_44d84a7c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/image/src/main.vue?vue&type=template&id=44d84a7c&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/image-viewer.vue?vue&type=template&id=5e73b307&\nvar image_viewervue_type_template_id_5e73b307_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"viewer-fade\" } }, [\n _c(\n \"div\",\n {\n ref: \"el-image-viewer__wrapper\",\n staticClass: \"el-image-viewer__wrapper\",\n style: { \"z-index\": _vm.zIndex },\n attrs: { tabindex: \"-1\" }\n },\n [\n _c(\"div\", { staticClass: \"el-image-viewer__mask\" }),\n _c(\n \"span\",\n {\n staticClass: \"el-image-viewer__btn el-image-viewer__close\",\n on: { click: _vm.hide }\n },\n [_c(\"i\", { staticClass: \"el-icon-circle-close\" })]\n ),\n !_vm.isSingle\n ? [\n _c(\n \"span\",\n {\n staticClass: \"el-image-viewer__btn el-image-viewer__prev\",\n class: { \"is-disabled\": !_vm.infinite && _vm.isFirst },\n on: { click: _vm.prev }\n },\n [_c(\"i\", { staticClass: \"el-icon-arrow-left\" })]\n ),\n _c(\n \"span\",\n {\n staticClass: \"el-image-viewer__btn el-image-viewer__next\",\n class: { \"is-disabled\": !_vm.infinite && _vm.isLast },\n on: { click: _vm.next }\n },\n [_c(\"i\", { staticClass: \"el-icon-arrow-right\" })]\n )\n ]\n : _vm._e(),\n _c(\n \"div\",\n { staticClass: \"el-image-viewer__btn el-image-viewer__actions\" },\n [\n _c(\"div\", { staticClass: \"el-image-viewer__actions__inner\" }, [\n _c(\"i\", {\n staticClass: \"el-icon-zoom-out\",\n on: {\n click: function($event) {\n _vm.handleActions(\"zoomOut\")\n }\n }\n }),\n _c(\"i\", {\n staticClass: \"el-icon-zoom-in\",\n on: {\n click: function($event) {\n _vm.handleActions(\"zoomIn\")\n }\n }\n }),\n _c(\"i\", { staticClass: \"el-image-viewer__actions__divider\" }),\n _c(\"i\", { class: _vm.mode.icon, on: { click: _vm.toggleMode } }),\n _c(\"i\", { staticClass: \"el-image-viewer__actions__divider\" }),\n _c(\"i\", {\n staticClass: \"el-icon-refresh-left\",\n on: {\n click: function($event) {\n _vm.handleActions(\"anticlocelise\")\n }\n }\n }),\n _c(\"i\", {\n staticClass: \"el-icon-refresh-right\",\n on: {\n click: function($event) {\n _vm.handleActions(\"clocelise\")\n }\n }\n })\n ])\n ]\n ),\n _c(\n \"div\",\n { staticClass: \"el-image-viewer__canvas\" },\n _vm._l(_vm.urlList, function(url, i) {\n return i === _vm.index\n ? _c(\"img\", {\n key: url,\n ref: \"img\",\n refInFor: true,\n staticClass: \"el-image-viewer__img\",\n style: _vm.imgStyle,\n attrs: { src: _vm.currentImg },\n on: {\n load: _vm.handleImgLoad,\n error: _vm.handleImgError,\n mousedown: _vm.handleMouseDown\n }\n })\n : _vm._e()\n }),\n 0\n )\n ],\n 2\n )\n ])\n}\nvar image_viewervue_type_template_id_5e73b307_staticRenderFns = []\nimage_viewervue_type_template_id_5e73b307_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue?vue&type=template&id=5e73b307&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/image-viewer.vue?vue&type=script&lang=js&\nvar image_viewervue_type_script_lang_js_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\nvar Mode = {\n CONTAIN: {\n name: 'contain',\n icon: 'el-icon-full-screen'\n },\n ORIGINAL: {\n name: 'original',\n icon: 'el-icon-c-scale-to-original'\n }\n};\n\nvar mousewheelEventName = Object(util_[\"isFirefox\"])() ? 'DOMMouseScroll' : 'mousewheel';\n\n/* harmony default export */ var image_viewervue_type_script_lang_js_ = ({\n name: 'elImageViewer',\n\n props: {\n urlList: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n zIndex: {\n type: Number,\n default: 2000\n },\n onSwitch: {\n type: Function,\n default: function _default() {}\n },\n onClose: {\n type: Function,\n default: function _default() {}\n },\n initialIndex: {\n type: Number,\n default: 0\n }\n },\n\n data: function data() {\n return {\n index: this.initialIndex,\n isShow: false,\n infinite: true,\n loading: false,\n mode: Mode.CONTAIN,\n transform: {\n scale: 1,\n deg: 0,\n offsetX: 0,\n offsetY: 0,\n enableTransition: false\n }\n };\n },\n\n computed: {\n isSingle: function isSingle() {\n return this.urlList.length <= 1;\n },\n isFirst: function isFirst() {\n return this.index === 0;\n },\n isLast: function isLast() {\n return this.index === this.urlList.length - 1;\n },\n currentImg: function currentImg() {\n return this.urlList[this.index];\n },\n imgStyle: function imgStyle() {\n var _transform = this.transform,\n scale = _transform.scale,\n deg = _transform.deg,\n offsetX = _transform.offsetX,\n offsetY = _transform.offsetY,\n enableTransition = _transform.enableTransition;\n\n var style = {\n transform: 'scale(' + scale + ') rotate(' + deg + 'deg)',\n transition: enableTransition ? 'transform .3s' : '',\n 'margin-left': offsetX + 'px',\n 'margin-top': offsetY + 'px'\n };\n if (this.mode === Mode.CONTAIN) {\n style.maxWidth = style.maxHeight = '100%';\n }\n return style;\n }\n },\n watch: {\n index: {\n handler: function handler(val) {\n this.reset();\n this.onSwitch(val);\n }\n },\n currentImg: function currentImg(val) {\n var _this = this;\n\n this.$nextTick(function (_) {\n var $img = _this.$refs.img[0];\n if (!$img.complete) {\n _this.loading = true;\n }\n });\n }\n },\n methods: {\n hide: function hide() {\n this.deviceSupportUninstall();\n this.onClose();\n },\n deviceSupportInstall: function deviceSupportInstall() {\n var _this2 = this;\n\n this._keyDownHandler = Object(util_[\"rafThrottle\"])(function (e) {\n var keyCode = e.keyCode;\n switch (keyCode) {\n // ESC\n case 27:\n _this2.hide();\n break;\n // SPACE\n case 32:\n _this2.toggleMode();\n break;\n // LEFT_ARROW\n case 37:\n _this2.prev();\n break;\n // UP_ARROW\n case 38:\n _this2.handleActions('zoomIn');\n break;\n // RIGHT_ARROW\n case 39:\n _this2.next();\n break;\n // DOWN_ARROW\n case 40:\n _this2.handleActions('zoomOut');\n break;\n }\n });\n this._mouseWheelHandler = Object(util_[\"rafThrottle\"])(function (e) {\n var delta = e.wheelDelta ? e.wheelDelta : -e.detail;\n if (delta > 0) {\n _this2.handleActions('zoomIn', {\n zoomRate: 0.015,\n enableTransition: false\n });\n } else {\n _this2.handleActions('zoomOut', {\n zoomRate: 0.015,\n enableTransition: false\n });\n }\n });\n Object(dom_[\"on\"])(document, 'keydown', this._keyDownHandler);\n Object(dom_[\"on\"])(document, mousewheelEventName, this._mouseWheelHandler);\n },\n deviceSupportUninstall: function deviceSupportUninstall() {\n Object(dom_[\"off\"])(document, 'keydown', this._keyDownHandler);\n Object(dom_[\"off\"])(document, mousewheelEventName, this._mouseWheelHandler);\n this._keyDownHandler = null;\n this._mouseWheelHandler = null;\n },\n handleImgLoad: function handleImgLoad(e) {\n this.loading = false;\n },\n handleImgError: function handleImgError(e) {\n this.loading = false;\n e.target.alt = '加载失败';\n },\n handleMouseDown: function handleMouseDown(e) {\n var _this3 = this;\n\n if (this.loading || e.button !== 0) return;\n\n var _transform2 = this.transform,\n offsetX = _transform2.offsetX,\n offsetY = _transform2.offsetY;\n\n var startX = e.pageX;\n var startY = e.pageY;\n this._dragHandler = Object(util_[\"rafThrottle\"])(function (ev) {\n _this3.transform.offsetX = offsetX + ev.pageX - startX;\n _this3.transform.offsetY = offsetY + ev.pageY - startY;\n });\n Object(dom_[\"on\"])(document, 'mousemove', this._dragHandler);\n Object(dom_[\"on\"])(document, 'mouseup', function (ev) {\n Object(dom_[\"off\"])(document, 'mousemove', _this3._dragHandler);\n });\n\n e.preventDefault();\n },\n reset: function reset() {\n this.transform = {\n scale: 1,\n deg: 0,\n offsetX: 0,\n offsetY: 0,\n enableTransition: false\n };\n },\n toggleMode: function toggleMode() {\n if (this.loading) return;\n\n var modeNames = Object.keys(Mode);\n var modeValues = Object.values(Mode);\n var index = modeValues.indexOf(this.mode);\n var nextIndex = (index + 1) % modeNames.length;\n this.mode = Mode[modeNames[nextIndex]];\n this.reset();\n },\n prev: function prev() {\n if (this.isFirst && !this.infinite) return;\n var len = this.urlList.length;\n this.index = (this.index - 1 + len) % len;\n },\n next: function next() {\n if (this.isLast && !this.infinite) return;\n var len = this.urlList.length;\n this.index = (this.index + 1) % len;\n },\n handleActions: function handleActions(action) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.loading) return;\n\n var _zoomRate$rotateDeg$e = image_viewervue_type_script_lang_js_extends({\n zoomRate: 0.2,\n rotateDeg: 90,\n enableTransition: true\n }, options),\n zoomRate = _zoomRate$rotateDeg$e.zoomRate,\n rotateDeg = _zoomRate$rotateDeg$e.rotateDeg,\n enableTransition = _zoomRate$rotateDeg$e.enableTransition;\n\n var transform = this.transform;\n\n switch (action) {\n case 'zoomOut':\n if (transform.scale > 0.2) {\n transform.scale = parseFloat((transform.scale - zoomRate).toFixed(3));\n }\n break;\n case 'zoomIn':\n transform.scale = parseFloat((transform.scale + zoomRate).toFixed(3));\n break;\n case 'clocelise':\n transform.deg += rotateDeg;\n break;\n case 'anticlocelise':\n transform.deg -= rotateDeg;\n break;\n }\n transform.enableTransition = enableTransition;\n }\n },\n mounted: function mounted() {\n this.deviceSupportInstall();\n // add tabindex then wrapper can be focusable via Javascript\n // focus wrapper so arrow key can't cause inner scroll behavior underneath\n this.$refs['el-image-viewer__wrapper'].focus();\n }\n});\n// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_image_viewervue_type_script_lang_js_ = (image_viewervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue\n\n\n\n\n\n/* normalize component */\n\nvar image_viewer_component = normalizeComponent(\n src_image_viewervue_type_script_lang_js_,\n image_viewervue_type_template_id_5e73b307_render,\n image_viewervue_type_template_id_5e73b307_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var image_viewer_api; }\nimage_viewer_component.options.__file = \"packages/image/src/image-viewer.vue\"\n/* harmony default export */ var image_viewer = (image_viewer_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\nvar isSupportObjectFit = function isSupportObjectFit() {\n return document.documentElement.style.objectFit !== undefined;\n};\n\nvar ObjectFit = {\n NONE: 'none',\n CONTAIN: 'contain',\n COVER: 'cover',\n FILL: 'fill',\n SCALE_DOWN: 'scale-down'\n};\n\nvar prevOverflow = '';\n\n/* harmony default export */ var image_src_mainvue_type_script_lang_js_ = ({\n name: 'ElImage',\n\n mixins: [locale_default.a],\n inheritAttrs: false,\n\n components: {\n ImageViewer: image_viewer\n },\n\n props: {\n src: String,\n fit: String,\n lazy: Boolean,\n scrollContainer: {},\n previewSrcList: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n zIndex: {\n type: Number,\n default: 2000\n }\n },\n\n data: function data() {\n return {\n loading: true,\n error: false,\n show: !this.lazy,\n imageWidth: 0,\n imageHeight: 0,\n showViewer: false\n };\n },\n\n\n computed: {\n imageStyle: function imageStyle() {\n var fit = this.fit;\n\n if (!this.$isServer && fit) {\n return isSupportObjectFit() ? { 'object-fit': fit } : this.getImageStyle(fit);\n }\n return {};\n },\n alignCenter: function alignCenter() {\n return !this.$isServer && !isSupportObjectFit() && this.fit !== ObjectFit.FILL;\n },\n preview: function preview() {\n var previewSrcList = this.previewSrcList;\n\n return Array.isArray(previewSrcList) && previewSrcList.length > 0;\n },\n imageIndex: function imageIndex() {\n var previewIndex = 0;\n var srcIndex = this.previewSrcList.indexOf(this.src);\n if (srcIndex >= 0) {\n previewIndex = srcIndex;\n }\n return previewIndex;\n }\n },\n\n watch: {\n src: function src(val) {\n this.show && this.loadImage();\n },\n show: function show(val) {\n val && this.loadImage();\n }\n },\n\n mounted: function mounted() {\n if (this.lazy) {\n this.addLazyLoadListener();\n } else {\n this.loadImage();\n }\n },\n beforeDestroy: function beforeDestroy() {\n this.lazy && this.removeLazyLoadListener();\n },\n\n\n methods: {\n loadImage: function loadImage() {\n var _this = this;\n\n if (this.$isServer) return;\n\n // reset status\n this.loading = true;\n this.error = false;\n\n var img = new Image();\n img.onload = function (e) {\n return _this.handleLoad(e, img);\n };\n img.onerror = this.handleError.bind(this);\n\n // bind html attrs\n // so it can behave consistently\n Object.keys(this.$attrs).forEach(function (key) {\n var value = _this.$attrs[key];\n img.setAttribute(key, value);\n });\n img.src = this.src;\n },\n handleLoad: function handleLoad(e, img) {\n this.imageWidth = img.width;\n this.imageHeight = img.height;\n this.loading = false;\n this.error = false;\n },\n handleError: function handleError(e) {\n this.loading = false;\n this.error = true;\n this.$emit('error', e);\n },\n handleLazyLoad: function handleLazyLoad() {\n if (Object(dom_[\"isInContainer\"])(this.$el, this._scrollContainer)) {\n this.show = true;\n this.removeLazyLoadListener();\n }\n },\n addLazyLoadListener: function addLazyLoadListener() {\n if (this.$isServer) return;\n\n var scrollContainer = this.scrollContainer;\n\n var _scrollContainer = null;\n\n if (Object(types_[\"isHtmlElement\"])(scrollContainer)) {\n _scrollContainer = scrollContainer;\n } else if (Object(types_[\"isString\"])(scrollContainer)) {\n _scrollContainer = document.querySelector(scrollContainer);\n } else {\n _scrollContainer = Object(dom_[\"getScrollContainer\"])(this.$el);\n }\n\n if (_scrollContainer) {\n this._scrollContainer = _scrollContainer;\n this._lazyLoadHandler = throttle_default()(200, this.handleLazyLoad);\n Object(dom_[\"on\"])(_scrollContainer, 'scroll', this._lazyLoadHandler);\n this.handleLazyLoad();\n }\n },\n removeLazyLoadListener: function removeLazyLoadListener() {\n var _scrollContainer = this._scrollContainer,\n _lazyLoadHandler = this._lazyLoadHandler;\n\n\n if (this.$isServer || !_scrollContainer || !_lazyLoadHandler) return;\n\n Object(dom_[\"off\"])(_scrollContainer, 'scroll', _lazyLoadHandler);\n this._scrollContainer = null;\n this._lazyLoadHandler = null;\n },\n\n /**\n * simulate object-fit behavior to compatible with IE11 and other browsers which not support object-fit\n */\n getImageStyle: function getImageStyle(fit) {\n var imageWidth = this.imageWidth,\n imageHeight = this.imageHeight;\n var _$el = this.$el,\n containerWidth = _$el.clientWidth,\n containerHeight = _$el.clientHeight;\n\n\n if (!imageWidth || !imageHeight || !containerWidth || !containerHeight) return {};\n\n var vertical = imageWidth / imageHeight < 1;\n\n if (fit === ObjectFit.SCALE_DOWN) {\n var isSmaller = imageWidth < containerWidth && imageHeight < containerHeight;\n fit = isSmaller ? ObjectFit.NONE : ObjectFit.CONTAIN;\n }\n\n switch (fit) {\n case ObjectFit.NONE:\n return { width: 'auto', height: 'auto' };\n case ObjectFit.CONTAIN:\n return vertical ? { width: 'auto' } : { height: 'auto' };\n case ObjectFit.COVER:\n return vertical ? { height: 'auto' } : { width: 'auto' };\n default:\n return {};\n }\n },\n clickHandler: function clickHandler() {\n // don't show viewer when preview is false\n if (!this.preview) {\n return;\n }\n // prevent body scroll\n prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n this.showViewer = true;\n },\n closeViewer: function closeViewer() {\n document.body.style.overflow = prevOverflow;\n this.showViewer = false;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/image/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_image_src_mainvue_type_script_lang_js_ = (image_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/image/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar image_src_main_component = normalizeComponent(\n packages_image_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_44d84a7c_render,\n mainvue_type_template_id_44d84a7c_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var image_src_main_api; }\nimage_src_main_component.options.__file = \"packages/image/src/main.vue\"\n/* harmony default export */ var image_src_main = (image_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/image/index.js\n\n\n/* istanbul ignore next */\nimage_src_main.install = function (Vue) {\n Vue.component(image_src_main.name, image_src_main);\n};\n\n/* harmony default export */ var packages_image = (image_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/calendar/src/main.vue?vue&type=template&id=6d9756be&\nvar mainvue_type_template_id_6d9756be_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-calendar\" }, [\n _c(\"div\", { staticClass: \"el-calendar__header\" }, [\n _c(\"div\", { staticClass: \"el-calendar__title\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.i18nDate) + \"\\n \")\n ]),\n _vm.validatedRange.length === 0\n ? _c(\n \"div\",\n { staticClass: \"el-calendar__button-group\" },\n [\n _c(\n \"el-button-group\",\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"plain\", size: \"mini\" },\n on: {\n click: function($event) {\n _vm.selectDate(\"prev-month\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.prevMonth\")) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n attrs: { type: \"plain\", size: \"mini\" },\n on: {\n click: function($event) {\n _vm.selectDate(\"today\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.today\")) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n attrs: { type: \"plain\", size: \"mini\" },\n on: {\n click: function($event) {\n _vm.selectDate(\"next-month\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.nextMonth\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n ]),\n _vm.validatedRange.length === 0\n ? _c(\n \"div\",\n { key: \"no-range\", staticClass: \"el-calendar__body\" },\n [\n _c(\"date-table\", {\n attrs: {\n date: _vm.date,\n \"selected-day\": _vm.realSelectedDay,\n \"first-day-of-week\": _vm.realFirstDayOfWeek\n },\n on: { pick: _vm.pickDay }\n })\n ],\n 1\n )\n : _c(\n \"div\",\n { key: \"has-range\", staticClass: \"el-calendar__body\" },\n _vm._l(_vm.validatedRange, function(range, index) {\n return _c(\"date-table\", {\n key: index,\n attrs: {\n date: range[0],\n \"selected-day\": _vm.realSelectedDay,\n range: range,\n \"hide-header\": index !== 0,\n \"first-day-of-week\": _vm.realFirstDayOfWeek\n },\n on: { pick: _vm.pickDay }\n })\n }),\n 1\n )\n ])\n}\nvar mainvue_type_template_id_6d9756be_staticRenderFns = []\nmainvue_type_template_id_6d9756be_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/calendar/src/main.vue?vue&type=template&id=6d9756be&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/date\"\nvar date_ = __webpack_require__(20);\nvar date_default = /*#__PURE__*/__webpack_require__.n(date_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/calendar/src/date-table.vue?vue&type=script&lang=js&\n\n\n\n\n/* harmony default export */ var src_date_tablevue_type_script_lang_js_ = ({\n props: {\n selectedDay: String, // formated date yyyy-MM-dd\n range: {\n type: Array,\n validator: function validator(val) {\n if (!(val && val.length)) return true;\n var start = val[0],\n end = val[1];\n\n return Object(date_util_[\"validateRangeInOneMonth\"])(start, end);\n }\n },\n date: Date,\n hideHeader: Boolean,\n firstDayOfWeek: Number\n },\n\n inject: ['elCalendar'],\n\n data: function data() {\n return {\n WEEK_DAYS: Object(date_util_[\"getI18nSettings\"])().dayNames\n };\n },\n\n\n methods: {\n toNestedArr: function toNestedArr(days) {\n return Object(date_util_[\"range\"])(days.length / 7).map(function (_, index) {\n var start = index * 7;\n return days.slice(start, start + 7);\n });\n },\n getFormateDate: function getFormateDate(day, type) {\n if (!day || ['prev', 'current', 'next'].indexOf(type) === -1) {\n throw new Error('invalid day or type');\n }\n var prefix = this.curMonthDatePrefix;\n if (type === 'prev') {\n prefix = this.prevMonthDatePrefix;\n } else if (type === 'next') {\n prefix = this.nextMonthDatePrefix;\n }\n day = ('00' + day).slice(-2);\n return prefix + '-' + day;\n },\n getCellClass: function getCellClass(_ref) {\n var text = _ref.text,\n type = _ref.type;\n\n var classes = [type];\n if (type === 'current') {\n var date = this.getFormateDate(text, type);\n if (date === this.selectedDay) {\n classes.push('is-selected');\n }\n if (date === this.formatedToday) {\n classes.push('is-today');\n }\n }\n return classes;\n },\n pickDay: function pickDay(_ref2) {\n var text = _ref2.text,\n type = _ref2.type;\n\n var date = this.getFormateDate(text, type);\n this.$emit('pick', date);\n },\n cellRenderProxy: function cellRenderProxy(_ref3) {\n var text = _ref3.text,\n type = _ref3.type;\n var h = this.$createElement;\n\n var render = this.elCalendar.$scopedSlots.dateCell;\n if (!render) return h('span', [text]);\n\n var day = this.getFormateDate(text, type);\n var date = new Date(day);\n var data = {\n isSelected: this.selectedDay === day,\n type: type + '-month',\n day: day\n };\n return render({ date: date, data: data });\n }\n },\n\n computed: {\n prevMonthDatePrefix: function prevMonthDatePrefix() {\n var temp = new Date(this.date.getTime());\n temp.setDate(0);\n return date_default.a.format(temp, 'yyyy-MM');\n },\n curMonthDatePrefix: function curMonthDatePrefix() {\n return date_default.a.format(this.date, 'yyyy-MM');\n },\n nextMonthDatePrefix: function nextMonthDatePrefix() {\n var temp = new Date(this.date.getFullYear(), this.date.getMonth() + 1, 1);\n return date_default.a.format(temp, 'yyyy-MM');\n },\n formatedToday: function formatedToday() {\n return this.elCalendar.formatedToday;\n },\n isInRange: function isInRange() {\n return this.range && this.range.length;\n },\n rows: function rows() {\n var days = [];\n // if range exists, should render days in range.\n if (this.isInRange) {\n var _range = this.range,\n start = _range[0],\n end = _range[1];\n\n var currentMonthRange = Object(date_util_[\"range\"])(end.getDate() - start.getDate() + 1).map(function (_, index) {\n return {\n text: start.getDate() + index,\n type: 'current'\n };\n });\n var remaining = currentMonthRange.length % 7;\n remaining = remaining === 0 ? 0 : 7 - remaining;\n var nextMonthRange = Object(date_util_[\"range\"])(remaining).map(function (_, index) {\n return {\n text: index + 1,\n type: 'next'\n };\n });\n days = currentMonthRange.concat(nextMonthRange);\n } else {\n var date = this.date;\n var firstDay = Object(date_util_[\"getFirstDayOfMonth\"])(date);\n firstDay = firstDay === 0 ? 7 : firstDay;\n var firstDayOfWeek = typeof this.firstDayOfWeek === 'number' ? this.firstDayOfWeek : 1;\n var prevMonthDays = Object(date_util_[\"getPrevMonthLastDays\"])(date, firstDay - firstDayOfWeek).map(function (day) {\n return {\n text: day,\n type: 'prev'\n };\n });\n var currentMonthDays = Object(date_util_[\"getMonthDays\"])(date).map(function (day) {\n return {\n text: day,\n type: 'current'\n };\n });\n days = [].concat(prevMonthDays, currentMonthDays);\n var nextMonthDays = Object(date_util_[\"range\"])(42 - days.length).map(function (_, index) {\n return {\n text: index + 1,\n type: 'next'\n };\n });\n days = days.concat(nextMonthDays);\n }\n return this.toNestedArr(days);\n },\n weekDays: function weekDays() {\n var start = this.firstDayOfWeek;\n var WEEK_DAYS = this.WEEK_DAYS;\n\n\n if (typeof start !== 'number' || start === 0) {\n return WEEK_DAYS.slice();\n } else {\n return WEEK_DAYS.slice(start).concat(WEEK_DAYS.slice(0, start));\n }\n }\n },\n\n render: function render() {\n var _this = this;\n\n var h = arguments[0];\n\n var thead = this.hideHeader ? null : h('thead', [this.weekDays.map(function (day) {\n return h(\n 'th',\n { key: day },\n [day]\n );\n })]);\n return h(\n 'table',\n {\n 'class': {\n 'el-calendar-table': true,\n 'is-range': this.isInRange\n },\n attrs: { cellspacing: '0',\n cellpadding: '0' }\n },\n [thead, h('tbody', [this.rows.map(function (row, index) {\n return h(\n 'tr',\n {\n 'class': {\n 'el-calendar-table__row': true,\n 'el-calendar-table__row--hide-border': index === 0 && _this.hideHeader\n },\n key: index },\n [row.map(function (cell, key) {\n return h(\n 'td',\n { key: key,\n 'class': _this.getCellClass(cell),\n on: {\n 'click': _this.pickDay.bind(_this, cell)\n }\n },\n [h(\n 'div',\n { 'class': 'el-calendar-day' },\n [_this.cellRenderProxy(cell)]\n )]\n );\n })]\n );\n })])]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/calendar/src/date-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var calendar_src_date_tablevue_type_script_lang_js_ = (src_date_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/calendar/src/date-table.vue\nvar date_table_render, date_table_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar src_date_table_component = normalizeComponent(\n calendar_src_date_tablevue_type_script_lang_js_,\n date_table_render,\n date_table_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_date_table_api; }\nsrc_date_table_component.options.__file = \"packages/calendar/src/date-table.vue\"\n/* harmony default export */ var src_date_table = (src_date_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/calendar/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar validTypes = ['prev-month', 'today', 'next-month'];\nvar weekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nvar oneDay = 86400000;\n\n/* harmony default export */ var calendar_src_mainvue_type_script_lang_js_ = ({\n name: 'ElCalendar',\n\n mixins: [locale_default.a],\n\n components: {\n DateTable: src_date_table,\n ElButton: button_default.a,\n ElButtonGroup: button_group_default.a\n },\n\n props: {\n value: [Date, String, Number],\n range: {\n type: Array,\n validator: function validator(range) {\n if (Array.isArray(range)) {\n return range.length === 2 && range.every(function (item) {\n return typeof item === 'string' || typeof item === 'number' || item instanceof Date;\n });\n } else {\n return true;\n }\n }\n },\n firstDayOfWeek: {\n type: Number,\n default: 1\n }\n },\n\n provide: function provide() {\n return {\n elCalendar: this\n };\n },\n\n\n methods: {\n pickDay: function pickDay(day) {\n this.realSelectedDay = day;\n },\n selectDate: function selectDate(type) {\n if (validTypes.indexOf(type) === -1) {\n throw new Error('invalid type ' + type);\n }\n var day = '';\n if (type === 'prev-month') {\n day = this.prevMonthDatePrefix + '-01';\n } else if (type === 'next-month') {\n day = this.nextMonthDatePrefix + '-01';\n } else {\n day = this.formatedToday;\n }\n\n if (day === this.formatedDate) return;\n this.pickDay(day);\n },\n toDate: function toDate(val) {\n if (!val) {\n throw new Error('invalid val');\n }\n return val instanceof Date ? val : new Date(val);\n },\n rangeValidator: function rangeValidator(date, isStart) {\n var firstDayOfWeek = this.realFirstDayOfWeek;\n var expected = isStart ? firstDayOfWeek : firstDayOfWeek === 0 ? 6 : firstDayOfWeek - 1;\n var message = (isStart ? 'start' : 'end') + ' of range should be ' + weekDays[expected] + '.';\n if (date.getDay() !== expected) {\n console.warn('[ElementCalendar]', message, 'Invalid range will be ignored.');\n return false;\n }\n return true;\n }\n },\n\n computed: {\n prevMonthDatePrefix: function prevMonthDatePrefix() {\n var temp = new Date(this.date.getTime());\n temp.setDate(0);\n return date_default.a.format(temp, 'yyyy-MM');\n },\n curMonthDatePrefix: function curMonthDatePrefix() {\n return date_default.a.format(this.date, 'yyyy-MM');\n },\n nextMonthDatePrefix: function nextMonthDatePrefix() {\n var temp = new Date(this.date.getFullYear(), this.date.getMonth() + 1, 1);\n return date_default.a.format(temp, 'yyyy-MM');\n },\n formatedDate: function formatedDate() {\n return date_default.a.format(this.date, 'yyyy-MM-dd');\n },\n i18nDate: function i18nDate() {\n var year = this.date.getFullYear();\n var month = this.date.getMonth() + 1;\n return year + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + month);\n },\n formatedToday: function formatedToday() {\n return date_default.a.format(this.now, 'yyyy-MM-dd');\n },\n\n\n realSelectedDay: {\n get: function get() {\n if (!this.value) return this.selectedDay;\n return this.formatedDate;\n },\n set: function set(val) {\n this.selectedDay = val;\n var date = new Date(val);\n this.$emit('input', date);\n }\n },\n\n date: function date() {\n if (!this.value) {\n if (this.realSelectedDay) {\n var d = this.selectedDay.split('-');\n return new Date(d[0], d[1] - 1, d[2]);\n } else if (this.validatedRange.length) {\n return this.validatedRange[0][0];\n }\n return this.now;\n } else {\n return this.toDate(this.value);\n }\n },\n\n\n // if range is valid, we get a two-digit array\n validatedRange: function validatedRange() {\n var _this = this;\n\n var range = this.range;\n if (!range) return [];\n range = range.reduce(function (prev, val, index) {\n var date = _this.toDate(val);\n if (_this.rangeValidator(date, index === 0)) {\n prev = prev.concat(date);\n }\n return prev;\n }, []);\n if (range.length === 2) {\n var _range = range,\n start = _range[0],\n end = _range[1];\n\n if (start > end) {\n console.warn('[ElementCalendar]end time should be greater than start time');\n return [];\n }\n // start time and end time in one month\n if (Object(date_util_[\"validateRangeInOneMonth\"])(start, end)) {\n return [[start, end]];\n }\n var data = [];\n var startDay = new Date(start.getFullYear(), start.getMonth() + 1, 1);\n var lastDay = this.toDate(startDay.getTime() - oneDay);\n if (!Object(date_util_[\"validateRangeInOneMonth\"])(startDay, end)) {\n console.warn('[ElementCalendar]start time and end time interval must not exceed two months');\n return [];\n }\n // 第一个月的时间范围\n data.push([start, lastDay]);\n // 下一月的时间范围,需要计算一下该月的第一个周起始日\n var firstDayOfWeek = this.realFirstDayOfWeek;\n var nextMontFirstDay = startDay.getDay();\n var interval = 0;\n if (nextMontFirstDay !== firstDayOfWeek) {\n if (firstDayOfWeek === 0) {\n interval = 7 - nextMontFirstDay;\n } else {\n interval = firstDayOfWeek - nextMontFirstDay;\n interval = interval > 0 ? interval : 7 + interval;\n }\n }\n startDay = this.toDate(startDay.getTime() + interval * oneDay);\n if (startDay.getDate() < end.getDate()) {\n data.push([startDay, end]);\n }\n return data;\n }\n return [];\n },\n realFirstDayOfWeek: function realFirstDayOfWeek() {\n if (this.firstDayOfWeek < 1 || this.firstDayOfWeek > 6) {\n return 0;\n }\n return Math.floor(this.firstDayOfWeek);\n }\n },\n\n data: function data() {\n return {\n selectedDay: '',\n now: new Date()\n };\n }\n});\n// CONCATENATED MODULE: ./packages/calendar/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_calendar_src_mainvue_type_script_lang_js_ = (calendar_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/calendar/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar calendar_src_main_component = normalizeComponent(\n packages_calendar_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_6d9756be_render,\n mainvue_type_template_id_6d9756be_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var calendar_src_main_api; }\ncalendar_src_main_component.options.__file = \"packages/calendar/src/main.vue\"\n/* harmony default export */ var calendar_src_main = (calendar_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/calendar/index.js\n\n\n/* istanbul ignore next */\ncalendar_src_main.install = function (Vue) {\n Vue.component(calendar_src_main.name, calendar_src_main);\n};\n\n/* harmony default export */ var calendar = (calendar_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/backtop/src/main.vue?vue&type=template&id=257dd4a9&\nvar mainvue_type_template_id_257dd4a9_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"el-fade-in\" } }, [\n _vm.visible\n ? _c(\n \"div\",\n {\n staticClass: \"el-backtop\",\n style: {\n right: _vm.styleRight,\n bottom: _vm.styleBottom\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.handleClick($event)\n }\n }\n },\n [\n _vm._t(\"default\", [_c(\"el-icon\", { attrs: { name: \"caret-top\" } })])\n ],\n 2\n )\n : _vm._e()\n ])\n}\nvar mainvue_type_template_id_257dd4a9_staticRenderFns = []\nmainvue_type_template_id_257dd4a9_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/backtop/src/main.vue?vue&type=template&id=257dd4a9&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/backtop/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\nvar cubic = function cubic(value) {\n return Math.pow(value, 3);\n};\nvar easeInOutCubic = function easeInOutCubic(value) {\n return value < 0.5 ? cubic(value * 2) / 2 : 1 - cubic((1 - value) * 2) / 2;\n};\n\n/* harmony default export */ var backtop_src_mainvue_type_script_lang_js_ = ({\n name: 'ElBacktop',\n\n props: {\n visibilityHeight: {\n type: Number,\n default: 200\n },\n target: [String],\n right: {\n type: Number,\n default: 40\n },\n bottom: {\n type: Number,\n default: 40\n }\n },\n\n data: function data() {\n return {\n el: null,\n container: null,\n visible: false\n };\n },\n\n\n computed: {\n styleBottom: function styleBottom() {\n return this.bottom + 'px';\n },\n styleRight: function styleRight() {\n return this.right + 'px';\n }\n },\n\n mounted: function mounted() {\n this.init();\n this.throttledScrollHandler = throttle_default()(300, this.onScroll);\n this.container.addEventListener('scroll', this.throttledScrollHandler);\n },\n\n\n methods: {\n init: function init() {\n this.container = document;\n this.el = document.documentElement;\n if (this.target) {\n this.el = document.querySelector(this.target);\n if (!this.el) {\n throw new Error('target is not existed: ' + this.target);\n }\n this.container = this.el;\n }\n },\n onScroll: function onScroll() {\n var scrollTop = this.el.scrollTop;\n this.visible = scrollTop >= this.visibilityHeight;\n },\n handleClick: function handleClick(e) {\n this.scrollToTop();\n this.$emit('click', e);\n },\n scrollToTop: function scrollToTop() {\n var el = this.el;\n var beginTime = Date.now();\n var beginValue = el.scrollTop;\n var rAF = window.requestAnimationFrame || function (func) {\n return setTimeout(func, 16);\n };\n var frameFunc = function frameFunc() {\n var progress = (Date.now() - beginTime) / 500;\n if (progress < 1) {\n el.scrollTop = beginValue * (1 - easeInOutCubic(progress));\n rAF(frameFunc);\n } else {\n el.scrollTop = 0;\n }\n };\n rAF(frameFunc);\n }\n },\n\n beforeDestroy: function beforeDestroy() {\n this.container.removeEventListener('scroll', this.throttledScrollHandler);\n }\n});\n// CONCATENATED MODULE: ./packages/backtop/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_backtop_src_mainvue_type_script_lang_js_ = (backtop_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/backtop/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar backtop_src_main_component = normalizeComponent(\n packages_backtop_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_257dd4a9_render,\n mainvue_type_template_id_257dd4a9_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var backtop_src_main_api; }\nbacktop_src_main_component.options.__file = \"packages/backtop/src/main.vue\"\n/* harmony default export */ var backtop_src_main = (backtop_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/backtop/index.js\n\n\n/* istanbul ignore next */\nbacktop_src_main.install = function (Vue) {\n Vue.component(backtop_src_main.name, backtop_src_main);\n};\n\n/* harmony default export */ var backtop = (backtop_src_main);\n// CONCATENATED MODULE: ./packages/infinite-scroll/src/main.js\n\n\n\n\nvar getStyleComputedProperty = function getStyleComputedProperty(element, property) {\n if (element === window) {\n element = document.documentElement;\n }\n\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n};\n\nvar entries = function entries(obj) {\n return Object.keys(obj || {}).map(function (key) {\n return [key, obj[key]];\n });\n};\n\nvar getPositionSize = function getPositionSize(el, prop) {\n return el === window || el === document ? document.documentElement[prop] : el[prop];\n};\n\nvar getOffsetHeight = function getOffsetHeight(el) {\n return getPositionSize(el, 'offsetHeight');\n};\n\nvar getClientHeight = function getClientHeight(el) {\n return getPositionSize(el, 'clientHeight');\n};\n\nvar scope = 'ElInfiniteScroll';\nvar attributes = {\n delay: {\n type: Number,\n default: 200\n },\n distance: {\n type: Number,\n default: 0\n },\n disabled: {\n type: Boolean,\n default: false\n },\n immediate: {\n type: Boolean,\n default: true\n }\n};\n\nvar main_getScrollOptions = function getScrollOptions(el, vm) {\n if (!Object(types_[\"isHtmlElement\"])(el)) return {};\n\n return entries(attributes).reduce(function (map, _ref) {\n var key = _ref[0],\n option = _ref[1];\n var type = option.type,\n defaultValue = option.default;\n\n var value = el.getAttribute('infinite-scroll-' + key);\n value = Object(types_[\"isUndefined\"])(vm[value]) ? value : vm[value];\n switch (type) {\n case Number:\n value = Number(value);\n value = Number.isNaN(value) ? defaultValue : value;\n break;\n case Boolean:\n value = Object(types_[\"isDefined\"])(value) ? value === 'false' ? false : Boolean(value) : defaultValue;\n break;\n default:\n value = type(value);\n }\n map[key] = value;\n return map;\n }, {});\n};\n\nvar getElementTop = function getElementTop(el) {\n return el.getBoundingClientRect().top;\n};\n\nvar main_handleScroll = function handleScroll(cb) {\n var _scope = this[scope],\n el = _scope.el,\n vm = _scope.vm,\n container = _scope.container,\n observer = _scope.observer;\n\n var _getScrollOptions = main_getScrollOptions(el, vm),\n distance = _getScrollOptions.distance,\n disabled = _getScrollOptions.disabled;\n\n if (disabled) return;\n\n var containerInfo = container.getBoundingClientRect();\n if (!containerInfo.width && !containerInfo.height) return;\n\n var shouldTrigger = false;\n\n if (container === el) {\n // be aware of difference between clientHeight & offsetHeight & window.getComputedStyle().height\n var scrollBottom = container.scrollTop + getClientHeight(container);\n shouldTrigger = container.scrollHeight - scrollBottom <= distance;\n } else {\n var heightBelowTop = getOffsetHeight(el) + getElementTop(el) - getElementTop(container);\n var offsetHeight = getOffsetHeight(container);\n var borderBottom = Number.parseFloat(getStyleComputedProperty(container, 'borderBottomWidth'));\n shouldTrigger = heightBelowTop - offsetHeight + borderBottom <= distance;\n }\n\n if (shouldTrigger && Object(types_[\"isFunction\"])(cb)) {\n cb.call(vm);\n } else if (observer) {\n observer.disconnect();\n this[scope].observer = null;\n }\n};\n\n/* harmony default export */ var infinite_scroll_src_main = ({\n name: 'InfiniteScroll',\n inserted: function inserted(el, binding, vnode) {\n var cb = binding.value;\n\n var vm = vnode.context;\n // only include vertical scroll\n var container = Object(dom_[\"getScrollContainer\"])(el, true);\n\n var _getScrollOptions2 = main_getScrollOptions(el, vm),\n delay = _getScrollOptions2.delay,\n immediate = _getScrollOptions2.immediate;\n\n var onScroll = debounce_default()(delay, main_handleScroll.bind(el, cb));\n\n el[scope] = { el: el, vm: vm, container: container, onScroll: onScroll };\n\n if (container) {\n container.addEventListener('scroll', onScroll);\n\n if (immediate) {\n var observer = el[scope].observer = new MutationObserver(onScroll);\n observer.observe(container, { childList: true, subtree: true });\n onScroll();\n }\n }\n },\n unbind: function unbind(el) {\n var _el$scope = el[scope],\n container = _el$scope.container,\n onScroll = _el$scope.onScroll;\n\n if (container) {\n container.removeEventListener('scroll', onScroll);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/infinite-scroll/index.js\n\n\n/* istanbul ignore next */\ninfinite_scroll_src_main.install = function (Vue) {\n Vue.directive(infinite_scroll_src_main.name, infinite_scroll_src_main);\n};\n\n/* harmony default export */ var infinite_scroll = (infinite_scroll_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/page-header/src/main.vue?vue&type=template&id=5070954c&\nvar mainvue_type_template_id_5070954c_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-page-header\" }, [\n _c(\n \"div\",\n {\n staticClass: \"el-page-header__left\",\n on: {\n click: function($event) {\n _vm.$emit(\"back\")\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"el-icon-back\" }),\n _c(\n \"div\",\n { staticClass: \"el-page-header__title\" },\n [_vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])],\n 2\n )\n ]\n ),\n _c(\n \"div\",\n { staticClass: \"el-page-header__content\" },\n [_vm._t(\"content\", [_vm._v(_vm._s(_vm.content))])],\n 2\n )\n ])\n}\nvar mainvue_type_template_id_5070954c_staticRenderFns = []\nmainvue_type_template_id_5070954c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/page-header/src/main.vue?vue&type=template&id=5070954c&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/page-header/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ var page_header_src_mainvue_type_script_lang_js_ = ({\n name: 'ElPageHeader',\n\n props: {\n title: {\n type: String,\n default: function _default() {\n return Object(lib_locale_[\"t\"])('el.pageHeader.title');\n }\n },\n content: String\n }\n});\n// CONCATENATED MODULE: ./packages/page-header/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_page_header_src_mainvue_type_script_lang_js_ = (page_header_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/page-header/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar page_header_src_main_component = normalizeComponent(\n packages_page_header_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_5070954c_render,\n mainvue_type_template_id_5070954c_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var page_header_src_main_api; }\npage_header_src_main_component.options.__file = \"packages/page-header/src/main.vue\"\n/* harmony default export */ var page_header_src_main = (page_header_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/page-header/index.js\n\n\n/* istanbul ignore next */\npage_header_src_main.install = function (Vue) {\n Vue.component(page_header_src_main.name, page_header_src_main);\n};\n\n/* harmony default export */ var page_header = (page_header_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-panel.vue?vue&type=template&id=34932346&\nvar cascader_panelvue_type_template_id_34932346_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: [\"el-cascader-panel\", _vm.border && \"is-bordered\"],\n on: { keydown: _vm.handleKeyDown }\n },\n _vm._l(_vm.menus, function(menu, index) {\n return _c(\"cascader-menu\", {\n key: index,\n ref: \"menu\",\n refInFor: true,\n attrs: { index: index, nodes: menu }\n })\n }),\n 1\n )\n}\nvar cascader_panelvue_type_template_id_34932346_staticRenderFns = []\ncascader_panelvue_type_template_id_34932346_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue?vue&type=template&id=34932346&\n\n// EXTERNAL MODULE: external \"element-ui/lib/radio\"\nvar radio_ = __webpack_require__(43);\nvar radio_default = /*#__PURE__*/__webpack_require__.n(radio_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-node.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nvar stopPropagation = function stopPropagation(e) {\n return e.stopPropagation();\n};\n\n/* harmony default export */ var cascader_nodevue_type_script_lang_js_ = ({\n inject: ['panel'],\n\n components: {\n ElCheckbox: checkbox_default.a,\n ElRadio: radio_default.a\n },\n\n props: {\n node: {\n required: true\n },\n nodeId: String\n },\n\n computed: {\n config: function config() {\n return this.panel.config;\n },\n isLeaf: function isLeaf() {\n return this.node.isLeaf;\n },\n isDisabled: function isDisabled() {\n return this.node.isDisabled;\n },\n checkedValue: function checkedValue() {\n return this.panel.checkedValue;\n },\n isChecked: function isChecked() {\n return this.node.isSameNode(this.checkedValue);\n },\n inActivePath: function inActivePath() {\n return this.isInPath(this.panel.activePath);\n },\n inCheckedPath: function inCheckedPath() {\n var _this = this;\n\n if (!this.config.checkStrictly) return false;\n\n return this.panel.checkedNodePaths.some(function (checkedPath) {\n return _this.isInPath(checkedPath);\n });\n },\n value: function value() {\n return this.node.getValueByOption();\n }\n },\n\n methods: {\n handleExpand: function handleExpand() {\n var _this2 = this;\n\n var panel = this.panel,\n node = this.node,\n isDisabled = this.isDisabled,\n config = this.config;\n var multiple = config.multiple,\n checkStrictly = config.checkStrictly;\n\n\n if (!checkStrictly && isDisabled || node.loading) return;\n\n if (config.lazy && !node.loaded) {\n panel.lazyLoad(node, function () {\n // do not use cached leaf value here, invoke this.isLeaf to get new value.\n var isLeaf = _this2.isLeaf;\n\n\n if (!isLeaf) _this2.handleExpand();\n if (multiple) {\n // if leaf sync checked state, else clear checked state\n var checked = isLeaf ? node.checked : false;\n _this2.handleMultiCheckChange(checked);\n }\n });\n } else {\n panel.handleExpand(node);\n }\n },\n handleCheckChange: function handleCheckChange() {\n var panel = this.panel,\n value = this.value,\n node = this.node;\n\n panel.handleCheckChange(value);\n panel.handleExpand(node);\n },\n handleMultiCheckChange: function handleMultiCheckChange(checked) {\n this.node.doCheck(checked);\n this.panel.calculateMultiCheckedValue();\n },\n isInPath: function isInPath(pathNodes) {\n var node = this.node;\n\n var selectedPathNode = pathNodes[node.level - 1] || {};\n return selectedPathNode.uid === node.uid;\n },\n renderPrefix: function renderPrefix(h) {\n var isLeaf = this.isLeaf,\n isChecked = this.isChecked,\n config = this.config;\n var checkStrictly = config.checkStrictly,\n multiple = config.multiple;\n\n\n if (multiple) {\n return this.renderCheckbox(h);\n } else if (checkStrictly) {\n return this.renderRadio(h);\n } else if (isLeaf && isChecked) {\n return this.renderCheckIcon(h);\n }\n\n return null;\n },\n renderPostfix: function renderPostfix(h) {\n var node = this.node,\n isLeaf = this.isLeaf;\n\n\n if (node.loading) {\n return this.renderLoadingIcon(h);\n } else if (!isLeaf) {\n return this.renderExpandIcon(h);\n }\n\n return null;\n },\n renderCheckbox: function renderCheckbox(h) {\n var node = this.node,\n config = this.config,\n isDisabled = this.isDisabled;\n\n var events = {\n on: { change: this.handleMultiCheckChange },\n nativeOn: {}\n };\n\n if (config.checkStrictly) {\n // when every node is selectable, click event should not trigger expand event.\n events.nativeOn.click = stopPropagation;\n }\n\n return h('el-checkbox', external_babel_helper_vue_jsx_merge_props_default()([{\n attrs: {\n value: node.checked,\n indeterminate: node.indeterminate,\n disabled: isDisabled\n }\n }, events]));\n },\n renderRadio: function renderRadio(h) {\n var checkedValue = this.checkedValue,\n value = this.value,\n isDisabled = this.isDisabled;\n\n // to keep same reference if value cause radio's checked state is calculated by reference comparision;\n\n if (Object(util_[\"isEqual\"])(value, checkedValue)) {\n value = checkedValue;\n }\n\n return h(\n 'el-radio',\n {\n attrs: {\n value: checkedValue,\n label: value,\n disabled: isDisabled\n },\n on: {\n 'change': this.handleCheckChange\n },\n nativeOn: {\n 'click': stopPropagation\n }\n },\n [h('span')]\n );\n },\n renderCheckIcon: function renderCheckIcon(h) {\n return h('i', { 'class': 'el-icon-check el-cascader-node__prefix' });\n },\n renderLoadingIcon: function renderLoadingIcon(h) {\n return h('i', { 'class': 'el-icon-loading el-cascader-node__postfix' });\n },\n renderExpandIcon: function renderExpandIcon(h) {\n return h('i', { 'class': 'el-icon-arrow-right el-cascader-node__postfix' });\n },\n renderContent: function renderContent(h) {\n var panel = this.panel,\n node = this.node;\n\n var render = panel.renderLabelFn;\n var vnode = render ? render({ node: node, data: node.data }) : null;\n\n return h(\n 'span',\n { 'class': 'el-cascader-node__label' },\n [vnode || node.label]\n );\n }\n },\n\n render: function render(h) {\n var _this3 = this;\n\n var inActivePath = this.inActivePath,\n inCheckedPath = this.inCheckedPath,\n isChecked = this.isChecked,\n isLeaf = this.isLeaf,\n isDisabled = this.isDisabled,\n config = this.config,\n nodeId = this.nodeId;\n var expandTrigger = config.expandTrigger,\n checkStrictly = config.checkStrictly,\n multiple = config.multiple;\n\n var disabled = !checkStrictly && isDisabled;\n var events = { on: {} };\n\n if (expandTrigger === 'click') {\n events.on.click = this.handleExpand;\n } else {\n events.on.mouseenter = function (e) {\n _this3.handleExpand();\n _this3.$emit('expand', e);\n };\n events.on.focus = function (e) {\n _this3.handleExpand();\n _this3.$emit('expand', e);\n };\n }\n if (isLeaf && !isDisabled && !checkStrictly && !multiple) {\n events.on.click = this.handleCheckChange;\n }\n\n return h(\n 'li',\n external_babel_helper_vue_jsx_merge_props_default()([{\n attrs: {\n role: 'menuitem',\n id: nodeId,\n 'aria-expanded': inActivePath,\n tabindex: disabled ? null : -1\n },\n 'class': {\n 'el-cascader-node': true,\n 'is-selectable': checkStrictly,\n 'in-active-path': inActivePath,\n 'in-checked-path': inCheckedPath,\n 'is-active': isChecked,\n 'is-disabled': disabled\n }\n }, events]),\n [this.renderPrefix(h), this.renderContent(h), this.renderPostfix(h)]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-node.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_nodevue_type_script_lang_js_ = (cascader_nodevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-node.vue\nvar cascader_node_render, cascader_node_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar cascader_node_component = normalizeComponent(\n src_cascader_nodevue_type_script_lang_js_,\n cascader_node_render,\n cascader_node_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var cascader_node_api; }\ncascader_node_component.options.__file = \"packages/cascader-panel/src/cascader-node.vue\"\n/* harmony default export */ var cascader_node = (cascader_node_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-menu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n\n/* harmony default export */ var cascader_menuvue_type_script_lang_js_ = ({\n name: 'ElCascaderMenu',\n\n mixins: [locale_default.a],\n\n inject: ['panel'],\n\n components: {\n ElScrollbar: scrollbar_default.a,\n CascaderNode: cascader_node\n },\n\n props: {\n nodes: {\n type: Array,\n required: true\n },\n index: Number\n },\n\n data: function data() {\n return {\n activeNode: null,\n hoverTimer: null,\n id: Object(util_[\"generateId\"])()\n };\n },\n\n\n computed: {\n isEmpty: function isEmpty() {\n return !this.nodes.length;\n },\n menuId: function menuId() {\n return 'cascader-menu-' + this.id + '-' + this.index;\n }\n },\n\n methods: {\n handleExpand: function handleExpand(e) {\n this.activeNode = e.target;\n },\n handleMouseMove: function handleMouseMove(e) {\n var activeNode = this.activeNode,\n hoverTimer = this.hoverTimer;\n var hoverZone = this.$refs.hoverZone;\n\n\n if (!activeNode || !hoverZone) return;\n\n if (activeNode.contains(e.target)) {\n clearTimeout(hoverTimer);\n\n var _$el$getBoundingClien = this.$el.getBoundingClientRect(),\n left = _$el$getBoundingClien.left;\n\n var startX = e.clientX - left;\n var _$el = this.$el,\n offsetWidth = _$el.offsetWidth,\n offsetHeight = _$el.offsetHeight;\n\n var top = activeNode.offsetTop;\n var bottom = top + activeNode.offsetHeight;\n\n hoverZone.innerHTML = '\\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M' + startX + ' ' + top + ' L' + offsetWidth + ' 0 V' + top + ' Z\" />\\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M' + startX + ' ' + bottom + ' L' + offsetWidth + ' ' + offsetHeight + ' V' + bottom + ' Z\" />\\n ';\n } else if (!hoverTimer) {\n this.hoverTimer = setTimeout(this.clearHoverZone, this.panel.config.hoverThreshold);\n }\n },\n clearHoverZone: function clearHoverZone() {\n var hoverZone = this.$refs.hoverZone;\n\n if (!hoverZone) return;\n hoverZone.innerHTML = '';\n },\n renderEmptyText: function renderEmptyText(h) {\n return h(\n 'div',\n { 'class': 'el-cascader-menu__empty-text' },\n [this.t('el.cascader.noData')]\n );\n },\n renderNodeList: function renderNodeList(h) {\n var menuId = this.menuId;\n var isHoverMenu = this.panel.isHoverMenu;\n\n var events = { on: {} };\n\n if (isHoverMenu) {\n events.on.expand = this.handleExpand;\n }\n\n var nodes = this.nodes.map(function (node, index) {\n var hasChildren = node.hasChildren;\n\n return h('cascader-node', external_babel_helper_vue_jsx_merge_props_default()([{\n key: node.uid,\n attrs: { node: node,\n 'node-id': menuId + '-' + index,\n 'aria-haspopup': hasChildren,\n 'aria-owns': hasChildren ? menuId : null\n }\n }, events]));\n });\n\n return [].concat(nodes, [isHoverMenu ? h('svg', { ref: 'hoverZone', 'class': 'el-cascader-menu__hover-zone' }) : null]);\n }\n },\n\n render: function render(h) {\n var isEmpty = this.isEmpty,\n menuId = this.menuId;\n\n var events = { nativeOn: {} };\n\n // optimize hover to expand experience (#8010)\n if (this.panel.isHoverMenu) {\n events.nativeOn.mousemove = this.handleMouseMove;\n // events.nativeOn.mouseleave = this.clearHoverZone;\n }\n\n return h(\n 'el-scrollbar',\n external_babel_helper_vue_jsx_merge_props_default()([{\n attrs: {\n tag: 'ul',\n role: 'menu',\n id: menuId,\n\n 'wrap-class': 'el-cascader-menu__wrap',\n 'view-class': {\n 'el-cascader-menu__list': true,\n 'is-empty': isEmpty\n }\n },\n 'class': 'el-cascader-menu' }, events]),\n [isEmpty ? this.renderEmptyText(h) : this.renderNodeList(h)]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_menuvue_type_script_lang_js_ = (cascader_menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-menu.vue\nvar cascader_menu_render, cascader_menu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar cascader_menu_component = normalizeComponent(\n src_cascader_menuvue_type_script_lang_js_,\n cascader_menu_render,\n cascader_menu_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var cascader_menu_api; }\ncascader_menu_component.options.__file = \"packages/cascader-panel/src/cascader-menu.vue\"\n/* harmony default export */ var cascader_menu = (cascader_menu_component.exports);\n// CONCATENATED MODULE: ./packages/cascader-panel/src/node.js\nvar node_createClass = 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; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction src_node_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar uid = 0;\n\nvar src_node_Node = function () {\n function Node(data, config, parentNode) {\n src_node_classCallCheck(this, Node);\n\n this.data = data;\n this.config = config;\n this.parent = parentNode || null;\n this.level = !this.parent ? 1 : this.parent.level + 1;\n this.uid = uid++;\n\n this.initState();\n this.initChildren();\n }\n\n Node.prototype.initState = function initState() {\n var _config = this.config,\n valueKey = _config.value,\n labelKey = _config.label;\n\n\n this.value = this.data[valueKey];\n this.label = this.data[labelKey];\n this.pathNodes = this.calculatePathNodes();\n this.path = this.pathNodes.map(function (node) {\n return node.value;\n });\n this.pathLabels = this.pathNodes.map(function (node) {\n return node.label;\n });\n\n // lazy load\n this.loading = false;\n this.loaded = false;\n };\n\n Node.prototype.initChildren = function initChildren() {\n var _this = this;\n\n var config = this.config;\n\n var childrenKey = config.children;\n var childrenData = this.data[childrenKey];\n this.hasChildren = Array.isArray(childrenData);\n this.children = (childrenData || []).map(function (child) {\n return new Node(child, config, _this);\n });\n };\n\n Node.prototype.calculatePathNodes = function calculatePathNodes() {\n var nodes = [this];\n var parent = this.parent;\n\n while (parent) {\n nodes.unshift(parent);\n parent = parent.parent;\n }\n\n return nodes;\n };\n\n Node.prototype.getPath = function getPath() {\n return this.path;\n };\n\n Node.prototype.getValue = function getValue() {\n return this.value;\n };\n\n Node.prototype.getValueByOption = function getValueByOption() {\n return this.config.emitPath ? this.getPath() : this.getValue();\n };\n\n Node.prototype.getText = function getText(allLevels, separator) {\n return allLevels ? this.pathLabels.join(separator) : this.label;\n };\n\n Node.prototype.isSameNode = function isSameNode(checkedValue) {\n var value = this.getValueByOption();\n return this.config.multiple && Array.isArray(checkedValue) ? checkedValue.some(function (val) {\n return Object(util_[\"isEqual\"])(val, value);\n }) : Object(util_[\"isEqual\"])(checkedValue, value);\n };\n\n Node.prototype.broadcast = function broadcast(event) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var handlerName = 'onParent' + Object(util_[\"capitalize\"])(event);\n\n this.children.forEach(function (child) {\n if (child) {\n // bottom up\n child.broadcast.apply(child, [event].concat(args));\n child[handlerName] && child[handlerName].apply(child, args);\n }\n });\n };\n\n Node.prototype.emit = function emit(event) {\n var parent = this.parent;\n\n var handlerName = 'onChild' + Object(util_[\"capitalize\"])(event);\n if (parent) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n parent[handlerName] && parent[handlerName].apply(parent, args);\n parent.emit.apply(parent, [event].concat(args));\n }\n };\n\n Node.prototype.onParentCheck = function onParentCheck(checked) {\n if (!this.isDisabled) {\n this.setCheckState(checked);\n }\n };\n\n Node.prototype.onChildCheck = function onChildCheck() {\n var children = this.children;\n\n var validChildren = children.filter(function (child) {\n return !child.isDisabled;\n });\n var checked = validChildren.length ? validChildren.every(function (child) {\n return child.checked;\n }) : false;\n\n this.setCheckState(checked);\n };\n\n Node.prototype.setCheckState = function setCheckState(checked) {\n var totalNum = this.children.length;\n var checkedNum = this.children.reduce(function (c, p) {\n var num = p.checked ? 1 : p.indeterminate ? 0.5 : 0;\n return c + num;\n }, 0);\n\n this.checked = checked;\n this.indeterminate = checkedNum !== totalNum && checkedNum > 0;\n };\n\n Node.prototype.syncCheckState = function syncCheckState(checkedValue) {\n var value = this.getValueByOption();\n var checked = this.isSameNode(checkedValue, value);\n\n this.doCheck(checked);\n };\n\n Node.prototype.doCheck = function doCheck(checked) {\n if (this.checked !== checked) {\n if (this.config.checkStrictly) {\n this.checked = checked;\n } else {\n // bottom up to unify the calculation of the indeterminate state\n this.broadcast('check', checked);\n this.setCheckState(checked);\n this.emit('check');\n }\n }\n };\n\n node_createClass(Node, [{\n key: 'isDisabled',\n get: function get() {\n var data = this.data,\n parent = this.parent,\n config = this.config;\n\n var disabledKey = config.disabled;\n var checkStrictly = config.checkStrictly;\n\n return data[disabledKey] || !checkStrictly && parent && parent.isDisabled;\n }\n }, {\n key: 'isLeaf',\n get: function get() {\n var data = this.data,\n loaded = this.loaded,\n hasChildren = this.hasChildren,\n children = this.children;\n var _config2 = this.config,\n lazy = _config2.lazy,\n leafKey = _config2.leaf;\n\n if (lazy) {\n var isLeaf = Object(shared_[\"isDef\"])(data[leafKey]) ? data[leafKey] : loaded ? !children.length : false;\n this.hasChildren = !isLeaf;\n return isLeaf;\n }\n return !hasChildren;\n }\n }]);\n\n return Node;\n}();\n\n/* harmony default export */ var src_node = (src_node_Node);\n// CONCATENATED MODULE: ./packages/cascader-panel/src/store.js\nfunction store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar flatNodes = function flatNodes(data, leafOnly) {\n return data.reduce(function (res, node) {\n if (node.isLeaf) {\n res.push(node);\n } else {\n !leafOnly && res.push(node);\n res = res.concat(flatNodes(node.children, leafOnly));\n }\n return res;\n }, []);\n};\n\nvar store_Store = function () {\n function Store(data, config) {\n store_classCallCheck(this, Store);\n\n this.config = config;\n this.initNodes(data);\n }\n\n Store.prototype.initNodes = function initNodes(data) {\n var _this = this;\n\n data = Object(util_[\"coerceTruthyValueToArray\"])(data);\n this.nodes = data.map(function (nodeData) {\n return new src_node(nodeData, _this.config);\n });\n this.flattedNodes = this.getFlattedNodes(false, false);\n this.leafNodes = this.getFlattedNodes(true, false);\n };\n\n Store.prototype.appendNode = function appendNode(nodeData, parentNode) {\n var node = new src_node(nodeData, this.config, parentNode);\n var children = parentNode ? parentNode.children : this.nodes;\n\n children.push(node);\n };\n\n Store.prototype.appendNodes = function appendNodes(nodeDataList, parentNode) {\n var _this2 = this;\n\n nodeDataList = Object(util_[\"coerceTruthyValueToArray\"])(nodeDataList);\n nodeDataList.forEach(function (nodeData) {\n return _this2.appendNode(nodeData, parentNode);\n });\n };\n\n Store.prototype.getNodes = function getNodes() {\n return this.nodes;\n };\n\n Store.prototype.getFlattedNodes = function getFlattedNodes(leafOnly) {\n var cached = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var cachedNodes = leafOnly ? this.leafNodes : this.flattedNodes;\n return cached ? cachedNodes : flatNodes(this.nodes, leafOnly);\n };\n\n Store.prototype.getNodeByValue = function getNodeByValue(value) {\n if (value) {\n var nodes = this.getFlattedNodes(false, !this.config.lazy).filter(function (node) {\n return Object(util_[\"valueEquals\"])(node.path, value) || node.value === value;\n });\n return nodes && nodes.length ? nodes[0] : null;\n }\n return null;\n };\n\n return Store;\n}();\n\n/* harmony default export */ var cascader_panel_src_store = (store_Store);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-panel.vue?vue&type=script&lang=js&\nvar cascader_panelvue_type_script_lang_js_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar cascader_panelvue_type_script_lang_js_KeyCode = aria_utils_default.a.keys;\n\nvar DefaultProps = {\n expandTrigger: 'click', // or hover\n multiple: false,\n checkStrictly: false, // whether all nodes can be selected\n emitPath: true, // wether to emit an array of all levels value in which node is located\n lazy: false,\n lazyLoad: util_[\"noop\"],\n value: 'value',\n label: 'label',\n children: 'children',\n leaf: 'leaf',\n disabled: 'disabled',\n hoverThreshold: 500\n};\n\nvar cascader_panelvue_type_script_lang_js_isLeaf = function isLeaf(el) {\n return !el.getAttribute('aria-owns');\n};\n\nvar getSibling = function getSibling(el, distance) {\n var parentNode = el.parentNode;\n\n if (parentNode) {\n var siblings = parentNode.querySelectorAll('.el-cascader-node[tabindex=\"-1\"]');\n var index = Array.prototype.indexOf.call(siblings, el);\n return siblings[index + distance] || null;\n }\n return null;\n};\n\nvar getMenuIndex = function getMenuIndex(el, distance) {\n if (!el) return;\n var pieces = el.id.split('-');\n return Number(pieces[pieces.length - 2]);\n};\n\nvar focusNode = function focusNode(el) {\n if (!el) return;\n el.focus();\n !cascader_panelvue_type_script_lang_js_isLeaf(el) && el.click();\n};\n\nvar checkNode = function checkNode(el) {\n if (!el) return;\n\n var input = el.querySelector('input');\n if (input) {\n input.click();\n } else if (cascader_panelvue_type_script_lang_js_isLeaf(el)) {\n el.click();\n }\n};\n\n/* harmony default export */ var cascader_panelvue_type_script_lang_js_ = ({\n name: 'ElCascaderPanel',\n\n components: {\n CascaderMenu: cascader_menu\n },\n\n props: {\n value: {},\n options: Array,\n props: Object,\n border: {\n type: Boolean,\n default: true\n },\n renderLabel: Function\n },\n\n provide: function provide() {\n return {\n panel: this\n };\n },\n data: function data() {\n return {\n checkedValue: null,\n checkedNodePaths: [],\n store: [],\n menus: [],\n activePath: [],\n loadCount: 0\n };\n },\n\n\n computed: {\n config: function config() {\n return merge_default()(cascader_panelvue_type_script_lang_js_extends({}, DefaultProps), this.props || {});\n },\n multiple: function multiple() {\n return this.config.multiple;\n },\n checkStrictly: function checkStrictly() {\n return this.config.checkStrictly;\n },\n leafOnly: function leafOnly() {\n return !this.checkStrictly;\n },\n isHoverMenu: function isHoverMenu() {\n return this.config.expandTrigger === 'hover';\n },\n renderLabelFn: function renderLabelFn() {\n return this.renderLabel || this.$scopedSlots.default;\n }\n },\n\n watch: {\n options: {\n handler: function handler() {\n this.initStore();\n },\n immediate: true,\n deep: true\n },\n value: function value() {\n this.syncCheckedValue();\n this.checkStrictly && this.calculateCheckedNodePaths();\n },\n checkedValue: function checkedValue(val) {\n if (!Object(util_[\"isEqual\"])(val, this.value)) {\n this.checkStrictly && this.calculateCheckedNodePaths();\n this.$emit('input', val);\n this.$emit('change', val);\n }\n }\n },\n\n mounted: function mounted() {\n if (!Object(util_[\"isEmpty\"])(this.value)) {\n this.syncCheckedValue();\n }\n },\n\n\n methods: {\n initStore: function initStore() {\n var config = this.config,\n options = this.options;\n\n if (config.lazy && Object(util_[\"isEmpty\"])(options)) {\n this.lazyLoad();\n } else {\n this.store = new cascader_panel_src_store(options, config);\n this.menus = [this.store.getNodes()];\n this.syncMenuState();\n }\n },\n syncCheckedValue: function syncCheckedValue() {\n var value = this.value,\n checkedValue = this.checkedValue;\n\n if (!Object(util_[\"isEqual\"])(value, checkedValue)) {\n this.checkedValue = value;\n this.syncMenuState();\n }\n },\n syncMenuState: function syncMenuState() {\n var multiple = this.multiple,\n checkStrictly = this.checkStrictly;\n\n this.syncActivePath();\n multiple && this.syncMultiCheckState();\n checkStrictly && this.calculateCheckedNodePaths();\n this.$nextTick(this.scrollIntoView);\n },\n syncMultiCheckState: function syncMultiCheckState() {\n var _this = this;\n\n var nodes = this.getFlattedNodes(this.leafOnly);\n\n nodes.forEach(function (node) {\n node.syncCheckState(_this.checkedValue);\n });\n },\n syncActivePath: function syncActivePath() {\n var _this2 = this;\n\n var store = this.store,\n multiple = this.multiple,\n activePath = this.activePath,\n checkedValue = this.checkedValue;\n\n\n if (!Object(util_[\"isEmpty\"])(activePath)) {\n var nodes = activePath.map(function (node) {\n return _this2.getNodeByValue(node.getValue());\n });\n this.expandNodes(nodes);\n } else if (!Object(util_[\"isEmpty\"])(checkedValue)) {\n var value = multiple ? checkedValue[0] : checkedValue;\n var checkedNode = this.getNodeByValue(value) || {};\n var _nodes = (checkedNode.pathNodes || []).slice(0, -1);\n this.expandNodes(_nodes);\n } else {\n this.activePath = [];\n this.menus = [store.getNodes()];\n }\n },\n expandNodes: function expandNodes(nodes) {\n var _this3 = this;\n\n nodes.forEach(function (node) {\n return _this3.handleExpand(node, true /* silent */);\n });\n },\n calculateCheckedNodePaths: function calculateCheckedNodePaths() {\n var _this4 = this;\n\n var checkedValue = this.checkedValue,\n multiple = this.multiple;\n\n var checkedValues = multiple ? Object(util_[\"coerceTruthyValueToArray\"])(checkedValue) : [checkedValue];\n this.checkedNodePaths = checkedValues.map(function (v) {\n var checkedNode = _this4.getNodeByValue(v);\n return checkedNode ? checkedNode.pathNodes : [];\n });\n },\n handleKeyDown: function handleKeyDown(e) {\n var target = e.target,\n keyCode = e.keyCode;\n\n\n switch (keyCode) {\n case cascader_panelvue_type_script_lang_js_KeyCode.up:\n var prev = getSibling(target, -1);\n focusNode(prev);\n break;\n case cascader_panelvue_type_script_lang_js_KeyCode.down:\n var next = getSibling(target, 1);\n focusNode(next);\n break;\n case cascader_panelvue_type_script_lang_js_KeyCode.left:\n var preMenu = this.$refs.menu[getMenuIndex(target) - 1];\n if (preMenu) {\n var expandedNode = preMenu.$el.querySelector('.el-cascader-node[aria-expanded=\"true\"]');\n focusNode(expandedNode);\n }\n break;\n case cascader_panelvue_type_script_lang_js_KeyCode.right:\n var nextMenu = this.$refs.menu[getMenuIndex(target) + 1];\n if (nextMenu) {\n var firstNode = nextMenu.$el.querySelector('.el-cascader-node[tabindex=\"-1\"]');\n focusNode(firstNode);\n }\n break;\n case cascader_panelvue_type_script_lang_js_KeyCode.enter:\n checkNode(target);\n break;\n case cascader_panelvue_type_script_lang_js_KeyCode.esc:\n case cascader_panelvue_type_script_lang_js_KeyCode.tab:\n this.$emit('close');\n break;\n default:\n return;\n }\n },\n handleExpand: function handleExpand(node, silent) {\n var activePath = this.activePath;\n var level = node.level;\n\n var path = activePath.slice(0, level - 1);\n var menus = this.menus.slice(0, level);\n\n if (!node.isLeaf) {\n path.push(node);\n menus.push(node.children);\n }\n\n this.activePath = path;\n this.menus = menus;\n\n if (!silent) {\n var pathValues = path.map(function (node) {\n return node.getValue();\n });\n var activePathValues = activePath.map(function (node) {\n return node.getValue();\n });\n if (!Object(util_[\"valueEquals\"])(pathValues, activePathValues)) {\n this.$emit('active-item-change', pathValues); // Deprecated\n this.$emit('expand-change', pathValues);\n }\n }\n },\n handleCheckChange: function handleCheckChange(value) {\n this.checkedValue = value;\n },\n lazyLoad: function lazyLoad(node, onFullfiled) {\n var _this5 = this;\n\n var config = this.config;\n\n if (!node) {\n node = node || { root: true, level: 0 };\n this.store = new cascader_panel_src_store([], config);\n this.menus = [this.store.getNodes()];\n }\n node.loading = true;\n var resolve = function resolve(dataList) {\n var parent = node.root ? null : node;\n dataList && dataList.length && _this5.store.appendNodes(dataList, parent);\n node.loading = false;\n node.loaded = true;\n\n // dispose default value on lazy load mode\n if (Array.isArray(_this5.checkedValue)) {\n var nodeValue = _this5.checkedValue[_this5.loadCount++];\n var valueKey = _this5.config.value;\n var leafKey = _this5.config.leaf;\n\n if (Array.isArray(dataList) && dataList.filter(function (item) {\n return item[valueKey] === nodeValue;\n }).length > 0) {\n var checkedNode = _this5.store.getNodeByValue(nodeValue);\n\n if (!checkedNode.data[leafKey]) {\n _this5.lazyLoad(checkedNode, function () {\n _this5.handleExpand(checkedNode);\n });\n }\n\n if (_this5.loadCount === _this5.checkedValue.length) {\n _this5.$parent.computePresentText();\n }\n }\n }\n\n onFullfiled && onFullfiled(dataList);\n };\n config.lazyLoad(node, resolve);\n },\n\n\n /**\n * public methods\n */\n calculateMultiCheckedValue: function calculateMultiCheckedValue() {\n this.checkedValue = this.getCheckedNodes(this.leafOnly).map(function (node) {\n return node.getValueByOption();\n });\n },\n scrollIntoView: function scrollIntoView() {\n if (this.$isServer) return;\n\n var menus = this.$refs.menu || [];\n menus.forEach(function (menu) {\n var menuElement = menu.$el;\n if (menuElement) {\n var container = menuElement.querySelector('.el-scrollbar__wrap');\n var activeNode = menuElement.querySelector('.el-cascader-node.is-active') || menuElement.querySelector('.el-cascader-node.in-active-path');\n scroll_into_view_default()(container, activeNode);\n }\n });\n },\n getNodeByValue: function getNodeByValue(val) {\n return this.store.getNodeByValue(val);\n },\n getFlattedNodes: function getFlattedNodes(leafOnly) {\n var cached = !this.config.lazy;\n return this.store.getFlattedNodes(leafOnly, cached);\n },\n getCheckedNodes: function getCheckedNodes(leafOnly) {\n var checkedValue = this.checkedValue,\n multiple = this.multiple;\n\n if (multiple) {\n var nodes = this.getFlattedNodes(leafOnly);\n return nodes.filter(function (node) {\n return node.checked;\n });\n } else {\n return Object(util_[\"isEmpty\"])(checkedValue) ? [] : [this.getNodeByValue(checkedValue)];\n }\n },\n clearCheckedNodes: function clearCheckedNodes() {\n var config = this.config,\n leafOnly = this.leafOnly;\n var multiple = config.multiple,\n emitPath = config.emitPath;\n\n if (multiple) {\n this.getCheckedNodes(leafOnly).filter(function (node) {\n return !node.isDisabled;\n }).forEach(function (node) {\n return node.doCheck(false);\n });\n this.calculateMultiCheckedValue();\n } else {\n this.checkedValue = emitPath ? [] : null;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_panelvue_type_script_lang_js_ = (cascader_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar cascader_panel_component = normalizeComponent(\n src_cascader_panelvue_type_script_lang_js_,\n cascader_panelvue_type_template_id_34932346_render,\n cascader_panelvue_type_template_id_34932346_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var cascader_panel_api; }\ncascader_panel_component.options.__file = \"packages/cascader-panel/src/cascader-panel.vue\"\n/* harmony default export */ var cascader_panel = (cascader_panel_component.exports);\n// CONCATENATED MODULE: ./packages/cascader-panel/index.js\n\n\n/* istanbul ignore next */\ncascader_panel.install = function (Vue) {\n Vue.component(cascader_panel.name, cascader_panel);\n};\n\n/* harmony default export */ var packages_cascader_panel = (cascader_panel);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/avatar/src/main.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var avatar_src_mainvue_type_script_lang_js_ = ({\n name: 'ElAvatar',\n\n props: {\n size: {\n type: [Number, String],\n validator: function validator(val) {\n if (typeof val === 'string') {\n return ['large', 'medium', 'small'].includes(val);\n }\n return typeof val === 'number';\n }\n },\n shape: {\n type: String,\n default: 'circle',\n validator: function validator(val) {\n return ['circle', 'square'].includes(val);\n }\n },\n icon: String,\n src: String,\n alt: String,\n srcSet: String,\n error: Function,\n fit: {\n type: String,\n default: 'cover'\n }\n },\n\n data: function data() {\n return {\n isImageExist: true\n };\n },\n\n\n computed: {\n avatarClass: function avatarClass() {\n var size = this.size,\n icon = this.icon,\n shape = this.shape;\n\n var classList = ['el-avatar'];\n\n if (size && typeof size === 'string') {\n classList.push('el-avatar--' + size);\n }\n\n if (icon) {\n classList.push('el-avatar--icon');\n }\n\n if (shape) {\n classList.push('el-avatar--' + shape);\n }\n\n return classList.join(' ');\n }\n },\n\n methods: {\n handleError: function handleError() {\n var error = this.error;\n\n var errorFlag = error ? error() : undefined;\n if (errorFlag !== false) {\n this.isImageExist = false;\n }\n },\n renderAvatar: function renderAvatar() {\n var h = this.$createElement;\n var icon = this.icon,\n src = this.src,\n alt = this.alt,\n isImageExist = this.isImageExist,\n srcSet = this.srcSet,\n fit = this.fit;\n\n\n if (isImageExist && src) {\n return h('img', {\n attrs: {\n src: src,\n\n alt: alt,\n srcSet: srcSet\n },\n on: {\n 'error': this.handleError\n },\n style: { 'object-fit': fit } });\n }\n\n if (icon) {\n return h('i', { 'class': icon });\n }\n\n return this.$slots.default;\n }\n },\n\n render: function render() {\n var h = arguments[0];\n var avatarClass = this.avatarClass,\n size = this.size;\n\n\n var sizeStyle = typeof size === 'number' ? {\n height: size + 'px',\n width: size + 'px',\n lineHeight: size + 'px'\n } : {};\n\n return h(\n 'span',\n { 'class': avatarClass, style: sizeStyle },\n [this.renderAvatar()]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/avatar/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_avatar_src_mainvue_type_script_lang_js_ = (avatar_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/avatar/src/main.vue\nvar src_main_render, src_main_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar avatar_src_main_component = normalizeComponent(\n packages_avatar_src_mainvue_type_script_lang_js_,\n src_main_render,\n src_main_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var avatar_src_main_api; }\navatar_src_main_component.options.__file = \"packages/avatar/src/main.vue\"\n/* harmony default export */ var avatar_src_main = (avatar_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/avatar/index.js\n\n\n/* istanbul ignore next */\navatar_src_main.install = function (Vue) {\n Vue.component(avatar_src_main.name, avatar_src_main);\n};\n\n/* harmony default export */ var avatar = (avatar_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/drawer/src/main.vue?vue&type=template&id=a4885264&\nvar mainvue_type_template_id_a4885264_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-drawer-fade\" },\n on: { \"after-enter\": _vm.afterEnter, \"after-leave\": _vm.afterLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-drawer__wrapper\",\n attrs: { tabindex: \"-1\" }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-drawer__container\",\n class: _vm.visible && \"el-drawer__open\",\n attrs: { role: \"document\", tabindex: \"-1\" },\n on: {\n click: function($event) {\n if ($event.target !== $event.currentTarget) {\n return null\n }\n return _vm.handleWrapperClick($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n ref: \"drawer\",\n staticClass: \"el-drawer\",\n class: [_vm.direction, _vm.customClass],\n style: _vm.isHorizontal\n ? \"width: \" + _vm.size\n : \"height: \" + _vm.size,\n attrs: {\n \"aria-modal\": \"true\",\n \"aria-labelledby\": \"el-drawer__title\",\n \"aria-label\": _vm.title,\n role: \"dialog\",\n tabindex: \"-1\"\n }\n },\n [\n _vm.withHeader\n ? _c(\n \"header\",\n {\n staticClass: \"el-drawer__header\",\n attrs: { id: \"el-drawer__title\" }\n },\n [\n _vm._t(\"title\", [\n _c(\n \"span\",\n {\n attrs: {\n role: \"heading\",\n tabindex: \"0\",\n title: _vm.title\n }\n },\n [_vm._v(_vm._s(_vm.title))]\n )\n ]),\n _vm.showClose\n ? _c(\n \"button\",\n {\n staticClass: \"el-drawer__close-btn\",\n attrs: {\n \"aria-label\":\n \"close \" + (_vm.title || \"drawer\"),\n type: \"button\"\n },\n on: { click: _vm.closeDrawer }\n },\n [\n _c(\"i\", {\n staticClass:\n \"el-dialog__close el-icon el-icon-close\"\n })\n ]\n )\n : _vm._e()\n ],\n 2\n )\n : _vm._e(),\n _vm.rendered\n ? _c(\n \"section\",\n { staticClass: \"el-drawer__body\" },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e()\n ]\n )\n ]\n )\n ]\n )\n ]\n )\n}\nvar mainvue_type_template_id_a4885264_staticRenderFns = []\nmainvue_type_template_id_a4885264_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/drawer/src/main.vue?vue&type=template&id=a4885264&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/drawer/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var drawer_src_mainvue_type_script_lang_js_ = ({\n name: 'ElDrawer',\n mixins: [popup_default.a, emitter_default.a],\n props: {\n appendToBody: {\n type: Boolean,\n default: false\n },\n beforeClose: {\n type: Function\n },\n customClass: {\n type: String,\n default: ''\n },\n closeOnPressEscape: {\n type: Boolean,\n default: true\n },\n destroyOnClose: {\n type: Boolean,\n default: false\n },\n modal: {\n type: Boolean,\n default: true\n },\n direction: {\n type: String,\n default: 'rtl',\n validator: function validator(val) {\n return ['ltr', 'rtl', 'ttb', 'btt'].indexOf(val) !== -1;\n }\n },\n modalAppendToBody: {\n type: Boolean,\n default: true\n },\n showClose: {\n type: Boolean,\n default: true\n },\n size: {\n type: String,\n default: '30%'\n },\n title: {\n type: String,\n default: ''\n },\n visible: {\n type: Boolean\n },\n wrapperClosable: {\n type: Boolean,\n default: true\n },\n withHeader: {\n type: Boolean,\n default: true\n }\n },\n computed: {\n isHorizontal: function isHorizontal() {\n return this.direction === 'rtl' || this.direction === 'ltr';\n }\n },\n data: function data() {\n return {\n closed: false,\n prevActiveElement: null\n };\n },\n\n watch: {\n visible: function visible(val) {\n var _this = this;\n\n if (val) {\n this.closed = false;\n this.$emit('open');\n if (this.appendToBody) {\n document.body.appendChild(this.$el);\n }\n this.prevActiveElement = document.activeElement;\n this.$nextTick(function () {\n aria_utils_default.a.focusFirstDescendant(_this.$refs.drawer);\n });\n } else {\n if (!this.closed) this.$emit('close');\n this.$nextTick(function () {\n if (_this.prevActiveElement) {\n _this.prevActiveElement.focus();\n }\n });\n }\n }\n },\n methods: {\n afterEnter: function afterEnter() {\n this.$emit('opened');\n },\n afterLeave: function afterLeave() {\n this.$emit('closed');\n },\n hide: function hide(cancel) {\n if (cancel !== false) {\n this.$emit('update:visible', false);\n this.$emit('close');\n if (this.destroyOnClose === true) {\n this.rendered = false;\n }\n this.closed = true;\n }\n },\n handleWrapperClick: function handleWrapperClick() {\n if (this.wrapperClosable) {\n this.closeDrawer();\n }\n },\n closeDrawer: function closeDrawer() {\n if (typeof this.beforeClose === 'function') {\n this.beforeClose(this.hide);\n } else {\n this.hide();\n }\n },\n handleClose: function handleClose() {\n // This method here will be called by PopupManger, when the `closeOnPressEscape` was set to true\n // pressing `ESC` will call this method, and also close the drawer.\n // This method also calls `beforeClose` if there was one.\n this.closeDrawer();\n }\n },\n mounted: function mounted() {\n if (this.visible) {\n this.rendered = true;\n this.open();\n }\n },\n destroyed: function destroyed() {\n // if appendToBody is true, remove DOM node after destroy\n if (this.appendToBody && this.$el && this.$el.parentNode) {\n this.$el.parentNode.removeChild(this.$el);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/drawer/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_drawer_src_mainvue_type_script_lang_js_ = (drawer_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/drawer/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar drawer_src_main_component = normalizeComponent(\n packages_drawer_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_a4885264_render,\n mainvue_type_template_id_a4885264_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var drawer_src_main_api; }\ndrawer_src_main_component.options.__file = \"packages/drawer/src/main.vue\"\n/* harmony default export */ var drawer_src_main = (drawer_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/drawer/index.js\n\n\n/* istanbul ignore next */\ndrawer_src_main.install = function (Vue) {\n Vue.component(drawer_src_main.name, drawer_src_main);\n};\n\n/* harmony default export */ var drawer = (drawer_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/popconfirm/src/main.vue?vue&type=template&id=048de730&\nvar mainvue_type_template_id_048de730_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"el-popover\",\n _vm._b(\n {\n attrs: { trigger: \"click\" },\n model: {\n value: _vm.visible,\n callback: function($$v) {\n _vm.visible = $$v\n },\n expression: \"visible\"\n }\n },\n \"el-popover\",\n _vm.$attrs,\n false\n ),\n [\n _c(\"div\", { staticClass: \"el-popconfirm\" }, [\n _c(\"p\", { staticClass: \"el-popconfirm__main\" }, [\n !_vm.hideIcon\n ? _c(\"i\", {\n staticClass: \"el-popconfirm__icon\",\n class: _vm.icon,\n style: { color: _vm.iconColor }\n })\n : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.title) + \"\\n \")\n ]),\n _c(\n \"div\",\n { staticClass: \"el-popconfirm__action\" },\n [\n _c(\n \"el-button\",\n {\n attrs: { size: \"mini\", type: _vm.cancelButtonType },\n on: { click: _vm.cancel }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.cancelButtonText) + \"\\n \")]\n ),\n _c(\n \"el-button\",\n {\n attrs: { size: \"mini\", type: _vm.confirmButtonType },\n on: { click: _vm.confirm }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.confirmButtonText) + \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]),\n _vm._t(\"reference\", null, { slot: \"reference\" })\n ],\n 2\n )\n}\nvar mainvue_type_template_id_048de730_staticRenderFns = []\nmainvue_type_template_id_048de730_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/popconfirm/src/main.vue?vue&type=template&id=048de730&\n\n// EXTERNAL MODULE: external \"element-ui/lib/popover\"\nvar popover_ = __webpack_require__(44);\nvar popover_default = /*#__PURE__*/__webpack_require__.n(popover_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/popconfirm/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var popconfirm_src_mainvue_type_script_lang_js_ = ({\n name: 'ElPopconfirm',\n props: {\n title: {\n type: String\n },\n confirmButtonText: {\n type: String,\n default: Object(lib_locale_[\"t\"])('el.popconfirm.confirmButtonText')\n },\n cancelButtonText: {\n type: String,\n default: Object(lib_locale_[\"t\"])('el.popconfirm.cancelButtonText')\n },\n confirmButtonType: {\n type: String,\n default: 'primary'\n },\n cancelButtonType: {\n type: String,\n default: 'text'\n },\n icon: {\n type: String,\n default: 'el-icon-question'\n },\n iconColor: {\n type: String,\n default: '#f90'\n },\n hideIcon: {\n type: Boolean,\n default: false\n }\n },\n components: {\n ElPopover: popover_default.a,\n ElButton: button_default.a\n },\n data: function data() {\n return {\n visible: false\n };\n },\n\n methods: {\n confirm: function confirm() {\n this.visible = false;\n this.$emit('confirm');\n },\n cancel: function cancel() {\n this.visible = false;\n this.$emit('cancel');\n }\n }\n});\n// CONCATENATED MODULE: ./packages/popconfirm/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_popconfirm_src_mainvue_type_script_lang_js_ = (popconfirm_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/popconfirm/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar popconfirm_src_main_component = normalizeComponent(\n packages_popconfirm_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_048de730_render,\n mainvue_type_template_id_048de730_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var popconfirm_src_main_api; }\npopconfirm_src_main_component.options.__file = \"packages/popconfirm/src/main.vue\"\n/* harmony default export */ var popconfirm_src_main = (popconfirm_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/popconfirm/index.js\n\n\n/* istanbul ignore next */\npopconfirm_src_main.install = function (Vue) {\n Vue.component(popconfirm_src_main.name, popconfirm_src_main);\n};\n\n/* harmony default export */ var popconfirm = (popconfirm_src_main);\n// CONCATENATED MODULE: ./src/index.js\n/* Automatically generated by './build/bin/build-entry.js' */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar components = [packages_pagination, dialog, packages_autocomplete, packages_dropdown, packages_dropdown_menu, packages_dropdown_item, packages_menu, packages_submenu, packages_menu_item, packages_menu_item_group, packages_input, packages_input_number, packages_radio, packages_radio_group, packages_radio_button, packages_checkbox, packages_checkbox_button, packages_checkbox_group, packages_switch, packages_select, packages_option, packages_option_group, packages_button, packages_button_group, packages_table, packages_table_column, packages_date_picker, packages_time_select, packages_time_picker, popover, packages_tooltip, packages_breadcrumb, packages_breadcrumb_item, packages_form, packages_form_item, packages_tabs, packages_tab_pane, packages_tag, packages_tree, packages_alert, slider, packages_icon, packages_row, packages_col, packages_upload, packages_progress, packages_spinner, badge, card, rate, packages_steps, packages_step, carousel, scrollbar, carousel_item, packages_collapse, packages_collapse_item, packages_cascader, color_picker, transfer, packages_container, header, aside, packages_main, footer, timeline, timeline_item, packages_link, divider, packages_image, calendar, backtop, page_header, packages_cascader_panel, avatar, drawer, popconfirm, collapse_transition_default.a];\n\nvar src_install = function install(Vue) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n lib_locale_default.a.use(opts.locale);\n lib_locale_default.a.i18n(opts.i18n);\n\n components.forEach(function (component) {\n Vue.component(component.name, component);\n });\n\n Vue.use(infinite_scroll);\n Vue.use(packages_loading.directive);\n\n Vue.prototype.$ELEMENT = {\n size: opts.size || '',\n zIndex: opts.zIndex || 2000\n };\n\n Vue.prototype.$loading = packages_loading.service;\n Vue.prototype.$msgbox = message_box;\n Vue.prototype.$alert = message_box.alert;\n Vue.prototype.$confirm = message_box.confirm;\n Vue.prototype.$prompt = message_box.prompt;\n Vue.prototype.$notify = notification;\n Vue.prototype.$message = packages_message;\n};\n\n/* istanbul ignore if */\nif (typeof window !== 'undefined' && window.Vue) {\n src_install(window.Vue);\n}\n\n/* harmony default export */ var src_0 = __webpack_exports__[\"default\"] = ({\n version: '2.14.0',\n locale: lib_locale_default.a.use,\n i18n: lib_locale_default.a.i18n,\n install: src_install,\n CollapseTransition: collapse_transition_default.a,\n Loading: packages_loading,\n Pagination: packages_pagination,\n Dialog: dialog,\n Autocomplete: packages_autocomplete,\n Dropdown: packages_dropdown,\n DropdownMenu: packages_dropdown_menu,\n DropdownItem: packages_dropdown_item,\n Menu: packages_menu,\n Submenu: packages_submenu,\n MenuItem: packages_menu_item,\n MenuItemGroup: packages_menu_item_group,\n Input: packages_input,\n InputNumber: packages_input_number,\n Radio: packages_radio,\n RadioGroup: packages_radio_group,\n RadioButton: packages_radio_button,\n Checkbox: packages_checkbox,\n CheckboxButton: packages_checkbox_button,\n CheckboxGroup: packages_checkbox_group,\n Switch: packages_switch,\n Select: packages_select,\n Option: packages_option,\n OptionGroup: packages_option_group,\n Button: packages_button,\n ButtonGroup: packages_button_group,\n Table: packages_table,\n TableColumn: packages_table_column,\n DatePicker: packages_date_picker,\n TimeSelect: packages_time_select,\n TimePicker: packages_time_picker,\n Popover: popover,\n Tooltip: packages_tooltip,\n MessageBox: message_box,\n Breadcrumb: packages_breadcrumb,\n BreadcrumbItem: packages_breadcrumb_item,\n Form: packages_form,\n FormItem: packages_form_item,\n Tabs: packages_tabs,\n TabPane: packages_tab_pane,\n Tag: packages_tag,\n Tree: packages_tree,\n Alert: packages_alert,\n Notification: notification,\n Slider: slider,\n Icon: packages_icon,\n Row: packages_row,\n Col: packages_col,\n Upload: packages_upload,\n Progress: packages_progress,\n Spinner: packages_spinner,\n Message: packages_message,\n Badge: badge,\n Card: card,\n Rate: rate,\n Steps: packages_steps,\n Step: packages_step,\n Carousel: carousel,\n Scrollbar: scrollbar,\n CarouselItem: carousel_item,\n Collapse: packages_collapse,\n CollapseItem: packages_collapse_item,\n Cascader: packages_cascader,\n ColorPicker: color_picker,\n Transfer: transfer,\n Container: packages_container,\n Header: header,\n Aside: aside,\n Main: packages_main,\n Footer: footer,\n Timeline: timeline,\n TimelineItem: timeline_item,\n Link: packages_link,\n Divider: divider,\n Image: packages_image,\n Calendar: calendar,\n Backtop: backtop,\n InfiniteScroll: infinite_scroll,\n PageHeader: page_header,\n CascaderPanel: packages_cascader_panel,\n Avatar: avatar,\n Drawer: drawer,\n Popconfirm: popconfirm\n});\n\n/***/ })\n/******/ ])[\"default\"];"]}]}
|