nsc-react-component 4.2.7 → 4.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1074,7 +1074,7 @@ class BasePage extends PureComponent {
|
|
|
1074
1074
|
let headerHeight = showSearch && searchForms.length > 0 ? 104 : 0; //头部搜索栏高度
|
|
1075
1075
|
let toolHeight = tableTitle || toolFlag ? 50 : 0;
|
|
1076
1076
|
let paddingHeight = 20 * 2; //上下间距
|
|
1077
|
-
let tableContentHeight = elementHeight - paddingHeight;
|
|
1077
|
+
let tableContentHeight = elementHeight - toolHeight - paddingHeight;
|
|
1078
1078
|
let PaginationHeight = tableProps.pagination !== false ? 32 + 16 : 0; //32 为分页器高度,16为margin间距
|
|
1079
1079
|
let tableHeight = tableContentHeight - PaginationHeight;
|
|
1080
1080
|
let tableSrollHeight = tableContentHeight - (this.state.tableHeaderHeight > 0 ? this.state.tableHeaderHeight : 55) - PaginationHeight;
|
|
@@ -1236,4 +1236,4 @@ class BasePage extends PureComponent {
|
|
|
1236
1236
|
}
|
|
1237
1237
|
_defineProperty(BasePage, "convertColumns", convertColumns);
|
|
1238
1238
|
export default BasePage;
|
|
1239
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUYWJsZSIsIlRyZWUiLCJCdXR0b24iLCJNb2RhbCIsIlBvcG92ZXIiLCJtZXNzYWdlIiwiRWRpdG9yRm9ybSIsImNscyIsIkRvd25PdXRsaW5lZCIsIkV5ZU91dGxpbmVkIiwiRWRpdE91dGxpbmVkIiwiUmlnaHRPdXRsaW5lZCIsIlBsdXNPdXRsaW5lZCIsIkVsbGlwc2lzT3V0bGluZWQiLCJEZWxldGVPdXRsaW5lZCIsImNvbnZlckZ1bmN0aW9uIiwiZ2V0TGVzcyIsInJlcXVlc3QiLCJjb25maWciLCJnZXRTdG9yYWdlIiwiZ2V0QnV0dG9uUGVybWlzc29ucyIsIkhlYWRlclNlYXJjaCIsImNvbnZlcnRDb2x1bW5zIiwiZ2V0TmV3Q29sdW1ucyIsInRocm90dGxlIiwic3R5bGVzIiwiQmFzZVBhZ2UiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX3R5cGUiLCJfc2l6ZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsImNoZWNrZWRUcmVlS2V5cyIsIm5hbWUiLCJ1c2VyVHlwZSIsImFjY291bnQiLCJzdGF0ZSIsInZhbHVlIiwiZGVwdElkIiwib25TZWFyY2giLCJzZWxlY3RlZCIsInJlcyIsImtleSIsImtleXMiLCJsZW5ndGgiLCJ0YWJsZVdyYXBwZXJSZWYiLCJjdXJyZW50IiwidGFibGVIZWFkZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaGVhZGVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaGVpZ2h0IiwidGFibGVIZWFkZXJIZWlnaHQiLCJzZXRTdGF0ZSIsImNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0Iiwic3RvcmVQcmVmaXgiLCJ0eXBlIiwiY29udGVudCIsInNpemUiLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwidHJlZVNlbGVjdGVkS2V5IiwiZXhwYW5kIiwiZm9ybVR5cGUiLCJ0YWJsZVNpemUiLCJ0cmVlU2VhcmNoUHJhbXMiLCJwb3BvcGVucyIsIm1vcmVPcGVuIiwiZWxlbWVudEhlaWdodCIsInBlcm1pc3Npb25CdXR0b25zIiwicXVlcnlQYXJhbXMiLCJidXR0b25zTG9hZGluZyIsInRyZWVXaWR0aCIsInNob3dMZWZ0IiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpcyRwYWdlQ29udGVudFJlZiQiLCJpbml0RGF0YSIsInBlcm1pc3NvbiIsInBhZ2VDb250ZW50UmVmIiwiY2xpZW50SGVpZ2h0Iiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInRocm90dGxlQ2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHQiLCJzZXRUaW1lb3V0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwiX3RoaXMkcGFnZUNvbnRlbnRSZWYkMiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNldFNlYXJjaFBhcmFtcyIsInBhcmFtcyIsImNhbGxCYWNrIiwiX3RoaXMkc2VhcmNoUmVmJGN1cnJlIiwic2VhcmNoUmVmIiwiZG9TdWJtaXQiLCJkYXRhIiwiX3RoaXMkZWRpdG9yUmVmJGN1cnJlIiwibGFiZWwiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJlZGl0b3JSZWYiLCJzaG93Rm9ybSIsIl90aGlzJHByb3BzJGZvcm1QYWdlUCIsImVkaXRvcmZsYWciLCJmb3JtUGFnZVByb3BzIiwiX3RoaXMkcHJvcHMkZm9ybVBhZ2VQMiIsImZ1bmNzIiwicGF0aG5hbWUiLCJjb25jYXQiLCJ0YWJsZUNvZGUiLCJpZCIsImhpc3RvcnkiLCJzZXJ2aWNlTmFtZSIsInNlcnZpY2VQYXRoIiwiRGF0ZSIsImdldFRpbWUiLCJ0aXRsZSIsIl90aGlzJGVkaXRvclJlZiIsIm5ld1ZhbHVlIiwiX29iamVjdFNwcmVhZCIsInNob3ciLCJoaWRlRm9ybSIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTIiLCJzZXRMb2FkaW5nIiwibG9hZGluZyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTMiLCJzZXRFZGl0Rm9ybVZhbHVlcyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTQiLCJzZXRGb3JtVmFsdWUiLCJnZXRFZGl0Rm9ybVZhbHVlcyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTUiLCJnZXRGb3JtVmFsdWUiLCJvbkRlbGV0ZSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbiIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjIiLCJkZWxldGVQb3NpdGlvbiIsImRlbGV0ZVVybCIsImRlbGV0ZVBhcmFtcyIsImJ1dHRvbkNsaWNrIiwicmVxdWVzdFBhcmFtcyIsInJlcXVlc3RVcmxzIiwicmVxdWVzdENvbmZpZyIsIl90aGlzIiwidGFibGVSZWYiLCJnZXRTZWxlY3RlZFJvd0tleXMiLCJnZXRTZWxlY3RlZFJvd0RhdGFzIiwidXJsIiwid2FybmluZyIsImNvbmZpcm0iLCJvbk9rIiwicGFnZVJlZiIsInJlY29yZCIsImlkcyIsIlV0aWxzIiwiRXJyb3IiLCJkYXRhUGFyYW1zIiwib3RoZXJQYXJhbXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJkZWZhdWx0UGFyYW1zIiwibWV0aG9kIiwiYXV0b1ByZWZpeCIsImpvaW4iLCJmaW5hbFBhcmFtcyIsInRoZW4iLCJjb2RlIiwiX3RoaXMkc2VhcmNoUmVmIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjMiIsInN1Y2Nlc3MiLCJnZXRTZWFyY2hWYWx1ZXMiLCJvbkNhbGxCYWNrcyIsIm9uRGVsZXRlQ2FsbEJhY2siLCJ0YWJsZUxvYWQiLCJlcnJvciIsImNhdGNoIiwiY29uc29sZSIsImxvZyIsIl90YWJsZVN0b3JlJHJlcXVlc3RDbyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjMiLCJkZWZhdWx0UmVxdWVzdENvbmZpZyIsInRhYmxlUHJvcHMiLCJzdG9yZSIsInRhYmxlU3RvcmUiLCJjb252ZXJ0UXVlcnlQYXJhbXMiLCJyZXF1ZXN0Q29uaWciLCJzdG9yZUNvbmZpZyIsInN0b3JlUGFyYW1zIiwib3RoZXJTdG9yZUNvbmZpZyIsIl9leGNsdWRlZDIiLCJsb2FkIiwiX3RhYmxlU3RvcmUkcmVxdWVzdENvMiIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzMiLCJvblF1ZXJ5Q2FsbEJhY2siLCJ0YWJsZVJlbG9hZCIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjQiLCJhdXRvTG9hZCIsInJlbG9hZCIsImNhbGxiYWNrIiwiX3JlcyRkYXRhIiwicmVjb3JkcyIsImN1cnJlbnRQYWdlIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuNSIsInRyZWVMb2FkIiwiX3RoaXMkdHJlZVJlZiRjdXJyZW50IiwidHJlZVJlZiIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjYiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW43Iiwic2V0U2VsZWN0ZWRSb3dLZXlzIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuOCIsInNldFNlbGVjdGVkUm93RGF0YXMiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW45IiwicmVzZXRTZWxlY3RlZFJvd0tleXMiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4xMCIsIl90aGlzJHNlYXJjaFJlZjIiLCJmcm9tVmFsdWUiLCJnZXRDaGlsZHJlbkRhdGEiLCJyb3dLZXkiLCJyZXNLZXkiLCJjaGlsZE5vZGVzIiwiY2hpbGRyZW4iLCJtYXAiLCJpdGVtIiwiaW5kZXgiLCJyZW5kZXJUb29sQnV0dG9ucyIsInRvb2xidXR0b25zIiwidG9vbGJhckZsYWciLCJmbGFnIiwic2hvd1NlYXJjaCIsIl9pdGVtJHByb3BzIiwicGFnZVR5cGUiLCJvbkNsaWNrIiwiaWNvbiIsIl9leGNsdWRlZDMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiX2V4dGVuZHMiLCJzdHlsZSIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsInBsYWNlbWVudCIsIm9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJyZW5kZXJDbG91bW5CdXR0b24iLCJjb2x1bW5CdXR0b25zIiwicm93UmVjb3JkIiwiYWN0aW9uUHJvcHMiLCJiYXNlQWN0aW9uQ29sdW1uIiwibmV3QnV0dG9ucyIsInNob3dJY29uIiwiX2l0ZW0kcHJvcHMyIiwicmVjb3JkU2hvdyIsIl9leGNsdWRlZDQiLCJldmVudE9wdGlvbiIsIlVpdGxzIiwiZnVuYyIsIkZ1bmN0aW9uIiwicHVzaCIsImUiLCJldmFsIiwibnVtYmVyIiwiYnV0dG9uTnVtYmVyIiwiX2l0ZW0kcHJvcHMzIiwiX2V4Y2x1ZGVkNSIsIk51bWJlciIsIl9pdGVtJHByb3BzNCIsIl9leGNsdWRlZDYiLCJ0cmlnZ2VyIiwidHJlZVNlbGVjdCIsInNlbGVjdGVkS2V5cyIsIm9iaiIsIl90aGlzJHNlYXJjaFJlZjMiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM0IiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjNSIsImtleXdvcmQiLCJzZWFyY2hLZXkiLCJzZWFyY2hGaWVsZCIsInBhcmFudFNlbGVjdCIsInRyZWVQcm9wcyIsInNlbGVjdGVkTm9kZXMiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwiaXNMZWFmIiwib25UcmVlU2VsZWN0IiwidHJlZVNlbGVjdENhbGxCYWNrIiwicmVzZXRTZWFyY2giLCJfdGhpcyRzZWFyY2hSZWYkY3VycmUyIiwicmVzZXRGaWVsZHMiLCJnZXRUZXh0IiwidGV4dCIsIl9wcm9wcyRkYXRhIiwibmV3VGV4dCIsImkiLCJzZXRUYWJsZURhdGEiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4xMSIsInNldERhdGEiLCJzZXRUcmVlRGF0YSIsIl90aGlzJHRyZWVSZWYkY3VycmVudDIiLCJjb252ZXJQYXJhbXMiLCJoYW5kbGVNb3VzZURvd24iLCJwcmV2ZW50RGVmYXVsdCIsIm1hc2siLCJkb2N1bWVudCIsImNzc1RleHQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJoYW5kbGVNb3VzZU1vdmUiLCJuZXdXaWR0aCIsInNjcmVlblgiLCJ0aHJvdHRsZWRNb3VzZU1vdmUiLCJoYW5kbGVNb3VzZVVwIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJlbmRlciIsIl90aGlzMiIsIl90YWJsZVByb3BzJHRvb2xiYXIiLCJfdGFibGVQcm9wcyR0b29sYmFyMiIsIl90aGlzJHByb3BzJGZvcm1QYWdlUDMiLCJjb2x1bW5zIiwic3VibWl0VXJsIiwic3VibWl0UGFyYW1zIiwic2hvd1Rvb2xCdXR0b24iLCJidXR0b25zIiwiZWRpdG9yRm9ybSIsIm9uU2hvd0Zvcm0iLCJmb3JtQ2hhbmdlVmFsaWQiLCJ0b29sQnV0dG9uUG9zaXRpb24iLCJwZXJtaXNzaW9uIiwiaGFzIiwiZmlsdGVyQ29sdW1uIiwiYWN0aW9uQ29sdW1uIiwic2hvd1Jvd1NlbGVjdGlvbiIsImNvbHVtbk9yZGVyIiwiZXhwYW5kYWJsZSIsInRhYmxlVGl0bGUiLCJvdGhlcnRhYmxlUGFyYW1zIiwiX2V4Y2x1ZGVkNyIsIm5ld1RhYmxlU3RvcmUiLCJfbmV3VGFibGVTdG9yZSRyZXF1ZXMiLCJ0cmVlU3RvcmUiLCJ0cmVlU2VhcmNoIiwidGl0bGVBbGlhcyIsInRyZWVUaXRsZSIsIm90aGVydHJlZVBhcmFtcyIsIl9leGNsdWRlZDgiLCJ0YWJsZVBhcmFtcyIsImxpc3RlbmVycyIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzYiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM3IiwidGFibGVMb2FkQ2FsbEJhY2siLCJkZWZhdWx0VmFsdWUiLCJtZW51Q29kZSIsInBlcm1pc3NvbnMiLCJ0YWJsZUNvbHVtbiIsInNlYXJjaEZvcm1zIiwiZWRpdG9yRm9ybXMiLCJ0b29sQnV0dG9ucyIsImZvcm1CdXR0b24iLCJidXR0b25NYXAiLCJlZGl0b3IiLCJkZWxldGUiLCJzZWFyY2giLCJyZXR1cm5CdXR0b24iLCJfYnV0dG9uTWFwJGNvZGUiLCJkZWZhdWx0UHJvcHMiLCJvbkVkaXRvciIsIl90aGlzMiRwcm9wcyRvbkNhbGxCYSIsIl90aGlzMiRwcm9wcyRvbkNhbGxCYTIiLCJvbkVkaXRvckNhbGxCYWNrIiwib25TZWFyY2hDYWxsQmFjayIsImNoZWNrUGVyc3Npb24iLCJpbmRleE9mIiwib25BZGQiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM4IiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjOSIsIm9uQWRkQ2FsbEJhY2siLCJiaW5kIiwiZGFuZ2VyIiwiQXJyYXkiLCJpc0FycmF5IiwiY2hpbGQiLCJfY2hpbGQkcHJvcHMiLCJfY2hpbGQkcHJvcHMyIiwiX2NoaWxkJHByb3BzMyIsIl9jaGlsZCRwcm9wczQiLCJfY2hpbGQkcHJvcHM1IiwiX2NoaWxkJHByb3BzNiIsIl9jaGlsZCRwcm9wczciLCJfaXRlbSRwcm9wczUiLCJfaXRlbSRwcm9wczYiLCJfaXRlbSRwcm9wczciLCJfaXRlbSRwcm9wczgiLCJfaXRlbSRwcm9wczkiLCJkYXRhSW5kZXgiLCJhbGlnbiIsInRleHRBbGlnbiIsIndpZHRoIiwiZml4ZWQiLCJyZWFjb3JkIiwiRnJhZ21lbnQiLCJzZWFyY2hGbGFnIiwidGFibGVUb29sIiwidG9vbEZsYWciLCJ0b29sYmFyIiwidG9vbHMiLCJ0b29sSGVpZ2h0IiwicGFkZGluZ0hlaWdodCIsInRhYmxlQ29udGVudEhlaWdodCIsIlBhZ2luYXRpb25IZWlnaHQiLCJwYWdpbmF0aW9uIiwidGFibGVIZWlnaHQiLCJ0YWJsZVNyb2xsSGVpZ2h0Iiwic2Nyb2xsIiwieCIsInkiLCJyZWYiLCJwYWdlVGl0bGUiLCJkaXNwbGF5Iiwib25Nb3VzZURvd24iLCJjaGVja2FibGUiLCJzZWFyY2hhYmxlIiwib25TZWxlY3QiLCJvblJlc2V0IiwiX3RoaXMkc2VhcmNoUmVmJGN1cnJlMyIsInNlYXJjaEZvcm1Qcm9wcyIsImV4cGFuZEljb24iLCJfcmVmIiwiX3JlY29yZCRjaGlsZE5vZGVzIiwiX3JlY29yZCRjaGlsZE5vZGVzMiIsImV4cGFuZGVkIiwib25FeHBhbmQiLCJvbkNoYW5nZSIsIm9uVG9vbENsaWNrIiwib25SZWZyZXNoIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjMTAiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWMxMSIsIm9uU3VtYml0Q2FsbEJhY2siLCJmb3JtcyIsIm9uU3VibWl0Iiwib25IaWRlRm9ybSIsIm9uRm9ybUNoYW5nZSIsImNoYW5nZVZhbGlkIiwicmVxdWVzdE9iamVjdCIsImFkZFVybCIsImVkaXRvclVybCIsImFkZFBhcmFtcyIsImVkaXRvclBhcmFtcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2UvQmFzZVBhZ2UvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLi8uLi9iYXNlL3RhYmxlXCI7XHJcbmltcG9ydCBUcmVlIGZyb20gXCIuLi8uLi9iYXNlL3RyZWVcIjtcclxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vLi4vYmFzZS9idXR0b25cIjtcclxuaW1wb3J0IE1vZGFsIGZyb20gXCIuLi8uLi9iYXNlL21vZGFsXCI7XHJcbmltcG9ydCBQb3BvdmVyIGZyb20gXCIuLi8uLi9iYXNlL3BvcG92ZXJcIjtcclxuaW1wb3J0IG1lc3NhZ2UgZnJvbSBcIi4uLy4uL2Jhc2UvbWVzc2FnZVwiO1xyXG5pbXBvcnQgRWRpdG9yRm9ybSwgeyBGb3JtUGFnZVByb3BzIH0gZnJvbSBcIi4uL0Zvcm1QYWdlL2luZGV4XCI7XHJcbmltcG9ydCBjbHMgZnJvbSBcImNsYXNzbmFtZXNcIjtcclxuaW1wb3J0IFwiLi9pbmRleC5tb2R1bGUubGVzc1wiO1xyXG5pbXBvcnQgU3RvcmUsIHsgUGFnZVN0b3JlLCBTdG9yZVByb3BzIH0gZnJvbSBcIkBiai1uc2MvbXNuXCI7XHJcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSBcIkBiai1uc2MvbXNuL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gIERvd25PdXRsaW5lZCxcclxuICBFeWVPdXRsaW5lZCxcclxuICBFZGl0T3V0bGluZWQsXHJcbiAgUmlnaHRPdXRsaW5lZCxcclxuICBQbHVzT3V0bGluZWQsXHJcbiAgRWxsaXBzaXNPdXRsaW5lZCxcclxuICBEZWxldGVPdXRsaW5lZCxcclxufSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgY29udmVyRnVuY3Rpb24sIGdldExlc3MsIGdldE5vZGUsIHNpbXBsaWZ5Q29sdW1ucyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tIFwibnNjLXJlcXVlc3RcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldFN0b3JhZ2UsIHB4MnZ3LCBnZXRCdXR0b25QZXJtaXNzb25zIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBIZWFkZXJTZWFyY2ggZnJvbSBcIi4uL0hlYWRlclNlYXJjaFwiO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uUHJvcHMgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgbnNjZmlsZSBmcm9tIFwibnNjLWZpbGVcIjtcclxuaW1wb3J0IHsgY29udmVydENvbHVtbnMsIGdldE5ld0NvbHVtbnMgfSBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwibG9kYXNoL2lzRXF1YWxcIjtcclxuaW1wb3J0IHRocm90dGxlIGZyb20gXCJsb2Rhc2gvdGhyb3R0bGVcIjtcclxuaW1wb3J0IENvbXBvdW5kZWRTcGFjZSBmcm9tIFwiYW50ZC9lcy9zcGFjZVwiO1xyXG50eXBlIEJ1dHRvbkl0ZW0gPVxyXG4gIHwgc3RyaW5nXHJcbiAgfCB7XHJcbiAgICAgIGNvZGU6IHN0cmluZztcclxuICAgICAgcmVjb3JkU2hvdz86IHN0cmluZyB8IEZ1bmN0aW9uO1xyXG4gICAgICBwcm9wcz86IGFueTtcclxuICAgIH07XHJcblxyXG5pbnRlcmZhY2UgVGFibGVQcm9wcyB7XHJcbiAgYWN0aW9uQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmk43kvZzliJdcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgZmlsdGVyQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrov4fmu6TmjInpkq5cclxuICBzaG93Um93U2VsZWN0aW9uPzogYm9vbGVhbjsgLy/mmK/lkKbooajmoLzli77pgInliJdcclxuICBwYWdpbmF0aW9uPzogYm9vbGVhbiB8IFBhZ2luYXRpb25Qcm9wczsgLy/mmK/lkKbmmL7npLrliIbpobVcclxuICBjb2x1bW5PcmRlcj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66KGo5qC85bqP5YiXXHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmNvbnN0IHN0eWxlcyA9IG51bGw7XHJcbmludGVyZmFjZSBUcmVlUHJvcHMge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmkJzntKLmoYZcclxuICBzZWFyY2hLZXk/OiBzdHJpbmc7IC8v5pCc57SidmFsdWXlr7nlupTnmoRrZXlcclxuICBzZWFyY2hGaWVsZD86IHN0cmluZzsgLy/mn6Xor6Llr7nlupTnmoRrZXlcclxuICB0aXRsZUFsaWFzPzogc3RyaW5nOyAvL+agkXRpdGxl5a+55bqU55qEa2V5LOm7mOiupHRpdGxlXHJcbiAgbm9kZVBvcnBzPzogb2JqZWN0O1xyXG4gIHBhcmFudFNlbGVjdD86IGJvb2xlYW47XHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmludGVyZmFjZSBGb3JtUHJvcHMgZXh0ZW5kcyBGb3JtUGFnZVByb3BzIHt9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5TQ0Jhc2VCYWdlUHJvcHMge1xyXG4gIHNob3dTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuWktOmDqOaQnOe0ouagj1xyXG4gIHRhYmxlUHJvcHM/OiBUYWJsZVByb3BzOyAvL+ihqOagvOWPguaVsFxyXG4gIHRyZWVQcm9wcz86IFRyZWVQcm9wczsgLy/lt6bkvqfmoJHlj4LmlbBcclxuICBzdWJtaXRQYXJhbXM/OiBPYmplY3Q7IC8v5re75Yqg5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HZGF0YeS8oOmAklxyXG4gIHN1Ym1pdFVybD86IHN0cmluZztcclxuICBvblN1Ym1pdD86ICh2YWx1ZT86IGFueSwgbGFiZWw/OiBhbnkpID0+IHZvaWQ7XHJcbiAgY29sdW1ucz86IEFycmF5PE9iamVjdD47XHJcbiAgc2hvd0xlZnQ/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuW3puS+p+ebruW9leagkVxyXG4gIHNob3dUb29sQnV0dG9uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmjInpkq7moI9cclxuICBlZGl0b3JGb3JtPzogYm9vbGVhbjsgLy/mmK/lkKbpnIDopoHooajljZXlip/og70gLCDkuLpmYWxzZSDnvJbovpHvvIzmn6XnnIvvvIzmlrDlop7lip/og73lnYfkuI3lj6/nlKhcclxuICBkZWxldGVVcmw/OiBzdHJpbmc7IC8v5Yig6ZmkdXJsXHJcbiAgb25EZWxldGU/OiAoc2VsZWN0ZWRLZXlzPzogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDsgLy/liKDpmaTlj4LmlbDvvIzpu5jorqRtb3Rob2Q6cG9zdO+8jCDlj4LmlbDpgJrov4dpZHPmi7zmjqXkvKDpgJLnu5nlkI7lj7BcclxuICBkZWxldGVQYXJhbXM/OiBPYmplY3Q7XHJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgb25TZWFyY2g/OiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XHJcbiAgb25SZXNldD86ICgpID0+IHZvaWQ7XHJcbiAgaW5pdERhdGE/OiBhbnk7IC8v5Yid5aeL5YyW5Zue6LCD5Ye95pWw77yM5ZyoY29tcG9uZW50RGlkTW91bnTkuK3osIPnlKhcclxuICBidXR0b25zPzogQnV0dG9uSXRlbVtdOyAvL+aMiemSrumbhuWQiCAgWydhZGQnLCdkZWxldGUnLCdzZWFyY2gnLCdlZGl0b3InLCdkZWxldGVfYmF0Y2gnXVxyXG4gIG9uU2hvd0Zvcm0/OiAodmFsdWU/OiBhbnksIGVkaXRvckZsYWc/OiBzdHJpbmcpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25IaWRlRm9ybT86ICgpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25Gb3JtQ2hhbmdlPzogKGNoYW5nZWRWYWx1ZXM/OiBhbnksIGFsbFZhbHVlcz86IGFueSkgPT4gdm9pZDsgLy/ooajljZVvbkNoYW5nZeWbnuiwg1xyXG4gIGZvcm1UeXBlPzogXCJtb2RhbFwiIHwgXCJkcmF3ZXJcIiB8IFwicGFnZVwiO1xyXG4gIGZvcm1DaGFuZ2VWYWxpZD86IGJvb2xlYW47IC8v6KGo5Y2V5qCh6aqMXHJcbiAgY2xhc3NOYW1lPzogYW55O1xyXG4gIHRvb2xCdXR0b25Qb3NpdGlvbj86IFwicmlnaHRcIiB8IFwiYnV0dG9tXCI7XHJcbiAgcGFnZVRpdGxlPzogc3RyaW5nIHwgUmVhY3ROb2RlO1xyXG4gIGFjdGlvblByb3BzPzoge1xyXG4gICAgdGV4dEFsaWduPzogc3RyaW5nO1xyXG4gICAgc2hvd0ljb24/OiBib29sZWFuO1xyXG4gICAgd2lkdGg/OiBudW1iZXI7XHJcbiAgICBidXR0b25OdW1iZXI/OiBudW1iZXIgfCBcImFsbFwiO1xyXG4gIH07XHJcbiAgc2VhcmNoRm9ybVByb3BzPzogeyB3cmFwcGVyQ29sPzogYW55OyBsYWJlbENvbD86IGFueSB9O1xyXG4gIG9uVHJlZVNlbGVjdD86ICh2YWx1ZT86IGFueSwgZWRpdG9yRmxhZz86IHN0cmluZykgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkNhbGxCYWNrcz86IHtcclxuICAgIHRyZWVTZWxlY3RDYWxsQmFjaz86IGFueTsgLy/moJHngrnlh7vmn6Xor6LlkI7lm57osINcclxuICAgIG9uUXVlcnlDYWxsQmFjaz86IGFueTsgLy/mn6Xor6Llm57osIPvvIzmn6Xor6LmlbDmja7lkI7lm57osINcclxuICAgIG9uU3VtYml0Q2FsbEJhY2s/OiBhbnk7IC8v5L+d5a2Y5Zue6LCD77yM5L+d5a2Y5pWw5o2u5oiQ5Yqf5ZCO5Zue6LCDXHJcbiAgICBvbkRlbGV0ZUNhbGxCYWNrPzogYW55OyAvL+WIoOmZpOaMiemSruWbnuiwg++8jOWIoOmZpOaVsOaNruWQjuaJp+ihjFxyXG4gICAgb25FZGl0b3JDYWxsQmFjaz86IGFueTsgLy/nvJbovpHmjInpkq7lm57osIPvvIzmiZPlvIDlvLnmoYblkI7miafooYxcclxuICAgIG9uQWRkQ2FsbEJhY2s/OiBhbnk7IC8v5re75Yqg5oyJ6ZKu5Zue6LCD77yM5omT5byA5by55qGG5ZCO5omn6KGMXHJcbiAgICBvblNlYXJjaENhbGxCYWNrPzogYW55OyAvL+WIl+ihqOafpeivouaMiemSruWbnuiwg++8jOaJk+W8gOW8ueahhuWQjuaJp+ihjFxyXG4gICAgdGFibGVMb2FkQ2FsbEJhY2s/OiBhbnk7IC8v5YiX6KGo5p+l6K+i5Zue6LCDLS1sb2FkXHJcbiAgfTtcclxuICBwYWdlVHlwZT86IFwibm9ybWFsXCIgfCBcInRhYnNwYWdlXCI7XHJcbiAgZm9ybVBhZ2VQcm9wcz86IEZvcm1QYWdlUHJvcHM7XHJcbiAgYnV0dG9uQ2xpY2s/OiB7XHJcbiAgICBvbkFkZD86ICgpID0+IHZvaWQ7XHJcbiAgICBvbkVkaXRvcj86ICh2YWx1ZT86IGFueSkgPT4gdm9pZDtcclxuICAgIG9uU2VhcmNoPzogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xyXG4gICAgb25EZWxldGU/OiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XHJcbiAgfTtcclxuICBwZXJtaXNzaW9uPzoge1xyXG4gICAgaGFzPzogYm9vbGVhbjtcclxuICAgIG1lbnVDb2RlPzogc3RyaW5nO1xyXG4gIH07XHJcbiAgcmVxdWVzdFBhcmFtcz86IHtcclxuICAgIC8v6ZyA6KaB6aKd5aSW5Lyg55qE5Zu65a6a6K+35rGC5Y+C5pWwXHJcbiAgICBhZGRQYXJhbXM/OiBPYmplY3Q7IC8v5paw5aKe5Zu65a6a5Y+C5pWwXHJcbiAgICBlZGl0b3JQYXJhbXM/OiBPYmplY3Q7IC8v57yW6L6R5Zu65a6a5Y+C5pWwXHJcbiAgICBxdWVyeVBhcmFtcz86IE9iamVjdDsgLy/mn6Xor6Llm7rlrprlj4LmlbBcclxuICAgIGRlbGV0ZVBhcmFtcz86IE9iamVjdDsgLy/liKDpmaTlm7rlrprlj4LmlbBcclxuICB9O1xyXG4gIHJlcXVlc3RVcmxzPzoge1xyXG4gICAgYWRkVXJsPzogc3RyaW5nOyAvL+aWsOWinnVybFxyXG4gICAgZWRpdG9yVXJsPzogc3RyaW5nOyAvL+e8lui+kXVybFxyXG4gICAgZGVsZXRlVXJsPzogc3RyaW5nOyAvL+WIoOmZpHVybFxyXG4gIH07XHJcbiAgZnVuY3M/OiBhbnk7XHJcbiAgcmVxdWVzdENvbmZpZz86IGFueTtcclxuICBbcHJvcHNOYW1lOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmNsYXNzIEJhc2VQYWdlIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxOU0NCYXNlQmFnZVByb3BzLCBhbnk+IHtcclxuICB0YWJsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgdHJlZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIHBhZ2VSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIHBhZ2VDb250ZW50UmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBkYXRlRm9ybWF0ID0ge30gYXMgYW55O1xyXG4gIHRhYmxlV3JhcHBlclJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcclxuICBzdGF0aWMgY29udmVydENvbHVtbnMgPSBjb252ZXJ0Q29sdW1ucztcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICBsZXQgeyBzdG9yZVByZWZpeCB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdHlwZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcIi1cIiArIFwiZm9ybVR5cGVcIiA6IFwiZm9ybVR5cGVcIlxyXG4gICAgKTtcclxuICAgIHR5cGUgPSB0eXBlPy5jb250ZW50O1xyXG4gICAgbGV0IHNpemUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcInRhYmxlU2l6ZVwiIDogXCJ0YWJsZVNpemVcIlxyXG4gICAgKTtcclxuICAgIHNpemUgPSBzaXplPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgdHlwZTogXCJhZGRcIixcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICAgIHRyZWVTZWxlY3RlZEtleTogXCJcIixcclxuICAgICAgZXhwYW5kOiBmYWxzZSxcclxuICAgICAgZm9ybVR5cGU6IHR5cGUgfHwgXCJtb2RhbFwiLFxyXG4gICAgICB0YWJsZVNpemU6IHNpemUgfHwgXCJkZWZhdWx0XCIsXHJcbiAgICAgIHRyZWVTZWFyY2hQcmFtczoge30sXHJcbiAgICAgIHBvcG9wZW5zOiB7fSxcclxuICAgICAgbW9yZU9wZW46IGZhbHNlLFxyXG4gICAgICBlbGVtZW50SGVpZ2h0OiAwLFxyXG4gICAgICBwZXJtaXNzaW9uQnV0dG9uczogW10sXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7fSxcclxuICAgICAgdGFibGVIZWFkZXJIZWlnaHQ6IDAsIC8vIOa3u+WKoOihqOWktOmrmOW6puWIsHN0YXRlXHJcbiAgICAgIGJ1dHRvbnNMb2FkaW5nOiB7fSxcclxuICAgICAgdHJlZVdpZHRoOiB0aGlzLnByb3BzLnNob3dMZWZ0ID8gMjYwIDogMCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgaW5pdERhdGEsIHBlcm1pc3NvbiA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZWxlbWVudEhlaWdodCA9IHRoaXMucGFnZUNvbnRlbnRSZWYuY3VycmVudD8uY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgIC8vIOa3u+WKoOeql+WPo3Jlc2l6ZeebkeWQrFxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy50aHJvdHRsZUNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0KTtcclxuXHJcbiAgICAvLyDliJ3lp4vorqHnrpfooajlpLTpq5jluqZcclxuICAgIHNldFRpbWVvdXQodGhpcy5jYWxjdWxhdGVUYWJsZUhlYWRlckhlaWdodCwgMCk7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGVsZW1lbnRIZWlnaHQsXHJcbiAgICB9KTtcclxuICAgIGluaXREYXRhICYmIGluaXREYXRhKCk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSB0aGlzLnBhZ2VDb250ZW50UmVmLmN1cnJlbnQ/LmNsaWVudEhlaWdodDtcclxuICAgIGlmIChlbGVtZW50SGVpZ2h0ID4gdGhpcy5zdGF0ZS5lbGVtZW50SGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIGVsZW1lbnRIZWlnaHQsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5zaG93TGVmdCAhPT0gdGhpcy5wcm9wcy5zaG93TGVmdCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICB0cmVlV2lkdGg6IHRoaXMucHJvcHMuc2hvd0xlZnQgPyAyNjAgOiAwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAvLyDnp7vpmaRyZXNpemXnm5HlkKxcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICBcInJlc2l6ZVwiLFxyXG4gICAgICB0aGlzLnRocm90dGxlQ2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHRcclxuICAgICk7XHJcbiAgfVxyXG4gIHNldFNlYXJjaFBhcmFtcyhwYXJhbXMsIGNhbGxCYWNrKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5zZXRTZWFyY2hQYXJhbXMocGFyYW1zKTtcclxuICAgIGNhbGxCYWNrICYmIGNhbGxCYWNrKHBhcmFtcyk7XHJcbiAgfVxyXG4gIGRvU3VibWl0KGRhdGEsIGxhYmVsID0gXCLnvJbovpFcIikge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uZG9TdWJtaXQoZGF0YSwgbGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QgPSAoY2hlY2tlZFRyZWVLZXlzOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQsIGRlcHRJZDogY2hlY2tlZFRyZWVLZXlzWzBdIH07XHJcbiAgICBpZiAodGhpcy5wcm9wcy5vblNlYXJjaCkge1xyXG4gICAgICB0aGlzLnByb3BzLm9uU2VhcmNoKHZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICB9O1xyXG5cclxuICAvL+aYvuekuuihqOWNlVxyXG4gIHNob3dGb3JtKHZhbHVlPzogYW55LCBlZGl0b3JmbGFnID0gXCJhZGRcIiwgY2FsbEJhY2s/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnByb3BzLmZvcm1QYWdlUHJvcHM/LmZvcm1UeXBlID09IFwicGFnZVwiKSB7XHJcbiAgICAgIGNvbnN0IHsgZnVuY3MgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgbGV0IHBhdGhuYW1lID0gYC9mb3JtcGFnZS8ke2VkaXRvcmZsYWcgPyBlZGl0b3JmbGFnIDogXCJhZGRcIn0vJHtcclxuICAgICAgICB0aGlzLnByb3BzLnRhYmxlQ29kZVxyXG4gICAgICB9YDtcclxuICAgICAgaWYgKGVkaXRvcmZsYWcgPT0gXCJlZGl0b3JcIiB8fCBlZGl0b3JmbGFnID09IFwic2VhcmNoXCIpIHtcclxuICAgICAgICBwYXRobmFtZSA9IHBhdGhuYW1lICsgXCI/aWQ9XCIgKyB2YWx1ZS5pZDtcclxuICAgICAgfVxyXG4gICAgICBmdW5jcz8uaGlzdG9yeShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXHJcbiAgICAgICAgICBzZXJ2aWNlTmFtZTogXCJzZXR0aW5nLXdlYlwiLFxyXG4gICAgICAgICAgc2VydmljZVBhdGg6IFwiL3NldHRpbmdcIixcclxuICAgICAgICAgIGlkOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSArICh2YWx1ZT8uaWQgfHwgXCJfXCIpICsgZWRpdG9yZmxhZyxcclxuICAgICAgICAgIHRpdGxlOlxyXG4gICAgICAgICAgICBg44CQJHtcclxuICAgICAgICAgICAgICBlZGl0b3JmbGFnID09IFwiYWRkXCJcclxuICAgICAgICAgICAgICAgID8gXCLmlrDlop5cIlxyXG4gICAgICAgICAgICAgICAgOiBlZGl0b3JmbGFnID09IFwiZWRpdG9yXCJcclxuICAgICAgICAgICAgICAgID8gXCLnvJbovpFcIlxyXG4gICAgICAgICAgICAgICAgOiBcIuafpeeci1wiXHJcbiAgICAgICAgICAgIH3jgJFgICsgdGhpcy5wcm9wcy5mb3JtUGFnZVByb3BzPy50aXRsZSB8fCBcIlwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRUYWJcIlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWUgPyB7IC4uLnZhbHVlIH0gOiBudWxsO1xyXG4gICAgICB0aGlzLmVkaXRvclJlZj8uY3VycmVudD8uc2hvdyhuZXdWYWx1ZSwgZWRpdG9yZmxhZywgY2FsbEJhY2spO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy/lhbPpl63ooajljZVcclxuICBoaWRlRm9ybSgpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldExvYWRpbmcobG9hZGluZyk7XHJcbiAgfVxyXG5cclxuICBzZXRFZGl0Rm9ybVZhbHVlcyh2YWx1ZSwgdHlwZSA9IFwi57yW6L6RXCIpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldEZvcm1WYWx1ZSh2YWx1ZSwgdHlwZSk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0Rm9ybVZhbHVlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5nZXRGb3JtVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8v5om56YeP5Yig6ZmkXHJcbiAgb25EZWxldGUoZGF0YT86IGFueSwgZGVsZXRlUG9zaXRpb24gPSBcInJvd1wiKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGRlbGV0ZVVybCxcclxuICAgICAgb25EZWxldGUsXHJcbiAgICAgIGRlbGV0ZVBhcmFtcyA9IHt9LFxyXG4gICAgICBidXR0b25DbGljayA9IHt9LFxyXG4gICAgICByZXF1ZXN0UGFyYW1zID0ge30sXHJcbiAgICAgIHJlcXVlc3RVcmxzID0ge30sXHJcbiAgICAgIHJlcXVlc3RDb25maWcgPSB7fSxcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgIGNvbnN0IHNlbGVjdGVkUm93S2V5cyA9IHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJvd0RhdGFzID0gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5nZXRTZWxlY3RlZFJvd0RhdGFzKCk7XHJcbiAgICBsZXQgdXJsID0gcmVxdWVzdFVybHMuZGVsZXRlVXJsID8gcmVxdWVzdFVybHMuZGVsZXRlVXJsIDogZGVsZXRlVXJsO1xyXG4gICAgbGV0IHBhcmFtczogYW55ID0gcmVxdWVzdFBhcmFtcy5kZWxldGVQYXJhbXNcclxuICAgICAgPyByZXF1ZXN0UGFyYW1zLmRlbGV0ZVBhcmFtc1xyXG4gICAgICA6IGRlbGV0ZVBhcmFtcztcclxuICAgIGlmIChkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIikge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRSb3dLZXlzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgbWVzc2FnZS53YXJuaW5nKFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE5pWw5o2u77yBXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTW9kYWwuY29uZmlybSh7XHJcbiAgICAgIGNvbnRlbnQ6IFwi5piv5ZCm56Gu6K6k5Yig6Zmk5omA6YCJ6aG577yfXCIsXHJcbiAgICAgIC8vIGNlbnRlcmVkOnRydWUsXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICBpZiAoYnV0dG9uQ2xpY2sub25EZWxldGUpIHtcclxuICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICBidXR0b25DbGljay5vbkRlbGV0ZSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZixcclxuICAgICAgICAgICAgICByZWNvcmQ6IGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dEYXRhcyA6IGRhdGEsXHJcbiAgICAgICAgICAgICAgaWRzOiBkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIiA/IHNlbGVjdGVkUm93S2V5cyA6IGRhdGE/LmlkLFxyXG4gICAgICAgICAgICAgIGZ1bmNzOiB0aGlzLnByb3BzLmZ1bmNzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob25EZWxldGUpIHtcclxuICAgICAgICAgIG9uRGVsZXRlICYmXHJcbiAgICAgICAgICAgIG9uRGVsZXRlKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dLZXlzIDogZGF0YSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmzkuI3og73kuLrnqbrvvIFcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgZGF0YTogZGF0YVBhcmFtcyA9IHt9LCAuLi5vdGhlclBhcmFtcyB9ID0gcGFyYW1zO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRQYXJhbXMgPSB7XHJcbiAgICAgICAgICBtZXRob2Q6IFwicG9zdFwiLFxyXG4gICAgICAgICAgYXV0b1ByZWZpeDogdHJ1ZSxcclxuICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICBpZHM6IGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dLZXlzLmpvaW4oKSA6IGRhdGEuaWQsXHJcbiAgICAgICAgICAgIC4uLmRhdGFQYXJhbXMsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLi4ucmVxdWVzdENvbmZpZyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBmaW5hbFBhcmFtcyA9IHt9IGFzIGFueTtcclxuICAgICAgICBmaW5hbFBhcmFtcyA9IHsgLi4uZGVmYXVsdFBhcmFtcywgLi4ub3RoZXJQYXJhbXMgfTtcclxuICAgICAgICByZXF1ZXN0KHVybCwge1xyXG4gICAgICAgICAgLi4uZmluYWxQYXJhbXMsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXM6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2Uuc3VjY2VzcyhcIuWIoOmZpOaIkOWKn++8gVwiKTtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBfdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vbkRlbGV0ZUNhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uRGVsZXRlQ2FsbEJhY2ssXHJcbiAgICAgICAgICAgICAgICAgIHsgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgX3RoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLmVycm9yKFwi5Yig6Zmk5aSx6LSl77yBXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3JcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgdGFibGVMb2FkKHBhcmFtczogYW55LCByZXF1ZXN0Q29uZmlnID0ge30pIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgcmVxdWVzdENvbmZpZzogZGVmYXVsdFJlcXVlc3RDb25maWcgPSB7fSxcclxuICAgICAgcmVxdWVzdFBhcmFtcyA9IHt9LFxyXG4gICAgICB0YWJsZVByb3BzID0ge30sXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgc3RvcmU6IHRhYmxlU3RvcmUgPSB7fSB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCBxdWVyeVBhcmFtczogYW55ID0gdGhpcy5jb252ZXJ0UXVlcnlQYXJhbXMoKTtcclxuICAgIGxldCBkYXRhID0gcXVlcnlQYXJhbXMuZGF0YSB8fCBxdWVyeVBhcmFtcy5wYXJhbXMgfHwge307XHJcblxyXG4gICAgbGV0IGZpbmFsUGFyYW1zID0ge1xyXG4gICAgICAuLi5kYXRhLFxyXG4gICAgICAuLi50YWJsZVN0b3JlLnJlcXVlc3RDb25maWc/LnBhcmFtcyxcclxuICAgICAgLi4ucGFyYW1zLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHsgcmVxdWVzdENvbmlnOiBzdG9yZUNvbmZpZyA9IHt9IH0gPSB0YWJsZVN0b3JlO1xyXG4gICAgY29uc3QgeyBwYXJhbXM6IHN0b3JlUGFyYW1zID0ge30sIC4uLm90aGVyU3RvcmVDb25maWcgfSA9IHN0b3JlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5sb2FkKHtcclxuICAgICAgLi4uZGVmYXVsdFJlcXVlc3RDb25maWcsXHJcbiAgICAgIC4uLm90aGVyU3RvcmVDb25maWcsXHJcbiAgICAgIC4uLnJlcXVlc3RDb25maWcsXHJcbiAgICAgIHBhcmFtczogeyAuLi5zdG9yZVBhcmFtcywgLi4uZmluYWxQYXJhbXMgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL+afpeivolxyXG4gIG9uU2VhcmNoKHBhcmFtcykge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBvblNlYXJjaCxcclxuICAgICAgb25DYWxsQmFja3MsXHJcbiAgICAgIHJlcXVlc3RQYXJhbXMgPSB7fSxcclxuICAgICAgdGFibGVQcm9wcyA9IHt9LFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHN0b3JlOiB0YWJsZVN0b3JlID0ge30gfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBsZXQgcXVlcnlQYXJhbXM6IGFueSA9IHRoaXMuY29udmVydFF1ZXJ5UGFyYW1zKCk7XHJcbiAgICBsZXQgZGF0YSA9IHF1ZXJ5UGFyYW1zLmRhdGEgfHwgcXVlcnlQYXJhbXMucGFyYW1zIHx8IHt9O1xyXG4gICAgbGV0IGZpbmFsUGFyYW1zID0ge1xyXG4gICAgICAuLi5kYXRhLFxyXG4gICAgICAuLi50YWJsZVN0b3JlLnJlcXVlc3RDb25maWc/LnBhcmFtcyxcclxuICAgICAgLi4ucGFyYW1zLFxyXG4gICAgfTtcclxuICAgIGlmIChvblNlYXJjaCkge1xyXG4gICAgICBvblNlYXJjaCh7IC4uLmZpbmFsUGFyYW1zLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50YWJsZUxvYWQoeyAuLi5maW5hbFBhcmFtcywgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfSk7XHJcbiAgICBvbkNhbGxCYWNrcz8ub25RdWVyeUNhbGxCYWNrICYmXHJcbiAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uUXVlcnlDYWxsQmFjayxcclxuICAgICAgICB7IHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZiwgcGFyYW1zOiBwYXJhbXMgfSxcclxuICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8v6KGo5qC86YeN5paw5Yqg6L29XHJcbiAgdGFibGVSZWxvYWQocGFyYW1zID0ge30sIGF1dG9Mb2FkID0gdHJ1ZSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8ucmVsb2FkKHtcclxuICAgICAgY2FsbGJhY2s6IChyZXMpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBhdXRvTG9hZCAmJlxyXG4gICAgICAgICAgcmVzPy5kYXRhPy5yZWNvcmRzPy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50UGFnZSAhPT0gMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8ucmVsb2FkKHtcclxuICAgICAgICAgICAgcGFyYW1zOiB7IGN1cnJlbnQ6IDEsIC4uLnBhcmFtcyB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRyZWVMb2FkKHBhcmFtczogYW55LCByZXF1ZXN0Q29uZmlnID0ge30pIHtcclxuICAgIGNvbnN0IHsgcmVxdWVzdENvbmZpZzogZGVmYXVsdFJlcXVlc3RDb25maWcgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgIHRoaXMudHJlZVJlZi5jdXJyZW50Py5zdG9yZS5sb2FkKHtcclxuICAgICAgLi4uZGVmYXVsdFJlcXVlc3RDb25maWcsXHJcbiAgICAgIC4uLnJlcXVlc3RDb25maWcsXHJcbiAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0RhdGFzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dEYXRhcygpO1xyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0tleXMoZGF0YTogQXJyYXk8U3RyaW5nIHwgTnVtYmVyPikge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWRSb3dLZXlzKGRhdGEpO1xyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0RhdGFzKGRhdGE6IEFycmF5PE9iamVjdD4pIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnNldFNlbGVjdGVkUm93RGF0YXMoZGF0YSk7XHJcbiAgfVxyXG4gIHJlc2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8ucmVzZXRTZWxlY3RlZFJvd0tleXMoKTtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFZhbHVlcygpIHtcclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmPy5jdXJyZW50Py5nZXRTZWFyY2hWYWx1ZXMoKTtcclxuICAgIHJldHVybiB7IC4uLmZyb21WYWx1ZSwgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfTtcclxuICB9XHJcblxyXG4gIGdldENoaWxkcmVuRGF0YShkYXRhLCBrZXlzID0gW10pIHtcclxuICAgIGNvbnN0IHsgdGFibGVQcm9wcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IHJlc0tleSA9IFtdO1xyXG4gICAgbGV0IGtleSA9IFwiXCI7XHJcbiAgICBpZiAoZGF0YS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5jaGlsZE5vZGVzO1xyXG4gICAgICBjaGlsZHJlbi5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByb3dLZXkgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICBrZXkgPSByb3dLZXkoaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGtleSA9IGl0ZW1bcm93S2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbkRhdGEoaXRlbS5jaGlsZE5vZGVzLCBrZXlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzS2V5ID0gWy4uLmtleXMsIGtleV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc0tleSA9IFsuLi5rZXlzLCBrZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc0tleTtcclxuICB9XHJcblxyXG4gIHJlbmRlclRvb2xCdXR0b25zKHRvb2xidXR0b25zOiBhbnksIHRvb2xiYXJGbGFnKSB7XHJcbiAgICBjb25zdCBmbGFnID0gdG9vbGJ1dHRvbnMubGVuZ3RoID4gNTtcclxuICAgIGNvbnN0IHsgc2hvd1NlYXJjaCA9IHRydWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdG9vbGJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID0gaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGluZGV4ID4gMykge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnQtaXRlbVwiKVxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgbW9yZU9wZW46IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2soKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgICAgdHlwZT17XCJsaW5rXCJ9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT5cclxuICAgICAgICAgICAgICAgIHtpY29ufVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10b29sLWJ1dHRvbnNcIikpfVxyXG4gICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IDAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIHt0b29sYnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgNCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IDEyLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gNCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICAgICAgICB0aXRsZT17bnVsbH1cclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAgICAgb3Blbj17dGhpcy5zdGF0ZS5tb3JlT3Blbn1cclxuICAgICAgICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXsob3BlbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZU9wZW46IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVPcGVuOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgLy8gb3Blbj17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgLy8gb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydwb3AtYm94J119XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICDmm7TlpJogPERvd25PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogaW5kZXggPT0gdG9vbGJ1dHRvbnMubGVuZ3RoIC0gMSA/IDAgOiAxMixcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge2l0ZW19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnM6IGFueSwgcm93UmVjb3JkOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgYWN0aW9uUHJvcHMsIHRhYmxlUHJvcHMgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgYmFzZUFjdGlvbkNvbHVtbiB9ID0gY29uZmlnKCk7XHJcbiAgICBjb25zdCBuZXdCdXR0b25zID0gW107XHJcbiAgICBjb25zdCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCBrZXkgPSBcIlwiO1xyXG4gICAgaWYgKHR5cGVvZiByb3dLZXkgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGtleSA9IHJvd0tleShyb3dSZWNvcmQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAga2V5ID0gcm93UmVjb3JkW3Jvd0tleV07XHJcbiAgICB9XHJcbiAgICBsZXQgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGlmIChhY3Rpb25Qcm9wcz8uc2hvd0ljb24gPT09IHRydWUgfHwgYmFzZUFjdGlvbkNvbHVtbi5zaG93SWNvbiA9PT0gdHJ1ZSlcclxuICAgICAgc2hvd0ljb24gPSB0cnVlO1xyXG4gICAgY29sdW1uQnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgaWNvbiwgcmVjb3JkU2hvdywgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChyZWNvcmRTaG93KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZWNvcmRTaG93ID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50T3B0aW9uID0ge1xyXG4gICAgICAgICAgICAgIHJlY29yZDogcm93UmVjb3JkLFxyXG4gICAgICAgICAgICAgIHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZixcclxuICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgVXRpbHMgPSB7IC4uLnRoaXMucHJvcHMuVWl0bHMgfTtcclxuICAgICAgICAgICAgbGV0IGZ1bmMgPSBuZXcgRnVuY3Rpb24oXCJldmVudE9wdGlvbixVdGlsc1wiLCByZWNvcmRTaG93KTtcclxuICAgICAgICAgICAgY29uc3Qgc2hvdyA9IGZ1bmMoZXZlbnRPcHRpb24sIFV0aWxzKTtcclxuICAgICAgICAgICAgc2hvdyAmJiBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxldCByZWNvcmQgPSByb3dSZWNvcmQ7XHJcbiAgICAgICAgICAgIGlmIChldmFsKHJlY29yZFNob3cpKSB7XHJcbiAgICAgICAgICAgICAgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVjb3JkU2hvdyA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgIGNvbnN0IHNob3cgPSByZWNvcmRTaG93KHJvd1JlY29yZCk7XHJcbiAgICAgICAgICBzaG93ICYmIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGxldCBudW1iZXIgPSBhY3Rpb25Qcm9wcz8uYnV0dG9uTnVtYmVyXHJcbiAgICAgID8gYWN0aW9uUHJvcHM/LmJ1dHRvbk51bWJlclxyXG4gICAgICA6IGJhc2VBY3Rpb25Db2x1bW4/LmJ1dHRvbk51bWJlclxyXG4gICAgICA/IGJhc2VBY3Rpb25Db2x1bW4/LmJ1dHRvbk51bWJlclxyXG4gICAgICA6IDM7XHJcbiAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgaWYgKG51bWJlciA9PSBcImFsbFwiKSB7XHJcbiAgICAgIGZsYWcgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZsYWcgPSBuZXdCdXR0b25zLmxlbmd0aCA+IG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gbmV3QnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgcmVjb3JkU2hvdywgaWNvbiwgc2hvdywgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChpbmRleCA+IE51bWJlcihudW1iZXIpIC0gMSkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnQtaXRlbVwiKVxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7IC4uLnRoaXMuc3RhdGUucG9wb3BlbnMgfTtcclxuICAgICAgICAgICAgICBkYXRhW3Jvd1JlY29yZC5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHBvcG9wZW5zOiBkYXRhLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyb3dSZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICB7aWNvbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmV3QnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgcmVjb3JkU2hvdywgaWNvbiwgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyKSB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSwge1xyXG4gICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3ItZmlyc3RcIildOiBpbmRleCA9PT0gMCxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyb3dSZWNvcmQpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgaWNvbj17aWNvbn1cclxuICAgICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICAgIHR5cGU9e1wibGlua1wifVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT5cclxuICAgICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IG51bWJlcikge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgdHJpZ2dlcj17W1wiY2xpY2tcIl19XHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICBvcGVuPXt0aGlzLnN0YXRlLnBvcG9wZW5zW2tleV0gfHwgZmFsc2V9XHJcbiAgICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXsob3BlbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7IC4uLnRoaXMuc3RhdGUucG9wb3BlbnMgfTtcclxuICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wb3BlbnM6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wb3BlbnM6IHt9LFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIC8vIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1sncG9wJ119XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIil9PlxyXG4gICAgICAgICAgICAgICAgPEVsbGlwc2lzT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpLCB7XHJcbiAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3ItZmlyc3RcIildOiBpbmRleCA9PT0gMCxcclxuICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socm93UmVjb3JkKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgdHlwZT1cImxpbmtcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7c2hvd0ljb24gIT09IGZhbHNlICYmIChcclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT5cclxuICAgICAgICAgICAgICAgIHtpY29ufVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGV4dFwiKX0+XHJcbiAgICAgICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgLy/moJHngrnlh7vkuovku7ZcclxuICB0cmVlU2VsZWN0KHNlbGVjdGVkS2V5czogYW55LCBvYmo6IGFueSkge1xyXG4gICAgbGV0IGtleXdvcmQgPSBcIlwiO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzZWFyY2hLZXkgPSBcImtleVwiLFxyXG4gICAgICBzZWFyY2hGaWVsZCA9IFwiXCIsXHJcbiAgICAgIHBhcmFudFNlbGVjdCA9IHRydWUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcy50cmVlUHJvcHM7XHJcbiAgICBjb25zdCB7IHRyZWVTZWxlY3RlZEtleSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWQsIHNlbGVjdGVkTm9kZXMgfSA9IG9iajtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAga2V5d29yZCA9IHNlbGVjdGVkTm9kZXNbMF0uZGF0YXJlZi5hdHRyaWJ1dGVbc2VhcmNoS2V5XTtcclxuICAgICAgaWYgKHBhcmFudFNlbGVjdCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBzZWxlY3RlZEtleXNbMF0sXHJcbiAgICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHsgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGVzWzBdLmlzTGVhZiB8fCAhc2VsZWN0ZWROb2Rlc1swXS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkS2V5c1swXSAhPT0gdHJlZVNlbGVjdGVkS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgIHRyZWVTZWxlY3RlZEtleTogc2VsZWN0ZWRLZXlzWzBdLFxyXG4gICAgICAgICAgICAgIHRyZWVTZWFyY2hQcmFtczogeyBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBrZXl3b3JkLFxyXG4gICAgICAgIHRyZWVTZWFyY2hQcmFtczoge30sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMub25UcmVlU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMucHJvcHMub25UcmVlU2VsZWN0KHNlbGVjdGVkS2V5cywgb2JqKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpIHx8IHt9O1xyXG4gICAgc2VhcmNoRmllbGQgJiYgdGhpcy50YWJsZUxvYWQoeyAuLi5mcm9tVmFsdWUsIFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSk7XHJcbiAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50cmVlU2VsZWN0Q2FsbEJhY2sgJiZcclxuICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8udHJlZVNlbGVjdENhbGxCYWNrLFxyXG4gICAgICAgIHsgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLCBzZWxlY3RlZEtleXM6IHNlbGVjdGVkS2V5cywgb2JqOiBvYmogfSxcclxuICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICk7XHJcbiAgICAvLyB1dGlscy5jYWxsYmFjayh0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50cmVlU2VsZWN0Q2FsbEJhY2ssIHRoaXMsIFtcclxuICAgIC8vICAgc2VsZWN0ZWRLZXlzLFxyXG4gICAgLy8gICBvYmosXHJcbiAgICAvLyBdKTtcclxuICB9XHJcbiAgcmVzZXRTZWFyY2goKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5yZXNldEZpZWxkcygpO1xyXG4gIH1cclxuICBnZXRUZXh0KHByb3BzLCB0ZXh0KSB7XHJcbiAgICBsZXQgbmV3VGV4dCA9IHRleHQ7XHJcbiAgICBpZiAocHJvcHM/LmRhdGEgJiYgcHJvcHM/LmRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGRhdGEgPSBwcm9wcy5kYXRhO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGE/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGRhdGFbaV0udmFsdWUgPT0gdGV4dCkge1xyXG4gICAgICAgICAgbmV3VGV4dCA9IGRhdGFbaV0ubGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3VGV4dDtcclxuICB9XHJcbiAgc2V0VGFibGVEYXRhKGRhdGEpIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmU/LnNldERhdGEoZGF0YSk7XHJcbiAgfVxyXG4gIHNldFRyZWVEYXRhKGRhdGEpIHtcclxuICAgIHRoaXMudHJlZVJlZi5jdXJyZW50Py5zdG9yZT8uc2V0RGF0YShkYXRhKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRLZXkgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgIGxldCByZXMgPSBbXTtcclxuICAgIGZvciAobGV0IGtleSBpbiBzZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBrZXlzID0gc2VsZWN0ZWRba2V5XTtcclxuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlcyA9IFsuLi5yZXMsIC4uLmtleXNdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH07XHJcblxyXG4gIGNvbnZlcnRRdWVyeVBhcmFtcygpIHtcclxuICAgIGNvbnN0IHsgcmVxdWVzdFBhcmFtcyA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IHF1ZXJ5UGFyYW1zOiBhbnkgPSByZXF1ZXN0UGFyYW1zLnF1ZXJ5UGFyYW1zO1xyXG4gICAgaWYgKHF1ZXJ5UGFyYW1zICYmIHR5cGVvZiBxdWVyeVBhcmFtcyA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGNvbnN0IFV0aWxzID0gdGhpcy5wcm9wcy5VdGlscyB8fCB7fTtcclxuICAgICAgbGV0IGZ1bmMgPSBuZXcgRnVuY3Rpb24oXCJVdGlsc1wiLCBxdWVyeVBhcmFtcyk7XHJcbiAgICAgIGxldCBjb252ZXJQYXJhbXMgPSBmdW5jKFV0aWxzKTtcclxuICAgICAgcXVlcnlQYXJhbXMgPSBjb252ZXJQYXJhbXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zIHx8IHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgLy8g6K6h566X6KGo5aS06auY5bqm55qE5pa55rOVXHJcbiAgY2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHQgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy50YWJsZVdyYXBwZXJSZWYuY3VycmVudCkge1xyXG4gICAgICBjb25zdCB0YWJsZUhlYWRlciA9XHJcbiAgICAgICAgdGhpcy50YWJsZVdyYXBwZXJSZWYuY3VycmVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgXCJhbnQtdGFibGUtdGhlYWRcIlxyXG4gICAgICAgIClbMF07XHJcbiAgICAgIGlmICh0YWJsZUhlYWRlcikge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IHRhYmxlSGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuICAgICAgICBpZiAoaGVhZGVySGVpZ2h0ICE9PSB0aGlzLnN0YXRlLnRhYmxlSGVhZGVySGVpZ2h0KSB7XHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgdGFibGVIZWFkZXJIZWlnaHQ6IGhlYWRlckhlaWdodCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbiAgdGhyb3R0bGVDYWxjdWxhdGVUYWJsZUhlYWRlckhlaWdodCA9IHRocm90dGxlKFxyXG4gICAgdGhpcy5jYWxjdWxhdGVUYWJsZUhlYWRlckhlaWdodCxcclxuICAgIDUwMFxyXG4gICk7XHJcblxyXG4gIC8vIOS8mOWMluaLluaLveebuOWFs+aWueazlVxyXG4gIGhhbmRsZU1vdXNlRG93bihlOiBSZWFjdC5Nb3VzZUV2ZW50KSB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8g5Yib5bu66YGu572p5bGC5Lul5aSE55CGaWZyYW1l5Zy65pmvXHJcbiAgICBjb25zdCBtYXNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIG1hc2suc3R5bGUuY3NzVGV4dCA9IGBcclxuICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgICB6LWluZGV4OiA5OTk5O1xyXG4gICAgICBjdXJzb3I6IGNvbC1yZXNpemU7XHJcbiAgICBgO1xyXG4gICAgbWFzay5pZCA9IFwiZHJhZy1tYXNrXCI7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1hc2spO1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZU1vdXNlTW92ZSA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gZS5zY3JlZW5YO1xyXG4gICAgICAvLyDpmZDliLbmnIDlsI8xMDBweO+8jOacgOWkpzUwMHB4XHJcbiAgICAgIGlmIChuZXdXaWR0aCA+PSA1MCAmJiBuZXdXaWR0aCA8PSA4MDApIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdHJlZVdpZHRoOiBuZXdXaWR0aCB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB0aHJvdHRsZWRNb3VzZU1vdmUgPSB0aHJvdHRsZShoYW5kbGVNb3VzZU1vdmUsIDE2KTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVNb3VzZVVwID0gKCkgPT4ge1xyXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRocm90dGxlZE1vdXNlTW92ZSk7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZU1vdXNlVXApO1xyXG4gICAgICAvLyDnp7vpmaTpga7nvanlsYJcclxuICAgICAgY29uc3QgbWFzayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZHJhZy1tYXNrXCIpO1xyXG4gICAgICBpZiAobWFzaykge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFzayk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aHJvdHRsZWRNb3VzZU1vdmUpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlTW91c2VVcCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGNvbHVtbnMgPSBbXSxcclxuICAgICAgc2hvd1NlYXJjaCA9IHRydWUsXHJcbiAgICAgIGNoaWxkcmVuLFxyXG4gICAgICBzdWJtaXRVcmwgPSBcIlwiLFxyXG4gICAgICB0YWJsZVByb3BzID0ge30sXHJcbiAgICAgIHRyZWVQcm9wcyA9IHt9LFxyXG4gICAgICBmb3JtUGFnZVByb3BzID0ge30sXHJcbiAgICAgIHNob3dMZWZ0ID0gZmFsc2UsXHJcbiAgICAgIHN1Ym1pdFBhcmFtcyA9IHt9LFxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiA9IHRydWUsXHJcbiAgICAgIGJ1dHRvbnMgPSBbXSxcclxuICAgICAgZWRpdG9yRm9ybSA9IHRydWUsXHJcbiAgICAgIG9uU2hvd0Zvcm0sXHJcbiAgICAgIGZvcm1DaGFuZ2VWYWxpZCA9IHRydWUsXHJcbiAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID0gXCJidXR0b21cIixcclxuICAgICAgYWN0aW9uUHJvcHMsXHJcbiAgICAgIGRlbGV0ZVBvc2l0aW9uID0gXCJ0b29sYmFyXCIsXHJcbiAgICAgIGJ1dHRvbkNsaWNrID0ge30sXHJcbiAgICAgIHBlcm1pc3Npb24gPSB7IGhhczogZmFsc2UgfSxcclxuICAgICAgcmVxdWVzdFBhcmFtcyA9IHt9LFxyXG4gICAgICByZXF1ZXN0VXJscyA9IHt9LFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0YWJsZVN0b3JlID0ge30sXHJcbiAgICAgIGZpbHRlckNvbHVtbiA9IHRydWUsXHJcbiAgICAgIGFjdGlvbkNvbHVtbiA9IHRydWUsXHJcbiAgICAgIHNob3dSb3dTZWxlY3Rpb24gPSB0cnVlLFxyXG4gICAgICBjb2x1bW5PcmRlciA9IHRydWUsXHJcbiAgICAgIGV4cGFuZGFibGUgPSB7fSxcclxuICAgICAgcGFyYW50U2VsZWN0ID0gdHJ1ZSxcclxuICAgICAgdGl0bGU6IHRhYmxlVGl0bGUsXHJcbiAgICAgIC4uLm90aGVydGFibGVQYXJhbXNcclxuICAgIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IG5ld1RhYmxlU3RvcmUgPSB7IC4uLnRhYmxlU3RvcmUgfTtcclxuICAgIGlmIChyZXF1ZXN0UGFyYW1zLnF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgIGxldCBxdWVyeVBhcmFtczogYW55ID0gdGhpcy5jb252ZXJ0UXVlcnlQYXJhbXMoKTtcclxuICAgICAgbGV0IGRhdGEgPSBxdWVyeVBhcmFtcz8uZGF0YSB8fCBxdWVyeVBhcmFtcz8ucGFyYW1zIHx8IHt9O1xyXG4gICAgICBuZXdUYWJsZVN0b3JlLnJlcXVlc3RDb25maWcgPSB7XHJcbiAgICAgICAgcGFyYW1zOiB7IC4uLmRhdGEsIC4uLm5ld1RhYmxlU3RvcmUucmVxdWVzdENvbmZpZz8ucGFyYW1zIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0cmVlU3RvcmUgPSB7fSxcclxuICAgICAgc2hvd1NlYXJjaDogdHJlZVNlYXJjaCA9IHRydWUsXHJcbiAgICAgIHRpdGxlQWxpYXMgPSBcInRpdGxlXCIsXHJcbiAgICAgIHRpdGxlOiB0cmVlVGl0bGUsXHJcbiAgICAgIC4uLm90aGVydHJlZVBhcmFtc1xyXG4gICAgfSA9IHRyZWVQcm9wcztcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBsZXQgdGFibGVQYXJhbXMgPSB7XHJcbiAgICAgIGZpbHRlckNvbHVtbixcclxuICAgICAgc3RvcmU6IHtcclxuICAgICAgICBsaXN0ZW5lcnM6IHtcclxuICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50YWJsZUxvYWRDYWxsQmFjayAmJlxyXG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50YWJsZUxvYWRDYWxsQmFjayhkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi5uZXdUYWJsZVN0b3JlLFxyXG4gICAgICB9LFxyXG4gICAgICAuLi5vdGhlcnRhYmxlUGFyYW1zLFxyXG4gICAgfSBhcyBhbnk7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsdWU6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgY29sdW1uQnV0dG9uczogYW55ID0gW107XHJcbiAgICBjb25zdCB7IGVsZW1lbnRIZWlnaHQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgcGVybWlzc2lvbkJ1dHRvbnMgPSBbXTtcclxuICAgIGlmIChwZXJtaXNzaW9uLmhhcyAmJiBwZXJtaXNzaW9uLm1lbnVDb2RlKSB7XHJcbiAgICAgIHBlcm1pc3Npb25CdXR0b25zID1cclxuICAgICAgICBnZXRCdXR0b25QZXJtaXNzb25zKHBlcm1pc3Npb24ubWVudUNvZGUpLnBlcm1pc3NvbnMgfHwgW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYmogPSBjb252ZXJ0Q29sdW1ucyhjb2x1bW5zLCB7fSk7XHJcbiAgICBsZXQgdGFibGVDb2x1bW46IGFueVtdID0gZ2V0TmV3Q29sdW1ucyhjb2x1bW5zLCB0aGlzLnByb3BzKTtcclxuICAgIGNvbnN0IHNlYXJjaEZvcm1zID0gb2JqLnNlYXJjaEZvcm1zIHx8IFtdO1xyXG4gICAgY29uc3QgZWRpdG9yRm9ybXMgPSBvYmouZWRpdG9yRm9ybXMgfHwgW107XHJcbiAgICBjb25zdCB0b29sQnV0dG9uczogYW55ID0gW107XHJcbiAgICBjb25zdCBmb3JtQnV0dG9uOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IHsgYmFzZUFjdGlvbkNvbHVtbiB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgc2hvd0ljb24gPSB0cnVlO1xyXG4gICAgaWYgKGFjdGlvblByb3BzPy5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBlbHNlIGlmIChiYXNlQWN0aW9uQ29sdW1uLnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGNvbnN0IGJ1dHRvbk1hcCA9IHtcclxuICAgICAgZWRpdG9yOiB7IG5hbWU6IFwi57yW6L6RXCIsIGNvZGU6IFwiZWRpdG9yXCIsIGljb246IDxFZGl0T3V0bGluZWQgLz4gfSxcclxuICAgICAgZGVsZXRlOiB7IG5hbWU6IFwi5Yig6ZmkXCIsIGNvZGU6IFwiZGVsZXRlXCIsIGljb246IDxEZWxldGVPdXRsaW5lZCAvPiB9LFxyXG4gICAgICBzZWFyY2g6IHsgbmFtZTogXCLmn6XnnItcIiwgY29kZTogXCJzZWFyY2hcIiwgaWNvbjogPEV5ZU91dGxpbmVkIC8+IH0sXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmV0dXJuQnV0dG9uID0gKGNvZGUsIHNob3cgPSBcIlwiLCBkZWZhdWx0UHJvcHMgPSB7fSkgPT4ge1xyXG4gICAgICBsZXQgcHJvcHMgPSB7XHJcbiAgICAgICAgaWNvbjogc2hvd0ljb24gPyBidXR0b25NYXBbY29kZV0uaWNvbiA6IG51bGwsXHJcbiAgICAgICAgdHlwZTogXCJsaW5rXCIsXHJcbiAgICAgICAgLi4uZGVmYXVsdFByb3BzLFxyXG4gICAgICB9IGFzIGFueTtcclxuXHJcbiAgICAgIGlmIChzaG93KSB7XHJcbiAgICAgICAgcHJvcHMgPSB7IC4uLnByb3BzLCByZWNvcmRTaG93OiBzaG93IH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBvbkNsaWNrPXsocmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT0gXCJkZWxldGVcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMub25EZWxldGUocmVjb3JkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoY29kZSA9PSBcImVkaXRvclwiICYmIGJ1dHRvbkNsaWNrLm9uRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgYnV0dG9uQ2xpY2sub25FZGl0b3IsXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkOiByZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5VdGlsc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gXCJzZWFyY2hcIiAmJiBidXR0b25DbGljay5vblNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbkNsaWNrLm9uU2VhcmNoLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZDogcmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3M6IHRoaXMucHJvcHMuZnVuY3MsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBjb2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIGNvZGUsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBjYWxsQmFjayA9XHJcbiAgICAgICAgICAgICAgICAgIGNvZGUgPT0gXCJlZGl0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25FZGl0b3JDYWxsQmFja1xyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25TZWFyY2hDYWxsQmFjaztcclxuICAgICAgICAgICAgICAgIGNhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZixcclxuICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDogcmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIHsuLi5wcm9wc31cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7YnV0dG9uTWFwW2NvZGVdPy5uYW1lfVxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGNoZWNrUGVyc3Npb24gPSAoY29kZSkgPT4ge1xyXG4gICAgICBpZiAoIXBlcm1pc3Npb24uaGFzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25CdXR0b25zLmluZGV4T2YoY29kZSkgPiAtMTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGJ1dHRvbnMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKChpdGVtID09IFwiYWRkXCIgfHwgaXRlbS5jb2RlID09IFwiYWRkXCIpICYmIGNoZWNrUGVyc3Npb24oXCJhZGRcIikpIHtcclxuICAgICAgICB0b29sQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHsgb25TaG93Rm9ybSwgYnV0dG9uQ2xpY2sgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICAgICAgICBpZiAoYnV0dG9uQ2xpY2s/Lm9uQWRkKSB7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgYnV0dG9uQ2xpY2sub25BZGQsXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3M6IHRoaXMucHJvcHMuZnVuY3MsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKG51bGwsIFwiYWRkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKG51bGwsIG51bGwsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uQWRkQ2FsbEJhY2sgJiZcclxuICAgICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25BZGRDYWxsQmFjayxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgaWNvbj17PFBsdXNPdXRsaW5lZCAvPn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5re75YqgXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIChpdGVtID09IFwiZGVsZXRlX2JhdGNoXCIgfHwgaXRlbS5jb2RlID09IFwiZGVsZXRlX2JhdGNoXCIpICYmXHJcbiAgICAgICAgY2hlY2tQZXJzc2lvbihcImRlbGV0ZV9iYXRjaFwiKVxyXG4gICAgICApIHtcclxuICAgICAgICB0b29sQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5vbkRlbGV0ZS5iaW5kKHRoaXMsIG51bGwsIFwidG9vbGJhclwiKX1cclxuICAgICAgICAgICAgaWNvbj17PERlbGV0ZU91dGxpbmVkIC8+fVxyXG4gICAgICAgICAgICBkYW5nZXJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5om56YeP5Yig6ZmkXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChjaGVja1BlcnNzaW9uKGl0ZW0uY29kZSA/IGl0ZW0uY29kZSA6IGl0ZW0pKSB7XHJcbiAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goXHJcbiAgICAgICAgICAgIHJldHVybkJ1dHRvbihcclxuICAgICAgICAgICAgICBpdGVtLmNvZGUgPyBpdGVtLmNvZGUgOiBpdGVtLFxyXG4gICAgICAgICAgICAgIGl0ZW0ucmVjb3JkU2hvdyxcclxuICAgICAgICAgICAgICBpdGVtLnByb3BzIHx8IHt9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgY2hpbGRyZW4ubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xyXG4gICAgICAgICAgaXRlbS5tYXAoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBjaGlsZD8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiICYmXHJcbiAgICAgICAgICAgICAgY2hlY2tQZXJzc2lvbihjaGlsZD8ucHJvcHM/LmNvZGUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRvb2xCdXR0b25zLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIGNoaWxkPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJmb3JtQnV0dG9uXCIgJiZcclxuICAgICAgICAgICAgICBjaGVja1BlcnNzaW9uKGNoaWxkPy5wcm9wcz8uY29kZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgZm9ybUJ1dHRvbi5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAoY2hpbGQ/LnByb3BzPy5wYWdlVHlwZSA9PSBcImNvbHVtbkJ1dHRvblwiIHx8XHJcbiAgICAgICAgICAgICAgICBjaGlsZD8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpICYmXHJcbiAgICAgICAgICAgICAgY2hlY2tQZXJzc2lvbihjaGlsZD8ucHJvcHM/LmNvZGUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW0/LnByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIiAmJlxyXG4gICAgICAgICAgICBjaGVja1BlcnNzaW9uKGl0ZW0/LnByb3BzPy5jb2RlKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRvb2xCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY29sdW1uQnV0dG9uXCIgfHxcclxuICAgICAgICAgICAgICBpdGVtPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjbG91bW5CdXR0b25cIikgJiZcclxuICAgICAgICAgICAgY2hlY2tQZXJzc2lvbihpdGVtPy5wcm9wcz8uY29kZSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgY29uc3QgeyBwcm9wcyB9OiBhbnkgPSBjaGlsZHJlbjtcclxuICAgICAgaWYgKHByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIiAmJiBjaGVja1BlcnNzaW9uKHByb3BzPy5jb2RlKSkge1xyXG4gICAgICAgIHRvb2xCdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIChwcm9wcz8ucGFnZVR5cGUgPT0gXCJjb2x1bW5CdXR0b25cIiB8fFxyXG4gICAgICAgICAgcHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpICYmXHJcbiAgICAgICAgY2hlY2tQZXJzc2lvbihwcm9wcz8uY29kZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKGNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYWN0aW9uQ29sdW1uICYmXHJcbiAgICAgIHRhYmxlQ29sdW1uLnB1c2goe1xyXG4gICAgICAgIHRpdGxlOiBcIuaTjeS9nFwiLFxyXG4gICAgICAgIGRhdGFJbmRleDogXCJhY3Rpb25cIixcclxuICAgICAgICBhbGlnbjogYWN0aW9uUHJvcHM/LnRleHRBbGlnblxyXG4gICAgICAgICAgPyBhY3Rpb25Qcm9wcz8udGV4dEFsaWduXHJcbiAgICAgICAgICA6IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICA/IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICA6IFwibGVmdFwiLFxyXG4gICAgICAgIHdpZHRoOiBhY3Rpb25Qcm9wcz8ud2lkdGhcclxuICAgICAgICAgID8gYWN0aW9uUHJvcHM/LndpZHRoXHJcbiAgICAgICAgICA6IGJhc2VBY3Rpb25Db2x1bW4ud2lkdGhcclxuICAgICAgICAgID8gYmFzZUFjdGlvbkNvbHVtbi53aWR0aFxyXG4gICAgICAgICAgOiAyMDAsXHJcbiAgICAgICAgZml4ZWQ6IFwicmlnaHRcIixcclxuICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnksIHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWFjdGlvblwiKX0+XHJcbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnMsIHJlY29yZCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAoY29sdW1uT3JkZXIpXHJcbiAgICAgIHRhYmxlQ29sdW1uID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIuW6j+WPt1wiLFxyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0LCByZWFjb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPD57aW5kZXggKyAxfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50YWJsZUNvbHVtbixcclxuICAgICAgXTtcclxuICAgIGxldCBzZWFyY2hGbGFnID0gc2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9XHJcbiAgICAgIHNob3dUb29sQnV0dG9uICYmXHJcbiAgICAgIHRvb2xCdXR0b25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID09IFwiYnV0dG9tXCI7XHJcbiAgICBsZXQgdG9vbGJhckZsYWcgPSAhKFxyXG4gICAgICB0YWJsZVByb3BzLnRvb2xiYXIgPT0gZmFsc2UgfHxcclxuICAgICAgdGFibGVQcm9wcy50b29sYmFyPy5zaG93ID09IGZhbHNlIHx8XHJcbiAgICAgIHRhYmxlUHJvcHMudG9vbGJhcj8udG9vbHM/Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgIHRhYmxlVG9vbD8uc2hvdyA9PSBmYWxzZVxyXG4gICAgKTtcclxuICAgIGxldCBoZWFkZXJIZWlnaHQgPSBzaG93U2VhcmNoICYmIHNlYXJjaEZvcm1zLmxlbmd0aCA+IDAgPyAxMDQgOiAwOyAvL+WktOmDqOaQnOe0ouagj+mrmOW6plxyXG4gICAgbGV0IHRvb2xIZWlnaHQgPSB0YWJsZVRpdGxlIHx8IHRvb2xGbGFnID8gNTAgOiAwO1xyXG4gICAgbGV0IHBhZGRpbmdIZWlnaHQgPSAyMCAqIDI7IC8v5LiK5LiL6Ze06LedXHJcbiAgICBsZXQgdGFibGVDb250ZW50SGVpZ2h0ID0gZWxlbWVudEhlaWdodCAtIHBhZGRpbmdIZWlnaHQ7XHJcbiAgICBsZXQgUGFnaW5hdGlvbkhlaWdodCA9IHRhYmxlUHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UgPyAzMiArIDE2IDogMDsgLy8zMiDkuLrliIbpobXlmajpq5jluqYsMTbkuLptYXJnaW7pl7Tot51cclxuICAgIGxldCB0YWJsZUhlaWdodCA9IHRhYmxlQ29udGVudEhlaWdodCAtIFBhZ2luYXRpb25IZWlnaHQ7XHJcbiAgICBsZXQgdGFibGVTcm9sbEhlaWdodCA9XHJcbiAgICAgIHRhYmxlQ29udGVudEhlaWdodCAtXHJcbiAgICAgICh0aGlzLnN0YXRlLnRhYmxlSGVhZGVySGVpZ2h0ID4gMCA/IHRoaXMuc3RhdGUudGFibGVIZWFkZXJIZWlnaHQgOiA1NSkgLVxyXG4gICAgICBQYWdpbmF0aW9uSGVpZ2h0O1xyXG4gICAgLy8gaWYgKHRhYmxlUHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHNjcm9sbCA9IHRhYmxlUGFyYW1zLnNjcm9sbDtcclxuICAgIHRhYmxlUGFyYW1zID0ge1xyXG4gICAgICAuLi50YWJsZVBhcmFtcyxcclxuICAgICAgc2Nyb2xsOiB7IHg6IFwibWF4LWNvbnRlbnRcIiwgeTogdGFibGVTcm9sbEhlaWdodCwgLi4uc2Nyb2xsIH0sXHJcbiAgICB9O1xyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZVwiKSwgY2xhc3NOYW1lKX1cclxuICAgICAgICByZWY9e3RoaXMucGFnZVJlZn1cclxuICAgICAgPlxyXG4gICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10aXRsZVwiKSl9PlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5wYWdlVGl0bGV9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1wYW5lXCIpKX1cclxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3Nob3dMZWZ0ICYmIChcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWxlZnRcIil9XHJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IHRoaXMuc3RhdGUudHJlZVdpZHRoIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7dHJlZVRpdGxlICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0cmVlLXRpdGxlXCIpfT57dHJlZVRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwidHJlZS1jb250ZW50XCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJ0cmVlLWNvbnRlbnQtbm90aXRsZVwiKV06ICF0cmVlVGl0bGUsXHJcbiAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRyZWUtZHJhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXt0aGlzLmhhbmRsZU1vdXNlRG93bi5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPFRyZWVcclxuICAgICAgICAgICAgICAgICAgc3RvcmU9e3sgLi4udHJlZVN0b3JlIH19XHJcbiAgICAgICAgICAgICAgICAgIHNob3dJY29uPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgY2hlY2thYmxlPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZT17dHJlZVNlYXJjaH1cclxuICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMudHJlZVNlbGVjdC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEtleXM9e1t0aGlzLnN0YXRlLnRyZWVTZWxlY3RlZEtleV19XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlQWxpYXM9e3RpdGxlQWxpYXN9XHJcbiAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy50cmVlUmVmfVxyXG4gICAgICAgICAgICAgICAgICB7Li4ub3RoZXJ0cmVlUGFyYW1zfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtcmlnaHRcIiksIHtcclxuICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLW5vLWxlZnQtcmlnaHRcIildOiAhc2hvd0xlZnQsXHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygxMDAlIC0gJHt0aGlzLnN0YXRlLnRyZWVXaWR0aH1weCAtICR7XHJcbiAgICAgICAgICAgICAgICBzaG93TGVmdCA/IDE1IDogMFxyXG4gICAgICAgICAgICAgIH1weClgLFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7c2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWhlYWRlcnNlYXJjaFwiKX0+XHJcbiAgICAgICAgICAgICAgICA8SGVhZGVyU2VhcmNoXHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZvcm1zPXtzZWFyY2hGb3Jtc31cclxuICAgICAgICAgICAgICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uPXt0b29sQnV0dG9uUG9zaXRpb259XHJcbiAgICAgICAgICAgICAgICAgIG9uU2VhcmNoPXt0aGlzLm9uU2VhcmNoLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICAgIG9uUmVzZXQ9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5vblJlc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uUmVzZXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hSZWYuY3VycmVudD8ucmVzZXRGaWVsZHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTG9hZCh7fSk7XHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5zZWFyY2hSZWZ9XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZvcm1Qcm9wcz17dGhpcy5wcm9wcy5zZWFyY2hGb3JtUHJvcHN9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnRcIiksIHtcclxuICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtY29udGVudC1nYXBcIildOiAhc2VhcmNoRmxhZyxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICByZWY9e3RoaXMucGFnZUNvbnRlbnRSZWZ9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7KHRhYmxlVGl0bGUgfHwgdG9vbEZsYWcpICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlLXRpdGxlXCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10aXRsZS13aWR0aFwiKV06ICF0b29sYmFyRmxhZyxcclxuICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+e3RhYmxlVGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIHt0b29sRmxhZyAmJiB0aGlzLnJlbmRlclRvb2xCdXR0b25zKHRvb2xCdXR0b25zLCB0b29sYmFyRmxhZyl9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhcclxuICAgICAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlXCIpLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZS10b3BcIildOiAhdG9vbGJhckZsYWcsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlLXRvcDJcIildOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbGJhckZsYWcgJiYgIXRvb2xGbGFnLFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRhYmxlV3JhcHBlclJlZn1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVDb250ZW50SGVpZ2h0IH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPFRhYmxlXHJcbiAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy50YWJsZVJlZn1cclxuICAgICAgICAgICAgICAgICAgY29sdW1ucz17dGFibGVDb2x1bW59XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRJY29uOiAoeyBleHBhbmRlZCwgb25FeHBhbmQsIHJlY29yZCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtleHBhbmRlZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmNoaWxkTm9kZXM/Lmxlbmd0aCA+IDAgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RG93bk91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImV4cGFuZC1pY29uXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogcmVjb3JkLmNoaWxkTm9kZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzPy5sZW5ndGggPiAwID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpZ2h0T3V0bGluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IG9uRXhwYW5kKHJlY29yZCwgZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZXhwYW5kLWljb25cIil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAuLi5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW5PcmRlcj17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwYWdpbmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjdXJyZW50UGFnZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2UgIT09IHBhZ2luYXRpb24uY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIHRvb2xiYXI9e3tcclxuICAgICAgICAgICAgICAgICAgICBvblRvb2xDbGljazoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVMb2FkKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGFibGVQcm9wcy50b29sYmFyLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICBzaG93Um93U2VsZWN0aW9uPXtzaG93Um93U2VsZWN0aW9ufVxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XHJcbiAgICAgICAgICAgICAgICAgIHsuLi50YWJsZVBhcmFtc31cclxuICAgICAgICAgICAgICAgICAgLy8gcGFnaW5hdGlvbj17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgey8qIDxkaXY+PC9kaXY+ICovfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAge2VkaXRvckZvcm0gJiYgdGhpcy5wcm9wcy5mb3JtUGFnZVByb3BzPy5mb3JtVHlwZSAhPT0gXCJwYWdlXCIgJiYgKFxyXG4gICAgICAgICAgICA8RWRpdG9yRm9ybVxyXG4gICAgICAgICAgICAgIHJlZj17dGhpcy5lZGl0b3JSZWZ9XHJcbiAgICAgICAgICAgICAgY2FsbEJhY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uU3VtYml0Q2FsbEJhY2sgJiZcclxuICAgICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25TdW1iaXRDYWxsQmFjayxcclxuICAgICAgICAgICAgICAgICAgICB7IHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVSZWxvYWQoKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIGZvcm1zPXtlZGl0b3JGb3Jtc31cclxuICAgICAgICAgICAgICBzdWJtaXRVcmw9e3N1Ym1pdFVybH1cclxuICAgICAgICAgICAgICBzdWJtaXRQYXJhbXM9e3N1Ym1pdFBhcmFtc31cclxuICAgICAgICAgICAgICBvblN1Ym1pdD17dGhpcy5wcm9wcy5vblN1Ym1pdH1cclxuICAgICAgICAgICAgICBvbkhpZGVGb3JtPXt0aGlzLnByb3BzLm9uSGlkZUZvcm19XHJcbiAgICAgICAgICAgICAgb25Gb3JtQ2hhbmdlPXt0aGlzLnByb3BzLm9uRm9ybUNoYW5nZX1cclxuICAgICAgICAgICAgICBmb3JtVHlwZT17dGhpcy5wcm9wcy5mb3JtVHlwZSB8fCBcImF1dG9cIn1cclxuICAgICAgICAgICAgICBjaGFuZ2VWYWxpZD17Zm9ybUNoYW5nZVZhbGlkfVxyXG4gICAgICAgICAgICAgIFV0aWxzPXt0aGlzLnByb3BzLlV0aWxzfVxyXG4gICAgICAgICAgICAgIHJlcXVlc3RPYmplY3Q9e3tcclxuICAgICAgICAgICAgICAgIGFkZFVybDogcmVxdWVzdFVybHMuYWRkVXJsLFxyXG4gICAgICAgICAgICAgICAgZWRpdG9yVXJsOiByZXF1ZXN0VXJscy5lZGl0b3JVcmwsXHJcbiAgICAgICAgICAgICAgICBhZGRQYXJhbXM6IHJlcXVlc3RQYXJhbXMuYWRkUGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgZWRpdG9yUGFyYW1zOiByZXF1ZXN0UGFyYW1zLmVkaXRvclBhcmFtcyxcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIGZ1bmNzPXt0aGlzLnByb3BzLmZ1bmNzfVxyXG4gICAgICAgICAgICAgIHsuLi5mb3JtUGFnZVByb3BzfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge2Zvcm1CdXR0b259XHJcbiAgICAgICAgICAgIDwvRWRpdG9yRm9ybT5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgQmFzZVBhZ2U7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU9BLEtB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
|
|
1239
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUYWJsZSIsIlRyZWUiLCJCdXR0b24iLCJNb2RhbCIsIlBvcG92ZXIiLCJtZXNzYWdlIiwiRWRpdG9yRm9ybSIsImNscyIsIkRvd25PdXRsaW5lZCIsIkV5ZU91dGxpbmVkIiwiRWRpdE91dGxpbmVkIiwiUmlnaHRPdXRsaW5lZCIsIlBsdXNPdXRsaW5lZCIsIkVsbGlwc2lzT3V0bGluZWQiLCJEZWxldGVPdXRsaW5lZCIsImNvbnZlckZ1bmN0aW9uIiwiZ2V0TGVzcyIsInJlcXVlc3QiLCJjb25maWciLCJnZXRTdG9yYWdlIiwiZ2V0QnV0dG9uUGVybWlzc29ucyIsIkhlYWRlclNlYXJjaCIsImNvbnZlcnRDb2x1bW5zIiwiZ2V0TmV3Q29sdW1ucyIsInRocm90dGxlIiwic3R5bGVzIiwiQmFzZVBhZ2UiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX3R5cGUiLCJfc2l6ZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsImNoZWNrZWRUcmVlS2V5cyIsIm5hbWUiLCJ1c2VyVHlwZSIsImFjY291bnQiLCJzdGF0ZSIsInZhbHVlIiwiZGVwdElkIiwib25TZWFyY2giLCJzZWxlY3RlZCIsInJlcyIsImtleSIsImtleXMiLCJsZW5ndGgiLCJ0YWJsZVdyYXBwZXJSZWYiLCJjdXJyZW50IiwidGFibGVIZWFkZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaGVhZGVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaGVpZ2h0IiwidGFibGVIZWFkZXJIZWlnaHQiLCJzZXRTdGF0ZSIsImNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0Iiwic3RvcmVQcmVmaXgiLCJ0eXBlIiwiY29udGVudCIsInNpemUiLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwidHJlZVNlbGVjdGVkS2V5IiwiZXhwYW5kIiwiZm9ybVR5cGUiLCJ0YWJsZVNpemUiLCJ0cmVlU2VhcmNoUHJhbXMiLCJwb3BvcGVucyIsIm1vcmVPcGVuIiwiZWxlbWVudEhlaWdodCIsInBlcm1pc3Npb25CdXR0b25zIiwicXVlcnlQYXJhbXMiLCJidXR0b25zTG9hZGluZyIsInRyZWVXaWR0aCIsInNob3dMZWZ0IiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpcyRwYWdlQ29udGVudFJlZiQiLCJpbml0RGF0YSIsInBlcm1pc3NvbiIsInBhZ2VDb250ZW50UmVmIiwiY2xpZW50SGVpZ2h0Iiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInRocm90dGxlQ2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHQiLCJzZXRUaW1lb3V0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwiX3RoaXMkcGFnZUNvbnRlbnRSZWYkMiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNldFNlYXJjaFBhcmFtcyIsInBhcmFtcyIsImNhbGxCYWNrIiwiX3RoaXMkc2VhcmNoUmVmJGN1cnJlIiwic2VhcmNoUmVmIiwiZG9TdWJtaXQiLCJkYXRhIiwiX3RoaXMkZWRpdG9yUmVmJGN1cnJlIiwibGFiZWwiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJlZGl0b3JSZWYiLCJzaG93Rm9ybSIsIl90aGlzJHByb3BzJGZvcm1QYWdlUCIsImVkaXRvcmZsYWciLCJmb3JtUGFnZVByb3BzIiwiX3RoaXMkcHJvcHMkZm9ybVBhZ2VQMiIsImZ1bmNzIiwicGF0aG5hbWUiLCJjb25jYXQiLCJ0YWJsZUNvZGUiLCJpZCIsImhpc3RvcnkiLCJzZXJ2aWNlTmFtZSIsInNlcnZpY2VQYXRoIiwiRGF0ZSIsImdldFRpbWUiLCJ0aXRsZSIsIl90aGlzJGVkaXRvclJlZiIsIm5ld1ZhbHVlIiwiX29iamVjdFNwcmVhZCIsInNob3ciLCJoaWRlRm9ybSIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTIiLCJzZXRMb2FkaW5nIiwibG9hZGluZyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTMiLCJzZXRFZGl0Rm9ybVZhbHVlcyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTQiLCJzZXRGb3JtVmFsdWUiLCJnZXRFZGl0Rm9ybVZhbHVlcyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTUiLCJnZXRGb3JtVmFsdWUiLCJvbkRlbGV0ZSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbiIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjIiLCJkZWxldGVQb3NpdGlvbiIsImRlbGV0ZVVybCIsImRlbGV0ZVBhcmFtcyIsImJ1dHRvbkNsaWNrIiwicmVxdWVzdFBhcmFtcyIsInJlcXVlc3RVcmxzIiwicmVxdWVzdENvbmZpZyIsIl90aGlzIiwidGFibGVSZWYiLCJnZXRTZWxlY3RlZFJvd0tleXMiLCJnZXRTZWxlY3RlZFJvd0RhdGFzIiwidXJsIiwid2FybmluZyIsImNvbmZpcm0iLCJvbk9rIiwicGFnZVJlZiIsInJlY29yZCIsImlkcyIsIlV0aWxzIiwiRXJyb3IiLCJkYXRhUGFyYW1zIiwib3RoZXJQYXJhbXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJkZWZhdWx0UGFyYW1zIiwibWV0aG9kIiwiYXV0b1ByZWZpeCIsImpvaW4iLCJmaW5hbFBhcmFtcyIsInRoZW4iLCJjb2RlIiwiX3RoaXMkc2VhcmNoUmVmIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjMiIsInN1Y2Nlc3MiLCJnZXRTZWFyY2hWYWx1ZXMiLCJvbkNhbGxCYWNrcyIsIm9uRGVsZXRlQ2FsbEJhY2siLCJ0YWJsZUxvYWQiLCJlcnJvciIsImNhdGNoIiwiY29uc29sZSIsImxvZyIsIl90YWJsZVN0b3JlJHJlcXVlc3RDbyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjMiLCJkZWZhdWx0UmVxdWVzdENvbmZpZyIsInRhYmxlUHJvcHMiLCJzdG9yZSIsInRhYmxlU3RvcmUiLCJjb252ZXJ0UXVlcnlQYXJhbXMiLCJyZXF1ZXN0Q29uaWciLCJzdG9yZUNvbmZpZyIsInN0b3JlUGFyYW1zIiwib3RoZXJTdG9yZUNvbmZpZyIsIl9leGNsdWRlZDIiLCJsb2FkIiwiX3RhYmxlU3RvcmUkcmVxdWVzdENvMiIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzMiLCJvblF1ZXJ5Q2FsbEJhY2siLCJ0YWJsZVJlbG9hZCIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjQiLCJhdXRvTG9hZCIsInJlbG9hZCIsImNhbGxiYWNrIiwiX3JlcyRkYXRhIiwicmVjb3JkcyIsImN1cnJlbnRQYWdlIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuNSIsInRyZWVMb2FkIiwiX3RoaXMkdHJlZVJlZiRjdXJyZW50IiwidHJlZVJlZiIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjYiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW43Iiwic2V0U2VsZWN0ZWRSb3dLZXlzIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuOCIsInNldFNlbGVjdGVkUm93RGF0YXMiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW45IiwicmVzZXRTZWxlY3RlZFJvd0tleXMiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4xMCIsIl90aGlzJHNlYXJjaFJlZjIiLCJmcm9tVmFsdWUiLCJnZXRDaGlsZHJlbkRhdGEiLCJyb3dLZXkiLCJyZXNLZXkiLCJjaGlsZE5vZGVzIiwiY2hpbGRyZW4iLCJtYXAiLCJpdGVtIiwiaW5kZXgiLCJyZW5kZXJUb29sQnV0dG9ucyIsInRvb2xidXR0b25zIiwidG9vbGJhckZsYWciLCJmbGFnIiwic2hvd1NlYXJjaCIsIl9pdGVtJHByb3BzIiwicGFnZVR5cGUiLCJvbkNsaWNrIiwiaWNvbiIsIl9leGNsdWRlZDMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiX2V4dGVuZHMiLCJzdHlsZSIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsInBsYWNlbWVudCIsIm9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJyZW5kZXJDbG91bW5CdXR0b24iLCJjb2x1bW5CdXR0b25zIiwicm93UmVjb3JkIiwiYWN0aW9uUHJvcHMiLCJiYXNlQWN0aW9uQ29sdW1uIiwibmV3QnV0dG9ucyIsInNob3dJY29uIiwiX2l0ZW0kcHJvcHMyIiwicmVjb3JkU2hvdyIsIl9leGNsdWRlZDQiLCJldmVudE9wdGlvbiIsIlVpdGxzIiwiZnVuYyIsIkZ1bmN0aW9uIiwicHVzaCIsImUiLCJldmFsIiwibnVtYmVyIiwiYnV0dG9uTnVtYmVyIiwiX2l0ZW0kcHJvcHMzIiwiX2V4Y2x1ZGVkNSIsIk51bWJlciIsIl9pdGVtJHByb3BzNCIsIl9leGNsdWRlZDYiLCJ0cmlnZ2VyIiwidHJlZVNlbGVjdCIsInNlbGVjdGVkS2V5cyIsIm9iaiIsIl90aGlzJHNlYXJjaFJlZjMiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM0IiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjNSIsImtleXdvcmQiLCJzZWFyY2hLZXkiLCJzZWFyY2hGaWVsZCIsInBhcmFudFNlbGVjdCIsInRyZWVQcm9wcyIsInNlbGVjdGVkTm9kZXMiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwiaXNMZWFmIiwib25UcmVlU2VsZWN0IiwidHJlZVNlbGVjdENhbGxCYWNrIiwicmVzZXRTZWFyY2giLCJfdGhpcyRzZWFyY2hSZWYkY3VycmUyIiwicmVzZXRGaWVsZHMiLCJnZXRUZXh0IiwidGV4dCIsIl9wcm9wcyRkYXRhIiwibmV3VGV4dCIsImkiLCJzZXRUYWJsZURhdGEiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4xMSIsInNldERhdGEiLCJzZXRUcmVlRGF0YSIsIl90aGlzJHRyZWVSZWYkY3VycmVudDIiLCJjb252ZXJQYXJhbXMiLCJoYW5kbGVNb3VzZURvd24iLCJwcmV2ZW50RGVmYXVsdCIsIm1hc2siLCJkb2N1bWVudCIsImNzc1RleHQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJoYW5kbGVNb3VzZU1vdmUiLCJuZXdXaWR0aCIsInNjcmVlblgiLCJ0aHJvdHRsZWRNb3VzZU1vdmUiLCJoYW5kbGVNb3VzZVVwIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJlbmRlciIsIl90aGlzMiIsIl90YWJsZVByb3BzJHRvb2xiYXIiLCJfdGFibGVQcm9wcyR0b29sYmFyMiIsIl90aGlzJHByb3BzJGZvcm1QYWdlUDMiLCJjb2x1bW5zIiwic3VibWl0VXJsIiwic3VibWl0UGFyYW1zIiwic2hvd1Rvb2xCdXR0b24iLCJidXR0b25zIiwiZWRpdG9yRm9ybSIsIm9uU2hvd0Zvcm0iLCJmb3JtQ2hhbmdlVmFsaWQiLCJ0b29sQnV0dG9uUG9zaXRpb24iLCJwZXJtaXNzaW9uIiwiaGFzIiwiZmlsdGVyQ29sdW1uIiwiYWN0aW9uQ29sdW1uIiwic2hvd1Jvd1NlbGVjdGlvbiIsImNvbHVtbk9yZGVyIiwiZXhwYW5kYWJsZSIsInRhYmxlVGl0bGUiLCJvdGhlcnRhYmxlUGFyYW1zIiwiX2V4Y2x1ZGVkNyIsIm5ld1RhYmxlU3RvcmUiLCJfbmV3VGFibGVTdG9yZSRyZXF1ZXMiLCJ0cmVlU3RvcmUiLCJ0cmVlU2VhcmNoIiwidGl0bGVBbGlhcyIsInRyZWVUaXRsZSIsIm90aGVydHJlZVBhcmFtcyIsIl9leGNsdWRlZDgiLCJ0YWJsZVBhcmFtcyIsImxpc3RlbmVycyIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzYiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM3IiwidGFibGVMb2FkQ2FsbEJhY2siLCJkZWZhdWx0VmFsdWUiLCJtZW51Q29kZSIsInBlcm1pc3NvbnMiLCJ0YWJsZUNvbHVtbiIsInNlYXJjaEZvcm1zIiwiZWRpdG9yRm9ybXMiLCJ0b29sQnV0dG9ucyIsImZvcm1CdXR0b24iLCJidXR0b25NYXAiLCJlZGl0b3IiLCJkZWxldGUiLCJzZWFyY2giLCJyZXR1cm5CdXR0b24iLCJfYnV0dG9uTWFwJGNvZGUiLCJkZWZhdWx0UHJvcHMiLCJvbkVkaXRvciIsIl90aGlzMiRwcm9wcyRvbkNhbGxCYSIsIl90aGlzMiRwcm9wcyRvbkNhbGxCYTIiLCJvbkVkaXRvckNhbGxCYWNrIiwib25TZWFyY2hDYWxsQmFjayIsImNoZWNrUGVyc3Npb24iLCJpbmRleE9mIiwib25BZGQiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM4IiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjOSIsIm9uQWRkQ2FsbEJhY2siLCJiaW5kIiwiZGFuZ2VyIiwiQXJyYXkiLCJpc0FycmF5IiwiY2hpbGQiLCJfY2hpbGQkcHJvcHMiLCJfY2hpbGQkcHJvcHMyIiwiX2NoaWxkJHByb3BzMyIsIl9jaGlsZCRwcm9wczQiLCJfY2hpbGQkcHJvcHM1IiwiX2NoaWxkJHByb3BzNiIsIl9jaGlsZCRwcm9wczciLCJfaXRlbSRwcm9wczUiLCJfaXRlbSRwcm9wczYiLCJfaXRlbSRwcm9wczciLCJfaXRlbSRwcm9wczgiLCJfaXRlbSRwcm9wczkiLCJkYXRhSW5kZXgiLCJhbGlnbiIsInRleHRBbGlnbiIsIndpZHRoIiwiZml4ZWQiLCJyZWFjb3JkIiwiRnJhZ21lbnQiLCJzZWFyY2hGbGFnIiwidGFibGVUb29sIiwidG9vbEZsYWciLCJ0b29sYmFyIiwidG9vbHMiLCJ0b29sSGVpZ2h0IiwicGFkZGluZ0hlaWdodCIsInRhYmxlQ29udGVudEhlaWdodCIsIlBhZ2luYXRpb25IZWlnaHQiLCJwYWdpbmF0aW9uIiwidGFibGVIZWlnaHQiLCJ0YWJsZVNyb2xsSGVpZ2h0Iiwic2Nyb2xsIiwieCIsInkiLCJyZWYiLCJwYWdlVGl0bGUiLCJkaXNwbGF5Iiwib25Nb3VzZURvd24iLCJjaGVja2FibGUiLCJzZWFyY2hhYmxlIiwib25TZWxlY3QiLCJvblJlc2V0IiwiX3RoaXMkc2VhcmNoUmVmJGN1cnJlMyIsInNlYXJjaEZvcm1Qcm9wcyIsImV4cGFuZEljb24iLCJfcmVmIiwiX3JlY29yZCRjaGlsZE5vZGVzIiwiX3JlY29yZCRjaGlsZE5vZGVzMiIsImV4cGFuZGVkIiwib25FeHBhbmQiLCJvbkNoYW5nZSIsIm9uVG9vbENsaWNrIiwib25SZWZyZXNoIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjMTAiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWMxMSIsIm9uU3VtYml0Q2FsbEJhY2siLCJmb3JtcyIsIm9uU3VibWl0Iiwib25IaWRlRm9ybSIsIm9uRm9ybUNoYW5nZSIsImNoYW5nZVZhbGlkIiwicmVxdWVzdE9iamVjdCIsImFkZFVybCIsImVkaXRvclVybCIsImFkZFBhcmFtcyIsImVkaXRvclBhcmFtcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2UvQmFzZVBhZ2UvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLi8uLi9iYXNlL3RhYmxlXCI7XHJcbmltcG9ydCBUcmVlIGZyb20gXCIuLi8uLi9iYXNlL3RyZWVcIjtcclxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vLi4vYmFzZS9idXR0b25cIjtcclxuaW1wb3J0IE1vZGFsIGZyb20gXCIuLi8uLi9iYXNlL21vZGFsXCI7XHJcbmltcG9ydCBQb3BvdmVyIGZyb20gXCIuLi8uLi9iYXNlL3BvcG92ZXJcIjtcclxuaW1wb3J0IG1lc3NhZ2UgZnJvbSBcIi4uLy4uL2Jhc2UvbWVzc2FnZVwiO1xyXG5pbXBvcnQgRWRpdG9yRm9ybSwgeyBGb3JtUGFnZVByb3BzIH0gZnJvbSBcIi4uL0Zvcm1QYWdlL2luZGV4XCI7XHJcbmltcG9ydCBjbHMgZnJvbSBcImNsYXNzbmFtZXNcIjtcclxuaW1wb3J0IFwiLi9pbmRleC5tb2R1bGUubGVzc1wiO1xyXG5pbXBvcnQgU3RvcmUsIHsgUGFnZVN0b3JlLCBTdG9yZVByb3BzIH0gZnJvbSBcIkBiai1uc2MvbXNuXCI7XHJcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSBcIkBiai1uc2MvbXNuL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gIERvd25PdXRsaW5lZCxcclxuICBFeWVPdXRsaW5lZCxcclxuICBFZGl0T3V0bGluZWQsXHJcbiAgUmlnaHRPdXRsaW5lZCxcclxuICBQbHVzT3V0bGluZWQsXHJcbiAgRWxsaXBzaXNPdXRsaW5lZCxcclxuICBEZWxldGVPdXRsaW5lZCxcclxufSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgY29udmVyRnVuY3Rpb24sIGdldExlc3MsIGdldE5vZGUsIHNpbXBsaWZ5Q29sdW1ucyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tIFwibnNjLXJlcXVlc3RcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldFN0b3JhZ2UsIHB4MnZ3LCBnZXRCdXR0b25QZXJtaXNzb25zIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBIZWFkZXJTZWFyY2ggZnJvbSBcIi4uL0hlYWRlclNlYXJjaFwiO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uUHJvcHMgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgbnNjZmlsZSBmcm9tIFwibnNjLWZpbGVcIjtcclxuaW1wb3J0IHsgY29udmVydENvbHVtbnMsIGdldE5ld0NvbHVtbnMgfSBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwibG9kYXNoL2lzRXF1YWxcIjtcclxuaW1wb3J0IHRocm90dGxlIGZyb20gXCJsb2Rhc2gvdGhyb3R0bGVcIjtcclxuaW1wb3J0IENvbXBvdW5kZWRTcGFjZSBmcm9tIFwiYW50ZC9lcy9zcGFjZVwiO1xyXG50eXBlIEJ1dHRvbkl0ZW0gPVxyXG4gIHwgc3RyaW5nXHJcbiAgfCB7XHJcbiAgICAgIGNvZGU6IHN0cmluZztcclxuICAgICAgcmVjb3JkU2hvdz86IHN0cmluZyB8IEZ1bmN0aW9uO1xyXG4gICAgICBwcm9wcz86IGFueTtcclxuICAgIH07XHJcblxyXG5pbnRlcmZhY2UgVGFibGVQcm9wcyB7XHJcbiAgYWN0aW9uQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmk43kvZzliJdcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgZmlsdGVyQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrov4fmu6TmjInpkq5cclxuICBzaG93Um93U2VsZWN0aW9uPzogYm9vbGVhbjsgLy/mmK/lkKbooajmoLzli77pgInliJdcclxuICBwYWdpbmF0aW9uPzogYm9vbGVhbiB8IFBhZ2luYXRpb25Qcm9wczsgLy/mmK/lkKbmmL7npLrliIbpobVcclxuICBjb2x1bW5PcmRlcj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66KGo5qC85bqP5YiXXHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmNvbnN0IHN0eWxlcyA9IG51bGw7XHJcbmludGVyZmFjZSBUcmVlUHJvcHMge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmkJzntKLmoYZcclxuICBzZWFyY2hLZXk/OiBzdHJpbmc7IC8v5pCc57SidmFsdWXlr7nlupTnmoRrZXlcclxuICBzZWFyY2hGaWVsZD86IHN0cmluZzsgLy/mn6Xor6Llr7nlupTnmoRrZXlcclxuICB0aXRsZUFsaWFzPzogc3RyaW5nOyAvL+agkXRpdGxl5a+55bqU55qEa2V5LOm7mOiupHRpdGxlXHJcbiAgbm9kZVBvcnBzPzogb2JqZWN0O1xyXG4gIHBhcmFudFNlbGVjdD86IGJvb2xlYW47XHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmludGVyZmFjZSBGb3JtUHJvcHMgZXh0ZW5kcyBGb3JtUGFnZVByb3BzIHt9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5TQ0Jhc2VCYWdlUHJvcHMge1xyXG4gIHNob3dTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuWktOmDqOaQnOe0ouagj1xyXG4gIHRhYmxlUHJvcHM/OiBUYWJsZVByb3BzOyAvL+ihqOagvOWPguaVsFxyXG4gIHRyZWVQcm9wcz86IFRyZWVQcm9wczsgLy/lt6bkvqfmoJHlj4LmlbBcclxuICBzdWJtaXRQYXJhbXM/OiBPYmplY3Q7IC8v5re75Yqg5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HZGF0YeS8oOmAklxyXG4gIHN1Ym1pdFVybD86IHN0cmluZztcclxuICBvblN1Ym1pdD86ICh2YWx1ZT86IGFueSwgbGFiZWw/OiBhbnkpID0+IHZvaWQ7XHJcbiAgY29sdW1ucz86IEFycmF5PE9iamVjdD47XHJcbiAgc2hvd0xlZnQ/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuW3puS+p+ebruW9leagkVxyXG4gIHNob3dUb29sQnV0dG9uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmjInpkq7moI9cclxuICBlZGl0b3JGb3JtPzogYm9vbGVhbjsgLy/mmK/lkKbpnIDopoHooajljZXlip/og70gLCDkuLpmYWxzZSDnvJbovpHvvIzmn6XnnIvvvIzmlrDlop7lip/og73lnYfkuI3lj6/nlKhcclxuICBkZWxldGVVcmw/OiBzdHJpbmc7IC8v5Yig6ZmkdXJsXHJcbiAgb25EZWxldGU/OiAoc2VsZWN0ZWRLZXlzPzogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDsgLy/liKDpmaTlj4LmlbDvvIzpu5jorqRtb3Rob2Q6cG9zdO+8jCDlj4LmlbDpgJrov4dpZHPmi7zmjqXkvKDpgJLnu5nlkI7lj7BcclxuICBkZWxldGVQYXJhbXM/OiBPYmplY3Q7XHJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgb25TZWFyY2g/OiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XHJcbiAgb25SZXNldD86ICgpID0+IHZvaWQ7XHJcbiAgaW5pdERhdGE/OiBhbnk7IC8v5Yid5aeL5YyW5Zue6LCD5Ye95pWw77yM5ZyoY29tcG9uZW50RGlkTW91bnTkuK3osIPnlKhcclxuICBidXR0b25zPzogQnV0dG9uSXRlbVtdOyAvL+aMiemSrumbhuWQiCAgWydhZGQnLCdkZWxldGUnLCdzZWFyY2gnLCdlZGl0b3InLCdkZWxldGVfYmF0Y2gnXVxyXG4gIG9uU2hvd0Zvcm0/OiAodmFsdWU/OiBhbnksIGVkaXRvckZsYWc/OiBzdHJpbmcpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25IaWRlRm9ybT86ICgpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25Gb3JtQ2hhbmdlPzogKGNoYW5nZWRWYWx1ZXM/OiBhbnksIGFsbFZhbHVlcz86IGFueSkgPT4gdm9pZDsgLy/ooajljZVvbkNoYW5nZeWbnuiwg1xyXG4gIGZvcm1UeXBlPzogXCJtb2RhbFwiIHwgXCJkcmF3ZXJcIiB8IFwicGFnZVwiO1xyXG4gIGZvcm1DaGFuZ2VWYWxpZD86IGJvb2xlYW47IC8v6KGo5Y2V5qCh6aqMXHJcbiAgY2xhc3NOYW1lPzogYW55O1xyXG4gIHRvb2xCdXR0b25Qb3NpdGlvbj86IFwicmlnaHRcIiB8IFwiYnV0dG9tXCI7XHJcbiAgcGFnZVRpdGxlPzogc3RyaW5nIHwgUmVhY3ROb2RlO1xyXG4gIGFjdGlvblByb3BzPzoge1xyXG4gICAgdGV4dEFsaWduPzogc3RyaW5nO1xyXG4gICAgc2hvd0ljb24/OiBib29sZWFuO1xyXG4gICAgd2lkdGg/OiBudW1iZXI7XHJcbiAgICBidXR0b25OdW1iZXI/OiBudW1iZXIgfCBcImFsbFwiO1xyXG4gIH07XHJcbiAgc2VhcmNoRm9ybVByb3BzPzogeyB3cmFwcGVyQ29sPzogYW55OyBsYWJlbENvbD86IGFueSB9O1xyXG4gIG9uVHJlZVNlbGVjdD86ICh2YWx1ZT86IGFueSwgZWRpdG9yRmxhZz86IHN0cmluZykgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkNhbGxCYWNrcz86IHtcclxuICAgIHRyZWVTZWxlY3RDYWxsQmFjaz86IGFueTsgLy/moJHngrnlh7vmn6Xor6LlkI7lm57osINcclxuICAgIG9uUXVlcnlDYWxsQmFjaz86IGFueTsgLy/mn6Xor6Llm57osIPvvIzmn6Xor6LmlbDmja7lkI7lm57osINcclxuICAgIG9uU3VtYml0Q2FsbEJhY2s/OiBhbnk7IC8v5L+d5a2Y5Zue6LCD77yM5L+d5a2Y5pWw5o2u5oiQ5Yqf5ZCO5Zue6LCDXHJcbiAgICBvbkRlbGV0ZUNhbGxCYWNrPzogYW55OyAvL+WIoOmZpOaMiemSruWbnuiwg++8jOWIoOmZpOaVsOaNruWQjuaJp+ihjFxyXG4gICAgb25FZGl0b3JDYWxsQmFjaz86IGFueTsgLy/nvJbovpHmjInpkq7lm57osIPvvIzmiZPlvIDlvLnmoYblkI7miafooYxcclxuICAgIG9uQWRkQ2FsbEJhY2s/OiBhbnk7IC8v5re75Yqg5oyJ6ZKu5Zue6LCD77yM5omT5byA5by55qGG5ZCO5omn6KGMXHJcbiAgICBvblNlYXJjaENhbGxCYWNrPzogYW55OyAvL+WIl+ihqOafpeivouaMiemSruWbnuiwg++8jOaJk+W8gOW8ueahhuWQjuaJp+ihjFxyXG4gICAgdGFibGVMb2FkQ2FsbEJhY2s/OiBhbnk7IC8v5YiX6KGo5p+l6K+i5Zue6LCDLS1sb2FkXHJcbiAgfTtcclxuICBwYWdlVHlwZT86IFwibm9ybWFsXCIgfCBcInRhYnNwYWdlXCI7XHJcbiAgZm9ybVBhZ2VQcm9wcz86IEZvcm1QYWdlUHJvcHM7XHJcbiAgYnV0dG9uQ2xpY2s/OiB7XHJcbiAgICBvbkFkZD86ICgpID0+IHZvaWQ7XHJcbiAgICBvbkVkaXRvcj86ICh2YWx1ZT86IGFueSkgPT4gdm9pZDtcclxuICAgIG9uU2VhcmNoPzogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xyXG4gICAgb25EZWxldGU/OiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XHJcbiAgfTtcclxuICBwZXJtaXNzaW9uPzoge1xyXG4gICAgaGFzPzogYm9vbGVhbjtcclxuICAgIG1lbnVDb2RlPzogc3RyaW5nO1xyXG4gIH07XHJcbiAgcmVxdWVzdFBhcmFtcz86IHtcclxuICAgIC8v6ZyA6KaB6aKd5aSW5Lyg55qE5Zu65a6a6K+35rGC5Y+C5pWwXHJcbiAgICBhZGRQYXJhbXM/OiBPYmplY3Q7IC8v5paw5aKe5Zu65a6a5Y+C5pWwXHJcbiAgICBlZGl0b3JQYXJhbXM/OiBPYmplY3Q7IC8v57yW6L6R5Zu65a6a5Y+C5pWwXHJcbiAgICBxdWVyeVBhcmFtcz86IE9iamVjdDsgLy/mn6Xor6Llm7rlrprlj4LmlbBcclxuICAgIGRlbGV0ZVBhcmFtcz86IE9iamVjdDsgLy/liKDpmaTlm7rlrprlj4LmlbBcclxuICB9O1xyXG4gIHJlcXVlc3RVcmxzPzoge1xyXG4gICAgYWRkVXJsPzogc3RyaW5nOyAvL+aWsOWinnVybFxyXG4gICAgZWRpdG9yVXJsPzogc3RyaW5nOyAvL+e8lui+kXVybFxyXG4gICAgZGVsZXRlVXJsPzogc3RyaW5nOyAvL+WIoOmZpHVybFxyXG4gIH07XHJcbiAgZnVuY3M/OiBhbnk7XHJcbiAgcmVxdWVzdENvbmZpZz86IGFueTtcclxuICBbcHJvcHNOYW1lOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmNsYXNzIEJhc2VQYWdlIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxOU0NCYXNlQmFnZVByb3BzLCBhbnk+IHtcclxuICB0YWJsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgdHJlZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIHBhZ2VSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIHBhZ2VDb250ZW50UmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBkYXRlRm9ybWF0ID0ge30gYXMgYW55O1xyXG4gIHRhYmxlV3JhcHBlclJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcclxuICBzdGF0aWMgY29udmVydENvbHVtbnMgPSBjb252ZXJ0Q29sdW1ucztcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICBsZXQgeyBzdG9yZVByZWZpeCB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdHlwZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcIi1cIiArIFwiZm9ybVR5cGVcIiA6IFwiZm9ybVR5cGVcIlxyXG4gICAgKTtcclxuICAgIHR5cGUgPSB0eXBlPy5jb250ZW50O1xyXG4gICAgbGV0IHNpemUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcInRhYmxlU2l6ZVwiIDogXCJ0YWJsZVNpemVcIlxyXG4gICAgKTtcclxuICAgIHNpemUgPSBzaXplPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgdHlwZTogXCJhZGRcIixcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICAgIHRyZWVTZWxlY3RlZEtleTogXCJcIixcclxuICAgICAgZXhwYW5kOiBmYWxzZSxcclxuICAgICAgZm9ybVR5cGU6IHR5cGUgfHwgXCJtb2RhbFwiLFxyXG4gICAgICB0YWJsZVNpemU6IHNpemUgfHwgXCJkZWZhdWx0XCIsXHJcbiAgICAgIHRyZWVTZWFyY2hQcmFtczoge30sXHJcbiAgICAgIHBvcG9wZW5zOiB7fSxcclxuICAgICAgbW9yZU9wZW46IGZhbHNlLFxyXG4gICAgICBlbGVtZW50SGVpZ2h0OiAwLFxyXG4gICAgICBwZXJtaXNzaW9uQnV0dG9uczogW10sXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7fSxcclxuICAgICAgdGFibGVIZWFkZXJIZWlnaHQ6IDAsIC8vIOa3u+WKoOihqOWktOmrmOW6puWIsHN0YXRlXHJcbiAgICAgIGJ1dHRvbnNMb2FkaW5nOiB7fSxcclxuICAgICAgdHJlZVdpZHRoOiB0aGlzLnByb3BzLnNob3dMZWZ0ID8gMjYwIDogMCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgaW5pdERhdGEsIHBlcm1pc3NvbiA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZWxlbWVudEhlaWdodCA9IHRoaXMucGFnZUNvbnRlbnRSZWYuY3VycmVudD8uY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgIC8vIOa3u+WKoOeql+WPo3Jlc2l6ZeebkeWQrFxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy50aHJvdHRsZUNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0KTtcclxuXHJcbiAgICAvLyDliJ3lp4vorqHnrpfooajlpLTpq5jluqZcclxuICAgIHNldFRpbWVvdXQodGhpcy5jYWxjdWxhdGVUYWJsZUhlYWRlckhlaWdodCwgMCk7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGVsZW1lbnRIZWlnaHQsXHJcbiAgICB9KTtcclxuICAgIGluaXREYXRhICYmIGluaXREYXRhKCk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSB0aGlzLnBhZ2VDb250ZW50UmVmLmN1cnJlbnQ/LmNsaWVudEhlaWdodDtcclxuICAgIGlmIChlbGVtZW50SGVpZ2h0ID4gdGhpcy5zdGF0ZS5lbGVtZW50SGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIGVsZW1lbnRIZWlnaHQsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5zaG93TGVmdCAhPT0gdGhpcy5wcm9wcy5zaG93TGVmdCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICB0cmVlV2lkdGg6IHRoaXMucHJvcHMuc2hvd0xlZnQgPyAyNjAgOiAwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAvLyDnp7vpmaRyZXNpemXnm5HlkKxcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICBcInJlc2l6ZVwiLFxyXG4gICAgICB0aGlzLnRocm90dGxlQ2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHRcclxuICAgICk7XHJcbiAgfVxyXG4gIHNldFNlYXJjaFBhcmFtcyhwYXJhbXMsIGNhbGxCYWNrKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5zZXRTZWFyY2hQYXJhbXMocGFyYW1zKTtcclxuICAgIGNhbGxCYWNrICYmIGNhbGxCYWNrKHBhcmFtcyk7XHJcbiAgfVxyXG4gIGRvU3VibWl0KGRhdGEsIGxhYmVsID0gXCLnvJbovpFcIikge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uZG9TdWJtaXQoZGF0YSwgbGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QgPSAoY2hlY2tlZFRyZWVLZXlzOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQsIGRlcHRJZDogY2hlY2tlZFRyZWVLZXlzWzBdIH07XHJcbiAgICBpZiAodGhpcy5wcm9wcy5vblNlYXJjaCkge1xyXG4gICAgICB0aGlzLnByb3BzLm9uU2VhcmNoKHZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICB9O1xyXG5cclxuICAvL+aYvuekuuihqOWNlVxyXG4gIHNob3dGb3JtKHZhbHVlPzogYW55LCBlZGl0b3JmbGFnID0gXCJhZGRcIiwgY2FsbEJhY2s/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnByb3BzLmZvcm1QYWdlUHJvcHM/LmZvcm1UeXBlID09IFwicGFnZVwiKSB7XHJcbiAgICAgIGNvbnN0IHsgZnVuY3MgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgbGV0IHBhdGhuYW1lID0gYC9mb3JtcGFnZS8ke2VkaXRvcmZsYWcgPyBlZGl0b3JmbGFnIDogXCJhZGRcIn0vJHtcclxuICAgICAgICB0aGlzLnByb3BzLnRhYmxlQ29kZVxyXG4gICAgICB9YDtcclxuICAgICAgaWYgKGVkaXRvcmZsYWcgPT0gXCJlZGl0b3JcIiB8fCBlZGl0b3JmbGFnID09IFwic2VhcmNoXCIpIHtcclxuICAgICAgICBwYXRobmFtZSA9IHBhdGhuYW1lICsgXCI/aWQ9XCIgKyB2YWx1ZS5pZDtcclxuICAgICAgfVxyXG4gICAgICBmdW5jcz8uaGlzdG9yeShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXHJcbiAgICAgICAgICBzZXJ2aWNlTmFtZTogXCJzZXR0aW5nLXdlYlwiLFxyXG4gICAgICAgICAgc2VydmljZVBhdGg6IFwiL3NldHRpbmdcIixcclxuICAgICAgICAgIGlkOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSArICh2YWx1ZT8uaWQgfHwgXCJfXCIpICsgZWRpdG9yZmxhZyxcclxuICAgICAgICAgIHRpdGxlOlxyXG4gICAgICAgICAgICBg44CQJHtcclxuICAgICAgICAgICAgICBlZGl0b3JmbGFnID09IFwiYWRkXCJcclxuICAgICAgICAgICAgICAgID8gXCLmlrDlop5cIlxyXG4gICAgICAgICAgICAgICAgOiBlZGl0b3JmbGFnID09IFwiZWRpdG9yXCJcclxuICAgICAgICAgICAgICAgID8gXCLnvJbovpFcIlxyXG4gICAgICAgICAgICAgICAgOiBcIuafpeeci1wiXHJcbiAgICAgICAgICAgIH3jgJFgICsgdGhpcy5wcm9wcy5mb3JtUGFnZVByb3BzPy50aXRsZSB8fCBcIlwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRUYWJcIlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWUgPyB7IC4uLnZhbHVlIH0gOiBudWxsO1xyXG4gICAgICB0aGlzLmVkaXRvclJlZj8uY3VycmVudD8uc2hvdyhuZXdWYWx1ZSwgZWRpdG9yZmxhZywgY2FsbEJhY2spO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy/lhbPpl63ooajljZVcclxuICBoaWRlRm9ybSgpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldExvYWRpbmcobG9hZGluZyk7XHJcbiAgfVxyXG5cclxuICBzZXRFZGl0Rm9ybVZhbHVlcyh2YWx1ZSwgdHlwZSA9IFwi57yW6L6RXCIpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldEZvcm1WYWx1ZSh2YWx1ZSwgdHlwZSk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0Rm9ybVZhbHVlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5nZXRGb3JtVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8v5om56YeP5Yig6ZmkXHJcbiAgb25EZWxldGUoZGF0YT86IGFueSwgZGVsZXRlUG9zaXRpb24gPSBcInJvd1wiKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGRlbGV0ZVVybCxcclxuICAgICAgb25EZWxldGUsXHJcbiAgICAgIGRlbGV0ZVBhcmFtcyA9IHt9LFxyXG4gICAgICBidXR0b25DbGljayA9IHt9LFxyXG4gICAgICByZXF1ZXN0UGFyYW1zID0ge30sXHJcbiAgICAgIHJlcXVlc3RVcmxzID0ge30sXHJcbiAgICAgIHJlcXVlc3RDb25maWcgPSB7fSxcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgIGNvbnN0IHNlbGVjdGVkUm93S2V5cyA9IHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJvd0RhdGFzID0gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5nZXRTZWxlY3RlZFJvd0RhdGFzKCk7XHJcbiAgICBsZXQgdXJsID0gcmVxdWVzdFVybHMuZGVsZXRlVXJsID8gcmVxdWVzdFVybHMuZGVsZXRlVXJsIDogZGVsZXRlVXJsO1xyXG4gICAgbGV0IHBhcmFtczogYW55ID0gcmVxdWVzdFBhcmFtcy5kZWxldGVQYXJhbXNcclxuICAgICAgPyByZXF1ZXN0UGFyYW1zLmRlbGV0ZVBhcmFtc1xyXG4gICAgICA6IGRlbGV0ZVBhcmFtcztcclxuICAgIGlmIChkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIikge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRSb3dLZXlzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgbWVzc2FnZS53YXJuaW5nKFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE5pWw5o2u77yBXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTW9kYWwuY29uZmlybSh7XHJcbiAgICAgIGNvbnRlbnQ6IFwi5piv5ZCm56Gu6K6k5Yig6Zmk5omA6YCJ6aG577yfXCIsXHJcbiAgICAgIC8vIGNlbnRlcmVkOnRydWUsXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICBpZiAoYnV0dG9uQ2xpY2sub25EZWxldGUpIHtcclxuICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICBidXR0b25DbGljay5vbkRlbGV0ZSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZixcclxuICAgICAgICAgICAgICByZWNvcmQ6IGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dEYXRhcyA6IGRhdGEsXHJcbiAgICAgICAgICAgICAgaWRzOiBkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIiA/IHNlbGVjdGVkUm93S2V5cyA6IGRhdGE/LmlkLFxyXG4gICAgICAgICAgICAgIGZ1bmNzOiB0aGlzLnByb3BzLmZ1bmNzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob25EZWxldGUpIHtcclxuICAgICAgICAgIG9uRGVsZXRlICYmXHJcbiAgICAgICAgICAgIG9uRGVsZXRlKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dLZXlzIDogZGF0YSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmzkuI3og73kuLrnqbrvvIFcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgZGF0YTogZGF0YVBhcmFtcyA9IHt9LCAuLi5vdGhlclBhcmFtcyB9ID0gcGFyYW1zO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRQYXJhbXMgPSB7XHJcbiAgICAgICAgICBtZXRob2Q6IFwicG9zdFwiLFxyXG4gICAgICAgICAgYXV0b1ByZWZpeDogdHJ1ZSxcclxuICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICBpZHM6IGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dLZXlzLmpvaW4oKSA6IGRhdGEuaWQsXHJcbiAgICAgICAgICAgIC4uLmRhdGFQYXJhbXMsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLi4ucmVxdWVzdENvbmZpZyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBmaW5hbFBhcmFtcyA9IHt9IGFzIGFueTtcclxuICAgICAgICBmaW5hbFBhcmFtcyA9IHsgLi4uZGVmYXVsdFBhcmFtcywgLi4ub3RoZXJQYXJhbXMgfTtcclxuICAgICAgICByZXF1ZXN0KHVybCwge1xyXG4gICAgICAgICAgLi4uZmluYWxQYXJhbXMsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXM6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2Uuc3VjY2VzcyhcIuWIoOmZpOaIkOWKn++8gVwiKTtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBfdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vbkRlbGV0ZUNhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uRGVsZXRlQ2FsbEJhY2ssXHJcbiAgICAgICAgICAgICAgICAgIHsgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgX3RoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLmVycm9yKFwi5Yig6Zmk5aSx6LSl77yBXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3JcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgdGFibGVMb2FkKHBhcmFtczogYW55LCByZXF1ZXN0Q29uZmlnID0ge30pIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgcmVxdWVzdENvbmZpZzogZGVmYXVsdFJlcXVlc3RDb25maWcgPSB7fSxcclxuICAgICAgcmVxdWVzdFBhcmFtcyA9IHt9LFxyXG4gICAgICB0YWJsZVByb3BzID0ge30sXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgc3RvcmU6IHRhYmxlU3RvcmUgPSB7fSB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCBxdWVyeVBhcmFtczogYW55ID0gdGhpcy5jb252ZXJ0UXVlcnlQYXJhbXMoKTtcclxuICAgIGxldCBkYXRhID0gcXVlcnlQYXJhbXMuZGF0YSB8fCBxdWVyeVBhcmFtcy5wYXJhbXMgfHwge307XHJcblxyXG4gICAgbGV0IGZpbmFsUGFyYW1zID0ge1xyXG4gICAgICAuLi5kYXRhLFxyXG4gICAgICAuLi50YWJsZVN0b3JlLnJlcXVlc3RDb25maWc/LnBhcmFtcyxcclxuICAgICAgLi4ucGFyYW1zLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHsgcmVxdWVzdENvbmlnOiBzdG9yZUNvbmZpZyA9IHt9IH0gPSB0YWJsZVN0b3JlO1xyXG4gICAgY29uc3QgeyBwYXJhbXM6IHN0b3JlUGFyYW1zID0ge30sIC4uLm90aGVyU3RvcmVDb25maWcgfSA9IHN0b3JlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5sb2FkKHtcclxuICAgICAgLi4uZGVmYXVsdFJlcXVlc3RDb25maWcsXHJcbiAgICAgIC4uLm90aGVyU3RvcmVDb25maWcsXHJcbiAgICAgIC4uLnJlcXVlc3RDb25maWcsXHJcbiAgICAgIHBhcmFtczogeyAuLi5zdG9yZVBhcmFtcywgLi4uZmluYWxQYXJhbXMgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL+afpeivolxyXG4gIG9uU2VhcmNoKHBhcmFtcykge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBvblNlYXJjaCxcclxuICAgICAgb25DYWxsQmFja3MsXHJcbiAgICAgIHJlcXVlc3RQYXJhbXMgPSB7fSxcclxuICAgICAgdGFibGVQcm9wcyA9IHt9LFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHN0b3JlOiB0YWJsZVN0b3JlID0ge30gfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBsZXQgcXVlcnlQYXJhbXM6IGFueSA9IHRoaXMuY29udmVydFF1ZXJ5UGFyYW1zKCk7XHJcbiAgICBsZXQgZGF0YSA9IHF1ZXJ5UGFyYW1zLmRhdGEgfHwgcXVlcnlQYXJhbXMucGFyYW1zIHx8IHt9O1xyXG4gICAgbGV0IGZpbmFsUGFyYW1zID0ge1xyXG4gICAgICAuLi5kYXRhLFxyXG4gICAgICAuLi50YWJsZVN0b3JlLnJlcXVlc3RDb25maWc/LnBhcmFtcyxcclxuICAgICAgLi4ucGFyYW1zLFxyXG4gICAgfTtcclxuICAgIGlmIChvblNlYXJjaCkge1xyXG4gICAgICBvblNlYXJjaCh7IC4uLmZpbmFsUGFyYW1zLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50YWJsZUxvYWQoeyAuLi5maW5hbFBhcmFtcywgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfSk7XHJcbiAgICBvbkNhbGxCYWNrcz8ub25RdWVyeUNhbGxCYWNrICYmXHJcbiAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uUXVlcnlDYWxsQmFjayxcclxuICAgICAgICB7IHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZiwgcGFyYW1zOiBwYXJhbXMgfSxcclxuICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8v6KGo5qC86YeN5paw5Yqg6L29XHJcbiAgdGFibGVSZWxvYWQocGFyYW1zID0ge30sIGF1dG9Mb2FkID0gdHJ1ZSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8ucmVsb2FkKHtcclxuICAgICAgY2FsbGJhY2s6IChyZXMpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBhdXRvTG9hZCAmJlxyXG4gICAgICAgICAgcmVzPy5kYXRhPy5yZWNvcmRzPy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50UGFnZSAhPT0gMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8ucmVsb2FkKHtcclxuICAgICAgICAgICAgcGFyYW1zOiB7IGN1cnJlbnQ6IDEsIC4uLnBhcmFtcyB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRyZWVMb2FkKHBhcmFtczogYW55LCByZXF1ZXN0Q29uZmlnID0ge30pIHtcclxuICAgIGNvbnN0IHsgcmVxdWVzdENvbmZpZzogZGVmYXVsdFJlcXVlc3RDb25maWcgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgIHRoaXMudHJlZVJlZi5jdXJyZW50Py5zdG9yZS5sb2FkKHtcclxuICAgICAgLi4uZGVmYXVsdFJlcXVlc3RDb25maWcsXHJcbiAgICAgIC4uLnJlcXVlc3RDb25maWcsXHJcbiAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0RhdGFzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dEYXRhcygpO1xyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0tleXMoZGF0YTogQXJyYXk8U3RyaW5nIHwgTnVtYmVyPikge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWRSb3dLZXlzKGRhdGEpO1xyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0RhdGFzKGRhdGE6IEFycmF5PE9iamVjdD4pIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnNldFNlbGVjdGVkUm93RGF0YXMoZGF0YSk7XHJcbiAgfVxyXG4gIHJlc2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8ucmVzZXRTZWxlY3RlZFJvd0tleXMoKTtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFZhbHVlcygpIHtcclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmPy5jdXJyZW50Py5nZXRTZWFyY2hWYWx1ZXMoKTtcclxuICAgIHJldHVybiB7IC4uLmZyb21WYWx1ZSwgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfTtcclxuICB9XHJcblxyXG4gIGdldENoaWxkcmVuRGF0YShkYXRhLCBrZXlzID0gW10pIHtcclxuICAgIGNvbnN0IHsgdGFibGVQcm9wcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IHJlc0tleSA9IFtdO1xyXG4gICAgbGV0IGtleSA9IFwiXCI7XHJcbiAgICBpZiAoZGF0YS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5jaGlsZE5vZGVzO1xyXG4gICAgICBjaGlsZHJlbi5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByb3dLZXkgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICBrZXkgPSByb3dLZXkoaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGtleSA9IGl0ZW1bcm93S2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbkRhdGEoaXRlbS5jaGlsZE5vZGVzLCBrZXlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzS2V5ID0gWy4uLmtleXMsIGtleV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc0tleSA9IFsuLi5rZXlzLCBrZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc0tleTtcclxuICB9XHJcblxyXG4gIHJlbmRlclRvb2xCdXR0b25zKHRvb2xidXR0b25zOiBhbnksIHRvb2xiYXJGbGFnKSB7XHJcbiAgICBjb25zdCBmbGFnID0gdG9vbGJ1dHRvbnMubGVuZ3RoID4gNTtcclxuICAgIGNvbnN0IHsgc2hvd1NlYXJjaCA9IHRydWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdG9vbGJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID0gaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGluZGV4ID4gMykge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnQtaXRlbVwiKVxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgbW9yZU9wZW46IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2soKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgICAgdHlwZT17XCJsaW5rXCJ9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT5cclxuICAgICAgICAgICAgICAgIHtpY29ufVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10b29sLWJ1dHRvbnNcIikpfVxyXG4gICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IDAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIHt0b29sYnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgNCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IDEyLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gNCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICAgICAgICB0aXRsZT17bnVsbH1cclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAgICAgb3Blbj17dGhpcy5zdGF0ZS5tb3JlT3Blbn1cclxuICAgICAgICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXsob3BlbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZU9wZW46IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVPcGVuOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgLy8gb3Blbj17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgLy8gb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydwb3AtYm94J119XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICDmm7TlpJogPERvd25PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogaW5kZXggPT0gdG9vbGJ1dHRvbnMubGVuZ3RoIC0gMSA/IDAgOiAxMixcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge2l0ZW19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnM6IGFueSwgcm93UmVjb3JkOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgYWN0aW9uUHJvcHMsIHRhYmxlUHJvcHMgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgYmFzZUFjdGlvbkNvbHVtbiB9ID0gY29uZmlnKCk7XHJcbiAgICBjb25zdCBuZXdCdXR0b25zID0gW107XHJcbiAgICBjb25zdCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCBrZXkgPSBcIlwiO1xyXG4gICAgaWYgKHR5cGVvZiByb3dLZXkgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGtleSA9IHJvd0tleShyb3dSZWNvcmQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAga2V5ID0gcm93UmVjb3JkW3Jvd0tleV07XHJcbiAgICB9XHJcbiAgICBsZXQgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGlmIChhY3Rpb25Qcm9wcz8uc2hvd0ljb24gPT09IHRydWUgfHwgYmFzZUFjdGlvbkNvbHVtbi5zaG93SWNvbiA9PT0gdHJ1ZSlcclxuICAgICAgc2hvd0ljb24gPSB0cnVlO1xyXG4gICAgY29sdW1uQnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgaWNvbiwgcmVjb3JkU2hvdywgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChyZWNvcmRTaG93KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZWNvcmRTaG93ID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50T3B0aW9uID0ge1xyXG4gICAgICAgICAgICAgIHJlY29yZDogcm93UmVjb3JkLFxyXG4gICAgICAgICAgICAgIHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZixcclxuICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgVXRpbHMgPSB7IC4uLnRoaXMucHJvcHMuVWl0bHMgfTtcclxuICAgICAgICAgICAgbGV0IGZ1bmMgPSBuZXcgRnVuY3Rpb24oXCJldmVudE9wdGlvbixVdGlsc1wiLCByZWNvcmRTaG93KTtcclxuICAgICAgICAgICAgY29uc3Qgc2hvdyA9IGZ1bmMoZXZlbnRPcHRpb24sIFV0aWxzKTtcclxuICAgICAgICAgICAgc2hvdyAmJiBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxldCByZWNvcmQgPSByb3dSZWNvcmQ7XHJcbiAgICAgICAgICAgIGlmIChldmFsKHJlY29yZFNob3cpKSB7XHJcbiAgICAgICAgICAgICAgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVjb3JkU2hvdyA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgIGNvbnN0IHNob3cgPSByZWNvcmRTaG93KHJvd1JlY29yZCk7XHJcbiAgICAgICAgICBzaG93ICYmIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGxldCBudW1iZXIgPSBhY3Rpb25Qcm9wcz8uYnV0dG9uTnVtYmVyXHJcbiAgICAgID8gYWN0aW9uUHJvcHM/LmJ1dHRvbk51bWJlclxyXG4gICAgICA6IGJhc2VBY3Rpb25Db2x1bW4/LmJ1dHRvbk51bWJlclxyXG4gICAgICA/IGJhc2VBY3Rpb25Db2x1bW4/LmJ1dHRvbk51bWJlclxyXG4gICAgICA6IDM7XHJcbiAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgaWYgKG51bWJlciA9PSBcImFsbFwiKSB7XHJcbiAgICAgIGZsYWcgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZsYWcgPSBuZXdCdXR0b25zLmxlbmd0aCA+IG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gbmV3QnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgcmVjb3JkU2hvdywgaWNvbiwgc2hvdywgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChpbmRleCA+IE51bWJlcihudW1iZXIpIC0gMSkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnQtaXRlbVwiKVxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7IC4uLnRoaXMuc3RhdGUucG9wb3BlbnMgfTtcclxuICAgICAgICAgICAgICBkYXRhW3Jvd1JlY29yZC5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHBvcG9wZW5zOiBkYXRhLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyb3dSZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICB7aWNvbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmV3QnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgcmVjb3JkU2hvdywgaWNvbiwgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyKSB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSwge1xyXG4gICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3ItZmlyc3RcIildOiBpbmRleCA9PT0gMCxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyb3dSZWNvcmQpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgaWNvbj17aWNvbn1cclxuICAgICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICAgIHR5cGU9e1wibGlua1wifVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT5cclxuICAgICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IG51bWJlcikge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgdHJpZ2dlcj17W1wiY2xpY2tcIl19XHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICBvcGVuPXt0aGlzLnN0YXRlLnBvcG9wZW5zW2tleV0gfHwgZmFsc2V9XHJcbiAgICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXsob3BlbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7IC4uLnRoaXMuc3RhdGUucG9wb3BlbnMgfTtcclxuICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wb3BlbnM6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wb3BlbnM6IHt9LFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIC8vIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1sncG9wJ119XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIil9PlxyXG4gICAgICAgICAgICAgICAgPEVsbGlwc2lzT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpLCB7XHJcbiAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3ItZmlyc3RcIildOiBpbmRleCA9PT0gMCxcclxuICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socm93UmVjb3JkKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgdHlwZT1cImxpbmtcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7c2hvd0ljb24gIT09IGZhbHNlICYmIChcclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT5cclxuICAgICAgICAgICAgICAgIHtpY29ufVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGV4dFwiKX0+XHJcbiAgICAgICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgLy/moJHngrnlh7vkuovku7ZcclxuICB0cmVlU2VsZWN0KHNlbGVjdGVkS2V5czogYW55LCBvYmo6IGFueSkge1xyXG4gICAgbGV0IGtleXdvcmQgPSBcIlwiO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzZWFyY2hLZXkgPSBcImtleVwiLFxyXG4gICAgICBzZWFyY2hGaWVsZCA9IFwiXCIsXHJcbiAgICAgIHBhcmFudFNlbGVjdCA9IHRydWUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcy50cmVlUHJvcHM7XHJcbiAgICBjb25zdCB7IHRyZWVTZWxlY3RlZEtleSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWQsIHNlbGVjdGVkTm9kZXMgfSA9IG9iajtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAga2V5d29yZCA9IHNlbGVjdGVkTm9kZXNbMF0uZGF0YXJlZi5hdHRyaWJ1dGVbc2VhcmNoS2V5XTtcclxuICAgICAgaWYgKHBhcmFudFNlbGVjdCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBzZWxlY3RlZEtleXNbMF0sXHJcbiAgICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHsgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGVzWzBdLmlzTGVhZiB8fCAhc2VsZWN0ZWROb2Rlc1swXS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkS2V5c1swXSAhPT0gdHJlZVNlbGVjdGVkS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgIHRyZWVTZWxlY3RlZEtleTogc2VsZWN0ZWRLZXlzWzBdLFxyXG4gICAgICAgICAgICAgIHRyZWVTZWFyY2hQcmFtczogeyBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBrZXl3b3JkLFxyXG4gICAgICAgIHRyZWVTZWFyY2hQcmFtczoge30sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMub25UcmVlU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMucHJvcHMub25UcmVlU2VsZWN0KHNlbGVjdGVkS2V5cywgb2JqKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpIHx8IHt9O1xyXG4gICAgc2VhcmNoRmllbGQgJiYgdGhpcy50YWJsZUxvYWQoeyAuLi5mcm9tVmFsdWUsIFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSk7XHJcbiAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50cmVlU2VsZWN0Q2FsbEJhY2sgJiZcclxuICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8udHJlZVNlbGVjdENhbGxCYWNrLFxyXG4gICAgICAgIHsgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLCBzZWxlY3RlZEtleXM6IHNlbGVjdGVkS2V5cywgb2JqOiBvYmogfSxcclxuICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICk7XHJcbiAgICAvLyB1dGlscy5jYWxsYmFjayh0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50cmVlU2VsZWN0Q2FsbEJhY2ssIHRoaXMsIFtcclxuICAgIC8vICAgc2VsZWN0ZWRLZXlzLFxyXG4gICAgLy8gICBvYmosXHJcbiAgICAvLyBdKTtcclxuICB9XHJcbiAgcmVzZXRTZWFyY2goKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5yZXNldEZpZWxkcygpO1xyXG4gIH1cclxuICBnZXRUZXh0KHByb3BzLCB0ZXh0KSB7XHJcbiAgICBsZXQgbmV3VGV4dCA9IHRleHQ7XHJcbiAgICBpZiAocHJvcHM/LmRhdGEgJiYgcHJvcHM/LmRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGRhdGEgPSBwcm9wcy5kYXRhO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGE/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGRhdGFbaV0udmFsdWUgPT0gdGV4dCkge1xyXG4gICAgICAgICAgbmV3VGV4dCA9IGRhdGFbaV0ubGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3VGV4dDtcclxuICB9XHJcbiAgc2V0VGFibGVEYXRhKGRhdGEpIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmU/LnNldERhdGEoZGF0YSk7XHJcbiAgfVxyXG4gIHNldFRyZWVEYXRhKGRhdGEpIHtcclxuICAgIHRoaXMudHJlZVJlZi5jdXJyZW50Py5zdG9yZT8uc2V0RGF0YShkYXRhKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRLZXkgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgIGxldCByZXMgPSBbXTtcclxuICAgIGZvciAobGV0IGtleSBpbiBzZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBrZXlzID0gc2VsZWN0ZWRba2V5XTtcclxuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlcyA9IFsuLi5yZXMsIC4uLmtleXNdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH07XHJcblxyXG4gIGNvbnZlcnRRdWVyeVBhcmFtcygpIHtcclxuICAgIGNvbnN0IHsgcmVxdWVzdFBhcmFtcyA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IHF1ZXJ5UGFyYW1zOiBhbnkgPSByZXF1ZXN0UGFyYW1zLnF1ZXJ5UGFyYW1zO1xyXG4gICAgaWYgKHF1ZXJ5UGFyYW1zICYmIHR5cGVvZiBxdWVyeVBhcmFtcyA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGNvbnN0IFV0aWxzID0gdGhpcy5wcm9wcy5VdGlscyB8fCB7fTtcclxuICAgICAgbGV0IGZ1bmMgPSBuZXcgRnVuY3Rpb24oXCJVdGlsc1wiLCBxdWVyeVBhcmFtcyk7XHJcbiAgICAgIGxldCBjb252ZXJQYXJhbXMgPSBmdW5jKFV0aWxzKTtcclxuICAgICAgcXVlcnlQYXJhbXMgPSBjb252ZXJQYXJhbXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zIHx8IHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgLy8g6K6h566X6KGo5aS06auY5bqm55qE5pa55rOVXHJcbiAgY2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHQgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy50YWJsZVdyYXBwZXJSZWYuY3VycmVudCkge1xyXG4gICAgICBjb25zdCB0YWJsZUhlYWRlciA9XHJcbiAgICAgICAgdGhpcy50YWJsZVdyYXBwZXJSZWYuY3VycmVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgXCJhbnQtdGFibGUtdGhlYWRcIlxyXG4gICAgICAgIClbMF07XHJcbiAgICAgIGlmICh0YWJsZUhlYWRlcikge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IHRhYmxlSGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuICAgICAgICBpZiAoaGVhZGVySGVpZ2h0ICE9PSB0aGlzLnN0YXRlLnRhYmxlSGVhZGVySGVpZ2h0KSB7XHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgdGFibGVIZWFkZXJIZWlnaHQ6IGhlYWRlckhlaWdodCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbiAgdGhyb3R0bGVDYWxjdWxhdGVUYWJsZUhlYWRlckhlaWdodCA9IHRocm90dGxlKFxyXG4gICAgdGhpcy5jYWxjdWxhdGVUYWJsZUhlYWRlckhlaWdodCxcclxuICAgIDUwMFxyXG4gICk7XHJcblxyXG4gIC8vIOS8mOWMluaLluaLveebuOWFs+aWueazlVxyXG4gIGhhbmRsZU1vdXNlRG93bihlOiBSZWFjdC5Nb3VzZUV2ZW50KSB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8g5Yib5bu66YGu572p5bGC5Lul5aSE55CGaWZyYW1l5Zy65pmvXHJcbiAgICBjb25zdCBtYXNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIG1hc2suc3R5bGUuY3NzVGV4dCA9IGBcclxuICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgICB6LWluZGV4OiA5OTk5O1xyXG4gICAgICBjdXJzb3I6IGNvbC1yZXNpemU7XHJcbiAgICBgO1xyXG4gICAgbWFzay5pZCA9IFwiZHJhZy1tYXNrXCI7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1hc2spO1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZU1vdXNlTW92ZSA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gZS5zY3JlZW5YO1xyXG4gICAgICAvLyDpmZDliLbmnIDlsI8xMDBweO+8jOacgOWkpzUwMHB4XHJcbiAgICAgIGlmIChuZXdXaWR0aCA+PSA1MCAmJiBuZXdXaWR0aCA8PSA4MDApIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdHJlZVdpZHRoOiBuZXdXaWR0aCB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB0aHJvdHRsZWRNb3VzZU1vdmUgPSB0aHJvdHRsZShoYW5kbGVNb3VzZU1vdmUsIDE2KTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVNb3VzZVVwID0gKCkgPT4ge1xyXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRocm90dGxlZE1vdXNlTW92ZSk7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZU1vdXNlVXApO1xyXG4gICAgICAvLyDnp7vpmaTpga7nvanlsYJcclxuICAgICAgY29uc3QgbWFzayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZHJhZy1tYXNrXCIpO1xyXG4gICAgICBpZiAobWFzaykge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFzayk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aHJvdHRsZWRNb3VzZU1vdmUpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlTW91c2VVcCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGNvbHVtbnMgPSBbXSxcclxuICAgICAgc2hvd1NlYXJjaCA9IHRydWUsXHJcbiAgICAgIGNoaWxkcmVuLFxyXG4gICAgICBzdWJtaXRVcmwgPSBcIlwiLFxyXG4gICAgICB0YWJsZVByb3BzID0ge30sXHJcbiAgICAgIHRyZWVQcm9wcyA9IHt9LFxyXG4gICAgICBmb3JtUGFnZVByb3BzID0ge30sXHJcbiAgICAgIHNob3dMZWZ0ID0gZmFsc2UsXHJcbiAgICAgIHN1Ym1pdFBhcmFtcyA9IHt9LFxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiA9IHRydWUsXHJcbiAgICAgIGJ1dHRvbnMgPSBbXSxcclxuICAgICAgZWRpdG9yRm9ybSA9IHRydWUsXHJcbiAgICAgIG9uU2hvd0Zvcm0sXHJcbiAgICAgIGZvcm1DaGFuZ2VWYWxpZCA9IHRydWUsXHJcbiAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID0gXCJidXR0b21cIixcclxuICAgICAgYWN0aW9uUHJvcHMsXHJcbiAgICAgIGRlbGV0ZVBvc2l0aW9uID0gXCJ0b29sYmFyXCIsXHJcbiAgICAgIGJ1dHRvbkNsaWNrID0ge30sXHJcbiAgICAgIHBlcm1pc3Npb24gPSB7IGhhczogZmFsc2UgfSxcclxuICAgICAgcmVxdWVzdFBhcmFtcyA9IHt9LFxyXG4gICAgICByZXF1ZXN0VXJscyA9IHt9LFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0YWJsZVN0b3JlID0ge30sXHJcbiAgICAgIGZpbHRlckNvbHVtbiA9IHRydWUsXHJcbiAgICAgIGFjdGlvbkNvbHVtbiA9IHRydWUsXHJcbiAgICAgIHNob3dSb3dTZWxlY3Rpb24gPSB0cnVlLFxyXG4gICAgICBjb2x1bW5PcmRlciA9IHRydWUsXHJcbiAgICAgIGV4cGFuZGFibGUgPSB7fSxcclxuICAgICAgcGFyYW50U2VsZWN0ID0gdHJ1ZSxcclxuICAgICAgdGl0bGU6IHRhYmxlVGl0bGUsXHJcbiAgICAgIC4uLm90aGVydGFibGVQYXJhbXNcclxuICAgIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IG5ld1RhYmxlU3RvcmUgPSB7IC4uLnRhYmxlU3RvcmUgfTtcclxuICAgIGlmIChyZXF1ZXN0UGFyYW1zLnF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgIGxldCBxdWVyeVBhcmFtczogYW55ID0gdGhpcy5jb252ZXJ0UXVlcnlQYXJhbXMoKTtcclxuICAgICAgbGV0IGRhdGEgPSBxdWVyeVBhcmFtcz8uZGF0YSB8fCBxdWVyeVBhcmFtcz8ucGFyYW1zIHx8IHt9O1xyXG4gICAgICBuZXdUYWJsZVN0b3JlLnJlcXVlc3RDb25maWcgPSB7XHJcbiAgICAgICAgcGFyYW1zOiB7IC4uLmRhdGEsIC4uLm5ld1RhYmxlU3RvcmUucmVxdWVzdENvbmZpZz8ucGFyYW1zIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0cmVlU3RvcmUgPSB7fSxcclxuICAgICAgc2hvd1NlYXJjaDogdHJlZVNlYXJjaCA9IHRydWUsXHJcbiAgICAgIHRpdGxlQWxpYXMgPSBcInRpdGxlXCIsXHJcbiAgICAgIHRpdGxlOiB0cmVlVGl0bGUsXHJcbiAgICAgIC4uLm90aGVydHJlZVBhcmFtc1xyXG4gICAgfSA9IHRyZWVQcm9wcztcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBsZXQgdGFibGVQYXJhbXMgPSB7XHJcbiAgICAgIGZpbHRlckNvbHVtbixcclxuICAgICAgc3RvcmU6IHtcclxuICAgICAgICBsaXN0ZW5lcnM6IHtcclxuICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50YWJsZUxvYWRDYWxsQmFjayAmJlxyXG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50YWJsZUxvYWRDYWxsQmFjayhkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi5uZXdUYWJsZVN0b3JlLFxyXG4gICAgICB9LFxyXG4gICAgICAuLi5vdGhlcnRhYmxlUGFyYW1zLFxyXG4gICAgfSBhcyBhbnk7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsdWU6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgY29sdW1uQnV0dG9uczogYW55ID0gW107XHJcbiAgICBjb25zdCB7IGVsZW1lbnRIZWlnaHQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgcGVybWlzc2lvbkJ1dHRvbnMgPSBbXTtcclxuICAgIGlmIChwZXJtaXNzaW9uLmhhcyAmJiBwZXJtaXNzaW9uLm1lbnVDb2RlKSB7XHJcbiAgICAgIHBlcm1pc3Npb25CdXR0b25zID1cclxuICAgICAgICBnZXRCdXR0b25QZXJtaXNzb25zKHBlcm1pc3Npb24ubWVudUNvZGUpLnBlcm1pc3NvbnMgfHwgW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYmogPSBjb252ZXJ0Q29sdW1ucyhjb2x1bW5zLCB7fSk7XHJcbiAgICBsZXQgdGFibGVDb2x1bW46IGFueVtdID0gZ2V0TmV3Q29sdW1ucyhjb2x1bW5zLCB0aGlzLnByb3BzKTtcclxuICAgIGNvbnN0IHNlYXJjaEZvcm1zID0gb2JqLnNlYXJjaEZvcm1zIHx8IFtdO1xyXG4gICAgY29uc3QgZWRpdG9yRm9ybXMgPSBvYmouZWRpdG9yRm9ybXMgfHwgW107XHJcbiAgICBjb25zdCB0b29sQnV0dG9uczogYW55ID0gW107XHJcbiAgICBjb25zdCBmb3JtQnV0dG9uOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IHsgYmFzZUFjdGlvbkNvbHVtbiB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgc2hvd0ljb24gPSB0cnVlO1xyXG4gICAgaWYgKGFjdGlvblByb3BzPy5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBlbHNlIGlmIChiYXNlQWN0aW9uQ29sdW1uLnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGNvbnN0IGJ1dHRvbk1hcCA9IHtcclxuICAgICAgZWRpdG9yOiB7IG5hbWU6IFwi57yW6L6RXCIsIGNvZGU6IFwiZWRpdG9yXCIsIGljb246IDxFZGl0T3V0bGluZWQgLz4gfSxcclxuICAgICAgZGVsZXRlOiB7IG5hbWU6IFwi5Yig6ZmkXCIsIGNvZGU6IFwiZGVsZXRlXCIsIGljb246IDxEZWxldGVPdXRsaW5lZCAvPiB9LFxyXG4gICAgICBzZWFyY2g6IHsgbmFtZTogXCLmn6XnnItcIiwgY29kZTogXCJzZWFyY2hcIiwgaWNvbjogPEV5ZU91dGxpbmVkIC8+IH0sXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmV0dXJuQnV0dG9uID0gKGNvZGUsIHNob3cgPSBcIlwiLCBkZWZhdWx0UHJvcHMgPSB7fSkgPT4ge1xyXG4gICAgICBsZXQgcHJvcHMgPSB7XHJcbiAgICAgICAgaWNvbjogc2hvd0ljb24gPyBidXR0b25NYXBbY29kZV0uaWNvbiA6IG51bGwsXHJcbiAgICAgICAgdHlwZTogXCJsaW5rXCIsXHJcbiAgICAgICAgLi4uZGVmYXVsdFByb3BzLFxyXG4gICAgICB9IGFzIGFueTtcclxuXHJcbiAgICAgIGlmIChzaG93KSB7XHJcbiAgICAgICAgcHJvcHMgPSB7IC4uLnByb3BzLCByZWNvcmRTaG93OiBzaG93IH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBvbkNsaWNrPXsocmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT0gXCJkZWxldGVcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMub25EZWxldGUocmVjb3JkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoY29kZSA9PSBcImVkaXRvclwiICYmIGJ1dHRvbkNsaWNrLm9uRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgYnV0dG9uQ2xpY2sub25FZGl0b3IsXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkOiByZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5VdGlsc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gXCJzZWFyY2hcIiAmJiBidXR0b25DbGljay5vblNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbkNsaWNrLm9uU2VhcmNoLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZDogcmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3M6IHRoaXMucHJvcHMuZnVuY3MsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBjb2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIGNvZGUsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBjYWxsQmFjayA9XHJcbiAgICAgICAgICAgICAgICAgIGNvZGUgPT0gXCJlZGl0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25FZGl0b3JDYWxsQmFja1xyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25TZWFyY2hDYWxsQmFjaztcclxuICAgICAgICAgICAgICAgIGNhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZixcclxuICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDogcmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIHsuLi5wcm9wc31cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7YnV0dG9uTWFwW2NvZGVdPy5uYW1lfVxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGNoZWNrUGVyc3Npb24gPSAoY29kZSkgPT4ge1xyXG4gICAgICBpZiAoIXBlcm1pc3Npb24uaGFzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25CdXR0b25zLmluZGV4T2YoY29kZSkgPiAtMTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGJ1dHRvbnMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKChpdGVtID09IFwiYWRkXCIgfHwgaXRlbS5jb2RlID09IFwiYWRkXCIpICYmIGNoZWNrUGVyc3Npb24oXCJhZGRcIikpIHtcclxuICAgICAgICB0b29sQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHsgb25TaG93Rm9ybSwgYnV0dG9uQ2xpY2sgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICAgICAgICBpZiAoYnV0dG9uQ2xpY2s/Lm9uQWRkKSB7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgYnV0dG9uQ2xpY2sub25BZGQsXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3M6IHRoaXMucHJvcHMuZnVuY3MsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKG51bGwsIFwiYWRkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKG51bGwsIG51bGwsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uQWRkQ2FsbEJhY2sgJiZcclxuICAgICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25BZGRDYWxsQmFjayxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgaWNvbj17PFBsdXNPdXRsaW5lZCAvPn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5re75YqgXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIChpdGVtID09IFwiZGVsZXRlX2JhdGNoXCIgfHwgaXRlbS5jb2RlID09IFwiZGVsZXRlX2JhdGNoXCIpICYmXHJcbiAgICAgICAgY2hlY2tQZXJzc2lvbihcImRlbGV0ZV9iYXRjaFwiKVxyXG4gICAgICApIHtcclxuICAgICAgICB0b29sQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5vbkRlbGV0ZS5iaW5kKHRoaXMsIG51bGwsIFwidG9vbGJhclwiKX1cclxuICAgICAgICAgICAgaWNvbj17PERlbGV0ZU91dGxpbmVkIC8+fVxyXG4gICAgICAgICAgICBkYW5nZXJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5om56YeP5Yig6ZmkXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChjaGVja1BlcnNzaW9uKGl0ZW0uY29kZSA/IGl0ZW0uY29kZSA6IGl0ZW0pKSB7XHJcbiAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goXHJcbiAgICAgICAgICAgIHJldHVybkJ1dHRvbihcclxuICAgICAgICAgICAgICBpdGVtLmNvZGUgPyBpdGVtLmNvZGUgOiBpdGVtLFxyXG4gICAgICAgICAgICAgIGl0ZW0ucmVjb3JkU2hvdyxcclxuICAgICAgICAgICAgICBpdGVtLnByb3BzIHx8IHt9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgY2hpbGRyZW4ubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xyXG4gICAgICAgICAgaXRlbS5tYXAoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBjaGlsZD8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiICYmXHJcbiAgICAgICAgICAgICAgY2hlY2tQZXJzc2lvbihjaGlsZD8ucHJvcHM/LmNvZGUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRvb2xCdXR0b25zLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIGNoaWxkPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJmb3JtQnV0dG9uXCIgJiZcclxuICAgICAgICAgICAgICBjaGVja1BlcnNzaW9uKGNoaWxkPy5wcm9wcz8uY29kZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgZm9ybUJ1dHRvbi5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAoY2hpbGQ/LnByb3BzPy5wYWdlVHlwZSA9PSBcImNvbHVtbkJ1dHRvblwiIHx8XHJcbiAgICAgICAgICAgICAgICBjaGlsZD8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpICYmXHJcbiAgICAgICAgICAgICAgY2hlY2tQZXJzc2lvbihjaGlsZD8ucHJvcHM/LmNvZGUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW0/LnByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIiAmJlxyXG4gICAgICAgICAgICBjaGVja1BlcnNzaW9uKGl0ZW0/LnByb3BzPy5jb2RlKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRvb2xCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY29sdW1uQnV0dG9uXCIgfHxcclxuICAgICAgICAgICAgICBpdGVtPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjbG91bW5CdXR0b25cIikgJiZcclxuICAgICAgICAgICAgY2hlY2tQZXJzc2lvbihpdGVtPy5wcm9wcz8uY29kZSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgY29uc3QgeyBwcm9wcyB9OiBhbnkgPSBjaGlsZHJlbjtcclxuICAgICAgaWYgKHByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIiAmJiBjaGVja1BlcnNzaW9uKHByb3BzPy5jb2RlKSkge1xyXG4gICAgICAgIHRvb2xCdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIChwcm9wcz8ucGFnZVR5cGUgPT0gXCJjb2x1bW5CdXR0b25cIiB8fFxyXG4gICAgICAgICAgcHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpICYmXHJcbiAgICAgICAgY2hlY2tQZXJzc2lvbihwcm9wcz8uY29kZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKGNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYWN0aW9uQ29sdW1uICYmXHJcbiAgICAgIHRhYmxlQ29sdW1uLnB1c2goe1xyXG4gICAgICAgIHRpdGxlOiBcIuaTjeS9nFwiLFxyXG4gICAgICAgIGRhdGFJbmRleDogXCJhY3Rpb25cIixcclxuICAgICAgICBhbGlnbjogYWN0aW9uUHJvcHM/LnRleHRBbGlnblxyXG4gICAgICAgICAgPyBhY3Rpb25Qcm9wcz8udGV4dEFsaWduXHJcbiAgICAgICAgICA6IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICA/IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICA6IFwibGVmdFwiLFxyXG4gICAgICAgIHdpZHRoOiBhY3Rpb25Qcm9wcz8ud2lkdGhcclxuICAgICAgICAgID8gYWN0aW9uUHJvcHM/LndpZHRoXHJcbiAgICAgICAgICA6IGJhc2VBY3Rpb25Db2x1bW4ud2lkdGhcclxuICAgICAgICAgID8gYmFzZUFjdGlvbkNvbHVtbi53aWR0aFxyXG4gICAgICAgICAgOiAyMDAsXHJcbiAgICAgICAgZml4ZWQ6IFwicmlnaHRcIixcclxuICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnksIHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWFjdGlvblwiKX0+XHJcbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnMsIHJlY29yZCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAoY29sdW1uT3JkZXIpXHJcbiAgICAgIHRhYmxlQ29sdW1uID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIuW6j+WPt1wiLFxyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0LCByZWFjb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPD57aW5kZXggKyAxfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50YWJsZUNvbHVtbixcclxuICAgICAgXTtcclxuICAgIGxldCBzZWFyY2hGbGFnID0gc2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9XHJcbiAgICAgIHNob3dUb29sQnV0dG9uICYmXHJcbiAgICAgIHRvb2xCdXR0b25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID09IFwiYnV0dG9tXCI7XHJcbiAgICBsZXQgdG9vbGJhckZsYWcgPSAhKFxyXG4gICAgICB0YWJsZVByb3BzLnRvb2xiYXIgPT0gZmFsc2UgfHxcclxuICAgICAgdGFibGVQcm9wcy50b29sYmFyPy5zaG93ID09IGZhbHNlIHx8XHJcbiAgICAgIHRhYmxlUHJvcHMudG9vbGJhcj8udG9vbHM/Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgIHRhYmxlVG9vbD8uc2hvdyA9PSBmYWxzZVxyXG4gICAgKTtcclxuICAgIGxldCBoZWFkZXJIZWlnaHQgPSBzaG93U2VhcmNoICYmIHNlYXJjaEZvcm1zLmxlbmd0aCA+IDAgPyAxMDQgOiAwOyAvL+WktOmDqOaQnOe0ouagj+mrmOW6plxyXG4gICAgbGV0IHRvb2xIZWlnaHQgPSB0YWJsZVRpdGxlIHx8IHRvb2xGbGFnID8gNTAgOiAwO1xyXG4gICAgbGV0IHBhZGRpbmdIZWlnaHQgPSAyMCAqIDI7IC8v5LiK5LiL6Ze06LedXHJcbiAgICBsZXQgdGFibGVDb250ZW50SGVpZ2h0ID1cclxuICAgICAgZWxlbWVudEhlaWdodCAtIHRvb2xIZWlnaHQgLSBwYWRkaW5nSGVpZ2h0IDtcclxuICAgIGxldCBQYWdpbmF0aW9uSGVpZ2h0ID0gdGFibGVQcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSA/IDMyICsgMTYgOiAwOyAvLzMyIOS4uuWIhumhteWZqOmrmOW6piwxNuS4um1hcmdpbumXtOi3nVxyXG4gICAgbGV0IHRhYmxlSGVpZ2h0ID0gdGFibGVDb250ZW50SGVpZ2h0IC0gUGFnaW5hdGlvbkhlaWdodDtcclxuICAgIGxldCB0YWJsZVNyb2xsSGVpZ2h0ID1cclxuICAgICAgdGFibGVDb250ZW50SGVpZ2h0IC1cclxuICAgICAgKHRoaXMuc3RhdGUudGFibGVIZWFkZXJIZWlnaHQgPiAwID8gdGhpcy5zdGF0ZS50YWJsZUhlYWRlckhlaWdodCA6IDU1KSAtXHJcbiAgICAgIFBhZ2luYXRpb25IZWlnaHQ7XHJcbiAgICAvLyBpZiAodGFibGVQcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSkge1xyXG4gICAgY29uc3Qgc2Nyb2xsID0gdGFibGVQYXJhbXMuc2Nyb2xsO1xyXG4gICAgdGFibGVQYXJhbXMgPSB7XHJcbiAgICAgIC4uLnRhYmxlUGFyYW1zLFxyXG4gICAgICBzY3JvbGw6IHsgeDogXCJtYXgtY29udGVudFwiLCB5OiB0YWJsZVNyb2xsSGVpZ2h0LCAuLi5zY3JvbGwgfSxcclxuICAgIH07XHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlXCIpLCBjbGFzc05hbWUpfVxyXG4gICAgICAgIHJlZj17dGhpcy5wYWdlUmVmfVxyXG4gICAgICA+XHJcbiAgICAgICAge3RoaXMucHJvcHMucGFnZVRpdGxlICYmIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRpdGxlXCIpKX0+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXBhbmVcIikpfVxyXG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7c2hvd0xlZnQgJiYgKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtbGVmdFwiKX1cclxuICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogdGhpcy5zdGF0ZS50cmVlV2lkdGggfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt0cmVlVGl0bGUgJiYgKFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRyZWUtdGl0bGVcIil9Pnt0cmVlVGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJ0cmVlLWNvbnRlbnRcIiksIHtcclxuICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcInRyZWUtY29udGVudC1ub3RpdGxlXCIpXTogIXRyZWVUaXRsZSxcclxuICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidHJlZS1kcmFnXCJcclxuICAgICAgICAgICAgICAgICAgb25Nb3VzZURvd249e3RoaXMuaGFuZGxlTW91c2VEb3duLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8VHJlZVxyXG4gICAgICAgICAgICAgICAgICBzdG9yZT17eyAuLi50cmVlU3RvcmUgfX1cclxuICAgICAgICAgICAgICAgICAgc2hvd0ljb249e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICBjaGVja2FibGU9e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlPXt0cmVlU2VhcmNofVxyXG4gICAgICAgICAgICAgICAgICBvblNlbGVjdD17dGhpcy50cmVlU2VsZWN0LmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkS2V5cz17W3RoaXMuc3RhdGUudHJlZVNlbGVjdGVkS2V5XX1cclxuICAgICAgICAgICAgICAgICAgdGl0bGVBbGlhcz17dGl0bGVBbGlhc31cclxuICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRyZWVSZWZ9XHJcbiAgICAgICAgICAgICAgICAgIHsuLi5vdGhlcnRyZWVQYXJhbXN9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1yaWdodFwiKSwge1xyXG4gICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2Utbm8tbGVmdC1yaWdodFwiKV06ICFzaG93TGVmdCxcclxuICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKDEwMCUgLSAke3RoaXMuc3RhdGUudHJlZVdpZHRofXB4IC0gJHtcclxuICAgICAgICAgICAgICAgIHNob3dMZWZ0ID8gMTUgOiAwXHJcbiAgICAgICAgICAgICAgfXB4KWAsXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93U2VhcmNoICYmIHNlYXJjaEZvcm1zLmxlbmd0aCA+IDAgJiYgKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaGVhZGVyc2VhcmNoXCIpfT5cclxuICAgICAgICAgICAgICAgIDxIZWFkZXJTZWFyY2hcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoRm9ybXM9e3NlYXJjaEZvcm1zfVxyXG4gICAgICAgICAgICAgICAgICB0b29sQnV0dG9uUG9zaXRpb249e3Rvb2xCdXR0b25Qb3NpdGlvbn1cclxuICAgICAgICAgICAgICAgICAgb25TZWFyY2g9e3RoaXMub25TZWFyY2guYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICAgICAgb25SZXNldD17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLm9uUmVzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25SZXNldCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5yZXNldEZpZWxkcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVMb2FkKHt9KTtcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnNlYXJjaFJlZn1cclxuICAgICAgICAgICAgICAgICAgc2VhcmNoRm9ybVByb3BzPXt0aGlzLnByb3BzLnNlYXJjaEZvcm1Qcm9wc31cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtY29udGVudFwiKSwge1xyXG4gICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1jb250ZW50LWdhcFwiKV06ICFzZWFyY2hGbGFnLFxyXG4gICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgIHJlZj17dGhpcy5wYWdlQ29udGVudFJlZn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHsodGFibGVUaXRsZSB8fCB0b29sRmxhZykgJiYgKFxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGFibGUtdGl0bGVcIiksIHtcclxuICAgICAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRpdGxlLXdpZHRoXCIpXTogIXRvb2xiYXJGbGFnLFxyXG4gICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdj57dGFibGVUaXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAge3Rvb2xGbGFnICYmIHRoaXMucmVuZGVyVG9vbEJ1dHRvbnModG9vbEJ1dHRvbnMsIHRvb2xiYXJGbGFnKX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcblxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGFibGVcIiksXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlLXRvcFwiKV06ICF0b29sYmFyRmxhZyxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGFibGUtdG9wMlwiKV06XHJcbiAgICAgICAgICAgICAgICAgICAgICB0b29sYmFyRmxhZyAmJiAhdG9vbEZsYWcsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICByZWY9e3RoaXMudGFibGVXcmFwcGVyUmVmfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUNvbnRlbnRIZWlnaHQgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8VGFibGVcclxuICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRhYmxlUmVmfVxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zPXt0YWJsZUNvbHVtbn1cclxuICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZEljb246ICh7IGV4cGFuZGVkLCBvbkV4cGFuZCwgcmVjb3JkIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge2V4cGFuZGVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmNoaWxkTm9kZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuY2hpbGROb2Rlcz8ubGVuZ3RoID4gMCA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEb3duT3V0bGluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IG9uRXhwYW5kKHJlY29yZCwgZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZXhwYW5kLWljb25cIil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiByZWNvcmQuY2hpbGROb2RlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmNoaWxkTm9kZXM/Lmxlbmd0aCA+IDAgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmlnaHRPdXRsaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gb25FeHBhbmQocmVjb3JkLCBlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJleHBhbmQtaWNvblwiKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLmV4cGFuZGFibGUsXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbk9yZGVyPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHBhZ2luYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGN1cnJlbnRQYWdlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSAhPT0gcGFnaW5hdGlvbi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2U6IHBhZ2luYXRpb24uY3VycmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgdG9vbGJhcj17e1xyXG4gICAgICAgICAgICAgICAgICAgIG9uVG9vbENsaWNrOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvblJlZnJlc2g6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRTZWFyY2hWYWx1ZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUxvYWQocGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAuLi50YWJsZVByb3BzLnRvb2xiYXIsXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIHNob3dSb3dTZWxlY3Rpb249e3Nob3dSb3dTZWxlY3Rpb259XHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cclxuICAgICAgICAgICAgICAgICAgey4uLnRhYmxlUGFyYW1zfVxyXG4gICAgICAgICAgICAgICAgICAvLyBwYWdpbmF0aW9uPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICB7LyogPGRpdj48L2Rpdj4gKi99XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB7ZWRpdG9yRm9ybSAmJiB0aGlzLnByb3BzLmZvcm1QYWdlUHJvcHM/LmZvcm1UeXBlICE9PSBcInBhZ2VcIiAmJiAoXHJcbiAgICAgICAgICAgIDxFZGl0b3JGb3JtXHJcbiAgICAgICAgICAgICAgcmVmPXt0aGlzLmVkaXRvclJlZn1cclxuICAgICAgICAgICAgICBjYWxsQmFjaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25TdW1iaXRDYWxsQmFjayAmJlxyXG4gICAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vblN1bWJpdENhbGxCYWNrLFxyXG4gICAgICAgICAgICAgICAgICAgIHsgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5VdGlsc1xyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgZm9ybXM9e2VkaXRvckZvcm1zfVxyXG4gICAgICAgICAgICAgIHN1Ym1pdFVybD17c3VibWl0VXJsfVxyXG4gICAgICAgICAgICAgIHN1Ym1pdFBhcmFtcz17c3VibWl0UGFyYW1zfVxyXG4gICAgICAgICAgICAgIG9uU3VibWl0PXt0aGlzLnByb3BzLm9uU3VibWl0fVxyXG4gICAgICAgICAgICAgIG9uSGlkZUZvcm09e3RoaXMucHJvcHMub25IaWRlRm9ybX1cclxuICAgICAgICAgICAgICBvbkZvcm1DaGFuZ2U9e3RoaXMucHJvcHMub25Gb3JtQ2hhbmdlfVxyXG4gICAgICAgICAgICAgIGZvcm1UeXBlPXt0aGlzLnByb3BzLmZvcm1UeXBlIHx8IFwiYXV0b1wifVxyXG4gICAgICAgICAgICAgIGNoYW5nZVZhbGlkPXtmb3JtQ2hhbmdlVmFsaWR9XHJcbiAgICAgICAgICAgICAgVXRpbHM9e3RoaXMucHJvcHMuVXRpbHN9XHJcbiAgICAgICAgICAgICAgcmVxdWVzdE9iamVjdD17e1xyXG4gICAgICAgICAgICAgICAgYWRkVXJsOiByZXF1ZXN0VXJscy5hZGRVcmwsXHJcbiAgICAgICAgICAgICAgICBlZGl0b3JVcmw6IHJlcXVlc3RVcmxzLmVkaXRvclVybCxcclxuICAgICAgICAgICAgICAgIGFkZFBhcmFtczogcmVxdWVzdFBhcmFtcy5hZGRQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBlZGl0b3JQYXJhbXM6IHJlcXVlc3RQYXJhbXMuZWRpdG9yUGFyYW1zLFxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgZnVuY3M9e3RoaXMucHJvcHMuZnVuY3N9XHJcbiAgICAgICAgICAgICAgey4uLmZvcm1QYWdlUHJvcHN9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7Zm9ybUJ1dHRvbn1cclxuICAgICAgICAgICAgPC9FZGl0b3JGb3JtPlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBCYXNlUGFnZTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","PureComponent","Table","Tree","Button","Modal","Popover","message","EditorForm","cls","DownOutlined","EyeOutlined","EditOutlined","RightOutlined","PlusOutlined","EllipsisOutlined","DeleteOutlined","converFunction","getLess","request","config","getStorage","getButtonPermissons","HeaderSearch","convertColumns","getNewColumns","throttle","styles","BasePage","constructor","props","_type","_size","_defineProperty","createRef","checkedTreeKeys","name","userType","account","state","value","deptId","onSearch","selected","res","key","keys","length","tableWrapperRef","current","tableHeader","getElementsByClassName","headerHeight","getBoundingClientRect","height","tableHeaderHeight","setState","calculateTableHeaderHeight","storePrefix","type","content","size","selectedRowKeys","selectedRowDatas","treeSelectedKey","expand","formType","tableSize","treeSearchPrams","popopens","moreOpen","elementHeight","permissionButtons","queryParams","buttonsLoading","treeWidth","showLeft","componentDidMount","_this$pageContentRef$","initData","permisson","pageContentRef","clientHeight","window","addEventListener","throttleCalculateTableHeaderHeight","setTimeout","componentDidUpdate","prevProps","_this$pageContentRef$2","componentWillUnmount","removeEventListener","setSearchParams","params","callBack","_this$searchRef$curre","searchRef","doSubmit","data","_this$editorRef$curre","label","arguments","undefined","editorRef","showForm","_this$props$formPageP","editorflag","formPageProps","_this$props$formPageP2","funcs","pathname","concat","tableCode","id","history","serviceName","servicePath","Date","getTime","title","_this$editorRef","newValue","_objectSpread","show","hideForm","_this$editorRef$curre2","setLoading","loading","_this$editorRef$curre3","setEditFormValues","_this$editorRef$curre4","setFormValue","getEditFormValues","_this$editorRef$curre5","getFormValue","onDelete","_this$tableRef$curren","_this$tableRef$curren2","deletePosition","deleteUrl","deleteParams","buttonClick","requestParams","requestUrls","requestConfig","_this","tableRef","getSelectedRowKeys","getSelectedRowDatas","url","warning","confirm","onOk","pageRef","record","ids","Utils","Error","dataParams","otherParams","_objectWithoutProperties","_excluded","defaultParams","method","autoPrefix","join","finalParams","then","code","_this$searchRef","_this$props$onCallBac","_this$props$onCallBac2","success","getSearchValues","onCallBacks","onDeleteCallBack","tableLoad","error","catch","console","log","_tableStore$requestCo","_this$tableRef$curren3","defaultRequestConfig","tableProps","store","tableStore","convertQueryParams","requestConig","storeConfig","storeParams","otherStoreConfig","_excluded2","load","_tableStore$requestCo2","_this$props$onCallBac3","onQueryCallBack","tableReload","_this$tableRef$curren4","autoLoad","reload","callback","_res$data","records","currentPage","_this$tableRef$curren5","treeLoad","_this$treeRef$current","treeRef","_this$tableRef$curren6","_this$tableRef$curren7","setSelectedRowKeys","_this$tableRef$curren8","setSelectedRowDatas","_this$tableRef$curren9","resetSelectedRowKeys","_this$tableRef$curren10","_this$searchRef2","fromValue","getChildrenData","rowKey","resKey","childNodes","children","map","item","index","renderToolButtons","toolbuttons","toolbarFlag","flag","showSearch","_item$props","pageType","onClick","icon","_excluded3","createElement","className","_extends","style","marginLeft","marginRight","placement","open","onOpenChange","renderCloumnButton","columnButtons","rowRecord","actionProps","baseActionColumn","newButtons","showIcon","_item$props2","recordShow","_excluded4","eventOption","Uitls","func","Function","push","e","eval","number","buttonNumber","_item$props3","_excluded5","Number","_item$props4","_excluded6","trigger","treeSelect","selectedKeys","obj","_this$searchRef3","_this$props$onCallBac4","_this$props$onCallBac5","keyword","searchKey","searchField","parantSelect","treeProps","selectedNodes","dataref","attribute","isLeaf","onTreeSelect","treeSelectCallBack","resetSearch","_this$searchRef$curre2","resetFields","getText","text","_props$data","newText","i","setTableData","_this$tableRef$curren11","setData","setTreeData","_this$treeRef$current2","converParams","handleMouseDown","preventDefault","mask","document","cssText","body","appendChild","handleMouseMove","newWidth","screenX","throttledMouseMove","handleMouseUp","getElementById","removeChild","render","_this2","_tableProps$toolbar","_tableProps$toolbar2","_this$props$formPageP3","columns","submitUrl","submitParams","showToolButton","buttons","editorForm","onShowForm","formChangeValid","toolButtonPosition","permission","has","filterColumn","actionColumn","showRowSelection","columnOrder","expandable","tableTitle","othertableParams","_excluded7","newTableStore","_newTableStore$reques","treeStore","treeSearch","titleAlias","treeTitle","othertreeParams","_excluded8","tableParams","listeners","_this$props$onCallBac6","_this$props$onCallBac7","tableLoadCallBack","defaultValue","menuCode","permissons","tableColumn","searchForms","editorForms","toolButtons","formButton","buttonMap","editor","delete","search","returnButton","_buttonMap$code","defaultProps","onEditor","_this2$props$onCallBa","_this2$props$onCallBa2","onEditorCallBack","onSearchCallBack","checkPerssion","indexOf","onAdd","_this$props$onCallBac8","_this$props$onCallBac9","onAddCallBack","bind","danger","Array","isArray","child","_child$props","_child$props2","_child$props3","_child$props4","_child$props5","_child$props6","_child$props7","_item$props5","_item$props6","_item$props7","_item$props8","_item$props9","dataIndex","align","textAlign","width","fixed","reacord","Fragment","searchFlag","tableTool","toolFlag","toolbar","tools","toolHeight","paddingHeight","tableContentHeight","PaginationHeight","pagination","tableHeight","tableSrollHeight","scroll","x","y","ref","pageTitle","display","onMouseDown","checkable","searchable","onSelect","onReset","_this$searchRef$curre3","searchFormProps","expandIcon","_ref","_record$childNodes","_record$childNodes2","expanded","onExpand","onChange","onToolClick","onRefresh","_this$props$onCallBac10","_this$props$onCallBac11","onSumbitCallBack","forms","onSubmit","onHideForm","onFormChange","changeValid","requestObject","addUrl","editorUrl","addParams","editorParams"],"sources":["../../../src/components/page/BasePage/index.tsx"],"sourcesContent":["import React, { PureComponent, ReactNode } from \"react\";\r\nimport Table from \"../../base/table\";\r\nimport Tree from \"../../base/tree\";\r\nimport Button from \"../../base/button\";\r\nimport Modal from \"../../base/modal\";\r\nimport Popover from \"../../base/popover\";\r\nimport message from \"../../base/message\";\r\nimport EditorForm, { FormPageProps } from \"../FormPage/index\";\r\nimport cls from \"classnames\";\r\nimport \"./index.module.less\";\r\nimport Store, { PageStore, StoreProps } from \"@bj-nsc/msn\";\r\nimport { utils } from \"@bj-nsc/msn/lib/utils\";\r\nimport {\r\n DownOutlined,\r\n EyeOutlined,\r\n EditOutlined,\r\n RightOutlined,\r\n PlusOutlined,\r\n EllipsisOutlined,\r\n DeleteOutlined,\r\n} from \"@ant-design/icons\";\r\nimport { converFunction, getLess, getNode, simplifyColumns } from \"../../utils\";\r\nimport request from \"nsc-request\";\r\nimport config from \"../../config\";\r\nimport { getStorage, px2vw, getButtonPermissons } from \"@bj-nsc/functions\";\r\nimport HeaderSearch from \"../HeaderSearch\";\r\nimport { PaginationProps } from \"antd\";\r\nimport nscfile from \"nsc-file\";\r\nimport { convertColumns, getNewColumns } from \"./utils\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport throttle from \"lodash/throttle\";\r\nimport CompoundedSpace from \"antd/es/space\";\r\ntype ButtonItem =\r\n | string\r\n | {\r\n code: string;\r\n recordShow?: string | Function;\r\n props?: any;\r\n };\r\n\r\ninterface TableProps {\r\n actionColumn?: boolean; //是否显示操作列\r\n store?: StoreProps;\r\n filterColumn?: boolean; //是否显示过滤按钮\r\n showRowSelection?: boolean; //是否表格勾选列\r\n pagination?: boolean | PaginationProps; //是否显示分页\r\n columnOrder?: boolean; //是否显示表格序列\r\n [propsName: string]: any;\r\n}\r\nconst styles = null;\r\ninterface TreeProps {\r\n store?: StoreProps;\r\n showSearch?: boolean; //是否显示搜索框\r\n searchKey?: string; //搜索value对应的key\r\n searchField?: string; //查询对应的key\r\n titleAlias?: string; //树title对应的key,默认title\r\n nodePorps?: object;\r\n parantSelect?: boolean;\r\n [propsName: string]: any;\r\n}\r\ninterface FormProps extends FormPageProps {}\r\n\r\nexport interface NSCBaseBageProps {\r\n showSearch?: boolean; //是否显示头部搜索栏\r\n tableProps?: TableProps; //表格参数\r\n treeProps?: TreeProps; //左侧树参数\r\n submitParams?: Object; //添加参数,默认mothod:post, 参数通过data传递\r\n submitUrl?: string;\r\n onSubmit?: (value?: any, label?: any) => void;\r\n columns?: Array<Object>;\r\n showLeft?: boolean; //是否显示左侧目录树\r\n showToolButton?: boolean; //是否显示按钮栏\r\n editorForm?: boolean; //是否需要表单功能 , 为false 编辑,查看,新增功能均不可用\r\n deleteUrl?: string; //删除url\r\n onDelete?: (selectedKeys?: Array<string>) => void; //删除参数,默认mothod:post, 参数通过ids拼接传递给后台\r\n deleteParams?: Object;\r\n children?: React.ReactNode;\r\n onSearch?: (value?: any) => void;\r\n onReset?: () => void;\r\n initData?: any; //初始化回调函数,在componentDidMount中调用\r\n buttons?: ButtonItem[]; //按钮集合 ['add','delete','search','editor','delete_batch']\r\n onShowForm?: (value?: any, editorFlag?: string) => void; //打开表单回调\r\n onHideForm?: () => void; //打开表单回调\r\n onFormChange?: (changedValues?: any, allValues?: any) => void; //表单onChange回调\r\n formType?: \"modal\" | \"drawer\" | \"page\";\r\n formChangeValid?: boolean; //表单校验\r\n className?: any;\r\n toolButtonPosition?: \"right\" | \"buttom\";\r\n pageTitle?: string | ReactNode;\r\n actionProps?: {\r\n textAlign?: string;\r\n showIcon?: boolean;\r\n width?: number;\r\n buttonNumber?: number | \"all\";\r\n };\r\n searchFormProps?: { wrapperCol?: any; labelCol?: any };\r\n onTreeSelect?: (value?: any, editorFlag?: string) => void; //打开表单回调\r\n onCallBacks?: {\r\n treeSelectCallBack?: any; //树点击查询后回调\r\n onQueryCallBack?: any; //查询回调,查询数据后回调\r\n onSumbitCallBack?: any; //保存回调,保存数据成功后回调\r\n onDeleteCallBack?: any; //删除按钮回调,删除数据后执行\r\n onEditorCallBack?: any; //编辑按钮回调,打开弹框后执行\r\n onAddCallBack?: any; //添加按钮回调,打开弹框后执行\r\n onSearchCallBack?: any; //列表查询按钮回调,打开弹框后执行\r\n tableLoadCallBack?: any; //列表查询回调--load\r\n };\r\n pageType?: \"normal\" | \"tabspage\";\r\n formPageProps?: FormPageProps;\r\n buttonClick?: {\r\n onAdd?: () => void;\r\n onEditor?: (value?: any) => void;\r\n onSearch?: (value?: any) => void;\r\n onDelete?: (value?: any) => void;\r\n };\r\n permission?: {\r\n has?: boolean;\r\n menuCode?: string;\r\n };\r\n requestParams?: {\r\n //需要额外传的固定请求参数\r\n addParams?: Object; //新增固定参数\r\n editorParams?: Object; //编辑固定参数\r\n queryParams?: Object; //查询固定参数\r\n deleteParams?: Object; //删除固定参数\r\n };\r\n requestUrls?: {\r\n addUrl?: string; //新增url\r\n editorUrl?: string; //编辑url\r\n deleteUrl?: string; //删除url\r\n };\r\n funcs?: any;\r\n requestConfig?: any;\r\n [propsName: string]: any;\r\n}\r\n\r\nclass BasePage extends PureComponent<NSCBaseBageProps, any> {\r\n tableRef = React.createRef<any>();\r\n treeRef = React.createRef<any>();\r\n searchRef = React.createRef<any>();\r\n editorRef = React.createRef<any>();\r\n pageRef = React.createRef<any>();\r\n pageContentRef = React.createRef<any>();\r\n dateFormat = {} as any;\r\n tableWrapperRef = React.createRef<HTMLDivElement>();\r\n static convertColumns = convertColumns;\r\n constructor(props: any) {\r\n super(props);\r\n let { storePrefix } = config();\r\n let type = getStorage(\r\n storePrefix ? storePrefix + \"-\" + \"formType\" : \"formType\"\r\n );\r\n type = type?.content;\r\n let size = getStorage(\r\n storePrefix ? storePrefix + \"-\" + \"tableSize\" : \"tableSize\"\r\n );\r\n size = size?.content;\r\n this.state = {\r\n type: \"add\",\r\n selectedRowKeys: [],\r\n selectedRowDatas: [],\r\n treeSelectedKey: \"\",\r\n expand: false,\r\n formType: type || \"modal\",\r\n tableSize: size || \"default\",\r\n treeSearchPrams: {},\r\n popopens: {},\r\n moreOpen: false,\r\n elementHeight: 0,\r\n permissionButtons: [],\r\n queryParams: {},\r\n tableHeaderHeight: 0, // 添加表头高度到state\r\n buttonsLoading: {},\r\n treeWidth: this.props.showLeft ? 260 : 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const { initData, permisson = {} } = this.props;\r\n const elementHeight = this.pageContentRef.current?.clientHeight;\r\n\r\n // 添加窗口resize监听\r\n window.addEventListener(\"resize\", this.throttleCalculateTableHeaderHeight);\r\n\r\n // 初始计算表头高度\r\n setTimeout(this.calculateTableHeaderHeight, 0);\r\n\r\n this.setState({\r\n elementHeight,\r\n });\r\n initData && initData();\r\n }\r\n componentDidUpdate(prevProps) {\r\n const elementHeight = this.pageContentRef.current?.clientHeight;\r\n if (elementHeight > this.state.elementHeight) {\r\n this.setState({\r\n elementHeight,\r\n });\r\n }\r\n if (prevProps.showLeft !== this.props.showLeft) {\r\n this.setState({\r\n treeWidth: this.props.showLeft ? 260 : 0,\r\n });\r\n }\r\n }\r\n componentWillUnmount() {\r\n // 移除resize监听\r\n window.removeEventListener(\r\n \"resize\",\r\n this.throttleCalculateTableHeaderHeight\r\n );\r\n }\r\n setSearchParams(params, callBack) {\r\n this.searchRef.current?.setSearchParams(params);\r\n callBack && callBack(params);\r\n }\r\n doSubmit(data, label = \"编辑\") {\r\n this.editorRef.current?.doSubmit(data, label);\r\n }\r\n\r\n onSelect = (checkedTreeKeys: any) => {\r\n const { name, userType, account } = this.state;\r\n const value = { name, userType, account, deptId: checkedTreeKeys[0] };\r\n if (this.props.onSearch) {\r\n this.props.onSearch(value);\r\n }\r\n // this.tableLoad(value);\r\n };\r\n\r\n //显示表单\r\n showForm(value?: any, editorflag = \"add\", callBack?: any) {\r\n if (this.props.formPageProps?.formType == \"page\") {\r\n const { funcs = {} } = this.props;\r\n let pathname = `/formpage/${editorflag ? editorflag : \"add\"}/${\r\n this.props.tableCode\r\n }`;\r\n if (editorflag == \"editor\" || editorflag == \"search\") {\r\n pathname = pathname + \"?id=\" + value.id;\r\n }\r\n funcs?.history(\r\n {\r\n pathname: pathname,\r\n serviceName: \"setting-web\",\r\n servicePath: \"/setting\",\r\n id: new Date().getTime() + (value?.id || \"_\") + editorflag,\r\n title:\r\n `【${\r\n editorflag == \"add\"\r\n ? \"新增\"\r\n : editorflag == \"editor\"\r\n ? \"编辑\"\r\n : \"查看\"\r\n }】` + this.props.formPageProps?.title || \"\",\r\n },\r\n \"addTab\"\r\n );\r\n } else {\r\n let newValue = value ? { ...value } : null;\r\n this.editorRef?.current?.show(newValue, editorflag, callBack);\r\n }\r\n }\r\n\r\n //关闭表单\r\n hideForm() {\r\n this.editorRef.current?.hideForm();\r\n }\r\n\r\n setLoading(loading: boolean) {\r\n this.editorRef.current?.setLoading(loading);\r\n }\r\n\r\n setEditFormValues(value, type = \"编辑\") {\r\n this.editorRef.current?.setFormValue(value, type);\r\n }\r\n\r\n getEditFormValues() {\r\n return this.editorRef.current?.getFormValue();\r\n }\r\n\r\n //批量删除\r\n onDelete(data?: any, deletePosition = \"row\") {\r\n const {\r\n deleteUrl,\r\n onDelete,\r\n deleteParams = {},\r\n buttonClick = {},\r\n requestParams = {},\r\n requestUrls = {},\r\n requestConfig = {},\r\n } = this.props;\r\n let _this = this;\r\n const selectedRowKeys = this.tableRef.current?.getSelectedRowKeys();\r\n const selectedRowDatas = this.tableRef.current?.getSelectedRowDatas();\r\n let url = requestUrls.deleteUrl ? requestUrls.deleteUrl : deleteUrl;\r\n let params: any = requestParams.deleteParams\r\n ? requestParams.deleteParams\r\n : deleteParams;\r\n if (deletePosition == \"toolbar\") {\r\n if (selectedRowKeys.length == 0) {\r\n message.warning(\"请选择要删除的数据!\");\r\n return;\r\n }\r\n }\r\n Modal.confirm({\r\n content: \"是否确认删除所选项?\",\r\n // centered:true,\r\n onOk: () => {\r\n if (buttonClick.onDelete) {\r\n converFunction(\r\n buttonClick.onDelete,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: deletePosition == \"toolbar\" ? selectedRowDatas : data,\r\n ids: deletePosition == \"toolbar\" ? selectedRowKeys : data?.id,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onDelete) {\r\n onDelete &&\r\n onDelete(deletePosition == \"toolbar\" ? selectedRowKeys : data);\r\n return;\r\n }\r\n if (!url) {\r\n throw new Error(\"url不能为空!\");\r\n }\r\n const { data: dataParams = {}, ...otherParams } = params;\r\n const defaultParams = {\r\n method: \"post\",\r\n autoPrefix: true,\r\n params: {\r\n ids: deletePosition == \"toolbar\" ? selectedRowKeys.join() : data.id,\r\n ...dataParams,\r\n },\r\n ...requestConfig,\r\n };\r\n let finalParams = {} as any;\r\n finalParams = { ...defaultParams, ...otherParams };\r\n request(url, {\r\n ...finalParams,\r\n })\r\n .then(function (res: any) {\r\n const { code } = res;\r\n if (code === 200) {\r\n message.success(\"删除成功!\");\r\n let value = _this.searchRef?.current?.getSearchValues();\r\n _this.props.onCallBacks?.onDeleteCallBack &&\r\n converFunction(\r\n _this.props.onCallBacks?.onDeleteCallBack,\r\n { pageRef: this.props.pageRef },\r\n this.props.Utils\r\n );\r\n _this.tableLoad(value);\r\n } else {\r\n message.error(\"删除失败!\");\r\n }\r\n })\r\n .catch(function (error: any) {\r\n console.log(\"error\", error);\r\n });\r\n },\r\n });\r\n }\r\n tableLoad(params: any, requestConfig = {}) {\r\n const {\r\n requestConfig: defaultRequestConfig = {},\r\n requestParams = {},\r\n tableProps = {},\r\n } = this.props;\r\n const { store: tableStore = {} } = tableProps;\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams.data || queryParams.params || {};\r\n\r\n let finalParams = {\r\n ...data,\r\n ...tableStore.requestConfig?.params,\r\n ...params,\r\n };\r\n const { requestConig: storeConfig = {} } = tableStore;\r\n const { params: storeParams = {}, ...otherStoreConfig } = storeConfig;\r\n this.tableRef.current?.store.load({\r\n ...defaultRequestConfig,\r\n ...otherStoreConfig,\r\n ...requestConfig,\r\n params: { ...storeParams, ...finalParams },\r\n });\r\n }\r\n //查询\r\n onSearch(params) {\r\n const {\r\n onSearch,\r\n onCallBacks,\r\n requestParams = {},\r\n tableProps = {},\r\n } = this.props;\r\n const { store: tableStore = {} } = tableProps;\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams.data || queryParams.params || {};\r\n let finalParams = {\r\n ...data,\r\n ...tableStore.requestConfig?.params,\r\n ...params,\r\n };\r\n if (onSearch) {\r\n onSearch({ ...finalParams, ...this.state.treeSearchPrams });\r\n return;\r\n }\r\n this.tableLoad({ ...finalParams, ...this.state.treeSearchPrams });\r\n onCallBacks?.onQueryCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onQueryCallBack,\r\n { pageRef: this.props.pageRef, params: params },\r\n this.props.Utils\r\n );\r\n }\r\n //表格重新加载\r\n tableReload(params = {}, autoLoad = true) {\r\n this.tableRef.current?.store?.reload({\r\n callback: (res) => {\r\n if (\r\n autoLoad &&\r\n res?.data?.records?.length == 0 &&\r\n this.state.currentPage !== 1\r\n ) {\r\n this.tableRef.current?.store?.reload({\r\n params: { current: 1, ...params },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n treeLoad(params: any, requestConfig = {}) {\r\n const { requestConfig: defaultRequestConfig = {} } = this.props;\r\n this.treeRef.current?.store.load({\r\n ...defaultRequestConfig,\r\n ...requestConfig,\r\n params: params,\r\n });\r\n }\r\n getSelectedRowKeys() {\r\n return this.tableRef.current?.getSelectedRowKeys();\r\n }\r\n getSelectedRowDatas() {\r\n return this.tableRef.current?.getSelectedRowDatas();\r\n }\r\n setSelectedRowKeys(data: Array<String | Number>) {\r\n return this.tableRef.current?.setSelectedRowKeys(data);\r\n }\r\n setSelectedRowDatas(data: Array<Object>) {\r\n return this.tableRef.current?.setSelectedRowDatas(data);\r\n }\r\n resetSelectedRowKeys() {\r\n return this.tableRef.current?.resetSelectedRowKeys();\r\n }\r\n\r\n getSearchValues() {\r\n const fromValue = this.searchRef?.current?.getSearchValues();\r\n return { ...fromValue, ...this.state.treeSearchPrams };\r\n }\r\n\r\n getChildrenData(data, keys = []) {\r\n const { tableProps } = this.props;\r\n const { rowKey = \"id\" } = tableProps;\r\n let resKey = [];\r\n let key = \"\";\r\n if (data.childNodes) {\r\n const children = data.childNodes;\r\n children.map((item, index) => {\r\n if (typeof rowKey == \"function\") {\r\n key = rowKey(item);\r\n } else {\r\n key = item[rowKey];\r\n }\r\n if (item.childNodes) {\r\n this.getChildrenData(item.childNodes, keys);\r\n } else {\r\n resKey = [...keys, key];\r\n }\r\n });\r\n } else {\r\n resKey = [...keys, key];\r\n }\r\n return resKey;\r\n }\r\n\r\n renderToolButtons(toolbuttons: any, toolbarFlag) {\r\n const flag = toolbuttons.length > 5;\r\n const { showSearch = true } = this.props;\r\n const content = toolbuttons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, icon, show, ...params } = item.props;\r\n if (index > 3) {\r\n return (\r\n <div\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-editor\"),\r\n getLess(styles, \"nsc-basepage-content-item\")\r\n )}\r\n >\r\n <Button\r\n key={index}\r\n onClick={() => {\r\n this.setState({\r\n moreOpen: false,\r\n });\r\n onClick && onClick();\r\n }}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n </div>\r\n );\r\n }\r\n });\r\n\r\n return (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-tool-buttons\"))}\r\n style={{ marginLeft: 0 }}\r\n >\r\n {toolbuttons.map((item: any, index: any) => {\r\n if (flag) {\r\n if (index < 4) {\r\n return (\r\n <div\r\n key={index}\r\n style={{\r\n marginRight: 12,\r\n }}\r\n >\r\n {item}\r\n </div>\r\n );\r\n } else if (index == 4) {\r\n return (\r\n <Popover\r\n content={content}\r\n title={null}\r\n placement=\"bottom\"\r\n key={index}\r\n open={this.state.moreOpen}\r\n onOpenChange={(open) => {\r\n if (open) {\r\n this.setState({\r\n moreOpen: true,\r\n });\r\n } else {\r\n this.setState({\r\n moreOpen: false,\r\n });\r\n }\r\n }}\r\n // open={true}\r\n // overlayClassName={styles['pop-box']}\r\n >\r\n <Button type=\"primary\">\r\n 更多 <DownOutlined />\r\n </Button>\r\n </Popover>\r\n );\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return (\r\n <div\r\n key={index}\r\n style={{\r\n marginRight: index == toolbuttons.length - 1 ? 0 : 12,\r\n }}\r\n >\r\n {item}\r\n </div>\r\n );\r\n }\r\n })}\r\n </div>\r\n );\r\n }\r\n renderCloumnButton(columnButtons: any, rowRecord: any) {\r\n const { actionProps, tableProps = {} } = this.props;\r\n const { baseActionColumn } = config();\r\n const newButtons = [];\r\n const { rowKey = \"id\" } = tableProps;\r\n let key = \"\";\r\n if (typeof rowKey == \"function\") {\r\n key = rowKey(rowRecord);\r\n } else {\r\n key = rowRecord[rowKey];\r\n }\r\n let showIcon = false;\r\n if (actionProps?.showIcon === true || baseActionColumn.showIcon === true)\r\n showIcon = true;\r\n columnButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, icon, recordShow, ...params } =\r\n item.props;\r\n if (recordShow) {\r\n if (typeof recordShow == \"string\") {\r\n try {\r\n const eventOption = {\r\n record: rowRecord,\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n };\r\n const Utils = { ...this.props.Uitls };\r\n let func = new Function(\"eventOption,Utils\", recordShow);\r\n const show = func(eventOption, Utils);\r\n show && newButtons.push(item);\r\n } catch (e) {\r\n let record = rowRecord;\r\n if (eval(recordShow)) {\r\n newButtons.push(item);\r\n }\r\n }\r\n } else if (typeof recordShow == \"function\") {\r\n const show = recordShow(rowRecord);\r\n show && newButtons.push(item);\r\n }\r\n } else {\r\n newButtons.push(item);\r\n }\r\n });\r\n let number = actionProps?.buttonNumber\r\n ? actionProps?.buttonNumber\r\n : baseActionColumn?.buttonNumber\r\n ? baseActionColumn?.buttonNumber\r\n : 3;\r\n let flag = false;\r\n if (number == \"all\") {\r\n flag = false;\r\n } else {\r\n flag = newButtons.length > number;\r\n }\r\n\r\n const content = newButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, recordShow, icon, show, ...params } =\r\n item.props;\r\n if (index > Number(number) - 1) {\r\n return (\r\n <Button\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-editor\"),\r\n getLess(styles, \"nsc-basepage-content-item\")\r\n )}\r\n key={index}\r\n onClick={() => {\r\n let data = { ...this.state.popopens };\r\n data[rowRecord.id] = false;\r\n this.setState({\r\n popopens: data,\r\n });\r\n onClick && onClick(rowRecord);\r\n }}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n }\r\n });\r\n return newButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, recordShow, icon, ...params } =\r\n item.props;\r\n if (flag) {\r\n if (index < number) {\r\n return (\r\n <Button\r\n className={cls(getLess(styles, \"nsc-basepage-editor\"), {\r\n [getLess(styles, \"nsc-basepage-editor-first\")]: index === 0,\r\n })}\r\n key={index}\r\n onClick={() => {\r\n onClick && onClick(rowRecord);\r\n }}\r\n icon={icon}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n } else if (index == number) {\r\n return (\r\n <Popover\r\n placement=\"bottom\"\r\n title={null}\r\n content={content}\r\n trigger={[\"click\"]}\r\n key={index}\r\n open={this.state.popopens[key] || false}\r\n onOpenChange={(open) => {\r\n if (open) {\r\n let data = { ...this.state.popopens };\r\n data[key] = true;\r\n this.setState({\r\n popopens: data,\r\n });\r\n } else {\r\n this.setState({\r\n popopens: {},\r\n });\r\n }\r\n }}\r\n // overlayClassName={styles['pop']}\r\n >\r\n <a className={getLess(styles, \"nsc-basepage-editor\")}>\r\n <EllipsisOutlined />\r\n </a>\r\n </Popover>\r\n );\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return (\r\n <Button\r\n className={cls(getLess(styles, \"nsc-basepage-editor\"), {\r\n [getLess(styles, \"nsc-basepage-editor-first\")]: index === 0,\r\n })}\r\n key={index}\r\n onClick={() => {\r\n onClick && onClick(rowRecord);\r\n }}\r\n {...params}\r\n type=\"link\"\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n }\r\n });\r\n // }\r\n }\r\n //树点击事件\r\n treeSelect(selectedKeys: any, obj: any) {\r\n let keyword = \"\";\r\n const {\r\n searchKey = \"key\",\r\n searchField = \"\",\r\n parantSelect = true,\r\n } = this.props.treeProps;\r\n const { treeSelectedKey } = this.state;\r\n const { selected, selectedNodes } = obj;\r\n\r\n if (selected) {\r\n keyword = selectedNodes[0].dataref.attribute[searchKey];\r\n if (parantSelect) {\r\n this.setState({\r\n treeSelectedKey: selectedKeys[0],\r\n treeSearchPrams: { [searchField]: keyword },\r\n });\r\n } else {\r\n if (selectedNodes[0].isLeaf || !selectedNodes[0].children) {\r\n if (selectedKeys[0] !== treeSelectedKey) {\r\n this.setState({\r\n treeSelectedKey: selectedKeys[0],\r\n treeSearchPrams: { [searchField]: keyword },\r\n });\r\n }\r\n }\r\n }\r\n } else {\r\n this.setState({\r\n treeSelectedKey: keyword,\r\n treeSearchPrams: {},\r\n });\r\n }\r\n if (this.props.onTreeSelect) {\r\n this.props.onTreeSelect(selectedKeys, obj);\r\n return;\r\n }\r\n const fromValue = this.searchRef?.current?.getSearchValues() || {};\r\n searchField && this.tableLoad({ ...fromValue, [searchField]: keyword });\r\n this.props.onCallBacks?.treeSelectCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.treeSelectCallBack,\r\n { pageRef: this.props.pageRef, selectedKeys: selectedKeys, obj: obj },\r\n this.props.Utils\r\n );\r\n // utils.callback(this.props.onCallBacks?.treeSelectCallBack, this, [\r\n // selectedKeys,\r\n // obj,\r\n // ]);\r\n }\r\n resetSearch() {\r\n this.searchRef.current?.resetFields();\r\n }\r\n getText(props, text) {\r\n let newText = text;\r\n if (props?.data && props?.data?.length > 0) {\r\n let data = props.data;\r\n for (let i = 0; i < data?.length; i++) {\r\n if (data[i].value == text) {\r\n newText = data[i].label;\r\n }\r\n }\r\n }\r\n return newText;\r\n }\r\n setTableData(data) {\r\n this.tableRef.current?.store?.setData(data);\r\n }\r\n setTreeData(data) {\r\n this.treeRef.current?.store?.setData(data);\r\n }\r\n getSelectedKey = (selected) => {\r\n let res = [];\r\n for (let key in selected) {\r\n const keys = selected[key];\r\n if (keys.length > 0) {\r\n res = [...res, ...keys];\r\n }\r\n }\r\n return res;\r\n };\r\n\r\n convertQueryParams() {\r\n const { requestParams = {} } = this.props;\r\n let queryParams: any = requestParams.queryParams;\r\n if (queryParams && typeof queryParams == \"string\") {\r\n const Utils = this.props.Utils || {};\r\n let func = new Function(\"Utils\", queryParams);\r\n let converParams = func(Utils);\r\n queryParams = converParams;\r\n } else {\r\n queryParams = queryParams || {};\r\n }\r\n return queryParams;\r\n }\r\n\r\n // 计算表头高度的方法\r\n calculateTableHeaderHeight = () => {\r\n if (this.tableWrapperRef.current) {\r\n const tableHeader =\r\n this.tableWrapperRef.current.getElementsByClassName(\r\n \"ant-table-thead\"\r\n )[0];\r\n if (tableHeader) {\r\n const headerHeight = tableHeader.getBoundingClientRect().height;\r\n if (headerHeight !== this.state.tableHeaderHeight) {\r\n this.setState({\r\n tableHeaderHeight: headerHeight,\r\n });\r\n }\r\n }\r\n }\r\n };\r\n throttleCalculateTableHeaderHeight = throttle(\r\n this.calculateTableHeaderHeight,\r\n 500\r\n );\r\n\r\n // 优化拖拽相关方法\r\n handleMouseDown(e: React.MouseEvent) {\r\n e.preventDefault();\r\n\r\n // 创建遮罩层以处理iframe场景\r\n const mask = document.createElement(\"div\");\r\n mask.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: transparent;\r\n z-index: 9999;\r\n cursor: col-resize;\r\n `;\r\n mask.id = \"drag-mask\";\r\n document.body.appendChild(mask);\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const newWidth = e.screenX;\r\n // 限制最小100px,最大500px\r\n if (newWidth >= 50 && newWidth <= 800) {\r\n this.setState({ treeWidth: newWidth });\r\n }\r\n };\r\n\r\n const throttledMouseMove = throttle(handleMouseMove, 16);\r\n\r\n const handleMouseUp = () => {\r\n document.removeEventListener(\"mousemove\", throttledMouseMove);\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n // 移除遮罩层\r\n const mask = document.getElementById(\"drag-mask\");\r\n if (mask) {\r\n document.body.removeChild(mask);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousemove\", throttledMouseMove);\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n }\r\n\r\n render() {\r\n const {\r\n columns = [],\r\n showSearch = true,\r\n children,\r\n submitUrl = \"\",\r\n tableProps = {},\r\n treeProps = {},\r\n formPageProps = {},\r\n showLeft = false,\r\n submitParams = {},\r\n showToolButton = true,\r\n buttons = [],\r\n editorForm = true,\r\n onShowForm,\r\n formChangeValid = true,\r\n className,\r\n toolButtonPosition = \"buttom\",\r\n actionProps,\r\n deletePosition = \"toolbar\",\r\n buttonClick = {},\r\n permission = { has: false },\r\n requestParams = {},\r\n requestUrls = {},\r\n } = this.props;\r\n const {\r\n store: tableStore = {},\r\n filterColumn = true,\r\n actionColumn = true,\r\n showRowSelection = true,\r\n columnOrder = true,\r\n expandable = {},\r\n parantSelect = true,\r\n title: tableTitle,\r\n ...othertableParams\r\n } = tableProps;\r\n let newTableStore = { ...tableStore };\r\n if (requestParams.queryParams) {\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams?.data || queryParams?.params || {};\r\n newTableStore.requestConfig = {\r\n params: { ...data, ...newTableStore.requestConfig?.params },\r\n };\r\n }\r\n const {\r\n store: treeStore = {},\r\n showSearch: treeSearch = true,\r\n titleAlias = \"title\",\r\n title: treeTitle,\r\n ...othertreeParams\r\n } = treeProps;\r\n let _this = this;\r\n let tableParams = {\r\n filterColumn,\r\n store: {\r\n listeners: {\r\n load: (data) => {\r\n _this.props.onCallBacks?.tableLoadCallBack &&\r\n _this.props.onCallBacks?.tableLoadCallBack(data);\r\n },\r\n },\r\n ...newTableStore,\r\n },\r\n ...othertableParams,\r\n } as any;\r\n const defaultValue: any = {};\r\n const columnButtons: any = [];\r\n const { elementHeight } = this.state;\r\n let permissionButtons = [];\r\n if (permission.has && permission.menuCode) {\r\n permissionButtons =\r\n getButtonPermissons(permission.menuCode).permissons || [];\r\n }\r\n const obj = convertColumns(columns, {});\r\n let tableColumn: any[] = getNewColumns(columns, this.props);\r\n const searchForms = obj.searchForms || [];\r\n const editorForms = obj.editorForms || [];\r\n const toolButtons: any = [];\r\n const formButton: any = [];\r\n const { baseActionColumn } = config();\r\n let showIcon = true;\r\n if (actionProps?.showIcon === false) showIcon = false;\r\n else if (baseActionColumn.showIcon === false) showIcon = false;\r\n const buttonMap = {\r\n editor: { name: \"编辑\", code: \"editor\", icon: <EditOutlined /> },\r\n delete: { name: \"删除\", code: \"delete\", icon: <DeleteOutlined /> },\r\n search: { name: \"查看\", code: \"search\", icon: <EyeOutlined /> },\r\n };\r\n const returnButton = (code, show = \"\", defaultProps = {}) => {\r\n let props = {\r\n icon: showIcon ? buttonMap[code].icon : null,\r\n type: \"link\",\r\n ...defaultProps,\r\n } as any;\r\n\r\n if (show) {\r\n props = { ...props, recordShow: show };\r\n }\r\n return (\r\n <Button\r\n onClick={(record: any) => {\r\n if (code == \"delete\") {\r\n this.onDelete(record);\r\n } else {\r\n if (code == \"editor\" && buttonClick.onEditor) {\r\n converFunction(\r\n buttonClick.onEditor,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n } else if (code == \"search\" && buttonClick.onSearch) {\r\n converFunction(\r\n buttonClick.onSearch,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onShowForm) {\r\n onShowForm(record.attribute || record, code);\r\n return;\r\n }\r\n\r\n this.showForm(record.attribute || record, code, () => {\r\n let callBack =\r\n code == \"editor\"\r\n ? this.props.onCallBacks?.onEditorCallBack\r\n : this.props.onCallBacks?.onSearchCallBack;\r\n callBack &&\r\n converFunction(\r\n callBack,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n });\r\n }\r\n }}\r\n {...props}\r\n >\r\n {buttonMap[code]?.name}\r\n </Button>\r\n );\r\n };\r\n const checkPerssion = (code) => {\r\n if (!permission.has) {\r\n return true;\r\n } else {\r\n return permissionButtons.indexOf(code) > -1;\r\n }\r\n };\r\n buttons.map((item: any) => {\r\n if ((item == \"add\" || item.code == \"add\") && checkPerssion(\"add\")) {\r\n toolButtons.push(\r\n <Button\r\n type={\"primary\"}\r\n onClick={() => {\r\n const { onShowForm, buttonClick = {} } = this.props;\r\n if (buttonClick?.onAdd) {\r\n converFunction(\r\n buttonClick.onAdd,\r\n {\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onShowForm) {\r\n onShowForm(null, \"add\");\r\n return;\r\n }\r\n this.showForm(null, null, () => {\r\n this.props.onCallBacks?.onAddCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onAddCallBack,\r\n {\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n });\r\n }}\r\n icon={<PlusOutlined />}\r\n >\r\n 添加\r\n </Button>\r\n );\r\n } else if (\r\n (item == \"delete_batch\" || item.code == \"delete_batch\") &&\r\n checkPerssion(\"delete_batch\")\r\n ) {\r\n toolButtons.push(\r\n <Button\r\n type={\"primary\"}\r\n onClick={this.onDelete.bind(this, null, \"toolbar\")}\r\n icon={<DeleteOutlined />}\r\n danger\r\n >\r\n 批量删除\r\n </Button>\r\n );\r\n } else {\r\n if (checkPerssion(item.code ? item.code : item)) {\r\n columnButtons.push(\r\n returnButton(\r\n item.code ? item.code : item,\r\n item.recordShow,\r\n item.props || {}\r\n )\r\n );\r\n }\r\n }\r\n });\r\n\r\n if (Array.isArray(children)) {\r\n children.map((item: any) => {\r\n if (Array.isArray(item)) {\r\n item.map((child) => {\r\n if (\r\n child?.props?.pageType == \"toolButton\" &&\r\n checkPerssion(child?.props?.code)\r\n ) {\r\n toolButtons.push(child);\r\n } else if (\r\n child?.props?.pageType == \"formButton\" &&\r\n checkPerssion(child?.props?.code)\r\n ) {\r\n formButton.push(child);\r\n } else if (\r\n (child?.props?.pageType == \"columnButton\" ||\r\n child?.props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(child?.props?.code)\r\n ) {\r\n columnButtons.push(child);\r\n }\r\n });\r\n } else {\r\n if (\r\n item?.props?.pageType == \"toolButton\" &&\r\n checkPerssion(item?.props?.code)\r\n ) {\r\n toolButtons.push(item);\r\n } else if (\r\n (item?.props?.pageType == \"columnButton\" ||\r\n item?.props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(item?.props?.code)\r\n ) {\r\n columnButtons.push(item);\r\n }\r\n }\r\n });\r\n } else if (children) {\r\n const { props }: any = children;\r\n if (props?.pageType == \"toolButton\" && checkPerssion(props?.code)) {\r\n toolButtons.push(children);\r\n } else if (\r\n (props?.pageType == \"columnButton\" ||\r\n props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(props?.code)\r\n ) {\r\n columnButtons.push(children);\r\n }\r\n }\r\n actionColumn &&\r\n tableColumn.push({\r\n title: \"操作\",\r\n dataIndex: \"action\",\r\n align: actionProps?.textAlign\r\n ? actionProps?.textAlign\r\n : baseActionColumn.textAlign\r\n ? baseActionColumn.textAlign\r\n : \"left\",\r\n width: actionProps?.width\r\n ? actionProps?.width\r\n : baseActionColumn.width\r\n ? baseActionColumn.width\r\n : 200,\r\n fixed: \"right\",\r\n render: (text: any, record: any) => {\r\n return (\r\n <div className={getLess(styles, \"nsc-basepage-action\")}>\r\n {this.renderCloumnButton(columnButtons, record)}\r\n </div>\r\n );\r\n },\r\n });\r\n\r\n if (columnOrder)\r\n tableColumn = [\r\n {\r\n title: \"序号\",\r\n width: 80,\r\n align: \"center\",\r\n render: (text, reacord, index) => {\r\n return <>{index + 1}</>;\r\n },\r\n },\r\n ...tableColumn,\r\n ];\r\n let searchFlag = showSearch && searchForms.length > 0;\r\n let { tableTool } = config();\r\n let toolFlag =\r\n showToolButton &&\r\n toolButtons.length > 0 &&\r\n toolButtonPosition == \"buttom\";\r\n let toolbarFlag = !(\r\n tableProps.toolbar == false ||\r\n tableProps.toolbar?.show == false ||\r\n tableProps.toolbar?.tools?.length == 0 ||\r\n tableTool?.show == false\r\n );\r\n let headerHeight = showSearch && searchForms.length > 0 ? 104 : 0; //头部搜索栏高度\r\n let toolHeight = tableTitle || toolFlag ? 50 : 0;\r\n let paddingHeight = 20 * 2; //上下间距\r\n let tableContentHeight = elementHeight - paddingHeight;\r\n let PaginationHeight = tableProps.pagination !== false ? 32 + 16 : 0; //32 为分页器高度,16为margin间距\r\n let tableHeight = tableContentHeight - PaginationHeight;\r\n let tableSrollHeight =\r\n tableContentHeight -\r\n (this.state.tableHeaderHeight > 0 ? this.state.tableHeaderHeight : 55) -\r\n PaginationHeight;\r\n // if (tableProps.pagination !== false) {\r\n const scroll = tableParams.scroll;\r\n tableParams = {\r\n ...tableParams,\r\n scroll: { x: \"max-content\", y: tableSrollHeight, ...scroll },\r\n };\r\n // }\r\n return (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage\"), className)}\r\n ref={this.pageRef}\r\n >\r\n {this.props.pageTitle && (\r\n <div className={cls(getLess(styles, \"nsc-basepage-title\"))}>\r\n {this.props.pageTitle}\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-pane\"))}\r\n style={{ display: \"flex\" }}\r\n >\r\n {showLeft && (\r\n <div\r\n className={getLess(styles, \"nsc-basepage-left\")}\r\n style={{ width: this.state.treeWidth }}\r\n >\r\n {treeTitle && (\r\n <div className={getLess(styles, \"tree-title\")}>{treeTitle}</div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"tree-content\"), {\r\n [getLess(styles, \"tree-content-notitle\")]: !treeTitle,\r\n })}\r\n >\r\n <div\r\n className=\"tree-drag\"\r\n onMouseDown={this.handleMouseDown.bind(this)}\r\n ></div>\r\n <Tree\r\n store={{ ...treeStore }}\r\n showIcon={false}\r\n checkable={false}\r\n searchable={treeSearch}\r\n onSelect={this.treeSelect.bind(this)}\r\n selectedKeys={[this.state.treeSelectedKey]}\r\n titleAlias={titleAlias}\r\n ref={this.treeRef}\r\n {...othertreeParams}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-right\"), {\r\n [getLess(styles, \"nsc-basepage-no-left-right\")]: !showLeft,\r\n })}\r\n style={{\r\n width: `calc(100% - ${this.state.treeWidth}px - ${\r\n showLeft ? 15 : 0\r\n }px)`,\r\n }}\r\n >\r\n {showSearch && searchForms.length > 0 && (\r\n <div className={getLess(styles, \"nsc-basepage-headersearch\")}>\r\n <HeaderSearch\r\n searchForms={searchForms}\r\n toolButtonPosition={toolButtonPosition}\r\n onSearch={this.onSearch.bind(this)}\r\n onReset={() => {\r\n if (this.props.onReset) {\r\n this.props.onReset();\r\n return;\r\n }\r\n this.searchRef.current?.resetFields();\r\n this.tableLoad({});\r\n }}\r\n ref={this.searchRef}\r\n searchFormProps={this.props.searchFormProps}\r\n />\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-content\"), {\r\n [getLess(styles, \"nsc-basepage-content-gap\")]: !searchFlag,\r\n })}\r\n ref={this.pageContentRef}\r\n >\r\n {(tableTitle || toolFlag) && (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-table-title\"), {\r\n [getLess(styles, \"nsc-basepage-title-width\")]: !toolbarFlag,\r\n })}\r\n >\r\n <div>{tableTitle}</div>\r\n {toolFlag && this.renderToolButtons(toolButtons, toolbarFlag)}\r\n </div>\r\n )}\r\n\r\n <div\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-table\"),\r\n {\r\n [getLess(styles, \"nsc-basepage-table-top\")]: !toolbarFlag,\r\n },\r\n {\r\n [getLess(styles, \"nsc-basepage-table-top2\")]:\r\n toolbarFlag && !toolFlag,\r\n }\r\n )}\r\n ref={this.tableWrapperRef}\r\n style={{ height: tableContentHeight }}\r\n >\r\n <Table\r\n ref={this.tableRef}\r\n columns={tableColumn}\r\n expandable={{\r\n expandIcon: ({ expanded, onExpand, record }) => {\r\n return (\r\n <>\r\n {expanded &&\r\n record.childNodes &&\r\n record.childNodes?.length > 0 ? (\r\n <DownOutlined\r\n onClick={(e) => onExpand(record, e)}\r\n className={getLess(styles, \"expand-icon\")}\r\n />\r\n ) : record.childNodes &&\r\n record.childNodes?.length > 0 ? (\r\n <RightOutlined\r\n onClick={(e) => onExpand(record, e)}\r\n className={getLess(styles, \"expand-icon\")}\r\n />\r\n ) : null}\r\n </>\r\n );\r\n },\r\n ...expandable,\r\n }}\r\n columnOrder={true}\r\n onChange={(pagination) => {\r\n const { currentPage } = this.state;\r\n if (currentPage !== pagination.current) {\r\n this.setState({\r\n currentPage: pagination.current,\r\n });\r\n }\r\n }}\r\n toolbar={{\r\n onToolClick: {\r\n onRefresh: () => {\r\n const params = this.getSearchValues();\r\n this.tableLoad(params);\r\n },\r\n },\r\n ...tableProps.toolbar,\r\n }}\r\n showRowSelection={showRowSelection}\r\n style={{ height: tableHeight }}\r\n {...tableParams}\r\n // pagination={false}\r\n />\r\n {/* <div></div> */}\r\n </div>\r\n </div>\r\n </div>\r\n {editorForm && this.props.formPageProps?.formType !== \"page\" && (\r\n <EditorForm\r\n ref={this.editorRef}\r\n callBack={() => {\r\n this.props.onCallBacks?.onSumbitCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onSumbitCallBack,\r\n { pageRef: this.props.pageRef },\r\n this.props.Utils\r\n );\r\n this.tableReload();\r\n }}\r\n forms={editorForms}\r\n submitUrl={submitUrl}\r\n submitParams={submitParams}\r\n onSubmit={this.props.onSubmit}\r\n onHideForm={this.props.onHideForm}\r\n onFormChange={this.props.onFormChange}\r\n formType={this.props.formType || \"auto\"}\r\n changeValid={formChangeValid}\r\n Utils={this.props.Utils}\r\n requestObject={{\r\n addUrl: requestUrls.addUrl,\r\n editorUrl: requestUrls.editorUrl,\r\n addParams: requestParams.addParams,\r\n editorParams: requestParams.editorParams,\r\n }}\r\n funcs={this.props.funcs}\r\n {...formPageProps}\r\n >\r\n {formButton}\r\n </EditorForm>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\nexport default BasePage;\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","PureComponent","Table","Tree","Button","Modal","Popover","message","EditorForm","cls","DownOutlined","EyeOutlined","EditOutlined","RightOutlined","PlusOutlined","EllipsisOutlined","DeleteOutlined","converFunction","getLess","request","config","getStorage","getButtonPermissons","HeaderSearch","convertColumns","getNewColumns","throttle","styles","BasePage","constructor","props","_type","_size","_defineProperty","createRef","checkedTreeKeys","name","userType","account","state","value","deptId","onSearch","selected","res","key","keys","length","tableWrapperRef","current","tableHeader","getElementsByClassName","headerHeight","getBoundingClientRect","height","tableHeaderHeight","setState","calculateTableHeaderHeight","storePrefix","type","content","size","selectedRowKeys","selectedRowDatas","treeSelectedKey","expand","formType","tableSize","treeSearchPrams","popopens","moreOpen","elementHeight","permissionButtons","queryParams","buttonsLoading","treeWidth","showLeft","componentDidMount","_this$pageContentRef$","initData","permisson","pageContentRef","clientHeight","window","addEventListener","throttleCalculateTableHeaderHeight","setTimeout","componentDidUpdate","prevProps","_this$pageContentRef$2","componentWillUnmount","removeEventListener","setSearchParams","params","callBack","_this$searchRef$curre","searchRef","doSubmit","data","_this$editorRef$curre","label","arguments","undefined","editorRef","showForm","_this$props$formPageP","editorflag","formPageProps","_this$props$formPageP2","funcs","pathname","concat","tableCode","id","history","serviceName","servicePath","Date","getTime","title","_this$editorRef","newValue","_objectSpread","show","hideForm","_this$editorRef$curre2","setLoading","loading","_this$editorRef$curre3","setEditFormValues","_this$editorRef$curre4","setFormValue","getEditFormValues","_this$editorRef$curre5","getFormValue","onDelete","_this$tableRef$curren","_this$tableRef$curren2","deletePosition","deleteUrl","deleteParams","buttonClick","requestParams","requestUrls","requestConfig","_this","tableRef","getSelectedRowKeys","getSelectedRowDatas","url","warning","confirm","onOk","pageRef","record","ids","Utils","Error","dataParams","otherParams","_objectWithoutProperties","_excluded","defaultParams","method","autoPrefix","join","finalParams","then","code","_this$searchRef","_this$props$onCallBac","_this$props$onCallBac2","success","getSearchValues","onCallBacks","onDeleteCallBack","tableLoad","error","catch","console","log","_tableStore$requestCo","_this$tableRef$curren3","defaultRequestConfig","tableProps","store","tableStore","convertQueryParams","requestConig","storeConfig","storeParams","otherStoreConfig","_excluded2","load","_tableStore$requestCo2","_this$props$onCallBac3","onQueryCallBack","tableReload","_this$tableRef$curren4","autoLoad","reload","callback","_res$data","records","currentPage","_this$tableRef$curren5","treeLoad","_this$treeRef$current","treeRef","_this$tableRef$curren6","_this$tableRef$curren7","setSelectedRowKeys","_this$tableRef$curren8","setSelectedRowDatas","_this$tableRef$curren9","resetSelectedRowKeys","_this$tableRef$curren10","_this$searchRef2","fromValue","getChildrenData","rowKey","resKey","childNodes","children","map","item","index","renderToolButtons","toolbuttons","toolbarFlag","flag","showSearch","_item$props","pageType","onClick","icon","_excluded3","createElement","className","_extends","style","marginLeft","marginRight","placement","open","onOpenChange","renderCloumnButton","columnButtons","rowRecord","actionProps","baseActionColumn","newButtons","showIcon","_item$props2","recordShow","_excluded4","eventOption","Uitls","func","Function","push","e","eval","number","buttonNumber","_item$props3","_excluded5","Number","_item$props4","_excluded6","trigger","treeSelect","selectedKeys","obj","_this$searchRef3","_this$props$onCallBac4","_this$props$onCallBac5","keyword","searchKey","searchField","parantSelect","treeProps","selectedNodes","dataref","attribute","isLeaf","onTreeSelect","treeSelectCallBack","resetSearch","_this$searchRef$curre2","resetFields","getText","text","_props$data","newText","i","setTableData","_this$tableRef$curren11","setData","setTreeData","_this$treeRef$current2","converParams","handleMouseDown","preventDefault","mask","document","cssText","body","appendChild","handleMouseMove","newWidth","screenX","throttledMouseMove","handleMouseUp","getElementById","removeChild","render","_this2","_tableProps$toolbar","_tableProps$toolbar2","_this$props$formPageP3","columns","submitUrl","submitParams","showToolButton","buttons","editorForm","onShowForm","formChangeValid","toolButtonPosition","permission","has","filterColumn","actionColumn","showRowSelection","columnOrder","expandable","tableTitle","othertableParams","_excluded7","newTableStore","_newTableStore$reques","treeStore","treeSearch","titleAlias","treeTitle","othertreeParams","_excluded8","tableParams","listeners","_this$props$onCallBac6","_this$props$onCallBac7","tableLoadCallBack","defaultValue","menuCode","permissons","tableColumn","searchForms","editorForms","toolButtons","formButton","buttonMap","editor","delete","search","returnButton","_buttonMap$code","defaultProps","onEditor","_this2$props$onCallBa","_this2$props$onCallBa2","onEditorCallBack","onSearchCallBack","checkPerssion","indexOf","onAdd","_this$props$onCallBac8","_this$props$onCallBac9","onAddCallBack","bind","danger","Array","isArray","child","_child$props","_child$props2","_child$props3","_child$props4","_child$props5","_child$props6","_child$props7","_item$props5","_item$props6","_item$props7","_item$props8","_item$props9","dataIndex","align","textAlign","width","fixed","reacord","Fragment","searchFlag","tableTool","toolFlag","toolbar","tools","toolHeight","paddingHeight","tableContentHeight","PaginationHeight","pagination","tableHeight","tableSrollHeight","scroll","x","y","ref","pageTitle","display","onMouseDown","checkable","searchable","onSelect","onReset","_this$searchRef$curre3","searchFormProps","expandIcon","_ref","_record$childNodes","_record$childNodes2","expanded","onExpand","onChange","onToolClick","onRefresh","_this$props$onCallBac10","_this$props$onCallBac11","onSumbitCallBack","forms","onSubmit","onHideForm","onFormChange","changeValid","requestObject","addUrl","editorUrl","addParams","editorParams"],"sources":["../../../src/components/page/BasePage/index.tsx"],"sourcesContent":["import React, { PureComponent, ReactNode } from \"react\";\r\nimport Table from \"../../base/table\";\r\nimport Tree from \"../../base/tree\";\r\nimport Button from \"../../base/button\";\r\nimport Modal from \"../../base/modal\";\r\nimport Popover from \"../../base/popover\";\r\nimport message from \"../../base/message\";\r\nimport EditorForm, { FormPageProps } from \"../FormPage/index\";\r\nimport cls from \"classnames\";\r\nimport \"./index.module.less\";\r\nimport Store, { PageStore, StoreProps } from \"@bj-nsc/msn\";\r\nimport { utils } from \"@bj-nsc/msn/lib/utils\";\r\nimport {\r\n DownOutlined,\r\n EyeOutlined,\r\n EditOutlined,\r\n RightOutlined,\r\n PlusOutlined,\r\n EllipsisOutlined,\r\n DeleteOutlined,\r\n} from \"@ant-design/icons\";\r\nimport { converFunction, getLess, getNode, simplifyColumns } from \"../../utils\";\r\nimport request from \"nsc-request\";\r\nimport config from \"../../config\";\r\nimport { getStorage, px2vw, getButtonPermissons } from \"@bj-nsc/functions\";\r\nimport HeaderSearch from \"../HeaderSearch\";\r\nimport { PaginationProps } from \"antd\";\r\nimport nscfile from \"nsc-file\";\r\nimport { convertColumns, getNewColumns } from \"./utils\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport throttle from \"lodash/throttle\";\r\nimport CompoundedSpace from \"antd/es/space\";\r\ntype ButtonItem =\r\n | string\r\n | {\r\n code: string;\r\n recordShow?: string | Function;\r\n props?: any;\r\n };\r\n\r\ninterface TableProps {\r\n actionColumn?: boolean; //是否显示操作列\r\n store?: StoreProps;\r\n filterColumn?: boolean; //是否显示过滤按钮\r\n showRowSelection?: boolean; //是否表格勾选列\r\n pagination?: boolean | PaginationProps; //是否显示分页\r\n columnOrder?: boolean; //是否显示表格序列\r\n [propsName: string]: any;\r\n}\r\nconst styles = null;\r\ninterface TreeProps {\r\n store?: StoreProps;\r\n showSearch?: boolean; //是否显示搜索框\r\n searchKey?: string; //搜索value对应的key\r\n searchField?: string; //查询对应的key\r\n titleAlias?: string; //树title对应的key,默认title\r\n nodePorps?: object;\r\n parantSelect?: boolean;\r\n [propsName: string]: any;\r\n}\r\ninterface FormProps extends FormPageProps {}\r\n\r\nexport interface NSCBaseBageProps {\r\n showSearch?: boolean; //是否显示头部搜索栏\r\n tableProps?: TableProps; //表格参数\r\n treeProps?: TreeProps; //左侧树参数\r\n submitParams?: Object; //添加参数,默认mothod:post, 参数通过data传递\r\n submitUrl?: string;\r\n onSubmit?: (value?: any, label?: any) => void;\r\n columns?: Array<Object>;\r\n showLeft?: boolean; //是否显示左侧目录树\r\n showToolButton?: boolean; //是否显示按钮栏\r\n editorForm?: boolean; //是否需要表单功能 , 为false 编辑,查看,新增功能均不可用\r\n deleteUrl?: string; //删除url\r\n onDelete?: (selectedKeys?: Array<string>) => void; //删除参数,默认mothod:post, 参数通过ids拼接传递给后台\r\n deleteParams?: Object;\r\n children?: React.ReactNode;\r\n onSearch?: (value?: any) => void;\r\n onReset?: () => void;\r\n initData?: any; //初始化回调函数,在componentDidMount中调用\r\n buttons?: ButtonItem[]; //按钮集合 ['add','delete','search','editor','delete_batch']\r\n onShowForm?: (value?: any, editorFlag?: string) => void; //打开表单回调\r\n onHideForm?: () => void; //打开表单回调\r\n onFormChange?: (changedValues?: any, allValues?: any) => void; //表单onChange回调\r\n formType?: \"modal\" | \"drawer\" | \"page\";\r\n formChangeValid?: boolean; //表单校验\r\n className?: any;\r\n toolButtonPosition?: \"right\" | \"buttom\";\r\n pageTitle?: string | ReactNode;\r\n actionProps?: {\r\n textAlign?: string;\r\n showIcon?: boolean;\r\n width?: number;\r\n buttonNumber?: number | \"all\";\r\n };\r\n searchFormProps?: { wrapperCol?: any; labelCol?: any };\r\n onTreeSelect?: (value?: any, editorFlag?: string) => void; //打开表单回调\r\n onCallBacks?: {\r\n treeSelectCallBack?: any; //树点击查询后回调\r\n onQueryCallBack?: any; //查询回调,查询数据后回调\r\n onSumbitCallBack?: any; //保存回调,保存数据成功后回调\r\n onDeleteCallBack?: any; //删除按钮回调,删除数据后执行\r\n onEditorCallBack?: any; //编辑按钮回调,打开弹框后执行\r\n onAddCallBack?: any; //添加按钮回调,打开弹框后执行\r\n onSearchCallBack?: any; //列表查询按钮回调,打开弹框后执行\r\n tableLoadCallBack?: any; //列表查询回调--load\r\n };\r\n pageType?: \"normal\" | \"tabspage\";\r\n formPageProps?: FormPageProps;\r\n buttonClick?: {\r\n onAdd?: () => void;\r\n onEditor?: (value?: any) => void;\r\n onSearch?: (value?: any) => void;\r\n onDelete?: (value?: any) => void;\r\n };\r\n permission?: {\r\n has?: boolean;\r\n menuCode?: string;\r\n };\r\n requestParams?: {\r\n //需要额外传的固定请求参数\r\n addParams?: Object; //新增固定参数\r\n editorParams?: Object; //编辑固定参数\r\n queryParams?: Object; //查询固定参数\r\n deleteParams?: Object; //删除固定参数\r\n };\r\n requestUrls?: {\r\n addUrl?: string; //新增url\r\n editorUrl?: string; //编辑url\r\n deleteUrl?: string; //删除url\r\n };\r\n funcs?: any;\r\n requestConfig?: any;\r\n [propsName: string]: any;\r\n}\r\n\r\nclass BasePage extends PureComponent<NSCBaseBageProps, any> {\r\n tableRef = React.createRef<any>();\r\n treeRef = React.createRef<any>();\r\n searchRef = React.createRef<any>();\r\n editorRef = React.createRef<any>();\r\n pageRef = React.createRef<any>();\r\n pageContentRef = React.createRef<any>();\r\n dateFormat = {} as any;\r\n tableWrapperRef = React.createRef<HTMLDivElement>();\r\n static convertColumns = convertColumns;\r\n constructor(props: any) {\r\n super(props);\r\n let { storePrefix } = config();\r\n let type = getStorage(\r\n storePrefix ? storePrefix + \"-\" + \"formType\" : \"formType\"\r\n );\r\n type = type?.content;\r\n let size = getStorage(\r\n storePrefix ? storePrefix + \"-\" + \"tableSize\" : \"tableSize\"\r\n );\r\n size = size?.content;\r\n this.state = {\r\n type: \"add\",\r\n selectedRowKeys: [],\r\n selectedRowDatas: [],\r\n treeSelectedKey: \"\",\r\n expand: false,\r\n formType: type || \"modal\",\r\n tableSize: size || \"default\",\r\n treeSearchPrams: {},\r\n popopens: {},\r\n moreOpen: false,\r\n elementHeight: 0,\r\n permissionButtons: [],\r\n queryParams: {},\r\n tableHeaderHeight: 0, // 添加表头高度到state\r\n buttonsLoading: {},\r\n treeWidth: this.props.showLeft ? 260 : 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const { initData, permisson = {} } = this.props;\r\n const elementHeight = this.pageContentRef.current?.clientHeight;\r\n\r\n // 添加窗口resize监听\r\n window.addEventListener(\"resize\", this.throttleCalculateTableHeaderHeight);\r\n\r\n // 初始计算表头高度\r\n setTimeout(this.calculateTableHeaderHeight, 0);\r\n\r\n this.setState({\r\n elementHeight,\r\n });\r\n initData && initData();\r\n }\r\n componentDidUpdate(prevProps) {\r\n const elementHeight = this.pageContentRef.current?.clientHeight;\r\n if (elementHeight > this.state.elementHeight) {\r\n this.setState({\r\n elementHeight,\r\n });\r\n }\r\n if (prevProps.showLeft !== this.props.showLeft) {\r\n this.setState({\r\n treeWidth: this.props.showLeft ? 260 : 0,\r\n });\r\n }\r\n }\r\n componentWillUnmount() {\r\n // 移除resize监听\r\n window.removeEventListener(\r\n \"resize\",\r\n this.throttleCalculateTableHeaderHeight\r\n );\r\n }\r\n setSearchParams(params, callBack) {\r\n this.searchRef.current?.setSearchParams(params);\r\n callBack && callBack(params);\r\n }\r\n doSubmit(data, label = \"编辑\") {\r\n this.editorRef.current?.doSubmit(data, label);\r\n }\r\n\r\n onSelect = (checkedTreeKeys: any) => {\r\n const { name, userType, account } = this.state;\r\n const value = { name, userType, account, deptId: checkedTreeKeys[0] };\r\n if (this.props.onSearch) {\r\n this.props.onSearch(value);\r\n }\r\n // this.tableLoad(value);\r\n };\r\n\r\n //显示表单\r\n showForm(value?: any, editorflag = \"add\", callBack?: any) {\r\n if (this.props.formPageProps?.formType == \"page\") {\r\n const { funcs = {} } = this.props;\r\n let pathname = `/formpage/${editorflag ? editorflag : \"add\"}/${\r\n this.props.tableCode\r\n }`;\r\n if (editorflag == \"editor\" || editorflag == \"search\") {\r\n pathname = pathname + \"?id=\" + value.id;\r\n }\r\n funcs?.history(\r\n {\r\n pathname: pathname,\r\n serviceName: \"setting-web\",\r\n servicePath: \"/setting\",\r\n id: new Date().getTime() + (value?.id || \"_\") + editorflag,\r\n title:\r\n `【${\r\n editorflag == \"add\"\r\n ? \"新增\"\r\n : editorflag == \"editor\"\r\n ? \"编辑\"\r\n : \"查看\"\r\n }】` + this.props.formPageProps?.title || \"\",\r\n },\r\n \"addTab\"\r\n );\r\n } else {\r\n let newValue = value ? { ...value } : null;\r\n this.editorRef?.current?.show(newValue, editorflag, callBack);\r\n }\r\n }\r\n\r\n //关闭表单\r\n hideForm() {\r\n this.editorRef.current?.hideForm();\r\n }\r\n\r\n setLoading(loading: boolean) {\r\n this.editorRef.current?.setLoading(loading);\r\n }\r\n\r\n setEditFormValues(value, type = \"编辑\") {\r\n this.editorRef.current?.setFormValue(value, type);\r\n }\r\n\r\n getEditFormValues() {\r\n return this.editorRef.current?.getFormValue();\r\n }\r\n\r\n //批量删除\r\n onDelete(data?: any, deletePosition = \"row\") {\r\n const {\r\n deleteUrl,\r\n onDelete,\r\n deleteParams = {},\r\n buttonClick = {},\r\n requestParams = {},\r\n requestUrls = {},\r\n requestConfig = {},\r\n } = this.props;\r\n let _this = this;\r\n const selectedRowKeys = this.tableRef.current?.getSelectedRowKeys();\r\n const selectedRowDatas = this.tableRef.current?.getSelectedRowDatas();\r\n let url = requestUrls.deleteUrl ? requestUrls.deleteUrl : deleteUrl;\r\n let params: any = requestParams.deleteParams\r\n ? requestParams.deleteParams\r\n : deleteParams;\r\n if (deletePosition == \"toolbar\") {\r\n if (selectedRowKeys.length == 0) {\r\n message.warning(\"请选择要删除的数据!\");\r\n return;\r\n }\r\n }\r\n Modal.confirm({\r\n content: \"是否确认删除所选项?\",\r\n // centered:true,\r\n onOk: () => {\r\n if (buttonClick.onDelete) {\r\n converFunction(\r\n buttonClick.onDelete,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: deletePosition == \"toolbar\" ? selectedRowDatas : data,\r\n ids: deletePosition == \"toolbar\" ? selectedRowKeys : data?.id,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onDelete) {\r\n onDelete &&\r\n onDelete(deletePosition == \"toolbar\" ? selectedRowKeys : data);\r\n return;\r\n }\r\n if (!url) {\r\n throw new Error(\"url不能为空!\");\r\n }\r\n const { data: dataParams = {}, ...otherParams } = params;\r\n const defaultParams = {\r\n method: \"post\",\r\n autoPrefix: true,\r\n params: {\r\n ids: deletePosition == \"toolbar\" ? selectedRowKeys.join() : data.id,\r\n ...dataParams,\r\n },\r\n ...requestConfig,\r\n };\r\n let finalParams = {} as any;\r\n finalParams = { ...defaultParams, ...otherParams };\r\n request(url, {\r\n ...finalParams,\r\n })\r\n .then(function (res: any) {\r\n const { code } = res;\r\n if (code === 200) {\r\n message.success(\"删除成功!\");\r\n let value = _this.searchRef?.current?.getSearchValues();\r\n _this.props.onCallBacks?.onDeleteCallBack &&\r\n converFunction(\r\n _this.props.onCallBacks?.onDeleteCallBack,\r\n { pageRef: this.props.pageRef },\r\n this.props.Utils\r\n );\r\n _this.tableLoad(value);\r\n } else {\r\n message.error(\"删除失败!\");\r\n }\r\n })\r\n .catch(function (error: any) {\r\n console.log(\"error\", error);\r\n });\r\n },\r\n });\r\n }\r\n tableLoad(params: any, requestConfig = {}) {\r\n const {\r\n requestConfig: defaultRequestConfig = {},\r\n requestParams = {},\r\n tableProps = {},\r\n } = this.props;\r\n const { store: tableStore = {} } = tableProps;\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams.data || queryParams.params || {};\r\n\r\n let finalParams = {\r\n ...data,\r\n ...tableStore.requestConfig?.params,\r\n ...params,\r\n };\r\n const { requestConig: storeConfig = {} } = tableStore;\r\n const { params: storeParams = {}, ...otherStoreConfig } = storeConfig;\r\n this.tableRef.current?.store.load({\r\n ...defaultRequestConfig,\r\n ...otherStoreConfig,\r\n ...requestConfig,\r\n params: { ...storeParams, ...finalParams },\r\n });\r\n }\r\n //查询\r\n onSearch(params) {\r\n const {\r\n onSearch,\r\n onCallBacks,\r\n requestParams = {},\r\n tableProps = {},\r\n } = this.props;\r\n const { store: tableStore = {} } = tableProps;\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams.data || queryParams.params || {};\r\n let finalParams = {\r\n ...data,\r\n ...tableStore.requestConfig?.params,\r\n ...params,\r\n };\r\n if (onSearch) {\r\n onSearch({ ...finalParams, ...this.state.treeSearchPrams });\r\n return;\r\n }\r\n this.tableLoad({ ...finalParams, ...this.state.treeSearchPrams });\r\n onCallBacks?.onQueryCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onQueryCallBack,\r\n { pageRef: this.props.pageRef, params: params },\r\n this.props.Utils\r\n );\r\n }\r\n //表格重新加载\r\n tableReload(params = {}, autoLoad = true) {\r\n this.tableRef.current?.store?.reload({\r\n callback: (res) => {\r\n if (\r\n autoLoad &&\r\n res?.data?.records?.length == 0 &&\r\n this.state.currentPage !== 1\r\n ) {\r\n this.tableRef.current?.store?.reload({\r\n params: { current: 1, ...params },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n treeLoad(params: any, requestConfig = {}) {\r\n const { requestConfig: defaultRequestConfig = {} } = this.props;\r\n this.treeRef.current?.store.load({\r\n ...defaultRequestConfig,\r\n ...requestConfig,\r\n params: params,\r\n });\r\n }\r\n getSelectedRowKeys() {\r\n return this.tableRef.current?.getSelectedRowKeys();\r\n }\r\n getSelectedRowDatas() {\r\n return this.tableRef.current?.getSelectedRowDatas();\r\n }\r\n setSelectedRowKeys(data: Array<String | Number>) {\r\n return this.tableRef.current?.setSelectedRowKeys(data);\r\n }\r\n setSelectedRowDatas(data: Array<Object>) {\r\n return this.tableRef.current?.setSelectedRowDatas(data);\r\n }\r\n resetSelectedRowKeys() {\r\n return this.tableRef.current?.resetSelectedRowKeys();\r\n }\r\n\r\n getSearchValues() {\r\n const fromValue = this.searchRef?.current?.getSearchValues();\r\n return { ...fromValue, ...this.state.treeSearchPrams };\r\n }\r\n\r\n getChildrenData(data, keys = []) {\r\n const { tableProps } = this.props;\r\n const { rowKey = \"id\" } = tableProps;\r\n let resKey = [];\r\n let key = \"\";\r\n if (data.childNodes) {\r\n const children = data.childNodes;\r\n children.map((item, index) => {\r\n if (typeof rowKey == \"function\") {\r\n key = rowKey(item);\r\n } else {\r\n key = item[rowKey];\r\n }\r\n if (item.childNodes) {\r\n this.getChildrenData(item.childNodes, keys);\r\n } else {\r\n resKey = [...keys, key];\r\n }\r\n });\r\n } else {\r\n resKey = [...keys, key];\r\n }\r\n return resKey;\r\n }\r\n\r\n renderToolButtons(toolbuttons: any, toolbarFlag) {\r\n const flag = toolbuttons.length > 5;\r\n const { showSearch = true } = this.props;\r\n const content = toolbuttons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, icon, show, ...params } = item.props;\r\n if (index > 3) {\r\n return (\r\n <div\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-editor\"),\r\n getLess(styles, \"nsc-basepage-content-item\")\r\n )}\r\n >\r\n <Button\r\n key={index}\r\n onClick={() => {\r\n this.setState({\r\n moreOpen: false,\r\n });\r\n onClick && onClick();\r\n }}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n </div>\r\n );\r\n }\r\n });\r\n\r\n return (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-tool-buttons\"))}\r\n style={{ marginLeft: 0 }}\r\n >\r\n {toolbuttons.map((item: any, index: any) => {\r\n if (flag) {\r\n if (index < 4) {\r\n return (\r\n <div\r\n key={index}\r\n style={{\r\n marginRight: 12,\r\n }}\r\n >\r\n {item}\r\n </div>\r\n );\r\n } else if (index == 4) {\r\n return (\r\n <Popover\r\n content={content}\r\n title={null}\r\n placement=\"bottom\"\r\n key={index}\r\n open={this.state.moreOpen}\r\n onOpenChange={(open) => {\r\n if (open) {\r\n this.setState({\r\n moreOpen: true,\r\n });\r\n } else {\r\n this.setState({\r\n moreOpen: false,\r\n });\r\n }\r\n }}\r\n // open={true}\r\n // overlayClassName={styles['pop-box']}\r\n >\r\n <Button type=\"primary\">\r\n 更多 <DownOutlined />\r\n </Button>\r\n </Popover>\r\n );\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return (\r\n <div\r\n key={index}\r\n style={{\r\n marginRight: index == toolbuttons.length - 1 ? 0 : 12,\r\n }}\r\n >\r\n {item}\r\n </div>\r\n );\r\n }\r\n })}\r\n </div>\r\n );\r\n }\r\n renderCloumnButton(columnButtons: any, rowRecord: any) {\r\n const { actionProps, tableProps = {} } = this.props;\r\n const { baseActionColumn } = config();\r\n const newButtons = [];\r\n const { rowKey = \"id\" } = tableProps;\r\n let key = \"\";\r\n if (typeof rowKey == \"function\") {\r\n key = rowKey(rowRecord);\r\n } else {\r\n key = rowRecord[rowKey];\r\n }\r\n let showIcon = false;\r\n if (actionProps?.showIcon === true || baseActionColumn.showIcon === true)\r\n showIcon = true;\r\n columnButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, icon, recordShow, ...params } =\r\n item.props;\r\n if (recordShow) {\r\n if (typeof recordShow == \"string\") {\r\n try {\r\n const eventOption = {\r\n record: rowRecord,\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n };\r\n const Utils = { ...this.props.Uitls };\r\n let func = new Function(\"eventOption,Utils\", recordShow);\r\n const show = func(eventOption, Utils);\r\n show && newButtons.push(item);\r\n } catch (e) {\r\n let record = rowRecord;\r\n if (eval(recordShow)) {\r\n newButtons.push(item);\r\n }\r\n }\r\n } else if (typeof recordShow == \"function\") {\r\n const show = recordShow(rowRecord);\r\n show && newButtons.push(item);\r\n }\r\n } else {\r\n newButtons.push(item);\r\n }\r\n });\r\n let number = actionProps?.buttonNumber\r\n ? actionProps?.buttonNumber\r\n : baseActionColumn?.buttonNumber\r\n ? baseActionColumn?.buttonNumber\r\n : 3;\r\n let flag = false;\r\n if (number == \"all\") {\r\n flag = false;\r\n } else {\r\n flag = newButtons.length > number;\r\n }\r\n\r\n const content = newButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, recordShow, icon, show, ...params } =\r\n item.props;\r\n if (index > Number(number) - 1) {\r\n return (\r\n <Button\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-editor\"),\r\n getLess(styles, \"nsc-basepage-content-item\")\r\n )}\r\n key={index}\r\n onClick={() => {\r\n let data = { ...this.state.popopens };\r\n data[rowRecord.id] = false;\r\n this.setState({\r\n popopens: data,\r\n });\r\n onClick && onClick(rowRecord);\r\n }}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n }\r\n });\r\n return newButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, recordShow, icon, ...params } =\r\n item.props;\r\n if (flag) {\r\n if (index < number) {\r\n return (\r\n <Button\r\n className={cls(getLess(styles, \"nsc-basepage-editor\"), {\r\n [getLess(styles, \"nsc-basepage-editor-first\")]: index === 0,\r\n })}\r\n key={index}\r\n onClick={() => {\r\n onClick && onClick(rowRecord);\r\n }}\r\n icon={icon}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n } else if (index == number) {\r\n return (\r\n <Popover\r\n placement=\"bottom\"\r\n title={null}\r\n content={content}\r\n trigger={[\"click\"]}\r\n key={index}\r\n open={this.state.popopens[key] || false}\r\n onOpenChange={(open) => {\r\n if (open) {\r\n let data = { ...this.state.popopens };\r\n data[key] = true;\r\n this.setState({\r\n popopens: data,\r\n });\r\n } else {\r\n this.setState({\r\n popopens: {},\r\n });\r\n }\r\n }}\r\n // overlayClassName={styles['pop']}\r\n >\r\n <a className={getLess(styles, \"nsc-basepage-editor\")}>\r\n <EllipsisOutlined />\r\n </a>\r\n </Popover>\r\n );\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return (\r\n <Button\r\n className={cls(getLess(styles, \"nsc-basepage-editor\"), {\r\n [getLess(styles, \"nsc-basepage-editor-first\")]: index === 0,\r\n })}\r\n key={index}\r\n onClick={() => {\r\n onClick && onClick(rowRecord);\r\n }}\r\n {...params}\r\n type=\"link\"\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n }\r\n });\r\n // }\r\n }\r\n //树点击事件\r\n treeSelect(selectedKeys: any, obj: any) {\r\n let keyword = \"\";\r\n const {\r\n searchKey = \"key\",\r\n searchField = \"\",\r\n parantSelect = true,\r\n } = this.props.treeProps;\r\n const { treeSelectedKey } = this.state;\r\n const { selected, selectedNodes } = obj;\r\n\r\n if (selected) {\r\n keyword = selectedNodes[0].dataref.attribute[searchKey];\r\n if (parantSelect) {\r\n this.setState({\r\n treeSelectedKey: selectedKeys[0],\r\n treeSearchPrams: { [searchField]: keyword },\r\n });\r\n } else {\r\n if (selectedNodes[0].isLeaf || !selectedNodes[0].children) {\r\n if (selectedKeys[0] !== treeSelectedKey) {\r\n this.setState({\r\n treeSelectedKey: selectedKeys[0],\r\n treeSearchPrams: { [searchField]: keyword },\r\n });\r\n }\r\n }\r\n }\r\n } else {\r\n this.setState({\r\n treeSelectedKey: keyword,\r\n treeSearchPrams: {},\r\n });\r\n }\r\n if (this.props.onTreeSelect) {\r\n this.props.onTreeSelect(selectedKeys, obj);\r\n return;\r\n }\r\n const fromValue = this.searchRef?.current?.getSearchValues() || {};\r\n searchField && this.tableLoad({ ...fromValue, [searchField]: keyword });\r\n this.props.onCallBacks?.treeSelectCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.treeSelectCallBack,\r\n { pageRef: this.props.pageRef, selectedKeys: selectedKeys, obj: obj },\r\n this.props.Utils\r\n );\r\n // utils.callback(this.props.onCallBacks?.treeSelectCallBack, this, [\r\n // selectedKeys,\r\n // obj,\r\n // ]);\r\n }\r\n resetSearch() {\r\n this.searchRef.current?.resetFields();\r\n }\r\n getText(props, text) {\r\n let newText = text;\r\n if (props?.data && props?.data?.length > 0) {\r\n let data = props.data;\r\n for (let i = 0; i < data?.length; i++) {\r\n if (data[i].value == text) {\r\n newText = data[i].label;\r\n }\r\n }\r\n }\r\n return newText;\r\n }\r\n setTableData(data) {\r\n this.tableRef.current?.store?.setData(data);\r\n }\r\n setTreeData(data) {\r\n this.treeRef.current?.store?.setData(data);\r\n }\r\n getSelectedKey = (selected) => {\r\n let res = [];\r\n for (let key in selected) {\r\n const keys = selected[key];\r\n if (keys.length > 0) {\r\n res = [...res, ...keys];\r\n }\r\n }\r\n return res;\r\n };\r\n\r\n convertQueryParams() {\r\n const { requestParams = {} } = this.props;\r\n let queryParams: any = requestParams.queryParams;\r\n if (queryParams && typeof queryParams == \"string\") {\r\n const Utils = this.props.Utils || {};\r\n let func = new Function(\"Utils\", queryParams);\r\n let converParams = func(Utils);\r\n queryParams = converParams;\r\n } else {\r\n queryParams = queryParams || {};\r\n }\r\n return queryParams;\r\n }\r\n\r\n // 计算表头高度的方法\r\n calculateTableHeaderHeight = () => {\r\n if (this.tableWrapperRef.current) {\r\n const tableHeader =\r\n this.tableWrapperRef.current.getElementsByClassName(\r\n \"ant-table-thead\"\r\n )[0];\r\n if (tableHeader) {\r\n const headerHeight = tableHeader.getBoundingClientRect().height;\r\n if (headerHeight !== this.state.tableHeaderHeight) {\r\n this.setState({\r\n tableHeaderHeight: headerHeight,\r\n });\r\n }\r\n }\r\n }\r\n };\r\n throttleCalculateTableHeaderHeight = throttle(\r\n this.calculateTableHeaderHeight,\r\n 500\r\n );\r\n\r\n // 优化拖拽相关方法\r\n handleMouseDown(e: React.MouseEvent) {\r\n e.preventDefault();\r\n\r\n // 创建遮罩层以处理iframe场景\r\n const mask = document.createElement(\"div\");\r\n mask.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: transparent;\r\n z-index: 9999;\r\n cursor: col-resize;\r\n `;\r\n mask.id = \"drag-mask\";\r\n document.body.appendChild(mask);\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const newWidth = e.screenX;\r\n // 限制最小100px,最大500px\r\n if (newWidth >= 50 && newWidth <= 800) {\r\n this.setState({ treeWidth: newWidth });\r\n }\r\n };\r\n\r\n const throttledMouseMove = throttle(handleMouseMove, 16);\r\n\r\n const handleMouseUp = () => {\r\n document.removeEventListener(\"mousemove\", throttledMouseMove);\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n // 移除遮罩层\r\n const mask = document.getElementById(\"drag-mask\");\r\n if (mask) {\r\n document.body.removeChild(mask);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousemove\", throttledMouseMove);\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n }\r\n\r\n render() {\r\n const {\r\n columns = [],\r\n showSearch = true,\r\n children,\r\n submitUrl = \"\",\r\n tableProps = {},\r\n treeProps = {},\r\n formPageProps = {},\r\n showLeft = false,\r\n submitParams = {},\r\n showToolButton = true,\r\n buttons = [],\r\n editorForm = true,\r\n onShowForm,\r\n formChangeValid = true,\r\n className,\r\n toolButtonPosition = \"buttom\",\r\n actionProps,\r\n deletePosition = \"toolbar\",\r\n buttonClick = {},\r\n permission = { has: false },\r\n requestParams = {},\r\n requestUrls = {},\r\n } = this.props;\r\n const {\r\n store: tableStore = {},\r\n filterColumn = true,\r\n actionColumn = true,\r\n showRowSelection = true,\r\n columnOrder = true,\r\n expandable = {},\r\n parantSelect = true,\r\n title: tableTitle,\r\n ...othertableParams\r\n } = tableProps;\r\n let newTableStore = { ...tableStore };\r\n if (requestParams.queryParams) {\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams?.data || queryParams?.params || {};\r\n newTableStore.requestConfig = {\r\n params: { ...data, ...newTableStore.requestConfig?.params },\r\n };\r\n }\r\n const {\r\n store: treeStore = {},\r\n showSearch: treeSearch = true,\r\n titleAlias = \"title\",\r\n title: treeTitle,\r\n ...othertreeParams\r\n } = treeProps;\r\n let _this = this;\r\n let tableParams = {\r\n filterColumn,\r\n store: {\r\n listeners: {\r\n load: (data) => {\r\n _this.props.onCallBacks?.tableLoadCallBack &&\r\n _this.props.onCallBacks?.tableLoadCallBack(data);\r\n },\r\n },\r\n ...newTableStore,\r\n },\r\n ...othertableParams,\r\n } as any;\r\n const defaultValue: any = {};\r\n const columnButtons: any = [];\r\n const { elementHeight } = this.state;\r\n let permissionButtons = [];\r\n if (permission.has && permission.menuCode) {\r\n permissionButtons =\r\n getButtonPermissons(permission.menuCode).permissons || [];\r\n }\r\n const obj = convertColumns(columns, {});\r\n let tableColumn: any[] = getNewColumns(columns, this.props);\r\n const searchForms = obj.searchForms || [];\r\n const editorForms = obj.editorForms || [];\r\n const toolButtons: any = [];\r\n const formButton: any = [];\r\n const { baseActionColumn } = config();\r\n let showIcon = true;\r\n if (actionProps?.showIcon === false) showIcon = false;\r\n else if (baseActionColumn.showIcon === false) showIcon = false;\r\n const buttonMap = {\r\n editor: { name: \"编辑\", code: \"editor\", icon: <EditOutlined /> },\r\n delete: { name: \"删除\", code: \"delete\", icon: <DeleteOutlined /> },\r\n search: { name: \"查看\", code: \"search\", icon: <EyeOutlined /> },\r\n };\r\n const returnButton = (code, show = \"\", defaultProps = {}) => {\r\n let props = {\r\n icon: showIcon ? buttonMap[code].icon : null,\r\n type: \"link\",\r\n ...defaultProps,\r\n } as any;\r\n\r\n if (show) {\r\n props = { ...props, recordShow: show };\r\n }\r\n return (\r\n <Button\r\n onClick={(record: any) => {\r\n if (code == \"delete\") {\r\n this.onDelete(record);\r\n } else {\r\n if (code == \"editor\" && buttonClick.onEditor) {\r\n converFunction(\r\n buttonClick.onEditor,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n } else if (code == \"search\" && buttonClick.onSearch) {\r\n converFunction(\r\n buttonClick.onSearch,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onShowForm) {\r\n onShowForm(record.attribute || record, code);\r\n return;\r\n }\r\n\r\n this.showForm(record.attribute || record, code, () => {\r\n let callBack =\r\n code == \"editor\"\r\n ? this.props.onCallBacks?.onEditorCallBack\r\n : this.props.onCallBacks?.onSearchCallBack;\r\n callBack &&\r\n converFunction(\r\n callBack,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n });\r\n }\r\n }}\r\n {...props}\r\n >\r\n {buttonMap[code]?.name}\r\n </Button>\r\n );\r\n };\r\n const checkPerssion = (code) => {\r\n if (!permission.has) {\r\n return true;\r\n } else {\r\n return permissionButtons.indexOf(code) > -1;\r\n }\r\n };\r\n buttons.map((item: any) => {\r\n if ((item == \"add\" || item.code == \"add\") && checkPerssion(\"add\")) {\r\n toolButtons.push(\r\n <Button\r\n type={\"primary\"}\r\n onClick={() => {\r\n const { onShowForm, buttonClick = {} } = this.props;\r\n if (buttonClick?.onAdd) {\r\n converFunction(\r\n buttonClick.onAdd,\r\n {\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onShowForm) {\r\n onShowForm(null, \"add\");\r\n return;\r\n }\r\n this.showForm(null, null, () => {\r\n this.props.onCallBacks?.onAddCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onAddCallBack,\r\n {\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n });\r\n }}\r\n icon={<PlusOutlined />}\r\n >\r\n 添加\r\n </Button>\r\n );\r\n } else if (\r\n (item == \"delete_batch\" || item.code == \"delete_batch\") &&\r\n checkPerssion(\"delete_batch\")\r\n ) {\r\n toolButtons.push(\r\n <Button\r\n type={\"primary\"}\r\n onClick={this.onDelete.bind(this, null, \"toolbar\")}\r\n icon={<DeleteOutlined />}\r\n danger\r\n >\r\n 批量删除\r\n </Button>\r\n );\r\n } else {\r\n if (checkPerssion(item.code ? item.code : item)) {\r\n columnButtons.push(\r\n returnButton(\r\n item.code ? item.code : item,\r\n item.recordShow,\r\n item.props || {}\r\n )\r\n );\r\n }\r\n }\r\n });\r\n\r\n if (Array.isArray(children)) {\r\n children.map((item: any) => {\r\n if (Array.isArray(item)) {\r\n item.map((child) => {\r\n if (\r\n child?.props?.pageType == \"toolButton\" &&\r\n checkPerssion(child?.props?.code)\r\n ) {\r\n toolButtons.push(child);\r\n } else if (\r\n child?.props?.pageType == \"formButton\" &&\r\n checkPerssion(child?.props?.code)\r\n ) {\r\n formButton.push(child);\r\n } else if (\r\n (child?.props?.pageType == \"columnButton\" ||\r\n child?.props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(child?.props?.code)\r\n ) {\r\n columnButtons.push(child);\r\n }\r\n });\r\n } else {\r\n if (\r\n item?.props?.pageType == \"toolButton\" &&\r\n checkPerssion(item?.props?.code)\r\n ) {\r\n toolButtons.push(item);\r\n } else if (\r\n (item?.props?.pageType == \"columnButton\" ||\r\n item?.props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(item?.props?.code)\r\n ) {\r\n columnButtons.push(item);\r\n }\r\n }\r\n });\r\n } else if (children) {\r\n const { props }: any = children;\r\n if (props?.pageType == \"toolButton\" && checkPerssion(props?.code)) {\r\n toolButtons.push(children);\r\n } else if (\r\n (props?.pageType == \"columnButton\" ||\r\n props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(props?.code)\r\n ) {\r\n columnButtons.push(children);\r\n }\r\n }\r\n actionColumn &&\r\n tableColumn.push({\r\n title: \"操作\",\r\n dataIndex: \"action\",\r\n align: actionProps?.textAlign\r\n ? actionProps?.textAlign\r\n : baseActionColumn.textAlign\r\n ? baseActionColumn.textAlign\r\n : \"left\",\r\n width: actionProps?.width\r\n ? actionProps?.width\r\n : baseActionColumn.width\r\n ? baseActionColumn.width\r\n : 200,\r\n fixed: \"right\",\r\n render: (text: any, record: any) => {\r\n return (\r\n <div className={getLess(styles, \"nsc-basepage-action\")}>\r\n {this.renderCloumnButton(columnButtons, record)}\r\n </div>\r\n );\r\n },\r\n });\r\n\r\n if (columnOrder)\r\n tableColumn = [\r\n {\r\n title: \"序号\",\r\n width: 80,\r\n align: \"center\",\r\n render: (text, reacord, index) => {\r\n return <>{index + 1}</>;\r\n },\r\n },\r\n ...tableColumn,\r\n ];\r\n let searchFlag = showSearch && searchForms.length > 0;\r\n let { tableTool } = config();\r\n let toolFlag =\r\n showToolButton &&\r\n toolButtons.length > 0 &&\r\n toolButtonPosition == \"buttom\";\r\n let toolbarFlag = !(\r\n tableProps.toolbar == false ||\r\n tableProps.toolbar?.show == false ||\r\n tableProps.toolbar?.tools?.length == 0 ||\r\n tableTool?.show == false\r\n );\r\n let headerHeight = showSearch && searchForms.length > 0 ? 104 : 0; //头部搜索栏高度\r\n let toolHeight = tableTitle || toolFlag ? 50 : 0;\r\n let paddingHeight = 20 * 2; //上下间距\r\n let tableContentHeight =\r\n elementHeight - toolHeight - paddingHeight ;\r\n let PaginationHeight = tableProps.pagination !== false ? 32 + 16 : 0; //32 为分页器高度,16为margin间距\r\n let tableHeight = tableContentHeight - PaginationHeight;\r\n let tableSrollHeight =\r\n tableContentHeight -\r\n (this.state.tableHeaderHeight > 0 ? this.state.tableHeaderHeight : 55) -\r\n PaginationHeight;\r\n // if (tableProps.pagination !== false) {\r\n const scroll = tableParams.scroll;\r\n tableParams = {\r\n ...tableParams,\r\n scroll: { x: \"max-content\", y: tableSrollHeight, ...scroll },\r\n };\r\n // }\r\n return (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage\"), className)}\r\n ref={this.pageRef}\r\n >\r\n {this.props.pageTitle && (\r\n <div className={cls(getLess(styles, \"nsc-basepage-title\"))}>\r\n {this.props.pageTitle}\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-pane\"))}\r\n style={{ display: \"flex\" }}\r\n >\r\n {showLeft && (\r\n <div\r\n className={getLess(styles, \"nsc-basepage-left\")}\r\n style={{ width: this.state.treeWidth }}\r\n >\r\n {treeTitle && (\r\n <div className={getLess(styles, \"tree-title\")}>{treeTitle}</div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"tree-content\"), {\r\n [getLess(styles, \"tree-content-notitle\")]: !treeTitle,\r\n })}\r\n >\r\n <div\r\n className=\"tree-drag\"\r\n onMouseDown={this.handleMouseDown.bind(this)}\r\n ></div>\r\n <Tree\r\n store={{ ...treeStore }}\r\n showIcon={false}\r\n checkable={false}\r\n searchable={treeSearch}\r\n onSelect={this.treeSelect.bind(this)}\r\n selectedKeys={[this.state.treeSelectedKey]}\r\n titleAlias={titleAlias}\r\n ref={this.treeRef}\r\n {...othertreeParams}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-right\"), {\r\n [getLess(styles, \"nsc-basepage-no-left-right\")]: !showLeft,\r\n })}\r\n style={{\r\n width: `calc(100% - ${this.state.treeWidth}px - ${\r\n showLeft ? 15 : 0\r\n }px)`,\r\n }}\r\n >\r\n {showSearch && searchForms.length > 0 && (\r\n <div className={getLess(styles, \"nsc-basepage-headersearch\")}>\r\n <HeaderSearch\r\n searchForms={searchForms}\r\n toolButtonPosition={toolButtonPosition}\r\n onSearch={this.onSearch.bind(this)}\r\n onReset={() => {\r\n if (this.props.onReset) {\r\n this.props.onReset();\r\n return;\r\n }\r\n this.searchRef.current?.resetFields();\r\n this.tableLoad({});\r\n }}\r\n ref={this.searchRef}\r\n searchFormProps={this.props.searchFormProps}\r\n />\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-content\"), {\r\n [getLess(styles, \"nsc-basepage-content-gap\")]: !searchFlag,\r\n })}\r\n ref={this.pageContentRef}\r\n >\r\n {(tableTitle || toolFlag) && (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-table-title\"), {\r\n [getLess(styles, \"nsc-basepage-title-width\")]: !toolbarFlag,\r\n })}\r\n >\r\n <div>{tableTitle}</div>\r\n {toolFlag && this.renderToolButtons(toolButtons, toolbarFlag)}\r\n </div>\r\n )}\r\n\r\n <div\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-table\"),\r\n {\r\n [getLess(styles, \"nsc-basepage-table-top\")]: !toolbarFlag,\r\n },\r\n {\r\n [getLess(styles, \"nsc-basepage-table-top2\")]:\r\n toolbarFlag && !toolFlag,\r\n }\r\n )}\r\n ref={this.tableWrapperRef}\r\n style={{ height: tableContentHeight }}\r\n >\r\n <Table\r\n ref={this.tableRef}\r\n columns={tableColumn}\r\n expandable={{\r\n expandIcon: ({ expanded, onExpand, record }) => {\r\n return (\r\n <>\r\n {expanded &&\r\n record.childNodes &&\r\n record.childNodes?.length > 0 ? (\r\n <DownOutlined\r\n onClick={(e) => onExpand(record, e)}\r\n className={getLess(styles, \"expand-icon\")}\r\n />\r\n ) : record.childNodes &&\r\n record.childNodes?.length > 0 ? (\r\n <RightOutlined\r\n onClick={(e) => onExpand(record, e)}\r\n className={getLess(styles, \"expand-icon\")}\r\n />\r\n ) : null}\r\n </>\r\n );\r\n },\r\n ...expandable,\r\n }}\r\n columnOrder={true}\r\n onChange={(pagination) => {\r\n const { currentPage } = this.state;\r\n if (currentPage !== pagination.current) {\r\n this.setState({\r\n currentPage: pagination.current,\r\n });\r\n }\r\n }}\r\n toolbar={{\r\n onToolClick: {\r\n onRefresh: () => {\r\n const params = this.getSearchValues();\r\n this.tableLoad(params);\r\n },\r\n },\r\n ...tableProps.toolbar,\r\n }}\r\n showRowSelection={showRowSelection}\r\n style={{ height: tableHeight }}\r\n {...tableParams}\r\n // pagination={false}\r\n />\r\n {/* <div></div> */}\r\n </div>\r\n </div>\r\n </div>\r\n {editorForm && this.props.formPageProps?.formType !== \"page\" && (\r\n <EditorForm\r\n ref={this.editorRef}\r\n callBack={() => {\r\n this.props.onCallBacks?.onSumbitCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onSumbitCallBack,\r\n { pageRef: this.props.pageRef },\r\n this.props.Utils\r\n );\r\n this.tableReload();\r\n }}\r\n forms={editorForms}\r\n submitUrl={submitUrl}\r\n submitParams={submitParams}\r\n onSubmit={this.props.onSubmit}\r\n onHideForm={this.props.onHideForm}\r\n onFormChange={this.props.onFormChange}\r\n formType={this.props.formType || \"auto\"}\r\n changeValid={formChangeValid}\r\n Utils={this.props.Utils}\r\n requestObject={{\r\n addUrl: requestUrls.addUrl,\r\n editorUrl: requestUrls.editorUrl,\r\n addParams: requestParams.addParams,\r\n editorParams: requestParams.editorParams,\r\n }}\r\n funcs={this.props.funcs}\r\n {...formPageProps}\r\n >\r\n {formButton}\r\n </EditorForm>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\nexport default BasePage;\r\n"],"mappings":"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"}
|