[NIFI-FDS-6469] update demo application to run FDS 0.2.0
diff --git a/.cache-loader-coverage/070e6acbd8cf3fa2cf6bc2d164614d7a.json b/.cache-loader-coverage/070e6acbd8cf3fa2cf6bc2d164614d7a.json
new file mode 100644
index 0000000..d43829d
--- /dev/null
+++ b/.cache-loader-coverage/070e6acbd8cf3fa2cf6bc2d164614d7a.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js","mtime":1563469805292},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIGNvdl8yOTdlYmhmYWJzID0gZnVuY3Rpb24gKCkgewogIHZhciBwYXRoID0gIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9zbmFja2JhcnMvZmRzLXNuYWNrYmFyLmNvbXBvbmVudC5qcyI7CiAgdmFyIGhhc2ggPSAiNTM3ZmU2NTRjMjkyZWZmYmMzMjllNDkzYTU2YmI1MDMxMGE1YTM3MyI7CiAgdmFyIGdsb2JhbCA9IG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOwogIHZhciBnY3YgPSAiX19jb3ZlcmFnZV9fIjsKICB2YXIgY292ZXJhZ2VEYXRhID0gewogICAgcGF0aDogIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9zbmFja2JhcnMvZmRzLXNuYWNrYmFyLmNvbXBvbmVudC5qcyIsCiAgICBzdGF0ZW1lbnRNYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDIzLAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI1LAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiMSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMjcsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMjksCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAzNCwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAzNiwKICAgICAgICAgIGNvbHVtbjogMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjMiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDM4LAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDQwLAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiNCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDUsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDcsCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI1IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA0OSwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA1MSwKICAgICAgICAgIGNvbHVtbjogMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjYiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDU5LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDU5LAogICAgICAgICAgY29sdW1uOiAyOAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjciOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDYwLAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDYwLAogICAgICAgICAgY29sdW1uOiAzMAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjgiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDYxLAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDYxLAogICAgICAgICAgY29sdW1uOiAzMAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjkiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDY0LAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDgxLAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiMTAiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDcxLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDczLAogICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgfQogICAgICB9LAogICAgICAiMTEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDcyLAogICAgICAgICAgY29sdW1uOiAxMgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA3MiwKICAgICAgICAgIGNvbHVtbjogOTAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxMiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNzQsCiAgICAgICAgICBjb2x1bW46IDgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNzYsCiAgICAgICAgICBjb2x1bW46IDkKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxMyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNzUsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDc1LAogICAgICAgICAgY29sdW1uOiA5MgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjE0IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA3NywKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA3OSwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjE1IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA3OCwKICAgICAgICAgIGNvbHVtbjogMTIKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNzgsCiAgICAgICAgICBjb2x1bW46IDkyCiAgICAgICAgfQogICAgICB9LAogICAgICAiMTYiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDgzLAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDkzLAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiMTciOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDk1LAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDk1LAogICAgICAgICAgY29sdW1uOiAzNwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGZuTWFwOiB7CiAgICAgICIwIjogewogICAgICAgIG5hbWU6ICJGZHNTbmFja0JhclRpdGxlRGlyZWN0aXZlIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAyMCwKICAgICAgICAgICAgY29sdW1uOiAxNgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAyMCwKICAgICAgICAgICAgY29sdW1uOiA0MQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAyMCwKICAgICAgICAgICAgY29sdW1uOiA0NAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAyMSwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiAyMAogICAgICB9LAogICAgICAiMSI6IHsKICAgICAgICBuYW1lOiAiRmRzU25hY2tCYXJDb250ZW50RGlyZWN0aXZlIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAzMSwKICAgICAgICAgICAgY29sdW1uOiAxNgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAzMSwKICAgICAgICAgICAgY29sdW1uOiA0MwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAzMSwKICAgICAgICAgICAgY29sdW1uOiA0NgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAzMiwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiAzMQogICAgICB9LAogICAgICAiMiI6IHsKICAgICAgICBuYW1lOiAiRmRzU25hY2tCYXJBY3Rpb25zRGlyZWN0aXZlIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA0MiwKICAgICAgICAgICAgY29sdW1uOiAxNgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA0MiwKICAgICAgICAgICAgY29sdW1uOiA0MwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA0MiwKICAgICAgICAgICAgY29sdW1uOiA0NgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA0MywKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiA0MgogICAgICB9LAogICAgICAiMyI6IHsKICAgICAgICBuYW1lOiAiRmRzU25hY2tCYXJDb21wb25lbnQiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDU4LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNTgsCiAgICAgICAgICAgIGNvbHVtbjogMjkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNTgsCiAgICAgICAgICAgIGNvbHVtbjogMzIKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNjIsCiAgICAgICAgICAgIGNvbHVtbjogMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogNTgKICAgICAgfSwKICAgICAgIjQiOiB7CiAgICAgICAgbmFtZTogIihhbm9ueW1vdXNfNCkiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDcwLAogICAgICAgICAgICBjb2x1bW46IDI0CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDcwLAogICAgICAgICAgICBjb2x1bW46IDI1CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDcwLAogICAgICAgICAgICBjb2x1bW46IDM2CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDgwLAogICAgICAgICAgICBjb2x1bW46IDUKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDcwCiAgICAgIH0KICAgIH0sCiAgICBicmFuY2hNYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA3MSwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDczLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzEsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA3MywKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzEsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA3MywKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogNzEKICAgICAgfSwKICAgICAgIjEiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA3NCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDc2LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzQsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA3NiwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzQsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA3NiwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogNzQKICAgICAgfSwKICAgICAgIjIiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA3NywKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDc5LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzcsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA3OSwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzcsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA3OSwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogNzcKICAgICAgfQogICAgfSwKICAgIHM6IHsKICAgICAgIjAiOiAwLAogICAgICAiMSI6IDAsCiAgICAgICIyIjogMCwKICAgICAgIjMiOiAwLAogICAgICAiNCI6IDAsCiAgICAgICI1IjogMCwKICAgICAgIjYiOiAwLAogICAgICAiNyI6IDAsCiAgICAgICI4IjogMCwKICAgICAgIjkiOiAwLAogICAgICAiMTAiOiAwLAogICAgICAiMTEiOiAwLAogICAgICAiMTIiOiAwLAogICAgICAiMTMiOiAwLAogICAgICAiMTQiOiAwLAogICAgICAiMTUiOiAwLAogICAgICAiMTYiOiAwLAogICAgICAiMTciOiAwCiAgICB9LAogICAgZjogewogICAgICAiMCI6IDAsCiAgICAgICIxIjogMCwKICAgICAgIjIiOiAwLAogICAgICAiMyI6IDAsCiAgICAgICI0IjogMAogICAgfSwKICAgIGI6IHsKICAgICAgIjAiOiBbMCwgMF0sCiAgICAgICIxIjogWzAsIDBdLAogICAgICAiMiI6IFswLCAwXQogICAgfSwKICAgIF9jb3ZlcmFnZVNjaGVtYTogIjQzZTI3ZTEzOGViZjljZmM1OTY2YjA4MmNmOWEwMjgzMDJlZDQxODQiLAogICAgaGFzaDogIjUzN2ZlNjU0YzI5MmVmZmJjMzI5ZTQ5M2E1NmJiNTAzMTBhNWEzNzMiCiAgfTsKICB2YXIgY292ZXJhZ2UgPSBnbG9iYWxbZ2N2XSB8fCAoZ2xvYmFsW2djdl0gPSB7fSk7CgogIGlmIChjb3ZlcmFnZVtwYXRoXSAmJiBjb3ZlcmFnZVtwYXRoXS5oYXNoID09PSBoYXNoKSB7CiAgICByZXR1cm4gY292ZXJhZ2VbcGF0aF07CiAgfQoKICByZXR1cm4gY292ZXJhZ2VbcGF0aF0gPSBjb3ZlcmFnZURhdGE7Cn0oKTsKCi8qCiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQogKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgogKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAogKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAogKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqLwppbXBvcnQgeyBDb21wb25lbnQsIERpcmVjdGl2ZSwgQ29udGVudENoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmV4cG9ydCBmdW5jdGlvbiBGZHNTbmFja0JhclRpdGxlRGlyZWN0aXZlKCkgewogIGNvdl8yOTdlYmhmYWJzLmZbMF0rKzsKfQpjb3ZfMjk3ZWJoZmFicy5zWzBdKys7CkZkc1NuYWNrQmFyVGl0bGVEaXJlY3RpdmUucHJvdG90eXBlID0gewogIGNvbnRzdHJ1Y3RvcjogRmRzU25hY2tCYXJUaXRsZURpcmVjdGl2ZQp9Owpjb3ZfMjk3ZWJoZmFicy5zWzFdKys7CkZkc1NuYWNrQmFyVGl0bGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFt7CiAgdHlwZTogRGlyZWN0aXZlLAogIGFyZ3M6IFt7CiAgICBzZWxlY3RvcjogJ2Zkcy1zbmFja2Jhci10aXRsZScKICB9XQp9XTsKZXhwb3J0IGZ1bmN0aW9uIEZkc1NuYWNrQmFyQ29udGVudERpcmVjdGl2ZSgpIHsKICBjb3ZfMjk3ZWJoZmFicy5mWzFdKys7Cn0KY292XzI5N2ViaGZhYnMuc1syXSsrOwpGZHNTbmFja0JhckNvbnRlbnREaXJlY3RpdmUucHJvdG90eXBlID0gewogIGNvbnRzdHJ1Y3RvcjogRmRzU25hY2tCYXJDb250ZW50RGlyZWN0aXZlCn07CmNvdl8yOTdlYmhmYWJzLnNbM10rKzsKRmRzU25hY2tCYXJDb250ZW50RGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbewogIHR5cGU6IERpcmVjdGl2ZSwKICBhcmdzOiBbewogICAgc2VsZWN0b3I6ICdmZHMtc25hY2tiYXItY29udGVudCcKICB9XQp9XTsKZXhwb3J0IGZ1bmN0aW9uIEZkc1NuYWNrQmFyQWN0aW9uc0RpcmVjdGl2ZSgpIHsKICBjb3ZfMjk3ZWJoZmFicy5mWzJdKys7Cn0KY292XzI5N2ViaGZhYnMuc1s0XSsrOwpGZHNTbmFja0JhckFjdGlvbnNEaXJlY3RpdmUucHJvdG90eXBlID0gewogIGNvbnRzdHJ1Y3RvcjogRmRzU25hY2tCYXJBY3Rpb25zRGlyZWN0aXZlCn07CmNvdl8yOTdlYmhmYWJzLnNbNV0rKzsKRmRzU25hY2tCYXJBY3Rpb25zRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbewogIHR5cGU6IERpcmVjdGl2ZSwKICBhcmdzOiBbewogICAgc2VsZWN0b3I6ICdmZHMtc25hY2tiYXItYWN0aW9ucycKICB9XQp9XTsKLyoqCiAqIEZkc1NuYWNrQmFyQ29tcG9uZW50IGNvbnN0cnVjdG9yCiAqCiAqIEBjb25zdHJ1Y3RvcgogKi8KCmZ1bmN0aW9uIEZkc1NuYWNrQmFyQ29tcG9uZW50KCkgewogIGNvdl8yOTdlYmhmYWJzLmZbM10rKzsKICBjb3ZfMjk3ZWJoZmFicy5zWzZdKys7CiAgdGhpcy5zbmFja0JhclRpdGxlID0gJyc7CiAgY292XzI5N2ViaGZhYnMuc1s3XSsrOwogIHRoaXMuc25hY2tCYXJDb250ZW50ID0gJyc7CiAgY292XzI5N2ViaGZhYnMuc1s4XSsrOwogIHRoaXMuc25hY2tCYXJBY3Rpb25zID0gJyc7Cn0KCmNvdl8yOTdlYmhmYWJzLnNbOV0rKzsKRmRzU25hY2tCYXJDb21wb25lbnQucHJvdG90eXBlID0gewogIGNvbnN0cnVjdG9yOiBGZHNTbmFja0JhckNvbXBvbmVudCwKCiAgLyoqCiAgICogUmVzcG9uZCBhZnRlciBBbmd1bGFyIHByb2plY3RzIGV4dGVybmFsIGNvbnRlbnQgaW50byB0aGUgY29tcG9uZW50J3Mgdmlldy4KICAgKi8KICBuZ0FmdGVyQ29udGVudEluaXQ6IGZ1bmN0aW9uIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHsKICAgIGNvdl8yOTdlYmhmYWJzLmZbNF0rKzsKICAgIGNvdl8yOTdlYmhmYWJzLnNbMTBdKys7CgogICAgaWYgKHRoaXMuc25hY2tCYXJUaXRsZS5sZW5ndGggPiAxKSB7CiAgICAgIGNvdl8yOTdlYmhmYWJzLmJbMF1bMF0rKzsKICAgICAgY292XzI5N2ViaGZhYnMuc1sxMV0rKzsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdEdXBsaWNhdGUgZmRzLXNuYWNrYmFyLXRpdGxlIGNvbXBvbmVudCBhdCBpbiBmZHMtc25hY2tiYXIuJyk7CiAgICB9IGVsc2UgewogICAgICBjb3ZfMjk3ZWJoZmFicy5iWzBdWzFdKys7CiAgICB9CgogICAgY292XzI5N2ViaGZhYnMuc1sxMl0rKzsKCiAgICBpZiAodGhpcy5zbmFja0JhckNvbnRlbnQubGVuZ3RoID4gMSkgewogICAgICBjb3ZfMjk3ZWJoZmFicy5iWzFdWzBdKys7CiAgICAgIGNvdl8yOTdlYmhmYWJzLnNbMTNdKys7CiAgICAgIHRocm93IG5ldyBFcnJvcignRHVwbGljYXRlIGZkcy1zbmFja2Jhci1jb250ZW50IGNvbXBvbmVudCBhdCBpbiBmZHMtc25hY2tiYXIuJyk7CiAgICB9IGVsc2UgewogICAgICBjb3ZfMjk3ZWJoZmFicy5iWzFdWzFdKys7CiAgICB9CgogICAgY292XzI5N2ViaGZhYnMuc1sxNF0rKzsKCiAgICBpZiAodGhpcy5zbmFja0JhckFjdGlvbnMubGVuZ3RoID4gMSkgewogICAgICBjb3ZfMjk3ZWJoZmFicy5iWzJdWzBdKys7CiAgICAgIGNvdl8yOTdlYmhmYWJzLnNbMTVdKys7CiAgICAgIHRocm93IG5ldyBFcnJvcignRHVwbGljYXRlIGZkcy1zbmFja2Jhci1hY3Rpb25zIGNvbXBvbmVudCBhdCBpbiBmZHMtc25hY2tiYXIuJyk7CiAgICB9IGVsc2UgewogICAgICBjb3ZfMjk3ZWJoZmFicy5iWzJdWzFdKys7CiAgICB9CiAgfQp9Owpjb3ZfMjk3ZWJoZmFicy5zWzE2XSsrOwpGZHNTbmFja0JhckNvbXBvbmVudC5hbm5vdGF0aW9ucyA9IFtuZXcgQ29tcG9uZW50KHsKICBzZWxlY3RvcjogJ2Zkcy1zbmFja2JhcicsCiAgdGVtcGxhdGU6IHJlcXVpcmUoJy4vZmRzLXNuYWNrYmFyLmNvbXBvbmVudC5odG1sJyksCiAgcXVlcmllczogewogICAgc25hY2tCYXJUaXRsZTogbmV3IENvbnRlbnRDaGlsZHJlbihGZHNTbmFja0JhclRpdGxlRGlyZWN0aXZlKSwKICAgIHNuYWNrQmFyQ29udGVudDogbmV3IENvbnRlbnRDaGlsZHJlbihGZHNTbmFja0JhckNvbnRlbnREaXJlY3RpdmUpLAogICAgc25hY2tCYXJBY3Rpb25zOiBuZXcgQ29udGVudENoaWxkcmVuKEZkc1NuYWNrQmFyQWN0aW9uc0RpcmVjdGl2ZSkKICB9Cn0pXTsKY292XzI5N2ViaGZhYnMuc1sxN10rKzsKRmRzU25hY2tCYXJDb21wb25lbnQucGFyYW1ldGVycyA9IFtdOwpleHBvcnQgeyBGZHNTbmFja0JhckNvbXBvbmVudCB9Ow=="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/0d41623e218af0f08110b929316bde6a.json b/.cache-loader-coverage/0d41623e218af0f08110b929316bde6a.json
new file mode 100644
index 0000000..4b8007f
--- /dev/null
+++ b/.cache-loader-coverage/0d41623e218af0f08110b929316bde6a.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js","mtime":1562689731033},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCi8vIFN0b3JlIGl0ZW1zIGZvciB0d28gZGF5cyBiZWZvcmUgYmVpbmcgZWxpZ2libGUgZm9yIHJlbW92YWwuCnZhciBNSUxMSVNfUEVSX0RBWSA9IDg2NDAwMDAwOwp2YXIgVFdPX0RBWVMgPSBNSUxMSVNfUEVSX0RBWSAqIDI7Cgp2YXIgaXNVbmRlZmluZWQgPSBmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmopIHsKICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCc7Cn07Cgp2YXIgaXNOdWxsID0gZnVuY3Rpb24gaXNOdWxsKG9iaikgewogIHJldHVybiBvYmogPT09IG51bGw7Cn07Cgp2YXIgaXNEZWZpbmVkQW5kTm90TnVsbCA9IGZ1bmN0aW9uIGlzRGVmaW5lZEFuZE5vdE51bGwob2JqKSB7CiAgcmV0dXJuICFpc1VuZGVmaW5lZChvYmopICYmICFpc051bGwob2JqKTsKfTsKLyoqCiAqIENoZWNrcyB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBlbnRyeS4KICoKICogQHBhcmFtIHtvYmplY3R9IGVudHJ5CiAqIEByZXR1cm5zIHtib29sZWFufQogKi8KCgp2YXIgY2hlY2tFeHBpcmF0aW9uID0gZnVuY3Rpb24gY2hlY2tFeHBpcmF0aW9uKGVudHJ5KSB7CiAgaWYgKGlzRGVmaW5lZEFuZE5vdE51bGwoZW50cnkuZXhwaXJlcykpIHsKICAgIC8vIGdldCB0aGUgZXhwaXJhdGlvbgogICAgdmFyIGV4cGlyZXMgPSBuZXcgRGF0ZShlbnRyeS5leHBpcmVzKTsKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOyAvLyByZXR1cm4gd2hldGhlciB0aGUgZXhwaXJhdGlvbiBkYXRlIGhhcyBwYXNzZWQKCiAgICByZXR1cm4gZXhwaXJlcy52YWx1ZU9mKCkgPCBub3cudmFsdWVPZigpOwogIH0KCiAgcmV0dXJuIGZhbHNlOwp9OwovKioKICogR2V0cyBhbiBlbnR5IGZvciB0aGUga2V5LiBUaGUgZW50cnkgZXhwaXJhdGlvbiBpcyBub3QgY2hlY2tlZC4KICoKICogQHBhcmFtIHtzdHJpbmd9IGtleQogKi8KCgp2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiBnZXRFbnRyeShrZXkpIHsKICB0cnkgewogICAgLy8gcGFyc2UgdGhlIGVudHJ5CiAgICB2YXIgZW50cnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpOyAvLyBlbnN1cmUgdGhlIGVudHJ5IGFuZCBpdGVtIGFyZSBwcmVzZW50CgogICAgaWYgKGlzRGVmaW5lZEFuZE5vdE51bGwoZW50cnkpKSB7CiAgICAgIHJldHVybiBlbnRyeTsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn07Ci8qKgogKiBGZHNTdG9yYWdlU2VydmljZSBjb25zdHJ1Y3Rvci4KICogQGNvbnN0cnVjdG9yCiAqLwoKCmZ1bmN0aW9uIEZkc1N0b3JhZ2VTZXJ2aWNlKCkge30KCkZkc1N0b3JhZ2VTZXJ2aWNlLnByb3RvdHlwZSA9IHsKICBjb25zdHJ1Y3RvcjogRmRzU3RvcmFnZVNlcnZpY2UsCgogIC8qKgogICAqIEluaXRpYWxpemVzIHRoZSBzdG9yYWdlLiBJdGVtcyB3aWxsIGJlIHBlcnNpc3RlZCBmb3IgdHdvIGRheXMuIE9uY2UgdGhlIHNjcmlwdHMgcnVucwogICAqIHRoZXJlYWZ0ZXIsIGFsbCBlbGlnaWJsZSBpdGVtcyB3aWxsIGJlIHJlbW92ZWQuIFRoaXMgc3RyYXRlZ3kgZG9lcyBub3Qgc3VwcG9ydCBwZXJzaXN0ZW5jZS4KICAgKi8KICBpbml0OiBmdW5jdGlvbiBpbml0KCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb2NhbFN0b3JhZ2UubGVuZ3RoOyBpKyspIHsKICAgICAgdHJ5IHsKICAgICAgICAvLyBnZXQgdGhlIG5leHQgaXRlbQogICAgICAgIHZhciBrZXkgPSBsb2NhbFN0b3JhZ2Uua2V5KGkpOyAvLyBhdHRlbXB0IHRvIGdldCB0aGUgaXRlbSB3aGljaCB3aWxsIGV4cGlyZSBpZiBuZWNlc3NhcnkKCiAgICAgICAgdGhpcy5nZXRJdGVtKGtleSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsvLyBEbyBub3RoaW5nCiAgICAgIH0KICAgIH0KICB9LAoKICAvKioKICAgKiBTdG9yZXMgdGhlIHNwZWNpZmllZCBpdGVtLgogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGtleQogICAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtCiAgICogQHBhcmFtIHtpbnRlZ2VyfSBleHBpcmVzCiAgICovCiAgc2V0SXRlbTogZnVuY3Rpb24gc2V0SXRlbShrZXksIGl0ZW0sIGV4cGlyZXMpIHsKICAgIC8vIGNhbGN1bGF0ZSB0aGUgZXhwaXJhdGlvbgogICAgZXhwaXJlcyA9IGlzRGVmaW5lZEFuZE5vdE51bGwoZXhwaXJlcykgPyBleHBpcmVzIDogbmV3IERhdGUoKS52YWx1ZU9mKCkgKyBUV09fREFZUzsgLy8gY3JlYXRlIHRoZSBlbnRyeQoKICAgIHZhciBlbnRyeSA9IHsKICAgICAgZXhwaXJlczogZXhwaXJlcywKICAgICAgaXRlbTogaXRlbQogICAgfTsgLy8gc3RvcmUgdGhlIGl0ZW0KCiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KGVudHJ5KSk7CiAgfSwKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZXJlIGlzIGFuIGVudHJ5IGZvciB0aGlzIGtleS4gVGhpcyB3aWxsIG5vdCBjaGVjayB0aGUgZXhwaXJhdGlvbi4gSWYKICAgKiB0aGUgZW50cnkgaXMgZXhwaXJlZCwgaXQgd2lsbCByZXR1cm4gbnVsbCBvbiBhIHN1YnNlcXVlbnQgZ2V0SXRlbSBpbnZvY2F0aW9uLgogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGtleQogICAqIEByZXR1cm5zIHtib29sZWFufQogICAqLwogIGhhc0l0ZW06IGZ1bmN0aW9uIGhhc0l0ZW0oa2V5KSB7CiAgICByZXR1cm4gZ2V0RW50cnkoa2V5KSAhPT0gbnVsbDsKICB9LAoKICAvKioKICAgKiBHZXRzIHRoZSBpdGVtIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmIGFuIGl0ZW0gd2l0aCB0aGlzIGtleSBkb2VzCiAgICogbm90IGV4aXN0LCBudWxsIGlzIHJldHVybmVkLiBJZiBhbiBpdGVtIGV4aXN0cyBidXQgY2Fubm90IGJlIHBhcnNlZAogICAqIG9yIGlzIG1hbGZvcm1lZC91bnJlY29nbml6ZWQsIG51bGwgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBAcGFyYW0ge3R5cGV9IGtleQogICAqLwogIGdldEl0ZW06IGZ1bmN0aW9uIGdldEl0ZW0oa2V5KSB7CiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeShrZXkpOwoKICAgIGlmIChlbnRyeSA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gLy8gaWYgdGhlIGVudHJ5IGlzIGV4cGlyZWQsIGRyb3AgaXQgYW5kIHJldHVybiBudWxsCgoKICAgIGlmIChjaGVja0V4cGlyYXRpb24oZW50cnkpKSB7CiAgICAgIHRoaXMucmVtb3ZlSXRlbShrZXkpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gLy8gaWYgdGhlIGVudHJ5IGhhcyB0aGUgc3BlY2lmaWVkIGZpZWxkIHJldHVybiBpdHMgdmFsdWUKCgogICAgaWYgKGlzRGVmaW5lZEFuZE5vdE51bGwoZW50cnlbJ2l0ZW0nXSkpIHsKICAgICAgcmV0dXJuIGVudHJ5WydpdGVtJ107CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfSwKCiAgLyoqCiAgICogR2V0cyB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBpdGVtLiBUaGlzIHdpbGwgbm90IGNoZWNrIHRoZSBleHBpcmF0aW9uLiBJZgogICAqIHRoZSBlbnRyeSBpcyBleHBpcmVkLCBpdCB3aWxsIHJldHVybiBudWxsIG9uIGEgc3Vic2VxdWVudCBnZXRJdGVtIGludm9jYXRpb24uCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5CiAgICogQHJldHVybnMge2ludGVnZXJ9CiAgICovCiAgZ2V0SXRlbUV4cGlyYXRpb246IGZ1bmN0aW9uIGdldEl0ZW1FeHBpcmF0aW9uKGtleSkgewogICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkoa2V5KTsKCiAgICBpZiAoZW50cnkgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IC8vIGlmIHRoZSBlbnRyeSBoYXMgdGhlIHNwZWNpZmllZCBmaWVsZCByZXR1cm4gaXRzIHZhbHVlCgoKICAgIGlmIChpc0RlZmluZWRBbmROb3ROdWxsKGVudHJ5WydleHBpcmVzJ10pKSB7CiAgICAgIHJldHVybiBlbnRyeVsnZXhwaXJlcyddOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0sCgogIC8qKgogICAqIEV4dHJhY3RzIHRoZSBzdWJqZWN0IGZyb20gdGhlIHNwZWNpZmllZCBqd3QuIElmIHRoZSBqd3QgaXMgbm90IGFzIGV4cGVjdGVkCiAgICogYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGp3dAogICAqIEByZXR1cm5zIHtzdHJpbmd9CiAgICovCiAgZ2V0Snd0UGF5bG9hZDogZnVuY3Rpb24gZ2V0Snd0UGF5bG9hZChqd3QpIHsKICAgIGlmIChpc0RlZmluZWRBbmROb3ROdWxsKGp3dCkpIHsKICAgICAgdmFyIHNlZ21lbnRzID0gand0LnNwbGl0KC9cLi8pOwoKICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCAhPT0gMykgewogICAgICAgIHJldHVybiAnJzsKICAgICAgfQoKICAgICAgdmFyIHJhd1BheWxvYWQgPSB3aW5kb3cuYXRvYihzZWdtZW50c1sxXSk7CiAgICAgIHZhciBwYXlsb2FkID0gSlNPTi5wYXJzZShyYXdQYXlsb2FkKTsKCiAgICAgIGlmIChpc0RlZmluZWRBbmROb3ROdWxsKHBheWxvYWQpKSB7CiAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgIH0KCiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0sCgogIC8qKgogICAqIFJlbW92ZXMgdGhlIGl0ZW0gd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KICAgKgogICAqIEBwYXJhbSB7dHlwZX0ga2V5CiAgICovCiAgcmVtb3ZlSXRlbTogZnVuY3Rpb24gcmVtb3ZlSXRlbShrZXkpIHsKICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7CiAgfQp9OwpGZHNTdG9yYWdlU2VydmljZS5wYXJhbWV0ZXJzID0gW107CmV4cG9ydCBkZWZhdWx0IEZkc1N0b3JhZ2VTZXJ2aWNlOw=="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/0ed217602e72d1af58af8379f24f42a6.json b/.cache-loader-coverage/0ed217602e72d1af58af8379f24f42a6.json
new file mode 100644
index 0000000..c5f95e2
--- /dev/null
+++ b/.cache-loader-coverage/0ed217602e72d1af58af8379f24f42a6.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js","mtime":1563469805292},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOwppbXBvcnQgJCBmcm9tICdqcXVlcnknOwovKioKICogRmRzQ29hc3RlckNvbXBvbmVudCBjb25zdHJ1Y3Rvci4KICoKICogQGNvbnN0cnVjdG9yCiAqLwoKZnVuY3Rpb24gRmRzQ29hc3RlckNvbXBvbmVudCgpIHsKICB0aGlzLnRpdGxlID0gJyc7CiAgdGhpcy5tZXNzYWdlID0gJyc7CiAgdGhpcy5pY29uID0gJyc7CiAgdGhpcy5jb2xvciA9ICcnOwogIHRoaXMuc25hY2tCYXJSZWYgPSB1bmRlZmluZWQ7CiAgdGhpcy52aWV3Q29udGFpbmVyUmVmID0gdW5kZWZpbmVkOwp9CgpGZHNDb2FzdGVyQ29tcG9uZW50LnByb3RvdHlwZSA9IHsKICBjb25zdHJ1Y3RvcjogRmRzQ29hc3RlckNvbXBvbmVudCwKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50LgogICAqLwogIG5nQWZ0ZXJWaWV3Q2hlY2tlZDogZnVuY3Rpb24gbmdBZnRlclZpZXdDaGVja2VkKCkgewogICAgJCgnLmZkcy1zbmFja2Jhci13cmFwcGVyJykuY3NzKCdib3JkZXItY29sb3InLCB0aGlzLmNvbG9yKTsKICAgICQoJy5mZHMtc25hY2tiYXItdGl0bGUnKS5jc3MoJ2NvbG9yJywgdGhpcy5jb2xvcik7CiAgICAkKCcuZmRzLWNvYXN0ZXItaWNvbicpLmNzcygnY29sb3InLCB0aGlzLmNvbG9yKTsKCiAgICBpZiAodGhpcy5pY29uKSB7CiAgICAgICQoJy5mZHMtc25hY2tiYXItd3JhcHBlcicpLmNzcygncGFkZGluZycsICcxNXB4IDE1cHggMTVweCA0NXB4Jyk7CiAgICB9IGVsc2UgewogICAgICAkKCcuZmRzLXNuYWNrYmFyLXdyYXBwZXInKS5jc3MoJ3BhZGRpbmcnLCAnMTVweCAxNXB4IDE1cHggMTVweCcpOwogICAgfQogIH0sCgogIC8qKgogICAqIENsb3NlIHRoZSBzbmFja2JhciBhbmQgc2VuZCBhIGNhbmNlbCByZXNwb25zZSB0byBhbnkgc3Vic2NyaWJlcnMuCiAgICovCiAgY2FuY2VsOiBmdW5jdGlvbiBjYW5jZWwoKSB7CiAgICB0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3MoZmFsc2UpOwogIH0KfTsKRmRzQ29hc3RlckNvbXBvbmVudC5hbm5vdGF0aW9ucyA9IFtuZXcgQ29tcG9uZW50KHsKICBzZWxlY3RvcjogJ2Zkcy1jb2FzdGVyJywKICB0ZW1wbGF0ZTogcmVxdWlyZSgnLi9jb2FzdGVyLmNvbXBvbmVudC5odG1sJyl9KV07CkZkc0NvYXN0ZXJDb21wb25lbnQucGFyYW1ldGVycyA9IFtdOwpleHBvcnQgeyBGZHNDb2FzdGVyQ29tcG9uZW50IH07"}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/1076f012eb2deb9c3b1eda93a900ddb5.json b/.cache-loader-coverage/1076f012eb2deb9c3b1eda93a900ddb5.json
new file mode 100644
index 0000000..9e249bf
--- /dev/null
+++ b/.cache-loader-coverage/1076f012eb2deb9c3b1eda93a900ddb5.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js","mtime":1563469805292},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IENvbXBvbmVudCwgRGlyZWN0aXZlLCBDb250ZW50Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJzsKZXhwb3J0IGZ1bmN0aW9uIEZkc1NuYWNrQmFyVGl0bGVEaXJlY3RpdmUoKSB7fQpGZHNTbmFja0JhclRpdGxlRGlyZWN0aXZlLnByb3RvdHlwZSA9IHsKICBjb250c3RydWN0b3I6IEZkc1NuYWNrQmFyVGl0bGVEaXJlY3RpdmUKfTsKRmRzU25hY2tCYXJUaXRsZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW3sKICB0eXBlOiBEaXJlY3RpdmUsCiAgYXJnczogW3sKICAgIHNlbGVjdG9yOiAnZmRzLXNuYWNrYmFyLXRpdGxlJwogIH1dCn1dOwpleHBvcnQgZnVuY3Rpb24gRmRzU25hY2tCYXJDb250ZW50RGlyZWN0aXZlKCkge30KRmRzU25hY2tCYXJDb250ZW50RGlyZWN0aXZlLnByb3RvdHlwZSA9IHsKICBjb250c3RydWN0b3I6IEZkc1NuYWNrQmFyQ29udGVudERpcmVjdGl2ZQp9OwpGZHNTbmFja0JhckNvbnRlbnREaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFt7CiAgdHlwZTogRGlyZWN0aXZlLAogIGFyZ3M6IFt7CiAgICBzZWxlY3RvcjogJ2Zkcy1zbmFja2Jhci1jb250ZW50JwogIH1dCn1dOwpleHBvcnQgZnVuY3Rpb24gRmRzU25hY2tCYXJBY3Rpb25zRGlyZWN0aXZlKCkge30KRmRzU25hY2tCYXJBY3Rpb25zRGlyZWN0aXZlLnByb3RvdHlwZSA9IHsKICBjb250c3RydWN0b3I6IEZkc1NuYWNrQmFyQWN0aW9uc0RpcmVjdGl2ZQp9OwpGZHNTbmFja0JhckFjdGlvbnNEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFt7CiAgdHlwZTogRGlyZWN0aXZlLAogIGFyZ3M6IFt7CiAgICBzZWxlY3RvcjogJ2Zkcy1zbmFja2Jhci1hY3Rpb25zJwogIH1dCn1dOwovKioKICogRmRzU25hY2tCYXJDb21wb25lbnQgY29uc3RydWN0b3IKICoKICogQGNvbnN0cnVjdG9yCiAqLwoKZnVuY3Rpb24gRmRzU25hY2tCYXJDb21wb25lbnQoKSB7CiAgdGhpcy5zbmFja0JhclRpdGxlID0gJyc7CiAgdGhpcy5zbmFja0JhckNvbnRlbnQgPSAnJzsKICB0aGlzLnNuYWNrQmFyQWN0aW9ucyA9ICcnOwp9CgpGZHNTbmFja0JhckNvbXBvbmVudC5wcm90b3R5cGUgPSB7CiAgY29uc3RydWN0b3I6IEZkc1NuYWNrQmFyQ29tcG9uZW50LAoKICAvKioKICAgKiBSZXNwb25kIGFmdGVyIEFuZ3VsYXIgcHJvamVjdHMgZXh0ZXJuYWwgY29udGVudCBpbnRvIHRoZSBjb21wb25lbnQncyB2aWV3LgogICAqLwogIG5nQWZ0ZXJDb250ZW50SW5pdDogZnVuY3Rpb24gbmdBZnRlckNvbnRlbnRJbml0KCkgewogICAgaWYgKHRoaXMuc25hY2tCYXJUaXRsZS5sZW5ndGggPiAxKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignRHVwbGljYXRlIGZkcy1zbmFja2Jhci10aXRsZSBjb21wb25lbnQgYXQgaW4gZmRzLXNuYWNrYmFyLicpOwogICAgfQoKICAgIGlmICh0aGlzLnNuYWNrQmFyQ29udGVudC5sZW5ndGggPiAxKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignRHVwbGljYXRlIGZkcy1zbmFja2Jhci1jb250ZW50IGNvbXBvbmVudCBhdCBpbiBmZHMtc25hY2tiYXIuJyk7CiAgICB9CgogICAgaWYgKHRoaXMuc25hY2tCYXJBY3Rpb25zLmxlbmd0aCA+IDEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdEdXBsaWNhdGUgZmRzLXNuYWNrYmFyLWFjdGlvbnMgY29tcG9uZW50IGF0IGluIGZkcy1zbmFja2Jhci4nKTsKICAgIH0KICB9Cn07CkZkc1NuYWNrQmFyQ29tcG9uZW50LmFubm90YXRpb25zID0gW25ldyBDb21wb25lbnQoewogIHNlbGVjdG9yOiAnZmRzLXNuYWNrYmFyJywKICB0ZW1wbGF0ZTogcmVxdWlyZSgnLi9mZHMtc25hY2tiYXIuY29tcG9uZW50Lmh0bWwnKSwKICBxdWVyaWVzOiB7CiAgICBzbmFja0JhclRpdGxlOiBuZXcgQ29udGVudENoaWxkcmVuKEZkc1NuYWNrQmFyVGl0bGVEaXJlY3RpdmUpLAogICAgc25hY2tCYXJDb250ZW50OiBuZXcgQ29udGVudENoaWxkcmVuKEZkc1NuYWNrQmFyQ29udGVudERpcmVjdGl2ZSksCiAgICBzbmFja0JhckFjdGlvbnM6IG5ldyBDb250ZW50Q2hpbGRyZW4oRmRzU25hY2tCYXJBY3Rpb25zRGlyZWN0aXZlKQogIH0KfSldOwpGZHNTbmFja0JhckNvbXBvbmVudC5wYXJhbWV0ZXJzID0gW107CmV4cG9ydCB7IEZkc1NuYWNrQmFyQ29tcG9uZW50IH07"}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/15e3531d5778820c4416d0b7a82cf6b9.json b/.cache-loader-coverage/15e3531d5778820c4416d0b7a82cf6b9.json
new file mode 100644
index 0000000..d26e47b
--- /dev/null
+++ b/.cache-loader-coverage/15e3531d5778820c4416d0b7a82cf6b9.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js","mtime":1563469805289},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsKZXhwb3J0IGZ1bmN0aW9uIEZkc0RpYWxvZ1RpdGxlRGlyZWN0aXZlKCkge30KRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUucHJvdG90eXBlID0gewogIGNvbnRzdHJ1Y3RvcjogRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUKfTsKRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFt7CiAgdHlwZTogRGlyZWN0aXZlLAogIGFyZ3M6IFt7CiAgICBzZWxlY3RvcjogJ2Zkcy1kaWFsb2ctdGl0bGUnCiAgfV0KfV07CmV4cG9ydCBmdW5jdGlvbiBGZHNEaWFsb2dDb250ZW50RGlyZWN0aXZlKCkge30KRmRzRGlhbG9nQ29udGVudERpcmVjdGl2ZS5wcm90b3R5cGUgPSB7CiAgY29udHN0cnVjdG9yOiBGZHNEaWFsb2dDb250ZW50RGlyZWN0aXZlCn07CkZkc0RpYWxvZ0NvbnRlbnREaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFt7CiAgdHlwZTogRGlyZWN0aXZlLAogIGFyZ3M6IFt7CiAgICBzZWxlY3RvcjogJ2Zkcy1kaWFsb2ctY29udGVudCcKICB9XQp9XTsKZXhwb3J0IGZ1bmN0aW9uIEZkc0RpYWxvZ0FjdGlvbnNEaXJlY3RpdmUoKSB7fQpGZHNEaWFsb2dBY3Rpb25zRGlyZWN0aXZlLnByb3RvdHlwZSA9IHsKICBjb250c3RydWN0b3I6IEZkc0RpYWxvZ0FjdGlvbnNEaXJlY3RpdmUKfTsKRmRzRGlhbG9nQWN0aW9uc0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW3sKICB0eXBlOiBEaXJlY3RpdmUsCiAgYXJnczogW3sKICAgIHNlbGVjdG9yOiAnZmRzLWRpYWxvZy1hY3Rpb25zJwogIH1dCn1dOwovKioKICogRmRzRGlhbG9nQ29tcG9uZW50IGNvbnN0cnVjdG9yCiAqCiAqIEBjb25zdHJ1Y3RvcgogKi8KCmZ1bmN0aW9uIEZkc0RpYWxvZ0NvbXBvbmVudCgpIHsKICB0aGlzLmRpYWxvZ1RpdGxlID0gJyc7CiAgdGhpcy5kaWFsb2dDb250ZW50ID0gJyc7CiAgdGhpcy5kaWFsb2dBY3Rpb25zID0gJyc7Cn0KCkZkc0RpYWxvZ0NvbXBvbmVudC5wcm90b3R5cGUgPSB7CiAgY29uc3RydWN0b3I6IEZkc0RpYWxvZ0NvbXBvbmVudCwKCiAgLyoqCiAgICogUmVzcG9uZCBhZnRlciBBbmd1bGFyIHByb2plY3RzIGV4dGVybmFsIGNvbnRlbnQgaW50byB0aGUgY29tcG9uZW50J3Mgdmlldy4KICAgKi8KICBuZ0FmdGVyQ29udGVudEluaXQ6IGZ1bmN0aW9uIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHsKICAgIGlmICh0aGlzLmRpYWxvZ1RpdGxlLmxlbmd0aCA+IDEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdEdXBsaWNhdGUgZmRzLWRpYWxvZy10aXRsZSBjb21wb25lbnQgYXQgaW4gZmRzLWRpYWxvZy4nKTsKICAgIH0KCiAgICBpZiAodGhpcy5kaWFsb2dDb250ZW50Lmxlbmd0aCA+IDEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdEdXBsaWNhdGUgZmRzLWRpYWxvZy1jb250ZW50IGNvbXBvbmVudCBhdCBpbiBmZHMtZGlhbG9nLicpOwogICAgfQoKICAgIGlmICh0aGlzLmRpYWxvZ0FjdGlvbnMubGVuZ3RoID4gMSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBmZHMtZGlhbG9nLWFjdGlvbnMgY29tcG9uZW50IGF0IGluIGZkcy1kaWFsb2cuJyk7CiAgICB9CiAgfQp9OwpGZHNEaWFsb2dDb21wb25lbnQuYW5ub3RhdGlvbnMgPSBbbmV3IENvbXBvbmVudCh7CiAgc2VsZWN0b3I6ICdmZHMtZGlhbG9nJywKICB0ZW1wbGF0ZTogcmVxdWlyZSgnLi9mZHMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyksCiAgcXVlcmllczogewogICAgZGlhbG9nVGl0bGU6IG5ldyBDb250ZW50Q2hpbGRyZW4oRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUpLAogICAgZGlhbG9nQ29udGVudDogbmV3IENvbnRlbnRDaGlsZHJlbihGZHNEaWFsb2dDb250ZW50RGlyZWN0aXZlKSwKICAgIGRpYWxvZ0FjdGlvbnM6IG5ldyBDb250ZW50Q2hpbGRyZW4oRmRzRGlhbG9nQWN0aW9uc0RpcmVjdGl2ZSkKICB9Cn0pXTsKRmRzRGlhbG9nQ29tcG9uZW50LnBhcmFtZXRlcnMgPSBbXTsKZXhwb3J0IHsgRmRzRGlhbG9nQ29tcG9uZW50IH07"}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/2b39c966b2a08b834eecd9b338d7b817.json b/.cache-loader-coverage/2b39c966b2a08b834eecd9b338d7b817.json
new file mode 100644
index 0000000..b640246
--- /dev/null
+++ b/.cache-loader-coverage/2b39c966b2a08b834eecd9b338d7b817.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/common/fds.animations.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/common/fds.animations.js","mtime":1562689731032},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnOwovKioKICogRmRzQW5pbWF0aW9ucyBjb25zdHJ1Y3Rvci4KICoKICogQGNvbnN0cnVjdG9yCiAqLwoKZnVuY3Rpb24gRmRzQW5pbWF0aW9ucygpIHt9CgpGZHNBbmltYXRpb25zLnByb3RvdHlwZSA9IHsKICBjb25zdHJ1Y3RvcjogRmRzQW5pbWF0aW9ucywKCiAgLyoqCiAgICogRmFkZSBhbmltYXRpb24KICAgKi8KICBmYWRlQW5pbWF0aW9uOiB0cmlnZ2VyKCdyb3V0ZUFuaW1hdGlvbicsIFtzdGF0ZSgnKicsIHN0eWxlKHsKICAgIG9wYWNpdHk6IDEKICB9KSksIHRyYW5zaXRpb24oJzplbnRlcicsIFtzdHlsZSh7CiAgICBvcGFjaXR5OiAwCiAgfSksIGFuaW1hdGUoJzAuNXMgZWFzZS1pbicpXSksIHRyYW5zaXRpb24oJzpsZWF2ZScsIFthbmltYXRlKCcwLjVzIGVhc2Utb3V0Jywgc3R5bGUoewogICAgb3BhY2l0eTogMAogIH0pKV0pXSksCgogIC8qKgogICAqIFNsaWRlIGluIGZyb20gdGhlIGxlZnQgYW5pbWF0aW9uCiAgICovCiAgc2xpZGVJbkxlZnRBbmltYXRpb246IHRyaWdnZXIoJ3JvdXRlQW5pbWF0aW9uJywgW3N0YXRlKCcqJywgc3R5bGUoewogICAgb3BhY2l0eTogMSwKICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknCiAgfSkpLCB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbc3R5bGUoewogICAgb3BhY2l0eTogMCwKICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTEwMCUpJwogIH0pLCBhbmltYXRlKCcwLjVzIGVhc2UtaW4nKV0pLCB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbYW5pbWF0ZSgnMC41cyBlYXNlLW91dCcsIHN0eWxlKHsKICAgIG9wYWNpdHk6IDAsCiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJwogIH0pKV0pXSksCgogIC8qKgogICAqIFNsaWRlIGluIGZyb20gdGhlIHRvcCBhbmltYXRpb24KICAgKi8KICBzbGlkZUluRG93bkFuaW1hdGlvbjogdHJpZ2dlcigncm91dGVBbmltYXRpb24nLCBbc3RhdGUoJyonLCBzdHlsZSh7CiAgICBvcGFjaXR5OiAxLAogICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScKICB9KSksIHRyYW5zaXRpb24oJzplbnRlcicsIFtzdHlsZSh7CiAgICBvcGFjaXR5OiAwLAogICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTAwJSknCiAgfSksIGFuaW1hdGUoJzAuNXMgZWFzZS1pbicpXSksIHRyYW5zaXRpb24oJzpsZWF2ZScsIFthbmltYXRlKCcwLjVzIGVhc2Utb3V0Jywgc3R5bGUoewogICAgb3BhY2l0eTogMCwKICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTAwJSknCiAgfSkpXSldKSwKCiAgLyoqCiAgICogRmx5IGluL291dCBhbmltYXRpb24KICAgKi8KICBmbHlJbk91dEFuaW1hdGlvbjogdHJpZ2dlcignZmx5SW5PdXQnLCBbc3RhdGUoJ2luJywgc3R5bGUoewogICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScKICB9KSksIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIFtzdHlsZSh7CiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJwogIH0pLCBhbmltYXRlKCcwLjRzIDAuMXMgZWFzZS1pbicpXSksIHRyYW5zaXRpb24oJyogPT4gdm9pZCcsIGFuaW1hdGUoJzAuMnMgZWFzZS1vdXQnLCBzdHlsZSh7CiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC0xMDAlKScKICB9KSkpXSksCgogIC8qKgogICAqIEZseSBpbi9vdXQgYW5pbWF0aW9uCiAgICovCiAgZmFkZUluT3V0QW5pbWF0aW9uOiB0cmlnZ2VyKCdmYWRlSW5PdXQnLCBbc3RhdGUoJ2luJywgc3R5bGUoewogICAgb3BhY2l0eTogMQogIH0pKSwgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW3N0eWxlKHsKICAgIG9wYWNpdHk6IDAKICB9KSwgYW5pbWF0ZSgnMC41cyAwLjFzIGVhc2UtaW4nKV0pLCB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBhbmltYXRlKCcwLjVzIGVhc2Utb3V0Jywgc3R5bGUoewogICAgb3BhY2l0eTogMAogIH0pKSldKQp9OwpleHBvcnQgZGVmYXVsdCBuZXcgRmRzQW5pbWF0aW9ucygpOw=="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/32bca48a4d5613b97d5c857a3b7f2581.json b/.cache-loader-coverage/32bca48a4d5613b97d5c857a3b7f2581.json
new file mode 100644
index 0000000..a7eb66a
--- /dev/null
+++ b/.cache-loader-coverage/32bca48a4d5613b97d5c857a3b7f2581.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js","mtime":1563469805291},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7CmltcG9ydCB7IE1hdERpYWxvZ0NvbmZpZywgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnOwppbXBvcnQgeyBGZHNDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50JzsKCmZ1bmN0aW9uIElEaWFsb2dDb25maWcoKSB7CiAgdGhpcy50aXRsZSA9ICcnOwogIHRoaXMubWVzc2FnZSA9ICcnOwogIHRoaXMuZGlhbG9nUmVmID0gdW5kZWZpbmVkOwogIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IHVuZGVmaW5lZDsKICB0aGlzLmRpc2FibGVDbG9zZSA9IHRydWU7Cn0KCklEaWFsb2dDb25maWcucHJvdG90eXBlID0gewogIGNvbnRzdHJ1Y3RvcjogSURpYWxvZ0NvbmZpZwp9OwokLmV4dGVuZChJRGlhbG9nQ29uZmlnLCBNYXREaWFsb2dDb25maWcpOwoKZnVuY3Rpb24gSUNvbmZpcm1Db25maWcoKSB7CiAgdGhpcy5hY2NlcHRCdXR0b24gPSAnQUNDRVBUJzsKICB0aGlzLmFjY2VwdEJ1dHRvbkNvbG9yID0gJ2Zkcy1wcmltYXJ5JzsKICB0aGlzLmNhbmNlbEJ1dHRvbiA9ICdDQU5DRUwnOwogIHRoaXMuY2FuY2VsQnV0dG9uQ29sb3IgPSAnZmRzLXNlY29uZGFyeSc7Cn0KCklDb25maXJtQ29uZmlnLnByb3RvdHlwZSA9IHsKICBjb250c3RydWN0b3I6IElDb25maXJtQ29uZmlnCn07CiQuZXh0ZW5kKElDb25maXJtQ29uZmlnLCBJRGlhbG9nQ29uZmlnKTsKCmZ1bmN0aW9uIGNyZWF0ZUNvbmZpZyhjb25maWcpIHsKICB2YXIgZGlhbG9nQ29uZmlnID0gbmV3IElDb25maXJtQ29uZmlnKCk7CiAgZGlhbG9nQ29uZmlnLnZpZXdDb250YWluZXJSZWYgPSBjb25maWcudmlld0NvbnRhaW5lclJlZjsKICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gY29uZmlnLmRpc2FibGVDbG9zZTsKICByZXR1cm4gZGlhbG9nQ29uZmlnOwp9Ci8qKgogKiBGZHNEaWFsb2dTZXJ2aWNlIGNvbnN0cnVjdG9yLgogKgogKiBAcGFyYW0gTWF0RGlhbG9nICAgICAgVGhlIGFuZ3VsYXIgbWF0ZXJpYWwgTWF0RGlhbG9nLgogKiBAY29uc3RydWN0b3IKICovCgoKZnVuY3Rpb24gRmRzRGlhbG9nU2VydmljZShNYXREaWFsb2cpIHsKICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSBNYXREaWFsb2c7Cn0KCkZkc0RpYWxvZ1NlcnZpY2UucHJvdG90eXBlID0gewogIGNvbnRzdHJ1Y3RvcjogRmRzRGlhbG9nU2VydmljZSwKCiAgLyoqCiAgICogV3JhcHBlciBmdW5jdGlvbiBvdmVyIHRoZSBvcGVuKCkgbWV0aG9kIGluIE1hdERpYWxvZy4KICAgKiBPcGVucyBhIG1vZGFsIGRpYWxvZyBjb250YWluaW5nIHRoZSBnaXZlbiBjb21wb25lbnQuCiAgICoKICAgKiBAcGFyYW0gY29tcG9uZW50ICAgICBUaGUgYW5ndWxhciBDb21wb25lbnRUeXBlPFQ+LgogICAqIEBwYXJhbSBjb25maWcgICAgICAgIFRoZSBhbmd1bGFyIG1hdGVyaWFsIE1hdERpYWxvZ0NvbmZpZy4KICAgKgogICAqIEByZXR1cm5zIHtNYXREaWFsb1JlZn0gICAgVGhlIHJlZmVyZW5jZSB0byB0aGUgZGlhbG9nLgogICAqLwogIG9wZW46IGZ1bmN0aW9uIG9wZW4oY29tcG9uZW50LCBjb25maWcpIHsKICAgIHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb21wb25lbnQsIGNvbmZpZyk7CiAgfSwKCiAgLyoqCiAgICogV3JhcHBlciBmdW5jdGlvbiBvdmVyIHRoZSBjbG9zZUFsbCgpIG1ldGhvZCBpbiBNYXREaWFsb2cuCiAgICogQ2xvc2VzIGFsbCBvZiB0aGUgY3VycmVudGx5LW9wZW4gZGlhbG9ncy4KICAgKi8KICBjbG9zZUFsbDogZnVuY3Rpb24gY2xvc2VBbGwoKSB7CiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xvc2VBbGwoKTsKICB9LAoKICAvKioKICAgKiBPcGVucyBhIGNvbmZpcm0gZGlhbG9nIHdpdGggdGhlIHByb3ZpZGVkIGNvbmZpZy4KICAgKgogICAqIEBwYXJhbSBjb25maWcgICAgIElDb25maXJtQ29uZmlnIHsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU/OiBzdHJpbmc7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ1JlZj86IE1hdERpYWxvUmVmOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmPzogVmlld0NvbnRhaW5lclJlZjsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlPzogYm9vbGVhbjsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0QnV0dG9uPzogc3RyaW5nOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRCdXR0b25Db2xvcj86IHN0cmluZzsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uPzogc3RyaW5nOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25Db2xvcj86IHN0cmluZzsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAqCiAgICogQHJldHVybnMge01hdERpYWxvUmVmfSAgICBUaGUgcmVmZXJlbmNlIHRvIHRoZSBkaWFsb2cuCiAgICovCiAgb3BlbkNvbmZpcm06IGZ1bmN0aW9uIG9wZW5Db25maXJtKGNvbmZpZykgewogICAgdmFyIGRpYWxvZ0NvbmZpZyA9IGNyZWF0ZUNvbmZpZyhjb25maWcpOwogICAgdmFyIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKEZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7CiAgICB2YXIgY29uZmlybURpYWxvZ0NvbXBvbmVudCA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZTsKICAgIGNvbmZpcm1EaWFsb2dDb21wb25lbnQuZGlhbG9nUmVmID0gZGlhbG9nUmVmOwoKICAgIGlmIChjb25maWcudGl0bGUpIHsKICAgICAgY29uZmlybURpYWxvZ0NvbXBvbmVudC50aXRsZSA9IGNvbmZpZy50aXRsZTsKICAgIH0KCiAgICBpZiAoY29uZmlnLm1lc3NhZ2UpIHsKICAgICAgY29uZmlybURpYWxvZ0NvbXBvbmVudC5tZXNzYWdlID0gY29uZmlnLm1lc3NhZ2U7CiAgICB9CgogICAgaWYgKGNvbmZpZy5hY2NlcHRCdXR0b24pIHsKICAgICAgY29uZmlybURpYWxvZ0NvbXBvbmVudC5hY2NlcHRCdXR0b24gPSBjb25maWcuYWNjZXB0QnV0dG9uOwogICAgfQoKICAgIGlmIChjb25maWcuYWNjZXB0QnV0dG9uQ29sb3IpIHsKICAgICAgY29uZmlybURpYWxvZ0NvbXBvbmVudC5hY2NlcHRCdXR0b25Db2xvciA9IGNvbmZpZy5hY2NlcHRCdXR0b25Db2xvcjsKICAgIH0KCiAgICBpZiAoY29uZmlnLmNhbmNlbEJ1dHRvbikgewogICAgICBjb25maXJtRGlhbG9nQ29tcG9uZW50LmNhbmNlbEJ1dHRvbiA9IGNvbmZpZy5jYW5jZWxCdXR0b247CiAgICB9CgogICAgaWYgKGNvbmZpZy5jYW5jZWxCdXR0b25Db2xvcikgewogICAgICBjb25maXJtRGlhbG9nQ29tcG9uZW50LmNhbmNlbEJ1dHRvbkNvbG9yID0gY29uZmlnLmNhbmNlbEJ1dHRvbkNvbG9yOwogICAgfQoKICAgIHJldHVybiBkaWFsb2dSZWY7CiAgfQp9OwpGZHNEaWFsb2dTZXJ2aWNlLnBhcmFtZXRlcnMgPSBbTWF0RGlhbG9nXTsKZXhwb3J0IHsgSURpYWxvZ0NvbmZpZywgSUNvbmZpcm1Db25maWcsIEZkc0RpYWxvZ1NlcnZpY2UgfTs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/3799266003a8627bbc739c8e711aeb49.json b/.cache-loader-coverage/3799266003a8627bbc739c8e711aeb49.json
new file mode 100644
index 0000000..05b4fd8
--- /dev/null
+++ b/.cache-loader-coverage/3799266003a8627bbc739c8e711aeb49.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js","mtime":1563469805289},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIGNvdl8yN2JwMHdubDVrID0gZnVuY3Rpb24gKCkgewogIHZhciBwYXRoID0gIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9kaWFsb2dzL2Zkcy1kaWFsb2cuY29tcG9uZW50LmpzIjsKICB2YXIgaGFzaCA9ICJhNDQ4YWVmNzJmMTI1MzYyM2ZhNDQ2ZDY5YjU0NGFiYzZmMjU4ZWIyIjsKICB2YXIgZ2xvYmFsID0gbmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7CiAgdmFyIGdjdiA9ICJfX2NvdmVyYWdlX18iOwogIHZhciBjb3ZlcmFnZURhdGEgPSB7CiAgICBwYXRoOiAiL1VzZXJzL2phc2xhbi9EZXZlbG9wbWVudC9uaWZpLWZkcy9wbGF0Zm9ybS9jb3JlL2RpYWxvZ3MvZmRzLWRpYWxvZy5jb21wb25lbnQuanMiLAogICAgc3RhdGVtZW50TWFwOiB7CiAgICAgICIwIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAyNywKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAyOSwKICAgICAgICAgIGNvbHVtbjogMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDMxLAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDMzLAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiMiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMzgsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDAsCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA0MiwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA0NCwKICAgICAgICAgIGNvbHVtbjogMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjQiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDQ5LAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDUxLAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiNSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNTMsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNTUsCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI2IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA2MywKICAgICAgICAgIGNvbHVtbjogNAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA2MywKICAgICAgICAgIGNvbHVtbjogMjYKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI3IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA2NCwKICAgICAgICAgIGNvbHVtbjogNAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA2NCwKICAgICAgICAgIGNvbHVtbjogMjgKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI4IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA2NSwKICAgICAgICAgIGNvbHVtbjogNAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA2NSwKICAgICAgICAgIGNvbHVtbjogMjgKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI5IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA2OCwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA4NSwKICAgICAgICAgIGNvbHVtbjogMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEwIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA3NSwKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA3NywKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjExIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA3NiwKICAgICAgICAgIGNvbHVtbjogMTIKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNzYsCiAgICAgICAgICBjb2x1bW46IDg2CiAgICAgICAgfQogICAgICB9LAogICAgICAiMTIiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDc4LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDgwLAogICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgfQogICAgICB9LAogICAgICAiMTMiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDc5LAogICAgICAgICAgY29sdW1uOiAxMgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA3OSwKICAgICAgICAgIGNvbHVtbjogODgKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxNCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogODEsCiAgICAgICAgICBjb2x1bW46IDgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogODMsCiAgICAgICAgICBjb2x1bW46IDkKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxNSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogODIsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDgyLAogICAgICAgICAgY29sdW1uOiA4OAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjE2IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA4NywKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA5NywKICAgICAgICAgIGNvbHVtbjogMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjE3IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA5OSwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA5OSwKICAgICAgICAgIGNvbHVtbjogMzUKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmbk1hcDogewogICAgICAiMCI6IHsKICAgICAgICBuYW1lOiAiRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDI0LAogICAgICAgICAgICBjb2x1bW46IDE2CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDI0LAogICAgICAgICAgICBjb2x1bW46IDM5CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDI0LAogICAgICAgICAgICBjb2x1bW46IDQyCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDI1LAogICAgICAgICAgICBjb2x1bW46IDEKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDI0CiAgICAgIH0sCiAgICAgICIxIjogewogICAgICAgIG5hbWU6ICJGZHNEaWFsb2dDb250ZW50RGlyZWN0aXZlIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAzNSwKICAgICAgICAgICAgY29sdW1uOiAxNgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAzNSwKICAgICAgICAgICAgY29sdW1uOiA0MQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAzNSwKICAgICAgICAgICAgY29sdW1uOiA0NAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAzNiwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiAzNQogICAgICB9LAogICAgICAiMiI6IHsKICAgICAgICBuYW1lOiAiRmRzRGlhbG9nQWN0aW9uc0RpcmVjdGl2ZSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNDYsCiAgICAgICAgICAgIGNvbHVtbjogMTYKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNDYsCiAgICAgICAgICAgIGNvbHVtbjogNDEKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNDYsCiAgICAgICAgICAgIGNvbHVtbjogNDQKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNDcsCiAgICAgICAgICAgIGNvbHVtbjogMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogNDYKICAgICAgfSwKICAgICAgIjMiOiB7CiAgICAgICAgbmFtZTogIkZkc0RpYWxvZ0NvbXBvbmVudCIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNjIsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA2MiwKICAgICAgICAgICAgY29sdW1uOiAyNwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA2MiwKICAgICAgICAgICAgY29sdW1uOiAzMAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA2NiwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiA2MgogICAgICB9LAogICAgICAiNCI6IHsKICAgICAgICBuYW1lOiAiKGFub255bW91c180KSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzQsCiAgICAgICAgICAgIGNvbHVtbjogMjQKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNzQsCiAgICAgICAgICAgIGNvbHVtbjogMjUKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzQsCiAgICAgICAgICAgIGNvbHVtbjogMzYKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogODQsCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogNzQKICAgICAgfQogICAgfSwKICAgIGJyYW5jaE1hcDogewogICAgICAiMCI6IHsKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDc1LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNzcsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdHlwZTogImlmIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA3NSwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDc3LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA3NSwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDc3LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9XSwKICAgICAgICBsaW5lOiA3NQogICAgICB9LAogICAgICAiMSI6IHsKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDc4LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogODAsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdHlwZTogImlmIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA3OCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDgwLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA3OCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDgwLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9XSwKICAgICAgICBsaW5lOiA3OAogICAgICB9LAogICAgICAiMiI6IHsKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDgxLAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogODMsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdHlwZTogImlmIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA4MSwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDgzLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA4MSwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDgzLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9XSwKICAgICAgICBsaW5lOiA4MQogICAgICB9CiAgICB9LAogICAgczogewogICAgICAiMCI6IDAsCiAgICAgICIxIjogMCwKICAgICAgIjIiOiAwLAogICAgICAiMyI6IDAsCiAgICAgICI0IjogMCwKICAgICAgIjUiOiAwLAogICAgICAiNiI6IDAsCiAgICAgICI3IjogMCwKICAgICAgIjgiOiAwLAogICAgICAiOSI6IDAsCiAgICAgICIxMCI6IDAsCiAgICAgICIxMSI6IDAsCiAgICAgICIxMiI6IDAsCiAgICAgICIxMyI6IDAsCiAgICAgICIxNCI6IDAsCiAgICAgICIxNSI6IDAsCiAgICAgICIxNiI6IDAsCiAgICAgICIxNyI6IDAKICAgIH0sCiAgICBmOiB7CiAgICAgICIwIjogMCwKICAgICAgIjEiOiAwLAogICAgICAiMiI6IDAsCiAgICAgICIzIjogMCwKICAgICAgIjQiOiAwCiAgICB9LAogICAgYjogewogICAgICAiMCI6IFswLCAwXSwKICAgICAgIjEiOiBbMCwgMF0sCiAgICAgICIyIjogWzAsIDBdCiAgICB9LAogICAgX2NvdmVyYWdlU2NoZW1hOiAiNDNlMjdlMTM4ZWJmOWNmYzU5NjZiMDgyY2Y5YTAyODMwMmVkNDE4NCIsCiAgICBoYXNoOiAiYTQ0OGFlZjcyZjEyNTM2MjNmYTQ0NmQ2OWI1NDRhYmM2ZjI1OGViMiIKICB9OwogIHZhciBjb3ZlcmFnZSA9IGdsb2JhbFtnY3ZdIHx8IChnbG9iYWxbZ2N2XSA9IHt9KTsKCiAgaWYgKGNvdmVyYWdlW3BhdGhdICYmIGNvdmVyYWdlW3BhdGhdLmhhc2ggPT09IGhhc2gpIHsKICAgIHJldHVybiBjb3ZlcmFnZVtwYXRoXTsKICB9CgogIHJldHVybiBjb3ZlcmFnZVtwYXRoXSA9IGNvdmVyYWdlRGF0YTsKfSgpOwoKLyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsKZXhwb3J0IGZ1bmN0aW9uIEZkc0RpYWxvZ1RpdGxlRGlyZWN0aXZlKCkgewogIGNvdl8yN2JwMHdubDVrLmZbMF0rKzsKfQpjb3ZfMjdicDB3bmw1ay5zWzBdKys7CkZkc0RpYWxvZ1RpdGxlRGlyZWN0aXZlLnByb3RvdHlwZSA9IHsKICBjb250c3RydWN0b3I6IEZkc0RpYWxvZ1RpdGxlRGlyZWN0aXZlCn07CmNvdl8yN2JwMHdubDVrLnNbMV0rKzsKRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFt7CiAgdHlwZTogRGlyZWN0aXZlLAogIGFyZ3M6IFt7CiAgICBzZWxlY3RvcjogJ2Zkcy1kaWFsb2ctdGl0bGUnCiAgfV0KfV07CmV4cG9ydCBmdW5jdGlvbiBGZHNEaWFsb2dDb250ZW50RGlyZWN0aXZlKCkgewogIGNvdl8yN2JwMHdubDVrLmZbMV0rKzsKfQpjb3ZfMjdicDB3bmw1ay5zWzJdKys7CkZkc0RpYWxvZ0NvbnRlbnREaXJlY3RpdmUucHJvdG90eXBlID0gewogIGNvbnRzdHJ1Y3RvcjogRmRzRGlhbG9nQ29udGVudERpcmVjdGl2ZQp9Owpjb3ZfMjdicDB3bmw1ay5zWzNdKys7CkZkc0RpYWxvZ0NvbnRlbnREaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFt7CiAgdHlwZTogRGlyZWN0aXZlLAogIGFyZ3M6IFt7CiAgICBzZWxlY3RvcjogJ2Zkcy1kaWFsb2ctY29udGVudCcKICB9XQp9XTsKZXhwb3J0IGZ1bmN0aW9uIEZkc0RpYWxvZ0FjdGlvbnNEaXJlY3RpdmUoKSB7CiAgY292XzI3YnAwd25sNWsuZlsyXSsrOwp9CmNvdl8yN2JwMHdubDVrLnNbNF0rKzsKRmRzRGlhbG9nQWN0aW9uc0RpcmVjdGl2ZS5wcm90b3R5cGUgPSB7CiAgY29udHN0cnVjdG9yOiBGZHNEaWFsb2dBY3Rpb25zRGlyZWN0aXZlCn07CmNvdl8yN2JwMHdubDVrLnNbNV0rKzsKRmRzRGlhbG9nQWN0aW9uc0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW3sKICB0eXBlOiBEaXJlY3RpdmUsCiAgYXJnczogW3sKICAgIHNlbGVjdG9yOiAnZmRzLWRpYWxvZy1hY3Rpb25zJwogIH1dCn1dOwovKioKICogRmRzRGlhbG9nQ29tcG9uZW50IGNvbnN0cnVjdG9yCiAqCiAqIEBjb25zdHJ1Y3RvcgogKi8KCmZ1bmN0aW9uIEZkc0RpYWxvZ0NvbXBvbmVudCgpIHsKICBjb3ZfMjdicDB3bmw1ay5mWzNdKys7CiAgY292XzI3YnAwd25sNWsuc1s2XSsrOwogIHRoaXMuZGlhbG9nVGl0bGUgPSAnJzsKICBjb3ZfMjdicDB3bmw1ay5zWzddKys7CiAgdGhpcy5kaWFsb2dDb250ZW50ID0gJyc7CiAgY292XzI3YnAwd25sNWsuc1s4XSsrOwogIHRoaXMuZGlhbG9nQWN0aW9ucyA9ICcnOwp9Cgpjb3ZfMjdicDB3bmw1ay5zWzldKys7CkZkc0RpYWxvZ0NvbXBvbmVudC5wcm90b3R5cGUgPSB7CiAgY29uc3RydWN0b3I6IEZkc0RpYWxvZ0NvbXBvbmVudCwKCiAgLyoqCiAgICogUmVzcG9uZCBhZnRlciBBbmd1bGFyIHByb2plY3RzIGV4dGVybmFsIGNvbnRlbnQgaW50byB0aGUgY29tcG9uZW50J3Mgdmlldy4KICAgKi8KICBuZ0FmdGVyQ29udGVudEluaXQ6IGZ1bmN0aW9uIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHsKICAgIGNvdl8yN2JwMHdubDVrLmZbNF0rKzsKICAgIGNvdl8yN2JwMHdubDVrLnNbMTBdKys7CgogICAgaWYgKHRoaXMuZGlhbG9nVGl0bGUubGVuZ3RoID4gMSkgewogICAgICBjb3ZfMjdicDB3bmw1ay5iWzBdWzBdKys7CiAgICAgIGNvdl8yN2JwMHdubDVrLnNbMTFdKys7CiAgICAgIHRocm93IG5ldyBFcnJvcignRHVwbGljYXRlIGZkcy1kaWFsb2ctdGl0bGUgY29tcG9uZW50IGF0IGluIGZkcy1kaWFsb2cuJyk7CiAgICB9IGVsc2UgewogICAgICBjb3ZfMjdicDB3bmw1ay5iWzBdWzFdKys7CiAgICB9CgogICAgY292XzI3YnAwd25sNWsuc1sxMl0rKzsKCiAgICBpZiAodGhpcy5kaWFsb2dDb250ZW50Lmxlbmd0aCA+IDEpIHsKICAgICAgY292XzI3YnAwd25sNWsuYlsxXVswXSsrOwogICAgICBjb3ZfMjdicDB3bmw1ay5zWzEzXSsrOwogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBmZHMtZGlhbG9nLWNvbnRlbnQgY29tcG9uZW50IGF0IGluIGZkcy1kaWFsb2cuJyk7CiAgICB9IGVsc2UgewogICAgICBjb3ZfMjdicDB3bmw1ay5iWzFdWzFdKys7CiAgICB9CgogICAgY292XzI3YnAwd25sNWsuc1sxNF0rKzsKCiAgICBpZiAodGhpcy5kaWFsb2dBY3Rpb25zLmxlbmd0aCA+IDEpIHsKICAgICAgY292XzI3YnAwd25sNWsuYlsyXVswXSsrOwogICAgICBjb3ZfMjdicDB3bmw1ay5zWzE1XSsrOwogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBmZHMtZGlhbG9nLWFjdGlvbnMgY29tcG9uZW50IGF0IGluIGZkcy1kaWFsb2cuJyk7CiAgICB9IGVsc2UgewogICAgICBjb3ZfMjdicDB3bmw1ay5iWzJdWzFdKys7CiAgICB9CiAgfQp9Owpjb3ZfMjdicDB3bmw1ay5zWzE2XSsrOwpGZHNEaWFsb2dDb21wb25lbnQuYW5ub3RhdGlvbnMgPSBbbmV3IENvbXBvbmVudCh7CiAgc2VsZWN0b3I6ICdmZHMtZGlhbG9nJywKICB0ZW1wbGF0ZTogcmVxdWlyZSgnLi9mZHMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyksCiAgcXVlcmllczogewogICAgZGlhbG9nVGl0bGU6IG5ldyBDb250ZW50Q2hpbGRyZW4oRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUpLAogICAgZGlhbG9nQ29udGVudDogbmV3IENvbnRlbnRDaGlsZHJlbihGZHNEaWFsb2dDb250ZW50RGlyZWN0aXZlKSwKICAgIGRpYWxvZ0FjdGlvbnM6IG5ldyBDb250ZW50Q2hpbGRyZW4oRmRzRGlhbG9nQWN0aW9uc0RpcmVjdGl2ZSkKICB9Cn0pXTsKY292XzI3YnAwd25sNWsuc1sxN10rKzsKRmRzRGlhbG9nQ29tcG9uZW50LnBhcmFtZXRlcnMgPSBbXTsKZXhwb3J0IHsgRmRzRGlhbG9nQ29tcG9uZW50IH07"}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/3fd1f34d681bd1bc5b575b383522fa37.json b/.cache-loader-coverage/3fd1f34d681bd1bc5b575b383522fa37.json
new file mode 100644
index 0000000..6fe269c
--- /dev/null
+++ b/.cache-loader-coverage/3fd1f34d681bd1bc5b575b383522fa37.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js","mtime":1563469805291},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIGNvdl95azJmd3FkYnMgPSBmdW5jdGlvbiAoKSB7CiAgdmFyIHBhdGggPSAiL1VzZXJzL2phc2xhbi9EZXZlbG9wbWVudC9uaWZpLWZkcy9wbGF0Zm9ybS9jb3JlL2RpYWxvZ3Mvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UuanMiOwogIHZhciBoYXNoID0gIjViODEzMDVhZTI2MTU5MzYzNTg1YzRhYWU2NjY2MDFkYzExNmJhZWUiOwogIHZhciBnbG9iYWwgPSBuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsKICB2YXIgZ2N2ID0gIl9fY292ZXJhZ2VfXyI7CiAgdmFyIGNvdmVyYWdlRGF0YSA9IHsKICAgIHBhdGg6ICIvVXNlcnMvamFzbGFuL0RldmVsb3BtZW50L25pZmktZmRzL3BsYXRmb3JtL2NvcmUvZGlhbG9ncy9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZS5qcyIsCiAgICBzdGF0ZW1lbnRNYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI2LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI2LAogICAgICAgICAgY29sdW1uOiAyMAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI3LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI3LAogICAgICAgICAgY29sdW1uOiAyMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjIiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI4LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI4LAogICAgICAgICAgY29sdW1uOiAzMQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjMiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI5LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI5LAogICAgICAgICAgY29sdW1uOiAzOAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjQiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDMwLAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDMwLAogICAgICAgICAgY29sdW1uOiAyOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjUiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDMzLAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDM1LAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiNiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMzcsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMzcsCiAgICAgICAgICBjb2x1bW46IDQxCiAgICAgICAgfQogICAgICB9LAogICAgICAiNyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDAsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDAsCiAgICAgICAgICBjb2x1bW46IDMzCiAgICAgICAgfQogICAgICB9LAogICAgICAiOCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDEsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDEsCiAgICAgICAgICBjb2x1bW46IDQzCiAgICAgICAgfQogICAgICB9LAogICAgICAiOSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDIsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDIsCiAgICAgICAgICBjb2x1bW46IDMzCiAgICAgICAgfQogICAgICB9LAogICAgICAiMTAiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDQzLAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDQzLAogICAgICAgICAgY29sdW1uOiA0NQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjExIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA0NiwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA0OCwKICAgICAgICAgIGNvbHVtbjogMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEyIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA1MCwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA1MCwKICAgICAgICAgIGNvbHVtbjogNDAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxMyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNTMsCiAgICAgICAgICBjb2x1bW46IDI1CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDUzLAogICAgICAgICAgY29sdW1uOiA0NQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjE0IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA1NCwKICAgICAgICAgIGNvbHVtbjogNAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA1NCwKICAgICAgICAgIGNvbHVtbjogNjAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxNSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNTUsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNTUsCiAgICAgICAgICBjb2x1bW46IDUyCiAgICAgICAgfQogICAgICB9LAogICAgICAiMTYiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDU2LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDU2LAogICAgICAgICAgY29sdW1uOiAyNAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjE3IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA2NiwKICAgICAgICAgIGNvbHVtbjogNAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA2NiwKICAgICAgICAgIGNvbHVtbjogMzUKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxOCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNjksCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMTM1LAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiMTkiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDgyLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDgyLAogICAgICAgICAgY29sdW1uOiA1OAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjIwIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA5MCwKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA5MCwKICAgICAgICAgIGNvbHVtbjogMzgKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyMSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTExLAogICAgICAgICAgY29sdW1uOiAyOQogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxMTEsCiAgICAgICAgICBjb2x1bW46IDQ5CiAgICAgICAgfQogICAgICB9LAogICAgICAiMjIiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDExMiwKICAgICAgICAgIGNvbHVtbjogMjYKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMTEyLAogICAgICAgICAgY29sdW1uOiA5MAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjIzIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMTMsCiAgICAgICAgICBjb2x1bW46IDM5CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExMywKICAgICAgICAgIGNvbHVtbjogNjYKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyNCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTE0LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExNCwKICAgICAgICAgIGNvbHVtbjogNTMKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyNSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTE1LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExNywKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjI2IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMTYsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExNiwKICAgICAgICAgIGNvbHVtbjogNTYKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyNyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTE4LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyMCwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjI4IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMTksCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExOSwKICAgICAgICAgIGNvbHVtbjogNjAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyOSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTIxLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyMywKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjMwIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMjIsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyMiwKICAgICAgICAgIGNvbHVtbjogNzAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzMSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTI0LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyNiwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjMyIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMjUsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyNSwKICAgICAgICAgIGNvbHVtbjogODAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzMyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTI3LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyOSwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjM0IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMjgsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyOCwKICAgICAgICAgIGNvbHVtbjogNzAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzNSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTMwLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEzMiwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjM2IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMzEsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEzMSwKICAgICAgICAgIGNvbHVtbjogODAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzNyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTMzLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEzMywKICAgICAgICAgIGNvbHVtbjogMjUKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzOCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTM3LAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEzNywKICAgICAgICAgIGNvbHVtbjogNDIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmbk1hcDogewogICAgICAiMCI6IHsKICAgICAgICBuYW1lOiAiSURpYWxvZ0NvbmZpZyIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMjUsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAyNSwKICAgICAgICAgICAgY29sdW1uOiAyMgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAyNSwKICAgICAgICAgICAgY29sdW1uOiAyNQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAzMSwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiAyNQogICAgICB9LAogICAgICAiMSI6IHsKICAgICAgICBuYW1lOiAiSUNvbmZpcm1Db25maWciLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDM5LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMzksCiAgICAgICAgICAgIGNvbHVtbjogMjMKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMzksCiAgICAgICAgICAgIGNvbHVtbjogMjYKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNDQsCiAgICAgICAgICAgIGNvbHVtbjogMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogMzkKICAgICAgfSwKICAgICAgIjIiOiB7CiAgICAgICAgbmFtZTogImNyZWF0ZUNvbmZpZyIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNTIsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA1MiwKICAgICAgICAgICAgY29sdW1uOiAyMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA1MiwKICAgICAgICAgICAgY29sdW1uOiAzMAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA1NywKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiA1MgogICAgICB9LAogICAgICAiMyI6IHsKICAgICAgICBuYW1lOiAiRmRzRGlhbG9nU2VydmljZSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNjUsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA2NSwKICAgICAgICAgICAgY29sdW1uOiAyNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA2NSwKICAgICAgICAgICAgY29sdW1uOiAzNwogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA2NywKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiA2NQogICAgICB9LAogICAgICAiNCI6IHsKICAgICAgICBuYW1lOiAiKGFub255bW91c180KSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogODEsCiAgICAgICAgICAgIGNvbHVtbjogMTAKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogODEsCiAgICAgICAgICAgIGNvbHVtbjogMTEKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogODEsCiAgICAgICAgICAgIGNvbHVtbjogMzkKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogODMsCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogODEKICAgICAgfSwKICAgICAgIjUiOiB7CiAgICAgICAgbmFtZTogIihhbm9ueW1vdXNfNSkiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDg5LAogICAgICAgICAgICBjb2x1bW46IDE0CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDg5LAogICAgICAgICAgICBjb2x1bW46IDE1CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDg5LAogICAgICAgICAgICBjb2x1bW46IDI2CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDkxLAogICAgICAgICAgICBjb2x1bW46IDUKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDg5CiAgICAgIH0sCiAgICAgICI2IjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzYpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMTAsCiAgICAgICAgICAgIGNvbHVtbjogMTcKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTEwLAogICAgICAgICAgICBjb2x1bW46IDE4CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDExMCwKICAgICAgICAgICAgY29sdW1uOiAzNQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMzQsCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogMTEwCiAgICAgIH0KICAgIH0sCiAgICBicmFuY2hNYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMTUsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMTcsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdHlwZTogImlmIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMTUsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMTcsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDExNSwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDExNywKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogMTE1CiAgICAgIH0sCiAgICAgICIxIjogewogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTE4LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTIwLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTE4LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTIwLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMTgsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMjAsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH1dLAogICAgICAgIGxpbmU6IDExOAogICAgICB9LAogICAgICAiMiI6IHsKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEyMSwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDEyMywKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAiaWYiLAogICAgICAgIGxvY2F0aW9uczogW3sKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEyMSwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDEyMywKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTIxLAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTIzLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9XSwKICAgICAgICBsaW5lOiAxMjEKICAgICAgfSwKICAgICAgIjMiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMjQsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMjYsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdHlwZTogImlmIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMjQsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMjYsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEyNCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDEyNiwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogMTI0CiAgICAgIH0sCiAgICAgICI0IjogewogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTI3LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTI5LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTI3LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTI5LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMjcsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMjksCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH1dLAogICAgICAgIGxpbmU6IDEyNwogICAgICB9LAogICAgICAiNSI6IHsKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEzMCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDEzMiwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAiaWYiLAogICAgICAgIGxvY2F0aW9uczogW3sKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEzMCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDEzMiwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTMwLAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTMyLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9XSwKICAgICAgICBsaW5lOiAxMzAKICAgICAgfQogICAgfSwKICAgIHM6IHsKICAgICAgIjAiOiAwLAogICAgICAiMSI6IDAsCiAgICAgICIyIjogMCwKICAgICAgIjMiOiAwLAogICAgICAiNCI6IDAsCiAgICAgICI1IjogMCwKICAgICAgIjYiOiAwLAogICAgICAiNyI6IDAsCiAgICAgICI4IjogMCwKICAgICAgIjkiOiAwLAogICAgICAiMTAiOiAwLAogICAgICAiMTEiOiAwLAogICAgICAiMTIiOiAwLAogICAgICAiMTMiOiAwLAogICAgICAiMTQiOiAwLAogICAgICAiMTUiOiAwLAogICAgICAiMTYiOiAwLAogICAgICAiMTciOiAwLAogICAgICAiMTgiOiAwLAogICAgICAiMTkiOiAwLAogICAgICAiMjAiOiAwLAogICAgICAiMjEiOiAwLAogICAgICAiMjIiOiAwLAogICAgICAiMjMiOiAwLAogICAgICAiMjQiOiAwLAogICAgICAiMjUiOiAwLAogICAgICAiMjYiOiAwLAogICAgICAiMjciOiAwLAogICAgICAiMjgiOiAwLAogICAgICAiMjkiOiAwLAogICAgICAiMzAiOiAwLAogICAgICAiMzEiOiAwLAogICAgICAiMzIiOiAwLAogICAgICAiMzMiOiAwLAogICAgICAiMzQiOiAwLAogICAgICAiMzUiOiAwLAogICAgICAiMzYiOiAwLAogICAgICAiMzciOiAwLAogICAgICAiMzgiOiAwCiAgICB9LAogICAgZjogewogICAgICAiMCI6IDAsCiAgICAgICIxIjogMCwKICAgICAgIjIiOiAwLAogICAgICAiMyI6IDAsCiAgICAgICI0IjogMCwKICAgICAgIjUiOiAwLAogICAgICAiNiI6IDAKICAgIH0sCiAgICBiOiB7CiAgICAgICIwIjogWzAsIDBdLAogICAgICAiMSI6IFswLCAwXSwKICAgICAgIjIiOiBbMCwgMF0sCiAgICAgICIzIjogWzAsIDBdLAogICAgICAiNCI6IFswLCAwXSwKICAgICAgIjUiOiBbMCwgMF0KICAgIH0sCiAgICBfY292ZXJhZ2VTY2hlbWE6ICI0M2UyN2UxMzhlYmY5Y2ZjNTk2NmIwODJjZjlhMDI4MzAyZWQ0MTg0IiwKICAgIGhhc2g6ICI1YjgxMzA1YWUyNjE1OTM2MzU4NWM0YWFlNjY2NjAxZGMxMTZiYWVlIgogIH07CiAgdmFyIGNvdmVyYWdlID0gZ2xvYmFsW2djdl0gfHwgKGdsb2JhbFtnY3ZdID0ge30pOwoKICBpZiAoY292ZXJhZ2VbcGF0aF0gJiYgY292ZXJhZ2VbcGF0aF0uaGFzaCA9PT0gaGFzaCkgewogICAgcmV0dXJuIGNvdmVyYWdlW3BhdGhdOwogIH0KCiAgcmV0dXJuIGNvdmVyYWdlW3BhdGhdID0gY292ZXJhZ2VEYXRhOwp9KCk7CgovKgogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JzsKaW1wb3J0IHsgTWF0RGlhbG9nQ29uZmlnLCBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7CmltcG9ydCB7IEZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb25maXJtLWRpYWxvZy9jb25maXJtLWRpYWxvZy5jb21wb25lbnQnOwoKZnVuY3Rpb24gSURpYWxvZ0NvbmZpZygpIHsKICBjb3ZfeWsyZndxZGJzLmZbMF0rKzsKICBjb3ZfeWsyZndxZGJzLnNbMF0rKzsKICB0aGlzLnRpdGxlID0gJyc7CiAgY292X3lrMmZ3cWRicy5zWzFdKys7CiAgdGhpcy5tZXNzYWdlID0gJyc7CiAgY292X3lrMmZ3cWRicy5zWzJdKys7CiAgdGhpcy5kaWFsb2dSZWYgPSB1bmRlZmluZWQ7CiAgY292X3lrMmZ3cWRicy5zWzNdKys7CiAgdGhpcy52aWV3Q29udGFpbmVyUmVmID0gdW5kZWZpbmVkOwogIGNvdl95azJmd3FkYnMuc1s0XSsrOwogIHRoaXMuZGlzYWJsZUNsb3NlID0gdHJ1ZTsKfQoKY292X3lrMmZ3cWRicy5zWzVdKys7CklEaWFsb2dDb25maWcucHJvdG90eXBlID0gewogIGNvbnRzdHJ1Y3RvcjogSURpYWxvZ0NvbmZpZwp9Owpjb3ZfeWsyZndxZGJzLnNbNl0rKzsKJC5leHRlbmQoSURpYWxvZ0NvbmZpZywgTWF0RGlhbG9nQ29uZmlnKTsKCmZ1bmN0aW9uIElDb25maXJtQ29uZmlnKCkgewogIGNvdl95azJmd3FkYnMuZlsxXSsrOwogIGNvdl95azJmd3FkYnMuc1s3XSsrOwogIHRoaXMuYWNjZXB0QnV0dG9uID0gJ0FDQ0VQVCc7CiAgY292X3lrMmZ3cWRicy5zWzhdKys7CiAgdGhpcy5hY2NlcHRCdXR0b25Db2xvciA9ICdmZHMtcHJpbWFyeSc7CiAgY292X3lrMmZ3cWRicy5zWzldKys7CiAgdGhpcy5jYW5jZWxCdXR0b24gPSAnQ0FOQ0VMJzsKICBjb3ZfeWsyZndxZGJzLnNbMTBdKys7CiAgdGhpcy5jYW5jZWxCdXR0b25Db2xvciA9ICdmZHMtc2Vjb25kYXJ5JzsKfQoKY292X3lrMmZ3cWRicy5zWzExXSsrOwpJQ29uZmlybUNvbmZpZy5wcm90b3R5cGUgPSB7CiAgY29udHN0cnVjdG9yOiBJQ29uZmlybUNvbmZpZwp9Owpjb3ZfeWsyZndxZGJzLnNbMTJdKys7CiQuZXh0ZW5kKElDb25maXJtQ29uZmlnLCBJRGlhbG9nQ29uZmlnKTsKCmZ1bmN0aW9uIGNyZWF0ZUNvbmZpZyhjb25maWcpIHsKICBjb3ZfeWsyZndxZGJzLmZbMl0rKzsKICB2YXIgZGlhbG9nQ29uZmlnID0gKGNvdl95azJmd3FkYnMuc1sxM10rKywgbmV3IElDb25maXJtQ29uZmlnKCkpOwogIGNvdl95azJmd3FkYnMuc1sxNF0rKzsKICBkaWFsb2dDb25maWcudmlld0NvbnRhaW5lclJlZiA9IGNvbmZpZy52aWV3Q29udGFpbmVyUmVmOwogIGNvdl95azJmd3FkYnMuc1sxNV0rKzsKICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gY29uZmlnLmRpc2FibGVDbG9zZTsKICBjb3ZfeWsyZndxZGJzLnNbMTZdKys7CiAgcmV0dXJuIGRpYWxvZ0NvbmZpZzsKfQovKioKICogRmRzRGlhbG9nU2VydmljZSBjb25zdHJ1Y3Rvci4KICoKICogQHBhcmFtIE1hdERpYWxvZyAgICAgIFRoZSBhbmd1bGFyIG1hdGVyaWFsIE1hdERpYWxvZy4KICogQGNvbnN0cnVjdG9yCiAqLwoKCmZ1bmN0aW9uIEZkc0RpYWxvZ1NlcnZpY2UoTWF0RGlhbG9nKSB7CiAgY292X3lrMmZ3cWRicy5mWzNdKys7CiAgY292X3lrMmZ3cWRicy5zWzE3XSsrOwogIHRoaXMuZGlhbG9nU2VydmljZSA9IE1hdERpYWxvZzsKfQoKY292X3lrMmZ3cWRicy5zWzE4XSsrOwpGZHNEaWFsb2dTZXJ2aWNlLnByb3RvdHlwZSA9IHsKICBjb250c3RydWN0b3I6IEZkc0RpYWxvZ1NlcnZpY2UsCgogIC8qKgogICAqIFdyYXBwZXIgZnVuY3Rpb24gb3ZlciB0aGUgb3BlbigpIG1ldGhvZCBpbiBNYXREaWFsb2cuCiAgICogT3BlbnMgYSBtb2RhbCBkaWFsb2cgY29udGFpbmluZyB0aGUgZ2l2ZW4gY29tcG9uZW50LgogICAqCiAgICogQHBhcmFtIGNvbXBvbmVudCAgICAgVGhlIGFuZ3VsYXIgQ29tcG9uZW50VHlwZTxUPi4KICAgKiBAcGFyYW0gY29uZmlnICAgICAgICBUaGUgYW5ndWxhciBtYXRlcmlhbCBNYXREaWFsb2dDb25maWcuCiAgICoKICAgKiBAcmV0dXJucyB7TWF0RGlhbG9SZWZ9ICAgIFRoZSByZWZlcmVuY2UgdG8gdGhlIGRpYWxvZy4KICAgKi8KICBvcGVuOiBmdW5jdGlvbiBvcGVuKGNvbXBvbmVudCwgY29uZmlnKSB7CiAgICBjb3ZfeWsyZndxZGJzLmZbNF0rKzsKICAgIGNvdl95azJmd3FkYnMuc1sxOV0rKzsKICAgIHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb21wb25lbnQsIGNvbmZpZyk7CiAgfSwKCiAgLyoqCiAgICogV3JhcHBlciBmdW5jdGlvbiBvdmVyIHRoZSBjbG9zZUFsbCgpIG1ldGhvZCBpbiBNYXREaWFsb2cuCiAgICogQ2xvc2VzIGFsbCBvZiB0aGUgY3VycmVudGx5LW9wZW4gZGlhbG9ncy4KICAgKi8KICBjbG9zZUFsbDogZnVuY3Rpb24gY2xvc2VBbGwoKSB7CiAgICBjb3ZfeWsyZndxZGJzLmZbNV0rKzsKICAgIGNvdl95azJmd3FkYnMuc1syMF0rKzsKICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbG9zZUFsbCgpOwogIH0sCgogIC8qKgogICAqIE9wZW5zIGEgY29uZmlybSBkaWFsb2cgd2l0aCB0aGUgcHJvdmlkZWQgY29uZmlnLgogICAqCiAgICogQHBhcmFtIGNvbmZpZyAgICAgSUNvbmZpcm1Db25maWcgewogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT86IHN0cmluZzsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nUmVmPzogTWF0RGlhbG9SZWY7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY/OiBWaWV3Q29udGFpbmVyUmVmOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U/OiBib29sZWFuOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRCdXR0b24/OiBzdHJpbmc7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdEJ1dHRvbkNvbG9yPzogc3RyaW5nOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b24/OiBzdHJpbmc7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yPzogc3RyaW5nOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICoKICAgKiBAcmV0dXJucyB7TWF0RGlhbG9SZWZ9ICAgIFRoZSByZWZlcmVuY2UgdG8gdGhlIGRpYWxvZy4KICAgKi8KICBvcGVuQ29uZmlybTogZnVuY3Rpb24gb3BlbkNvbmZpcm0oY29uZmlnKSB7CiAgICBjb3ZfeWsyZndxZGJzLmZbNl0rKzsKICAgIHZhciBkaWFsb2dDb25maWcgPSAoY292X3lrMmZ3cWRicy5zWzIxXSsrLCBjcmVhdGVDb25maWcoY29uZmlnKSk7CiAgICB2YXIgZGlhbG9nUmVmID0gKGNvdl95azJmd3FkYnMuc1syMl0rKywgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oRmRzQ29uZmlybURpYWxvZ0NvbXBvbmVudCwgZGlhbG9nQ29uZmlnKSk7CiAgICB2YXIgY29uZmlybURpYWxvZ0NvbXBvbmVudCA9IChjb3ZfeWsyZndxZGJzLnNbMjNdKyssIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZSk7CiAgICBjb3ZfeWsyZndxZGJzLnNbMjRdKys7CiAgICBjb25maXJtRGlhbG9nQ29tcG9uZW50LmRpYWxvZ1JlZiA9IGRpYWxvZ1JlZjsKICAgIGNvdl95azJmd3FkYnMuc1syNV0rKzsKCiAgICBpZiAoY29uZmlnLnRpdGxlKSB7CiAgICAgIGNvdl95azJmd3FkYnMuYlswXVswXSsrOwogICAgICBjb3ZfeWsyZndxZGJzLnNbMjZdKys7CiAgICAgIGNvbmZpcm1EaWFsb2dDb21wb25lbnQudGl0bGUgPSBjb25maWcudGl0bGU7CiAgICB9IGVsc2UgewogICAgICBjb3ZfeWsyZndxZGJzLmJbMF1bMV0rKzsKICAgIH0KCiAgICBjb3ZfeWsyZndxZGJzLnNbMjddKys7CgogICAgaWYgKGNvbmZpZy5tZXNzYWdlKSB7CiAgICAgIGNvdl95azJmd3FkYnMuYlsxXVswXSsrOwogICAgICBjb3ZfeWsyZndxZGJzLnNbMjhdKys7CiAgICAgIGNvbmZpcm1EaWFsb2dDb21wb25lbnQubWVzc2FnZSA9IGNvbmZpZy5tZXNzYWdlOwogICAgfSBlbHNlIHsKICAgICAgY292X3lrMmZ3cWRicy5iWzFdWzFdKys7CiAgICB9CgogICAgY292X3lrMmZ3cWRicy5zWzI5XSsrOwoKICAgIGlmIChjb25maWcuYWNjZXB0QnV0dG9uKSB7CiAgICAgIGNvdl95azJmd3FkYnMuYlsyXVswXSsrOwogICAgICBjb3ZfeWsyZndxZGJzLnNbMzBdKys7CiAgICAgIGNvbmZpcm1EaWFsb2dDb21wb25lbnQuYWNjZXB0QnV0dG9uID0gY29uZmlnLmFjY2VwdEJ1dHRvbjsKICAgIH0gZWxzZSB7CiAgICAgIGNvdl95azJmd3FkYnMuYlsyXVsxXSsrOwogICAgfQoKICAgIGNvdl95azJmd3FkYnMuc1szMV0rKzsKCiAgICBpZiAoY29uZmlnLmFjY2VwdEJ1dHRvbkNvbG9yKSB7CiAgICAgIGNvdl95azJmd3FkYnMuYlszXVswXSsrOwogICAgICBjb3ZfeWsyZndxZGJzLnNbMzJdKys7CiAgICAgIGNvbmZpcm1EaWFsb2dDb21wb25lbnQuYWNjZXB0QnV0dG9uQ29sb3IgPSBjb25maWcuYWNjZXB0QnV0dG9uQ29sb3I7CiAgICB9IGVsc2UgewogICAgICBjb3ZfeWsyZndxZGJzLmJbM11bMV0rKzsKICAgIH0KCiAgICBjb3ZfeWsyZndxZGJzLnNbMzNdKys7CgogICAgaWYgKGNvbmZpZy5jYW5jZWxCdXR0b24pIHsKICAgICAgY292X3lrMmZ3cWRicy5iWzRdWzBdKys7CiAgICAgIGNvdl95azJmd3FkYnMuc1szNF0rKzsKICAgICAgY29uZmlybURpYWxvZ0NvbXBvbmVudC5jYW5jZWxCdXR0b24gPSBjb25maWcuY2FuY2VsQnV0dG9uOwogICAgfSBlbHNlIHsKICAgICAgY292X3lrMmZ3cWRicy5iWzRdWzFdKys7CiAgICB9CgogICAgY292X3lrMmZ3cWRicy5zWzM1XSsrOwoKICAgIGlmIChjb25maWcuY2FuY2VsQnV0dG9uQ29sb3IpIHsKICAgICAgY292X3lrMmZ3cWRicy5iWzVdWzBdKys7CiAgICAgIGNvdl95azJmd3FkYnMuc1szNl0rKzsKICAgICAgY29uZmlybURpYWxvZ0NvbXBvbmVudC5jYW5jZWxCdXR0b25Db2xvciA9IGNvbmZpZy5jYW5jZWxCdXR0b25Db2xvcjsKICAgIH0gZWxzZSB7CiAgICAgIGNvdl95azJmd3FkYnMuYls1XVsxXSsrOwogICAgfQoKICAgIGNvdl95azJmd3FkYnMuc1szN10rKzsKICAgIHJldHVybiBkaWFsb2dSZWY7CiAgfQp9Owpjb3ZfeWsyZndxZGJzLnNbMzhdKys7CkZkc0RpYWxvZ1NlcnZpY2UucGFyYW1ldGVycyA9IFtNYXREaWFsb2ddOwpleHBvcnQgeyBJRGlhbG9nQ29uZmlnLCBJQ29uZmlybUNvbmZpZywgRmRzRGlhbG9nU2VydmljZSB9Ow=="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/407ae725be38dbb4e88cc5210aeef013.json b/.cache-loader-coverage/407ae725be38dbb4e88cc5210aeef013.json
new file mode 100644
index 0000000..6efc852
--- /dev/null
+++ b/.cache-loader-coverage/407ae725be38dbb4e88cc5210aeef013.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/webapp/fds.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/fds.module.js","mtime":1563469805298},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmltcG9ydCB7IEZkc0NvcmVNb2R1bGUgfSBmcm9tICdAbmlmaS1mZHMvY29yZSc7CmltcG9ydCBGZHNSb3V0ZXMgZnJvbSAnd2ViYXBwL2Zkcy5yb3V0ZXMuanMnOwppbXBvcnQgRmRzIGZyb20gJ3dlYmFwcC9mZHMuanMnOwppbXBvcnQgRmRzRGVtbyBmcm9tICd3ZWJhcHAvY29tcG9uZW50cy9mbG93LWRlc2lnbi1zeXN0ZW0vZmRzLWRlbW8uanMnOwppbXBvcnQgRmRzRGVtb0RpYWxvZyBmcm9tICd3ZWJhcHAvY29tcG9uZW50cy9mbG93LWRlc2lnbi1zeXN0ZW0vZGlhbG9ncy9kZW1vL2Zkcy1kZW1vLWRpYWxvZy5qcyc7CmltcG9ydCBGZHNTZXJ2aWNlIGZyb20gJ3dlYmFwcC9zZXJ2aWNlcy9mZHMuc2VydmljZS5qcyc7CgpmdW5jdGlvbiBGZHNNb2R1bGUoKSB7fQoKRmRzTW9kdWxlLnByb3RvdHlwZSA9IHsKICBjb25zdHJ1Y3RvcjogRmRzTW9kdWxlCn07CkZkc01vZHVsZS5hbm5vdGF0aW9ucyA9IFtuZXcgTmdNb2R1bGUoewogIGltcG9ydHM6IFtGZHNDb3JlTW9kdWxlLCBGZHNSb3V0ZXNdLAogIGRlY2xhcmF0aW9uczogW0ZkcywgRmRzRGVtbywgRmRzRGVtb0RpYWxvZ10sCiAgZW50cnlDb21wb25lbnRzOiBbRmRzRGVtb0RpYWxvZ10sCiAgcHJvdmlkZXJzOiBbRmRzU2VydmljZV0sCiAgYm9vdHN0cmFwOiBbRmRzXQp9KV07CmV4cG9ydCBkZWZhdWx0IEZkc01vZHVsZTs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/47ef453f2a3fa1b646051d2c3e135bee.json b/.cache-loader-coverage/47ef453f2a3fa1b646051d2c3e135bee.json
new file mode 100644
index 0000000..6b6a7ef
--- /dev/null
+++ b/.cache-loader-coverage/47ef453f2a3fa1b646051d2c3e135bee.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js","mtime":1562689731033},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIGNvdl9jZ2RhbGJmcm0gPSBmdW5jdGlvbiAoKSB7CiAgdmFyIHBhdGggPSAiL1VzZXJzL2phc2xhbi9EZXZlbG9wbWVudC9uaWZpLWZkcy9wbGF0Zm9ybS9jb3JlL2NvbW1vbi9zZXJ2aWNlcy9mZHMtc3RvcmFnZS5zZXJ2aWNlLmpzIjsKICB2YXIgaGFzaCA9ICI2ODhmN2QyZmVjMDQ3YjY5ZWEwNzEwMzQ1OGY2YzcxOWJkOTBiNDZhIjsKICB2YXIgZ2xvYmFsID0gbmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7CiAgdmFyIGdjdiA9ICJfX2NvdmVyYWdlX18iOwogIHZhciBjb3ZlcmFnZURhdGEgPSB7CiAgICBwYXRoOiAiL1VzZXJzL2phc2xhbi9EZXZlbG9wbWVudC9uaWZpLWZkcy9wbGF0Zm9ybS9jb3JlL2NvbW1vbi9zZXJ2aWNlcy9mZHMtc3RvcmFnZS5zZXJ2aWNlLmpzIiwKICAgIHN0YXRlbWVudE1hcDogewogICAgICAiMCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTksCiAgICAgICAgICBjb2x1bW46IDIzCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDE5LAogICAgICAgICAgY29sdW1uOiAzMQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDIwLAogICAgICAgICAgY29sdW1uOiAxNwogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAyMCwKICAgICAgICAgIGNvbHVtbjogMzUKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAyMiwKICAgICAgICAgIGNvbHVtbjogMjAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMjQsCiAgICAgICAgICBjb2x1bW46IDEKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAyMywKICAgICAgICAgIGNvbHVtbjogNAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAyMywKICAgICAgICAgIGNvbHVtbjogMzgKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI0IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAyNiwKICAgICAgICAgIGNvbHVtbjogMTUKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMjgsCiAgICAgICAgICBjb2x1bW46IDEKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI1IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAyNywKICAgICAgICAgIGNvbHVtbjogNAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAyNywKICAgICAgICAgIGNvbHVtbjogMjQKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI2IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAzMCwKICAgICAgICAgIGNvbHVtbjogMjgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMzIsCiAgICAgICAgICBjb2x1bW46IDEKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI3IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAzMSwKICAgICAgICAgIGNvbHVtbjogNAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAzMSwKICAgICAgICAgIGNvbHVtbjogNDUKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI4IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA0MCwKICAgICAgICAgIGNvbHVtbjogMjQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNTAsCiAgICAgICAgICBjb2x1bW46IDEKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI5IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA0MSwKICAgICAgICAgIGNvbHVtbjogNAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA0OCwKICAgICAgICAgIGNvbHVtbjogNQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEwIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA0MywKICAgICAgICAgIGNvbHVtbjogMjQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDMsCiAgICAgICAgICBjb2x1bW46IDQ3CiAgICAgICAgfQogICAgICB9LAogICAgICAiMTEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDQ0LAogICAgICAgICAgY29sdW1uOiAyMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA0NCwKICAgICAgICAgIGNvbHVtbjogMzAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxMiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDcsCiAgICAgICAgICBjb2x1bW46IDgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDcsCiAgICAgICAgICBjb2x1bW46IDQ5CiAgICAgICAgfQogICAgICB9LAogICAgICAiMTMiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDQ5LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDQ5LAogICAgICAgICAgY29sdW1uOiAxNwogICAgICAgIH0KICAgICAgfSwKICAgICAgIjE0IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA1NywKICAgICAgICAgIGNvbHVtbjogMTcKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNzAsCiAgICAgICAgICBjb2x1bW46IDEKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxNSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNTgsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNjksCiAgICAgICAgICBjb2x1bW46IDUKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxNiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNjAsCiAgICAgICAgICBjb2x1bW46IDIyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDYwLAogICAgICAgICAgY29sdW1uOiA1OQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjE3IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA2MywKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA2NSwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjE4IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA2NCwKICAgICAgICAgIGNvbHVtbjogMTIKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNjQsCiAgICAgICAgICBjb2x1bW46IDI1CiAgICAgICAgfQogICAgICB9LAogICAgICAiMTkiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDY2LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDY2LAogICAgICAgICAgY29sdW1uOiAyMAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjIwIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA2OCwKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA2OCwKICAgICAgICAgIGNvbHVtbjogMjAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyMSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNzksCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMjE0LAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiMjIiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDg2LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDk2LAogICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgfQogICAgICB9LAogICAgICAiMjMiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDg2LAogICAgICAgICAgY29sdW1uOiAyMQogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA4NiwKICAgICAgICAgIGNvbHVtbjogMjIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyNCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogODcsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDk1LAogICAgICAgICAgY29sdW1uOiAxMwogICAgICAgIH0KICAgICAgfSwKICAgICAgIjI1IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA4OSwKICAgICAgICAgIGNvbHVtbjogMjgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogODksCiAgICAgICAgICBjb2x1bW46IDQ3CiAgICAgICAgfQogICAgICB9LAogICAgICAiMjYiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDkyLAogICAgICAgICAgY29sdW1uOiAxNgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA5MiwKICAgICAgICAgIGNvbHVtbjogMzQKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyNyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTA4LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEwOCwKICAgICAgICAgIGNvbHVtbjogOTEKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyOCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTExLAogICAgICAgICAgY29sdW1uOiAyMgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxMTQsCiAgICAgICAgICBjb2x1bW46IDkKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyOSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTE3LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExNywKICAgICAgICAgIGNvbHVtbjogNTcKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzMCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTI4LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyOCwKICAgICAgICAgIGNvbHVtbjogMzgKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzMSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTM5LAogICAgICAgICAgY29sdW1uOiAyMgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxMzksCiAgICAgICAgICBjb2x1bW46IDM1CiAgICAgICAgfQogICAgICB9LAogICAgICAiMzIiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDE0MCwKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxNDIsCiAgICAgICAgICBjb2x1bW46IDkKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzMyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTQxLAogICAgICAgICAgY29sdW1uOiAxMgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxNDEsCiAgICAgICAgICBjb2x1bW46IDI0CiAgICAgICAgfQogICAgICB9LAogICAgICAiMzQiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDE0NSwKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxNDgsCiAgICAgICAgICBjb2x1bW46IDkKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzNSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTQ2LAogICAgICAgICAgY29sdW1uOiAxMgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxNDYsCiAgICAgICAgICBjb2x1bW46IDMzCiAgICAgICAgfQogICAgICB9LAogICAgICAiMzYiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDE0NywKICAgICAgICAgIGNvbHVtbjogMTIKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMTQ3LAogICAgICAgICAgY29sdW1uOiAyNAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjM3IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxNTEsCiAgICAgICAgICBjb2x1bW46IDgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMTUzLAogICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgfQogICAgICB9LAogICAgICAiMzgiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDE1MiwKICAgICAgICAgIGNvbHVtbjogMTIKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMTUyLAogICAgICAgICAgY29sdW1uOiAzMwogICAgICAgIH0KICAgICAgfSwKICAgICAgIjM5IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxNTUsCiAgICAgICAgICBjb2x1bW46IDgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMTU1LAogICAgICAgICAgY29sdW1uOiAyMAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjQwIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxNjYsCiAgICAgICAgICBjb2x1bW46IDIyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDE2NiwKICAgICAgICAgIGNvbHVtbjogMzUKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI0MSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTY3LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDE2OSwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjQyIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxNjgsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDE2OCwKICAgICAgICAgIGNvbHVtbjogMjQKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI0MyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTcyLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDE3NCwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjQ0IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxNzMsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDE3MywKICAgICAgICAgIGNvbHVtbjogMzYKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI0NSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTc2LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDE3NiwKICAgICAgICAgIGNvbHVtbjogMjAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI0NiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTg3LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDIwMSwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjQ3IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxODgsCiAgICAgICAgICBjb2x1bW46IDI5CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDE4OCwKICAgICAgICAgIGNvbHVtbjogNDQKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI0OCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTg5LAogICAgICAgICAgY29sdW1uOiAxMgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxOTEsCiAgICAgICAgICBjb2x1bW46IDEzCiAgICAgICAgfQogICAgICB9LAogICAgICAiNDkiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDE5MCwKICAgICAgICAgIGNvbHVtbjogMTYKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMTkwLAogICAgICAgICAgY29sdW1uOiAyNgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjUwIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxOTMsCiAgICAgICAgICBjb2x1bW46IDMxCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDE5MywKICAgICAgICAgIGNvbHVtbjogNTUKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI1MSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTk0LAogICAgICAgICAgY29sdW1uOiAyOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxOTQsCiAgICAgICAgICBjb2x1bW46IDUwCiAgICAgICAgfQogICAgICB9LAogICAgICAiNTIiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDE5NiwKICAgICAgICAgIGNvbHVtbjogMTIKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMTk4LAogICAgICAgICAgY29sdW1uOiAxMwogICAgICAgIH0KICAgICAgfSwKICAgICAgIjUzIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxOTcsCiAgICAgICAgICBjb2x1bW46IDE2CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDE5NywKICAgICAgICAgIGNvbHVtbjogMzEKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI1NCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMjAwLAogICAgICAgICAgY29sdW1uOiAxMgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAyMDAsCiAgICAgICAgICBjb2x1bW46IDI0CiAgICAgICAgfQogICAgICB9LAogICAgICAiNTUiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDIwMywKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAyMDMsCiAgICAgICAgICBjb2x1bW46IDIwCiAgICAgICAgfQogICAgICB9LAogICAgICAiNTYiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDIxMiwKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAyMTIsCiAgICAgICAgICBjb2x1bW46IDM3CiAgICAgICAgfQogICAgICB9LAogICAgICAiNTciOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDIxNiwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAyMTYsCiAgICAgICAgICBjb2x1bW46IDM0CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgZm5NYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgbmFtZTogIihhbm9ueW1vdXNfMCkiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDIyLAogICAgICAgICAgICBjb2x1bW46IDIwCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDIyLAogICAgICAgICAgICBjb2x1bW46IDIxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDIyLAogICAgICAgICAgICBjb2x1bW46IDM1CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDI0LAogICAgICAgICAgICBjb2x1bW46IDEKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDIyCiAgICAgIH0sCiAgICAgICIxIjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzEpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAyNiwKICAgICAgICAgICAgY29sdW1uOiAxNQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAyNiwKICAgICAgICAgICAgY29sdW1uOiAxNgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAyNiwKICAgICAgICAgICAgY29sdW1uOiAzMAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAyOCwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiAyNgogICAgICB9LAogICAgICAiMiI6IHsKICAgICAgICBuYW1lOiAiKGFub255bW91c18yKSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMzAsCiAgICAgICAgICAgIGNvbHVtbjogMjgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMzAsCiAgICAgICAgICAgIGNvbHVtbjogMjkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMzAsCiAgICAgICAgICAgIGNvbHVtbjogNDMKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMzIsCiAgICAgICAgICAgIGNvbHVtbjogMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogMzAKICAgICAgfSwKICAgICAgIjMiOiB7CiAgICAgICAgbmFtZTogIihhbm9ueW1vdXNfMykiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDQwLAogICAgICAgICAgICBjb2x1bW46IDI0CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDQwLAogICAgICAgICAgICBjb2x1bW46IDI1CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDQwLAogICAgICAgICAgICBjb2x1bW46IDQxCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDUwLAogICAgICAgICAgICBjb2x1bW46IDEKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDQwCiAgICAgIH0sCiAgICAgICI0IjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzQpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA1NywKICAgICAgICAgICAgY29sdW1uOiAxNwogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA1NywKICAgICAgICAgICAgY29sdW1uOiAxOAogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA1NywKICAgICAgICAgICAgY29sdW1uOiAzMgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA3MCwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiA1NwogICAgICB9LAogICAgICAiNSI6IHsKICAgICAgICBuYW1lOiAiRmRzU3RvcmFnZVNlcnZpY2UiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDc2LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNzYsCiAgICAgICAgICAgIGNvbHVtbjogMjYKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzYsCiAgICAgICAgICAgIGNvbHVtbjogMjkKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNzcsCiAgICAgICAgICAgIGNvbHVtbjogMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogNzYKICAgICAgfSwKICAgICAgIjYiOiB7CiAgICAgICAgbmFtZTogIihhbm9ueW1vdXNfNikiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDg1LAogICAgICAgICAgICBjb2x1bW46IDEwCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDg1LAogICAgICAgICAgICBjb2x1bW46IDExCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDg1LAogICAgICAgICAgICBjb2x1bW46IDIyCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDk3LAogICAgICAgICAgICBjb2x1bW46IDUKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDg1CiAgICAgIH0sCiAgICAgICI3IjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzcpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMDYsCiAgICAgICAgICAgIGNvbHVtbjogMTMKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTA2LAogICAgICAgICAgICBjb2x1bW46IDE0CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEwNiwKICAgICAgICAgICAgY29sdW1uOiA0MwogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMTgsCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogMTA2CiAgICAgIH0sCiAgICAgICI4IjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzgpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMjcsCiAgICAgICAgICAgIGNvbHVtbjogMTMKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTI3LAogICAgICAgICAgICBjb2x1bW46IDE0CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEyNywKICAgICAgICAgICAgY29sdW1uOiAyOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMjksCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogMTI3CiAgICAgIH0sCiAgICAgICI5IjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzkpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMzgsCiAgICAgICAgICAgIGNvbHVtbjogMTMKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTM4LAogICAgICAgICAgICBjb2x1bW46IDE0CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEzOCwKICAgICAgICAgICAgY29sdW1uOiAyOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxNTYsCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogMTM4CiAgICAgIH0sCiAgICAgICIxMCI6IHsKICAgICAgICBuYW1lOiAiKGFub255bW91c18xMCkiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDE2NSwKICAgICAgICAgICAgY29sdW1uOiAyMwogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxNjUsCiAgICAgICAgICAgIGNvbHVtbjogMjQKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTY1LAogICAgICAgICAgICBjb2x1bW46IDM4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDE3NywKICAgICAgICAgICAgY29sdW1uOiA1CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiAxNjUKICAgICAgfSwKICAgICAgIjExIjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzExKSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTg2LAogICAgICAgICAgICBjb2x1bW46IDE5CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDE4NiwKICAgICAgICAgICAgY29sdW1uOiAyMAogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxODYsCiAgICAgICAgICAgIGNvbHVtbjogMzQKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMjA0LAogICAgICAgICAgICBjb2x1bW46IDUKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDE4NgogICAgICB9LAogICAgICAiMTIiOiB7CiAgICAgICAgbmFtZTogIihhbm9ueW1vdXNfMTIpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAyMTEsCiAgICAgICAgICAgIGNvbHVtbjogMTYKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMjExLAogICAgICAgICAgICBjb2x1bW46IDE3CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDIxMSwKICAgICAgICAgICAgY29sdW1uOiAzMQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAyMTMsCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogMjExCiAgICAgIH0KICAgIH0sCiAgICBicmFuY2hNYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAzMSwKICAgICAgICAgICAgY29sdW1uOiAxMQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAzMSwKICAgICAgICAgICAgY29sdW1uOiA0NAogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdHlwZTogImJpbmFyeS1leHByIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAzMSwKICAgICAgICAgICAgY29sdW1uOiAxMQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAzMSwKICAgICAgICAgICAgY29sdW1uOiAyOAogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDMxLAogICAgICAgICAgICBjb2x1bW46IDMyCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDMxLAogICAgICAgICAgICBjb2x1bW46IDQ0CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogMzEKICAgICAgfSwKICAgICAgIjEiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA0MSwKICAgICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDQ4LAogICAgICAgICAgICBjb2x1bW46IDUKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNDEsCiAgICAgICAgICAgIGNvbHVtbjogNAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA0OCwKICAgICAgICAgICAgY29sdW1uOiA1CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNDEsCiAgICAgICAgICAgIGNvbHVtbjogNAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA0OCwKICAgICAgICAgICAgY29sdW1uOiA1CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogNDEKICAgICAgfSwKICAgICAgIjIiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA2MywKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDY1LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNjMsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA2NSwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNjMsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA2NSwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogNjMKICAgICAgfSwKICAgICAgIjMiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMDgsCiAgICAgICAgICAgIGNvbHVtbjogMTgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTA4LAogICAgICAgICAgICBjb2x1bW46IDkwCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAiY29uZC1leHByIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMDgsCiAgICAgICAgICAgIGNvbHVtbjogNDkKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTA4LAogICAgICAgICAgICBjb2x1bW46IDU2CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTA4LAogICAgICAgICAgICBjb2x1bW46IDU5CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDEwOCwKICAgICAgICAgICAgY29sdW1uOiA5MAogICAgICAgICAgfQogICAgICAgIH1dLAogICAgICAgIGxpbmU6IDEwOAogICAgICB9LAogICAgICAiNCI6IHsKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDE0MCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDE0MiwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAiaWYiLAogICAgICAgIGxvY2F0aW9uczogW3sKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDE0MCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDE0MiwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTQwLAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTQyLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9XSwKICAgICAgICBsaW5lOiAxNDAKICAgICAgfSwKICAgICAgIjUiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxNDUsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxNDgsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdHlwZTogImlmIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxNDUsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxNDgsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDE0NSwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDE0OCwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogMTQ1CiAgICAgIH0sCiAgICAgICI2IjogewogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTUxLAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTUzLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTUxLAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTUzLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxNTEsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxNTMsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH1dLAogICAgICAgIGxpbmU6IDE1MQogICAgICB9LAogICAgICAiNyI6IHsKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDE2NywKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDE2OSwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAiaWYiLAogICAgICAgIGxvY2F0aW9uczogW3sKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDE2NywKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDE2OSwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTY3LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTY5LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9XSwKICAgICAgICBsaW5lOiAxNjcKICAgICAgfSwKICAgICAgIjgiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxNzIsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxNzQsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdHlwZTogImlmIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxNzIsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxNzQsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDE3MiwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDE3NCwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogMTcyCiAgICAgIH0sCiAgICAgICI5IjogewogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTg3LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMjAxLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTg3LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMjAxLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxODcsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAyMDEsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH1dLAogICAgICAgIGxpbmU6IDE4NwogICAgICB9LAogICAgICAiMTAiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxODksCiAgICAgICAgICAgIGNvbHVtbjogMTIKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTkxLAogICAgICAgICAgICBjb2x1bW46IDEzCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAiaWYiLAogICAgICAgIGxvY2F0aW9uczogW3sKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDE4OSwKICAgICAgICAgICAgY29sdW1uOiAxMgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxOTEsCiAgICAgICAgICAgIGNvbHVtbjogMTMKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxODksCiAgICAgICAgICAgIGNvbHVtbjogMTIKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTkxLAogICAgICAgICAgICBjb2x1bW46IDEzCiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogMTg5CiAgICAgIH0sCiAgICAgICIxMSI6IHsKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDE5NiwKICAgICAgICAgICAgY29sdW1uOiAxMgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxOTgsCiAgICAgICAgICAgIGNvbHVtbjogMTMKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTk2LAogICAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDE5OCwKICAgICAgICAgICAgY29sdW1uOiAxMwogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDE5NiwKICAgICAgICAgICAgY29sdW1uOiAxMgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxOTgsCiAgICAgICAgICAgIGNvbHVtbjogMTMKICAgICAgICAgIH0KICAgICAgICB9XSwKICAgICAgICBsaW5lOiAxOTYKICAgICAgfQogICAgfSwKICAgIHM6IHsKICAgICAgIjAiOiAwLAogICAgICAiMSI6IDAsCiAgICAgICIyIjogMCwKICAgICAgIjMiOiAwLAogICAgICAiNCI6IDAsCiAgICAgICI1IjogMCwKICAgICAgIjYiOiAwLAogICAgICAiNyI6IDAsCiAgICAgICI4IjogMCwKICAgICAgIjkiOiAwLAogICAgICAiMTAiOiAwLAogICAgICAiMTEiOiAwLAogICAgICAiMTIiOiAwLAogICAgICAiMTMiOiAwLAogICAgICAiMTQiOiAwLAogICAgICAiMTUiOiAwLAogICAgICAiMTYiOiAwLAogICAgICAiMTciOiAwLAogICAgICAiMTgiOiAwLAogICAgICAiMTkiOiAwLAogICAgICAiMjAiOiAwLAogICAgICAiMjEiOiAwLAogICAgICAiMjIiOiAwLAogICAgICAiMjMiOiAwLAogICAgICAiMjQiOiAwLAogICAgICAiMjUiOiAwLAogICAgICAiMjYiOiAwLAogICAgICAiMjciOiAwLAogICAgICAiMjgiOiAwLAogICAgICAiMjkiOiAwLAogICAgICAiMzAiOiAwLAogICAgICAiMzEiOiAwLAogICAgICAiMzIiOiAwLAogICAgICAiMzMiOiAwLAogICAgICAiMzQiOiAwLAogICAgICAiMzUiOiAwLAogICAgICAiMzYiOiAwLAogICAgICAiMzciOiAwLAogICAgICAiMzgiOiAwLAogICAgICAiMzkiOiAwLAogICAgICAiNDAiOiAwLAogICAgICAiNDEiOiAwLAogICAgICAiNDIiOiAwLAogICAgICAiNDMiOiAwLAogICAgICAiNDQiOiAwLAogICAgICAiNDUiOiAwLAogICAgICAiNDYiOiAwLAogICAgICAiNDciOiAwLAogICAgICAiNDgiOiAwLAogICAgICAiNDkiOiAwLAogICAgICAiNTAiOiAwLAogICAgICAiNTEiOiAwLAogICAgICAiNTIiOiAwLAogICAgICAiNTMiOiAwLAogICAgICAiNTQiOiAwLAogICAgICAiNTUiOiAwLAogICAgICAiNTYiOiAwLAogICAgICAiNTciOiAwCiAgICB9LAogICAgZjogewogICAgICAiMCI6IDAsCiAgICAgICIxIjogMCwKICAgICAgIjIiOiAwLAogICAgICAiMyI6IDAsCiAgICAgICI0IjogMCwKICAgICAgIjUiOiAwLAogICAgICAiNiI6IDAsCiAgICAgICI3IjogMCwKICAgICAgIjgiOiAwLAogICAgICAiOSI6IDAsCiAgICAgICIxMCI6IDAsCiAgICAgICIxMSI6IDAsCiAgICAgICIxMiI6IDAKICAgIH0sCiAgICBiOiB7CiAgICAgICIwIjogWzAsIDBdLAogICAgICAiMSI6IFswLCAwXSwKICAgICAgIjIiOiBbMCwgMF0sCiAgICAgICIzIjogWzAsIDBdLAogICAgICAiNCI6IFswLCAwXSwKICAgICAgIjUiOiBbMCwgMF0sCiAgICAgICI2IjogWzAsIDBdLAogICAgICAiNyI6IFswLCAwXSwKICAgICAgIjgiOiBbMCwgMF0sCiAgICAgICI5IjogWzAsIDBdLAogICAgICAiMTAiOiBbMCwgMF0sCiAgICAgICIxMSI6IFswLCAwXQogICAgfSwKICAgIF9jb3ZlcmFnZVNjaGVtYTogIjQzZTI3ZTEzOGViZjljZmM1OTY2YjA4MmNmOWEwMjgzMDJlZDQxODQiLAogICAgaGFzaDogIjY4OGY3ZDJmZWMwNDdiNjllYTA3MTAzNDU4ZjZjNzE5YmQ5MGI0NmEiCiAgfTsKICB2YXIgY292ZXJhZ2UgPSBnbG9iYWxbZ2N2XSB8fCAoZ2xvYmFsW2djdl0gPSB7fSk7CgogIGlmIChjb3ZlcmFnZVtwYXRoXSAmJiBjb3ZlcmFnZVtwYXRoXS5oYXNoID09PSBoYXNoKSB7CiAgICByZXR1cm4gY292ZXJhZ2VbcGF0aF07CiAgfQoKICByZXR1cm4gY292ZXJhZ2VbcGF0aF0gPSBjb3ZlcmFnZURhdGE7Cn0oKTsKCi8qCiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQogKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgogKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAogKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAogKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqLwovLyBTdG9yZSBpdGVtcyBmb3IgdHdvIGRheXMgYmVmb3JlIGJlaW5nIGVsaWdpYmxlIGZvciByZW1vdmFsLgp2YXIgTUlMTElTX1BFUl9EQVkgPSAoY292X2NnZGFsYmZybS5zWzBdKyssIDg2NDAwMDAwKTsKdmFyIFRXT19EQVlTID0gKGNvdl9jZ2RhbGJmcm0uc1sxXSsrLCBNSUxMSVNfUEVSX0RBWSAqIDIpOwpjb3ZfY2dkYWxiZnJtLnNbMl0rKzsKCnZhciBpc1VuZGVmaW5lZCA9IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iaikgewogIGNvdl9jZ2RhbGJmcm0uZlswXSsrOwogIGNvdl9jZ2RhbGJmcm0uc1szXSsrOwogIHJldHVybiB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJzsKfTsKCmNvdl9jZ2RhbGJmcm0uc1s0XSsrOwoKdmFyIGlzTnVsbCA9IGZ1bmN0aW9uIGlzTnVsbChvYmopIHsKICBjb3ZfY2dkYWxiZnJtLmZbMV0rKzsKICBjb3ZfY2dkYWxiZnJtLnNbNV0rKzsKICByZXR1cm4gb2JqID09PSBudWxsOwp9OwoKY292X2NnZGFsYmZybS5zWzZdKys7Cgp2YXIgaXNEZWZpbmVkQW5kTm90TnVsbCA9IGZ1bmN0aW9uIGlzRGVmaW5lZEFuZE5vdE51bGwob2JqKSB7CiAgY292X2NnZGFsYmZybS5mWzJdKys7CiAgY292X2NnZGFsYmZybS5zWzddKys7CiAgcmV0dXJuIChjb3ZfY2dkYWxiZnJtLmJbMF1bMF0rKywgIWlzVW5kZWZpbmVkKG9iaikpICYmIChjb3ZfY2dkYWxiZnJtLmJbMF1bMV0rKywgIWlzTnVsbChvYmopKTsKfTsKLyoqCiAqIENoZWNrcyB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBlbnRyeS4KICoKICogQHBhcmFtIHtvYmplY3R9IGVudHJ5CiAqIEByZXR1cm5zIHtib29sZWFufQogKi8KCgpjb3ZfY2dkYWxiZnJtLnNbOF0rKzsKCnZhciBjaGVja0V4cGlyYXRpb24gPSBmdW5jdGlvbiBjaGVja0V4cGlyYXRpb24oZW50cnkpIHsKICBjb3ZfY2dkYWxiZnJtLmZbM10rKzsKICBjb3ZfY2dkYWxiZnJtLnNbOV0rKzsKCiAgaWYgKGlzRGVmaW5lZEFuZE5vdE51bGwoZW50cnkuZXhwaXJlcykpIHsKICAgIGNvdl9jZ2RhbGJmcm0uYlsxXVswXSsrOwogICAgLy8gZ2V0IHRoZSBleHBpcmF0aW9uCiAgICB2YXIgZXhwaXJlcyA9IChjb3ZfY2dkYWxiZnJtLnNbMTBdKyssIG5ldyBEYXRlKGVudHJ5LmV4cGlyZXMpKTsKICAgIHZhciBub3cgPSAoY292X2NnZGFsYmZybS5zWzExXSsrLCBuZXcgRGF0ZSgpKTsgLy8gcmV0dXJuIHdoZXRoZXIgdGhlIGV4cGlyYXRpb24gZGF0ZSBoYXMgcGFzc2VkCgogICAgY292X2NnZGFsYmZybS5zWzEyXSsrOwogICAgcmV0dXJuIGV4cGlyZXMudmFsdWVPZigpIDwgbm93LnZhbHVlT2YoKTsKICB9IGVsc2UgewogICAgY292X2NnZGFsYmZybS5iWzFdWzFdKys7CiAgfQoKICBjb3ZfY2dkYWxiZnJtLnNbMTNdKys7CiAgcmV0dXJuIGZhbHNlOwp9OwovKioKICogR2V0cyBhbiBlbnR5IGZvciB0aGUga2V5LiBUaGUgZW50cnkgZXhwaXJhdGlvbiBpcyBub3QgY2hlY2tlZC4KICoKICogQHBhcmFtIHtzdHJpbmd9IGtleQogKi8KCgpjb3ZfY2dkYWxiZnJtLnNbMTRdKys7Cgp2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiBnZXRFbnRyeShrZXkpIHsKICBjb3ZfY2dkYWxiZnJtLmZbNF0rKzsKICBjb3ZfY2dkYWxiZnJtLnNbMTVdKys7CgogIHRyeSB7CiAgICAvLyBwYXJzZSB0aGUgZW50cnkKICAgIHZhciBlbnRyeSA9IChjb3ZfY2dkYWxiZnJtLnNbMTZdKyssIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSkpOyAvLyBlbnN1cmUgdGhlIGVudHJ5IGFuZCBpdGVtIGFyZSBwcmVzZW50CgogICAgY292X2NnZGFsYmZybS5zWzE3XSsrOwoKICAgIGlmIChpc0RlZmluZWRBbmROb3ROdWxsKGVudHJ5KSkgewogICAgICBjb3ZfY2dkYWxiZnJtLmJbMl1bMF0rKzsKICAgICAgY292X2NnZGFsYmZybS5zWzE4XSsrOwogICAgICByZXR1cm4gZW50cnk7CiAgICB9IGVsc2UgewogICAgICBjb3ZfY2dkYWxiZnJtLmJbMl1bMV0rKzsKICAgIH0KCiAgICBjb3ZfY2dkYWxiZnJtLnNbMTldKys7CiAgICByZXR1cm4gbnVsbDsKICB9IGNhdGNoIChlKSB7CiAgICBjb3ZfY2dkYWxiZnJtLnNbMjBdKys7CiAgICByZXR1cm4gbnVsbDsKICB9Cn07Ci8qKgogKiBGZHNTdG9yYWdlU2VydmljZSBjb25zdHJ1Y3Rvci4KICogQGNvbnN0cnVjdG9yCiAqLwoKCmZ1bmN0aW9uIEZkc1N0b3JhZ2VTZXJ2aWNlKCkgewogIGNvdl9jZ2RhbGJmcm0uZls1XSsrOwp9Cgpjb3ZfY2dkYWxiZnJtLnNbMjFdKys7CkZkc1N0b3JhZ2VTZXJ2aWNlLnByb3RvdHlwZSA9IHsKICBjb25zdHJ1Y3RvcjogRmRzU3RvcmFnZVNlcnZpY2UsCgogIC8qKgogICAqIEluaXRpYWxpemVzIHRoZSBzdG9yYWdlLiBJdGVtcyB3aWxsIGJlIHBlcnNpc3RlZCBmb3IgdHdvIGRheXMuIE9uY2UgdGhlIHNjcmlwdHMgcnVucwogICAqIHRoZXJlYWZ0ZXIsIGFsbCBlbGlnaWJsZSBpdGVtcyB3aWxsIGJlIHJlbW92ZWQuIFRoaXMgc3RyYXRlZ3kgZG9lcyBub3Qgc3VwcG9ydCBwZXJzaXN0ZW5jZS4KICAgKi8KICBpbml0OiBmdW5jdGlvbiBpbml0KCkgewogICAgY292X2NnZGFsYmZybS5mWzZdKys7CiAgICBjb3ZfY2dkYWxiZnJtLnNbMjJdKys7CgogICAgZm9yICh2YXIgaSA9IChjb3ZfY2dkYWxiZnJtLnNbMjNdKyssIDApOyBpIDwgbG9jYWxTdG9yYWdlLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvdl9jZ2RhbGJmcm0uc1syNF0rKzsKCiAgICAgIHRyeSB7CiAgICAgICAgLy8gZ2V0IHRoZSBuZXh0IGl0ZW0KICAgICAgICB2YXIga2V5ID0gKGNvdl9jZ2RhbGJmcm0uc1syNV0rKywgbG9jYWxTdG9yYWdlLmtleShpKSk7IC8vIGF0dGVtcHQgdG8gZ2V0IHRoZSBpdGVtIHdoaWNoIHdpbGwgZXhwaXJlIGlmIG5lY2Vzc2FyeQoKICAgICAgICBjb3ZfY2dkYWxiZnJtLnNbMjZdKys7CiAgICAgICAgdGhpcy5nZXRJdGVtKGtleSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsvLyBEbyBub3RoaW5nCiAgICAgIH0KICAgIH0KICB9LAoKICAvKioKICAgKiBTdG9yZXMgdGhlIHNwZWNpZmllZCBpdGVtLgogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGtleQogICAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtCiAgICogQHBhcmFtIHtpbnRlZ2VyfSBleHBpcmVzCiAgICovCiAgc2V0SXRlbTogZnVuY3Rpb24gc2V0SXRlbShrZXksIGl0ZW0sIGV4cGlyZXMpIHsKICAgIGNvdl9jZ2RhbGJmcm0uZls3XSsrOwogICAgY292X2NnZGFsYmZybS5zWzI3XSsrOwogICAgLy8gY2FsY3VsYXRlIHRoZSBleHBpcmF0aW9uCiAgICBleHBpcmVzID0gaXNEZWZpbmVkQW5kTm90TnVsbChleHBpcmVzKSA/IChjb3ZfY2dkYWxiZnJtLmJbM11bMF0rKywgZXhwaXJlcykgOiAoY292X2NnZGFsYmZybS5iWzNdWzFdKyssIG5ldyBEYXRlKCkudmFsdWVPZigpICsgVFdPX0RBWVMpOyAvLyBjcmVhdGUgdGhlIGVudHJ5CgogICAgdmFyIGVudHJ5ID0gKGNvdl9jZ2RhbGJmcm0uc1syOF0rKywgewogICAgICBleHBpcmVzOiBleHBpcmVzLAogICAgICBpdGVtOiBpdGVtCiAgICB9KTsgLy8gc3RvcmUgdGhlIGl0ZW0KCiAgICBjb3ZfY2dkYWxiZnJtLnNbMjldKys7CiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KGVudHJ5KSk7CiAgfSwKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZXJlIGlzIGFuIGVudHJ5IGZvciB0aGlzIGtleS4gVGhpcyB3aWxsIG5vdCBjaGVjayB0aGUgZXhwaXJhdGlvbi4gSWYKICAgKiB0aGUgZW50cnkgaXMgZXhwaXJlZCwgaXQgd2lsbCByZXR1cm4gbnVsbCBvbiBhIHN1YnNlcXVlbnQgZ2V0SXRlbSBpbnZvY2F0aW9uLgogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGtleQogICAqIEByZXR1cm5zIHtib29sZWFufQogICAqLwogIGhhc0l0ZW06IGZ1bmN0aW9uIGhhc0l0ZW0oa2V5KSB7CiAgICBjb3ZfY2dkYWxiZnJtLmZbOF0rKzsKICAgIGNvdl9jZ2RhbGJmcm0uc1szMF0rKzsKICAgIHJldHVybiBnZXRFbnRyeShrZXkpICE9PSBudWxsOwogIH0sCgogIC8qKgogICAqIEdldHMgdGhlIGl0ZW0gd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4gSWYgYW4gaXRlbSB3aXRoIHRoaXMga2V5IGRvZXMKICAgKiBub3QgZXhpc3QsIG51bGwgaXMgcmV0dXJuZWQuIElmIGFuIGl0ZW0gZXhpc3RzIGJ1dCBjYW5ub3QgYmUgcGFyc2VkCiAgICogb3IgaXMgbWFsZm9ybWVkL3VucmVjb2duaXplZCwgbnVsbCBpcyByZXR1cm5lZC4KICAgKgogICAqIEBwYXJhbSB7dHlwZX0ga2V5CiAgICovCiAgZ2V0SXRlbTogZnVuY3Rpb24gZ2V0SXRlbShrZXkpIHsKICAgIGNvdl9jZ2RhbGJmcm0uZls5XSsrOwogICAgdmFyIGVudHJ5ID0gKGNvdl9jZ2RhbGJmcm0uc1szMV0rKywgZ2V0RW50cnkoa2V5KSk7CiAgICBjb3ZfY2dkYWxiZnJtLnNbMzJdKys7CgogICAgaWYgKGVudHJ5ID09PSBudWxsKSB7CiAgICAgIGNvdl9jZ2RhbGJmcm0uYls0XVswXSsrOwogICAgICBjb3ZfY2dkYWxiZnJtLnNbMzNdKys7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgY292X2NnZGFsYmZybS5iWzRdWzFdKys7CiAgICB9IC8vIGlmIHRoZSBlbnRyeSBpcyBleHBpcmVkLCBkcm9wIGl0IGFuZCByZXR1cm4gbnVsbAoKCiAgICBjb3ZfY2dkYWxiZnJtLnNbMzRdKys7CgogICAgaWYgKGNoZWNrRXhwaXJhdGlvbihlbnRyeSkpIHsKICAgICAgY292X2NnZGFsYmZybS5iWzVdWzBdKys7CiAgICAgIGNvdl9jZ2RhbGJmcm0uc1szNV0rKzsKICAgICAgdGhpcy5yZW1vdmVJdGVtKGtleSk7CiAgICAgIGNvdl9jZ2RhbGJmcm0uc1szNl0rKzsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICBjb3ZfY2dkYWxiZnJtLmJbNV1bMV0rKzsKICAgIH0gLy8gaWYgdGhlIGVudHJ5IGhhcyB0aGUgc3BlY2lmaWVkIGZpZWxkIHJldHVybiBpdHMgdmFsdWUKCgogICAgY292X2NnZGFsYmZybS5zWzM3XSsrOwoKICAgIGlmIChpc0RlZmluZWRBbmROb3ROdWxsKGVudHJ5WydpdGVtJ10pKSB7CiAgICAgIGNvdl9jZ2RhbGJmcm0uYls2XVswXSsrOwogICAgICBjb3ZfY2dkYWxiZnJtLnNbMzhdKys7CiAgICAgIHJldHVybiBlbnRyeVsnaXRlbSddOwogICAgfSBlbHNlIHsKICAgICAgY292X2NnZGFsYmZybS5iWzZdWzFdKys7CiAgICB9CgogICAgY292X2NnZGFsYmZybS5zWzM5XSsrOwogICAgcmV0dXJuIG51bGw7CiAgfSwKCiAgLyoqCiAgICogR2V0cyB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBpdGVtLiBUaGlzIHdpbGwgbm90IGNoZWNrIHRoZSBleHBpcmF0aW9uLiBJZgogICAqIHRoZSBlbnRyeSBpcyBleHBpcmVkLCBpdCB3aWxsIHJldHVybiBudWxsIG9uIGEgc3Vic2VxdWVudCBnZXRJdGVtIGludm9jYXRpb24uCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5CiAgICogQHJldHVybnMge2ludGVnZXJ9CiAgICovCiAgZ2V0SXRlbUV4cGlyYXRpb246IGZ1bmN0aW9uIGdldEl0ZW1FeHBpcmF0aW9uKGtleSkgewogICAgY292X2NnZGFsYmZybS5mWzEwXSsrOwogICAgdmFyIGVudHJ5ID0gKGNvdl9jZ2RhbGJmcm0uc1s0MF0rKywgZ2V0RW50cnkoa2V5KSk7CiAgICBjb3ZfY2dkYWxiZnJtLnNbNDFdKys7CgogICAgaWYgKGVudHJ5ID09PSBudWxsKSB7CiAgICAgIGNvdl9jZ2RhbGJmcm0uYls3XVswXSsrOwogICAgICBjb3ZfY2dkYWxiZnJtLnNbNDJdKys7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgY292X2NnZGFsYmZybS5iWzddWzFdKys7CiAgICB9IC8vIGlmIHRoZSBlbnRyeSBoYXMgdGhlIHNwZWNpZmllZCBmaWVsZCByZXR1cm4gaXRzIHZhbHVlCgoKICAgIGNvdl9jZ2RhbGJmcm0uc1s0M10rKzsKCiAgICBpZiAoaXNEZWZpbmVkQW5kTm90TnVsbChlbnRyeVsnZXhwaXJlcyddKSkgewogICAgICBjb3ZfY2dkYWxiZnJtLmJbOF1bMF0rKzsKICAgICAgY292X2NnZGFsYmZybS5zWzQ0XSsrOwogICAgICByZXR1cm4gZW50cnlbJ2V4cGlyZXMnXTsKICAgIH0gZWxzZSB7CiAgICAgIGNvdl9jZ2RhbGJmcm0uYls4XVsxXSsrOwogICAgfQoKICAgIGNvdl9jZ2RhbGJmcm0uc1s0NV0rKzsKICAgIHJldHVybiBudWxsOwogIH0sCgogIC8qKgogICAqIEV4dHJhY3RzIHRoZSBzdWJqZWN0IGZyb20gdGhlIHNwZWNpZmllZCBqd3QuIElmIHRoZSBqd3QgaXMgbm90IGFzIGV4cGVjdGVkCiAgICogYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGp3dAogICAqIEByZXR1cm5zIHtzdHJpbmd9CiAgICovCiAgZ2V0Snd0UGF5bG9hZDogZnVuY3Rpb24gZ2V0Snd0UGF5bG9hZChqd3QpIHsKICAgIGNvdl9jZ2RhbGJmcm0uZlsxMV0rKzsKICAgIGNvdl9jZ2RhbGJmcm0uc1s0Nl0rKzsKCiAgICBpZiAoaXNEZWZpbmVkQW5kTm90TnVsbChqd3QpKSB7CiAgICAgIGNvdl9jZ2RhbGJmcm0uYls5XVswXSsrOwogICAgICB2YXIgc2VnbWVudHMgPSAoY292X2NnZGFsYmZybS5zWzQ3XSsrLCBqd3Quc3BsaXQoL1wuLykpOwogICAgICBjb3ZfY2dkYWxiZnJtLnNbNDhdKys7CgogICAgICBpZiAoc2VnbWVudHMubGVuZ3RoICE9PSAzKSB7CiAgICAgICAgY292X2NnZGFsYmZybS5iWzEwXVswXSsrOwogICAgICAgIGNvdl9jZ2RhbGJmcm0uc1s0OV0rKzsKICAgICAgICByZXR1cm4gJyc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY292X2NnZGFsYmZybS5iWzEwXVsxXSsrOwogICAgICB9CgogICAgICB2YXIgcmF3UGF5bG9hZCA9IChjb3ZfY2dkYWxiZnJtLnNbNTBdKyssIHdpbmRvdy5hdG9iKHNlZ21lbnRzWzFdKSk7CiAgICAgIHZhciBwYXlsb2FkID0gKGNvdl9jZ2RhbGJmcm0uc1s1MV0rKywgSlNPTi5wYXJzZShyYXdQYXlsb2FkKSk7CiAgICAgIGNvdl9jZ2RhbGJmcm0uc1s1Ml0rKzsKCiAgICAgIGlmIChpc0RlZmluZWRBbmROb3ROdWxsKHBheWxvYWQpKSB7CiAgICAgICAgY292X2NnZGFsYmZybS5iWzExXVswXSsrOwogICAgICAgIGNvdl9jZ2RhbGJmcm0uc1s1M10rKzsKICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb3ZfY2dkYWxiZnJtLmJbMTFdWzFdKys7CiAgICAgIH0KCiAgICAgIGNvdl9jZ2RhbGJmcm0uc1s1NF0rKzsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICBjb3ZfY2dkYWxiZnJtLmJbOV1bMV0rKzsKICAgIH0KCiAgICBjb3ZfY2dkYWxiZnJtLnNbNTVdKys7CiAgICByZXR1cm4gbnVsbDsKICB9LAoKICAvKioKICAgKiBSZW1vdmVzIHRoZSBpdGVtIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuCiAgICoKICAgKiBAcGFyYW0ge3R5cGV9IGtleQogICAqLwogIHJlbW92ZUl0ZW06IGZ1bmN0aW9uIHJlbW92ZUl0ZW0oa2V5KSB7CiAgICBjb3ZfY2dkYWxiZnJtLmZbMTJdKys7CiAgICBjb3ZfY2dkYWxiZnJtLnNbNTZdKys7CiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpOwogIH0KfTsKY292X2NnZGFsYmZybS5zWzU3XSsrOwpGZHNTdG9yYWdlU2VydmljZS5wYXJhbWV0ZXJzID0gW107CmV4cG9ydCBkZWZhdWx0IEZkc1N0b3JhZ2VTZXJ2aWNlOw=="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/4a7300bbc4ab1012e4a6932519346cef.json b/.cache-loader-coverage/4a7300bbc4ab1012e4a6932519346cef.json
new file mode 100644
index 0000000..85266ce
--- /dev/null
+++ b/.cache-loader-coverage/4a7300bbc4ab1012e4a6932519346cef.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js","mtime":1563469805292},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIGNvdl8yZHhvb2xzdjk2ID0gZnVuY3Rpb24gKCkgewogIHZhciBwYXRoID0gIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9zbmFja2JhcnMvY29hc3Rlci9jb2FzdGVyLmNvbXBvbmVudC5qcyI7CiAgdmFyIGhhc2ggPSAiZTQ3ZmJjYWZjMTk2MWRjMmRjNWVjYTk0ZTA5OTc4ODNmNjhjNjMxZCI7CiAgdmFyIGdsb2JhbCA9IG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOwogIHZhciBnY3YgPSAiX19jb3ZlcmFnZV9fIjsKICB2YXIgY292ZXJhZ2VEYXRhID0gewogICAgcGF0aDogIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9zbmFja2JhcnMvY29hc3Rlci9jb2FzdGVyLmNvbXBvbmVudC5qcyIsCiAgICBzdGF0ZW1lbnRNYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI3LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI3LAogICAgICAgICAgY29sdW1uOiAyMAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI4LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI4LAogICAgICAgICAgY29sdW1uOiAyMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjIiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI5LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI5LAogICAgICAgICAgY29sdW1uOiAxOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjMiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDMwLAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDMwLAogICAgICAgICAgY29sdW1uOiAyMAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjQiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDMxLAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDMxLAogICAgICAgICAgY29sdW1uOiAzMwogICAgICAgIH0KICAgICAgfSwKICAgICAgIjUiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDMyLAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDMyLAogICAgICAgICAgY29sdW1uOiAzOAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjYiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDM1LAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDU5LAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiNyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDIsCiAgICAgICAgICBjb2x1bW46IDgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDIsCiAgICAgICAgICBjb2x1bW46IDY3CiAgICAgICAgfQogICAgICB9LAogICAgICAiOCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDMsCiAgICAgICAgICBjb2x1bW46IDgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDMsCiAgICAgICAgICBjb2x1bW46IDU4CiAgICAgICAgfQogICAgICB9LAogICAgICAiOSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDQsCiAgICAgICAgICBjb2x1bW46IDgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDQsCiAgICAgICAgICBjb2x1bW46IDU2CiAgICAgICAgfQogICAgICB9LAogICAgICAiMTAiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDQ2LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDUwLAogICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgfQogICAgICB9LAogICAgICAiMTEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDQ3LAogICAgICAgICAgY29sdW1uOiAxMgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA0NywKICAgICAgICAgIGNvbHVtbjogNzcKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxMiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDksCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDQ5LAogICAgICAgICAgY29sdW1uOiA3NwogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEzIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA1NywKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA1NywKICAgICAgICAgIGNvbHVtbjogNDAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxNCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNjEsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNjYsCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxNSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNjgsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNjgsCiAgICAgICAgICBjb2x1bW46IDM2CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgZm5NYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgbmFtZTogIkZkc0NvYXN0ZXJDb21wb25lbnQiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDI2LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMjYsCiAgICAgICAgICAgIGNvbHVtbjogMjgKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMjYsCiAgICAgICAgICAgIGNvbHVtbjogMzEKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMzMsCiAgICAgICAgICAgIGNvbHVtbjogMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogMjYKICAgICAgfSwKICAgICAgIjEiOiB7CiAgICAgICAgbmFtZTogIihhbm9ueW1vdXNfMSkiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDQxLAogICAgICAgICAgICBjb2x1bW46IDI0CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDQxLAogICAgICAgICAgICBjb2x1bW46IDI1CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDQxLAogICAgICAgICAgICBjb2x1bW46IDM2CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDUxLAogICAgICAgICAgICBjb2x1bW46IDUKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDQxCiAgICAgIH0sCiAgICAgICIyIjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzIpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA1NiwKICAgICAgICAgICAgY29sdW1uOiAxMgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA1NiwKICAgICAgICAgICAgY29sdW1uOiAxMwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA1NiwKICAgICAgICAgICAgY29sdW1uOiAyNAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA1OCwKICAgICAgICAgICAgY29sdW1uOiA1CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiA1NgogICAgICB9CiAgICB9LAogICAgYnJhbmNoTWFwOiB7CiAgICAgICIwIjogewogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNDYsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA1MCwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAiaWYiLAogICAgICAgIGxvY2F0aW9uczogW3sKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDQ2LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNTAsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDQ2LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNTAsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH1dLAogICAgICAgIGxpbmU6IDQ2CiAgICAgIH0KICAgIH0sCiAgICBzOiB7CiAgICAgICIwIjogMCwKICAgICAgIjEiOiAwLAogICAgICAiMiI6IDAsCiAgICAgICIzIjogMCwKICAgICAgIjQiOiAwLAogICAgICAiNSI6IDAsCiAgICAgICI2IjogMCwKICAgICAgIjciOiAwLAogICAgICAiOCI6IDAsCiAgICAgICI5IjogMCwKICAgICAgIjEwIjogMCwKICAgICAgIjExIjogMCwKICAgICAgIjEyIjogMCwKICAgICAgIjEzIjogMCwKICAgICAgIjE0IjogMCwKICAgICAgIjE1IjogMAogICAgfSwKICAgIGY6IHsKICAgICAgIjAiOiAwLAogICAgICAiMSI6IDAsCiAgICAgICIyIjogMAogICAgfSwKICAgIGI6IHsKICAgICAgIjAiOiBbMCwgMF0KICAgIH0sCiAgICBfY292ZXJhZ2VTY2hlbWE6ICI0M2UyN2UxMzhlYmY5Y2ZjNTk2NmIwODJjZjlhMDI4MzAyZWQ0MTg0IiwKICAgIGhhc2g6ICJlNDdmYmNhZmMxOTYxZGMyZGM1ZWNhOTRlMDk5Nzg4M2Y2OGM2MzFkIgogIH07CiAgdmFyIGNvdmVyYWdlID0gZ2xvYmFsW2djdl0gfHwgKGdsb2JhbFtnY3ZdID0ge30pOwoKICBpZiAoY292ZXJhZ2VbcGF0aF0gJiYgY292ZXJhZ2VbcGF0aF0uaGFzaCA9PT0gaGFzaCkgewogICAgcmV0dXJuIGNvdmVyYWdlW3BhdGhdOwogIH0KCiAgcmV0dXJuIGNvdmVyYWdlW3BhdGhdID0gY292ZXJhZ2VEYXRhOwp9KCk7CgovKgogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7Ci8qKgogKiBGZHNDb2FzdGVyQ29tcG9uZW50IGNvbnN0cnVjdG9yLgogKgogKiBAY29uc3RydWN0b3IKICovCgpmdW5jdGlvbiBGZHNDb2FzdGVyQ29tcG9uZW50KCkgewogIGNvdl8yZHhvb2xzdjk2LmZbMF0rKzsKICBjb3ZfMmR4b29sc3Y5Ni5zWzBdKys7CiAgdGhpcy50aXRsZSA9ICcnOwogIGNvdl8yZHhvb2xzdjk2LnNbMV0rKzsKICB0aGlzLm1lc3NhZ2UgPSAnJzsKICBjb3ZfMmR4b29sc3Y5Ni5zWzJdKys7CiAgdGhpcy5pY29uID0gJyc7CiAgY292XzJkeG9vbHN2OTYuc1szXSsrOwogIHRoaXMuY29sb3IgPSAnJzsKICBjb3ZfMmR4b29sc3Y5Ni5zWzRdKys7CiAgdGhpcy5zbmFja0JhclJlZiA9IHVuZGVmaW5lZDsKICBjb3ZfMmR4b29sc3Y5Ni5zWzVdKys7CiAgdGhpcy52aWV3Q29udGFpbmVyUmVmID0gdW5kZWZpbmVkOwp9Cgpjb3ZfMmR4b29sc3Y5Ni5zWzZdKys7CkZkc0NvYXN0ZXJDb21wb25lbnQucHJvdG90eXBlID0gewogIGNvbnN0cnVjdG9yOiBGZHNDb2FzdGVyQ29tcG9uZW50LAoKICAvKioKICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnQuCiAgICovCiAgbmdBZnRlclZpZXdDaGVja2VkOiBmdW5jdGlvbiBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7CiAgICBjb3ZfMmR4b29sc3Y5Ni5mWzFdKys7CiAgICBjb3ZfMmR4b29sc3Y5Ni5zWzddKys7CiAgICAkKCcuZmRzLXNuYWNrYmFyLXdyYXBwZXInKS5jc3MoJ2JvcmRlci1jb2xvcicsIHRoaXMuY29sb3IpOwogICAgY292XzJkeG9vbHN2OTYuc1s4XSsrOwogICAgJCgnLmZkcy1zbmFja2Jhci10aXRsZScpLmNzcygnY29sb3InLCB0aGlzLmNvbG9yKTsKICAgIGNvdl8yZHhvb2xzdjk2LnNbOV0rKzsKICAgICQoJy5mZHMtY29hc3Rlci1pY29uJykuY3NzKCdjb2xvcicsIHRoaXMuY29sb3IpOwogICAgY292XzJkeG9vbHN2OTYuc1sxMF0rKzsKCiAgICBpZiAodGhpcy5pY29uKSB7CiAgICAgIGNvdl8yZHhvb2xzdjk2LmJbMF1bMF0rKzsKICAgICAgY292XzJkeG9vbHN2OTYuc1sxMV0rKzsKICAgICAgJCgnLmZkcy1zbmFja2Jhci13cmFwcGVyJykuY3NzKCdwYWRkaW5nJywgJzE1cHggMTVweCAxNXB4IDQ1cHgnKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvdl8yZHhvb2xzdjk2LmJbMF1bMV0rKzsKICAgICAgY292XzJkeG9vbHN2OTYuc1sxMl0rKzsKICAgICAgJCgnLmZkcy1zbmFja2Jhci13cmFwcGVyJykuY3NzKCdwYWRkaW5nJywgJzE1cHggMTVweCAxNXB4IDE1cHgnKTsKICAgIH0KICB9LAoKICAvKioKICAgKiBDbG9zZSB0aGUgc25hY2tiYXIgYW5kIHNlbmQgYSBjYW5jZWwgcmVzcG9uc2UgdG8gYW55IHN1YnNjcmliZXJzLgogICAqLwogIGNhbmNlbDogZnVuY3Rpb24gY2FuY2VsKCkgewogICAgY292XzJkeG9vbHN2OTYuZlsyXSsrOwogICAgY292XzJkeG9vbHN2OTYuc1sxM10rKzsKICAgIHRoaXMuc25hY2tCYXJSZWYuZGlzbWlzcyhmYWxzZSk7CiAgfQp9Owpjb3ZfMmR4b29sc3Y5Ni5zWzE0XSsrOwpGZHNDb2FzdGVyQ29tcG9uZW50LmFubm90YXRpb25zID0gW25ldyBDb21wb25lbnQoewogIHNlbGVjdG9yOiAnZmRzLWNvYXN0ZXInLAogIHRlbXBsYXRlOiByZXF1aXJlKCcuL2NvYXN0ZXIuY29tcG9uZW50Lmh0bWwnKX0pXTsKY292XzJkeG9vbHN2OTYuc1sxNV0rKzsKRmRzQ29hc3RlckNvbXBvbmVudC5wYXJhbWV0ZXJzID0gW107CmV4cG9ydCB7IEZkc0NvYXN0ZXJDb21wb25lbnQgfTs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/57f0dc9088861beb17eebcd945cc5627.json b/.cache-loader-coverage/57f0dc9088861beb17eebcd945cc5627.json
new file mode 100644
index 0000000..caf7104
--- /dev/null
+++ b/.cache-loader-coverage/57f0dc9088861beb17eebcd945cc5627.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js","mtime":1563469805293},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIGNvdl8xMGh6bXQ1cGFsID0gZnVuY3Rpb24gKCkgewogIHZhciBwYXRoID0gIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9zbmFja2JhcnMvZmRzLXNuYWNrYmFycy5tb2R1bGUuanMiOwogIHZhciBoYXNoID0gIjNmMTVlYTc0MmZmY2M2ZDY3ZTk4YzU4MmUyZTM3MTk4Yzc4NDRkN2MiOwogIHZhciBnbG9iYWwgPSBuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsKICB2YXIgZ2N2ID0gIl9fY292ZXJhZ2VfXyI7CiAgdmFyIGNvdmVyYWdlRGF0YSA9IHsKICAgIHBhdGg6ICIvVXNlcnMvamFzbGFuL0RldmVsb3BtZW50L25pZmktZmRzL3BsYXRmb3JtL2NvcmUvc25hY2tiYXJzL2Zkcy1zbmFja2JhcnMubW9kdWxlLmpzIiwKICAgIHN0YXRlbWVudE1hcDogewogICAgICAiMCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDIsCiAgICAgICAgICBjb2x1bW46IDIyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDQ4LAogICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgfQogICAgICB9LAogICAgICAiMSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNTAsCiAgICAgICAgICBjb2x1bW46IDM5CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDUyLAogICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgfQogICAgICB9LAogICAgICAiMiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNjMsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNjUsCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA2NywKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA5MSwKICAgICAgICAgIGNvbHVtbjogMgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGZuTWFwOiB7CiAgICAgICIwIjogewogICAgICAgIG5hbWU6ICJGZHNTbmFja0JhcnNNb2R1bGUiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDU5LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNTksCiAgICAgICAgICAgIGNvbHVtbjogMjcKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNTksCiAgICAgICAgICAgIGNvbHVtbjogMzAKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNjEsCiAgICAgICAgICAgIGNvbHVtbjogMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogNTkKICAgICAgfQogICAgfSwKICAgIGJyYW5jaE1hcDoge30sCiAgICBzOiB7CiAgICAgICIwIjogMCwKICAgICAgIjEiOiAwLAogICAgICAiMiI6IDAsCiAgICAgICIzIjogMAogICAgfSwKICAgIGY6IHsKICAgICAgIjAiOiAwCiAgICB9LAogICAgYjoge30sCiAgICBfY292ZXJhZ2VTY2hlbWE6ICI0M2UyN2UxMzhlYmY5Y2ZjNTk2NmIwODJjZjlhMDI4MzAyZWQ0MTg0IiwKICAgIGhhc2g6ICIzZjE1ZWE3NDJmZmNjNmQ2N2U5OGM1ODJlMmUzNzE5OGM3ODQ0ZDdjIgogIH07CiAgdmFyIGNvdmVyYWdlID0gZ2xvYmFsW2djdl0gfHwgKGdsb2JhbFtnY3ZdID0ge30pOwoKICBpZiAoY292ZXJhZ2VbcGF0aF0gJiYgY292ZXJhZ2VbcGF0aF0uaGFzaCA9PT0gaGFzaCkgewogICAgcmV0dXJuIGNvdmVyYWdlW3BhdGhdOwogIH0KCiAgcmV0dXJuIGNvdmVyYWdlW3BhdGhdID0gY292ZXJhZ2VEYXRhOwp9KCk7CgovKgogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsKaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0JzsKaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJzsKaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0U25hY2tCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7CmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnOwppbXBvcnQgeyBGZHNTbmFja0JhckNvbXBvbmVudCwgRmRzU25hY2tCYXJUaXRsZURpcmVjdGl2ZSwgRmRzU25hY2tCYXJBY3Rpb25zRGlyZWN0aXZlLCBGZHNTbmFja0JhckNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL2Zkcy1zbmFja2Jhci5jb21wb25lbnQnOwppbXBvcnQgeyBJQ29hc3RlckNvbmZpZywgRmRzU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zbmFja2Jhci5zZXJ2aWNlJzsKaW1wb3J0IHsgRmRzQ29hc3RlckNvbXBvbmVudCB9IGZyb20gJy4vY29hc3Rlci9jb2FzdGVyLmNvbXBvbmVudCc7CnZhciBGRFNfU05BQ0tCQVJTID0gKGNvdl8xMGh6bXQ1cGFsLnNbMF0rKywgW0Zkc1NuYWNrQmFyQ29tcG9uZW50LCBGZHNTbmFja0JhclRpdGxlRGlyZWN0aXZlLCBGZHNTbmFja0JhckFjdGlvbnNEaXJlY3RpdmUsIEZkc1NuYWNrQmFyQ29udGVudERpcmVjdGl2ZSwgRmRzQ29hc3RlckNvbXBvbmVudF0pOwp2YXIgRkRTX1NOQUNLQkFSU19FTlRSWV9DT01QT05FTlRTID0gKGNvdl8xMGh6bXQ1cGFsLnNbMV0rKywgW0Zkc0NvYXN0ZXJDb21wb25lbnRdKTsKLyoqCiAqIEZkc1NuYWNrQmFyc01vZHVsZSBjb25zdHJ1Y3Rvci4KICoKICogQGNvbnN0cnVjdG9yCiAqLwoKZnVuY3Rpb24gRmRzU25hY2tCYXJzTW9kdWxlKCkgewogIGNvdl8xMGh6bXQ1cGFsLmZbMF0rKzsKfQoKY292XzEwaHptdDVwYWwuc1syXSsrOwpGZHNTbmFja0JhcnNNb2R1bGUucHJvdG90eXBlID0gewogIGNvbnN0cnVjdG9yOiBGZHNTbmFja0JhcnNNb2R1bGUKfTsKY292XzEwaHptdDVwYWwuc1szXSsrOwpGZHNTbmFja0JhcnNNb2R1bGUuYW5ub3RhdGlvbnMgPSBbbmV3IE5nTW9kdWxlKHsKICBpbXBvcnRzOiBbRmxleExheW91dE1vZHVsZSwgRm9ybXNNb2R1bGUsIENvbW1vbk1vZHVsZSwgTWF0U25hY2tCYXJNb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGVdLAogIGRlY2xhcmF0aW9uczogW0ZEU19TTkFDS0JBUlNdLAogIGV4cG9ydHM6IFtGRFNfU05BQ0tCQVJTXSwKICBwcm92aWRlcnM6IFtGZHNTbmFja0JhclNlcnZpY2VdLAogIGVudHJ5Q29tcG9uZW50czogW0ZEU19TTkFDS0JBUlNfRU5UUllfQ09NUE9ORU5UU10KfSldOwpleHBvcnQgeyBGZHNTbmFja0JhcnNNb2R1bGUsIElDb2FzdGVyQ29uZmlnLCBGZHNTbmFja0JhclNlcnZpY2UsIEZkc1NuYWNrQmFyQ29tcG9uZW50LCBGZHNTbmFja0JhclRpdGxlRGlyZWN0aXZlLCBGZHNTbmFja0JhckNvbnRlbnREaXJlY3RpdmUsIEZkc1NuYWNrQmFyQWN0aW9uc0RpcmVjdGl2ZSwgRmRzQ29hc3RlckNvbXBvbmVudCB9Ow=="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/581e6246896bfaf2a16ecf0e6a6b3650.json b/.cache-loader-coverage/581e6246896bfaf2a16ecf0e6a6b3650.json
new file mode 100644
index 0000000..6a5ac43
--- /dev/null
+++ b/.cache-loader-coverage/581e6246896bfaf2a16ecf0e6a6b3650.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js","mtime":1563472991603},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7CmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7CmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7CmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsIE1hdENhcmRNb2R1bGUsIE1hdENoZWNrYm94TW9kdWxlLCBNYXRDaGlwc01vZHVsZSwgTWF0RGF0ZXBpY2tlck1vZHVsZSwgTWF0RGlhbG9nTW9kdWxlLCBNYXRFeHBhbnNpb25Nb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0R3JpZExpc3RNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRMaXN0TW9kdWxlLCBNYXRNZW51TW9kdWxlLCBNYXRQcm9ncmVzc0Jhck1vZHVsZSwgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLCBNYXRSYWRpb01vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBNYXRTbGlkZVRvZ2dsZU1vZHVsZSwgTWF0U2xpZGVyTW9kdWxlLCBNYXRTaWRlbmF2TW9kdWxlLCBNYXRTbmFja0Jhck1vZHVsZSwgTWF0U3RlcHBlck1vZHVsZSwgTWF0VGFic01vZHVsZSwgTWF0VG9vbGJhck1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZSwgTWF0UGFnaW5hdG9yTW9kdWxlLCBNYXRTb3J0TW9kdWxlLCBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJzsKaW1wb3J0IHsgQnJvd3Nlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInOwppbXBvcnQgeyBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7CmltcG9ydCB7IENvdmFsZW50Q29tbW9uTW9kdWxlLCBDb3ZhbGVudENoaXBzTW9kdWxlLCBDb3ZhbGVudERpYWxvZ3NNb2R1bGUsIENvdmFsZW50RXhwYW5zaW9uUGFuZWxNb2R1bGUsIENvdmFsZW50UGFnaW5nTW9kdWxlIH0gZnJvbSAnQGNvdmFsZW50L2NvcmUnOwppbXBvcnQgeyBDb3ZhbGVudFN0ZXBzTW9kdWxlIH0gZnJvbSAnQGNvdmFsZW50L2NvcmUvc3RlcHMnOwppbXBvcnQgeyBDb3ZhbGVudERhdGFUYWJsZU1vZHVsZSB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2RhdGEtdGFibGUnOwppbXBvcnQgeyBGZHNEaWFsb2dzTW9kdWxlIH0gZnJvbSAnLi9kaWFsb2dzL2Zkcy1kaWFsb2dzLm1vZHVsZSc7CmltcG9ydCB7IEZkc1NuYWNrQmFyc01vZHVsZSB9IGZyb20gJy4vc25hY2tiYXJzL2Zkcy1zbmFja2JhcnMubW9kdWxlJzsKLyoqCiAqIEZsb3dEZXNpZ25TeXN0ZW1Nb2R1bGUgY29uc3RydWN0b3IuCiAqCiAqIEBjb25zdHJ1Y3RvcgogKi8KCmZ1bmN0aW9uIEZsb3dEZXNpZ25TeXN0ZW1Nb2R1bGUoKSB7CiAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgewogICAgLy9hZGQgZmRzIGF0dHIgdG8gYm9keSB0YWcgdG8gYWxsb3cgZmluZSBncmFpbiBzdHlsZSBvdmVycmlkZXMKICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCdmZHMnLCAnJyk7IC8vb3ZlcnJpZGUgdGhlIGhvdmVyIHN0eWxlcyBmb3IgY2hlY2tib3ggYm9yZGVycwoKICAgICQoZG9jdW1lbnQuYm9keSkub24oJ21vdXNlZW50ZXInLCAnLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXInLCBmdW5jdGlvbiAoKSB7CiAgICAgICQodGhpcykuZmluZCgnLm1hdC1jaGVja2JveC1mcmFtZScpLmNzcygnYm9yZGVyLWNvbG9yJywgJyMxNDkxQzEnKTsKICAgIH0pOwogICAgJChkb2N1bWVudC5ib2R5KS5vbignbW91c2VsZWF2ZScsICcubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcicsIGZ1bmN0aW9uICgpIHsKICAgICAgJCh0aGlzKS5maW5kKCcubWF0LWNoZWNrYm94LWZyYW1lJykuY3NzKCdib3JkZXItY29sb3InLCAnI0RERERERCcpOwogICAgfSk7CiAgfSk7Cn0KCkZsb3dEZXNpZ25TeXN0ZW1Nb2R1bGUucHJvdG90eXBlID0gewogIGNvbnN0cnVjdG9yOiBGbG93RGVzaWduU3lzdGVtTW9kdWxlCn07CkZsb3dEZXNpZ25TeXN0ZW1Nb2R1bGUuYW5ub3RhdGlvbnMgPSBbbmV3IE5nTW9kdWxlKHsKICBpbXBvcnRzOiBbRmxleExheW91dE1vZHVsZSwgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUsIENvbW1vbk1vZHVsZSwgQnJvd3Nlck1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSwgTWF0Q2FyZE1vZHVsZSwgTWF0Q2hlY2tib3hNb2R1bGUsIE1hdENoaXBzTW9kdWxlLCBNYXREYXRlcGlja2VyTW9kdWxlLCBNYXREaWFsb2dNb2R1bGUsIE1hdEV4cGFuc2lvbk1vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRHcmlkTGlzdE1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdExpc3RNb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdFByb2dyZXNzQmFyTW9kdWxlLCBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsIE1hdFJhZGlvTW9kdWxlLCBNYXRTZWxlY3RNb2R1bGUsIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLCBNYXRTbGlkZXJNb2R1bGUsIE1hdFNpZGVuYXZNb2R1bGUsIE1hdFNuYWNrQmFyTW9kdWxlLCBNYXRTdGVwcGVyTW9kdWxlLCBNYXRUYWJzTW9kdWxlLCBNYXRUb29sYmFyTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBNYXRQYWdpbmF0b3JNb2R1bGUsIE1hdFNvcnRNb2R1bGUsIE1hdFRhYmxlTW9kdWxlLCBDb3ZhbGVudENvbW1vbk1vZHVsZSwgQ292YWxlbnRDaGlwc01vZHVsZSwgQ292YWxlbnRTdGVwc01vZHVsZSwgQ292YWxlbnREYXRhVGFibGVNb2R1bGUsIENvdmFsZW50RGlhbG9nc01vZHVsZSwgQ292YWxlbnRFeHBhbnNpb25QYW5lbE1vZHVsZSwgQ292YWxlbnRQYWdpbmdNb2R1bGUsIEZkc0RpYWxvZ3NNb2R1bGUsIEZkc1NuYWNrQmFyc01vZHVsZV0sCiAgZXhwb3J0czogW0ZsZXhMYXlvdXRNb2R1bGUsIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlLCBDb21tb25Nb2R1bGUsIEJyb3dzZXJNb2R1bGUsIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsIE1hdENhcmRNb2R1bGUsIE1hdENoZWNrYm94TW9kdWxlLCBNYXRDaGlwc01vZHVsZSwgTWF0RGF0ZXBpY2tlck1vZHVsZSwgTWF0RGlhbG9nTW9kdWxlLCBNYXRFeHBhbnNpb25Nb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0R3JpZExpc3RNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRMaXN0TW9kdWxlLCBNYXRNZW51TW9kdWxlLCBNYXRQcm9ncmVzc0Jhck1vZHVsZSwgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLCBNYXRSYWRpb01vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBNYXRTbGlkZVRvZ2dsZU1vZHVsZSwgTWF0U2xpZGVyTW9kdWxlLCBNYXRTaWRlbmF2TW9kdWxlLCBNYXRTbmFja0Jhck1vZHVsZSwgTWF0U3RlcHBlck1vZHVsZSwgTWF0VGFic01vZHVsZSwgTWF0VG9vbGJhck1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZSwgTWF0UGFnaW5hdG9yTW9kdWxlLCBNYXRTb3J0TW9kdWxlLCBNYXRUYWJsZU1vZHVsZSwgQ292YWxlbnRDb21tb25Nb2R1bGUsIENvdmFsZW50Q2hpcHNNb2R1bGUsIENvdmFsZW50U3RlcHNNb2R1bGUsIENvdmFsZW50RGF0YVRhYmxlTW9kdWxlLCBDb3ZhbGVudERpYWxvZ3NNb2R1bGUsIENvdmFsZW50RXhwYW5zaW9uUGFuZWxNb2R1bGUsIENvdmFsZW50UGFnaW5nTW9kdWxlLCBGZHNEaWFsb2dzTW9kdWxlLCBGZHNTbmFja0JhcnNNb2R1bGVdCn0pXTsKZXhwb3J0IGRlZmF1bHQgRmxvd0Rlc2lnblN5c3RlbU1vZHVsZTs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/59fc9e1f4c1c59b41fb3b59b3d34b92c.json b/.cache-loader-coverage/59fc9e1f4c1c59b41fb3b59b3d34b92c.json
new file mode 100644
index 0000000..33f6431
--- /dev/null
+++ b/.cache-loader-coverage/59fc9e1f4c1c59b41fb3b59b3d34b92c.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/fds-demo.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/fds-demo.js","mtime":1563472991608},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:ZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9CgovKgogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKICogKHRoZSAnTGljZW5zZScpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmltcG9ydCB7IFRkRGF0YVRhYmxlU2VydmljZSB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2RhdGEtdGFibGUnOwppbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7CmltcG9ydCB7IEZkc0RpYWxvZ1NlcnZpY2UsIEZkc1NuYWNrQmFyU2VydmljZSwgRmRzQW5pbWF0aW9ucyB9IGZyb20gJ0BuaWZpLWZkcy9jb3JlJzsKaW1wb3J0IEZkc1NlcnZpY2UgZnJvbSAnd2ViYXBwL3NlcnZpY2VzL2Zkcy5zZXJ2aWNlLmpzJzsKaW1wb3J0IEZkc0RlbW9EaWFsb2cgZnJvbSAnd2ViYXBwL2NvbXBvbmVudHMvZmxvdy1kZXNpZ24tc3lzdGVtL2RpYWxvZ3MvZGVtby9mZHMtZGVtby1kaWFsb2cuanMnOwoKdmFyIE5VTUJFUl9GT1JNQVQgPSBmdW5jdGlvbiBOVU1CRVJfRk9STUFUKHYpIHsKICByZXR1cm4gdjsKfTsKCnZhciBERUNJTUFMX0ZPUk1BVCA9IGZ1bmN0aW9uIERFQ0lNQUxfRk9STUFUKHYpIHsKICByZXR1cm4gdi50b0ZpeGVkKDIpOwp9OwoKdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwovKioKICogRmRzRGVtbyBjb25zdHJ1Y3Rvci4KICoKICogQHBhcmFtIEZkc1NuYWNrQmFyU2VydmljZSAgICBUaGUgRkRTIHNuYWNrIGJhciBzZXJ2aWNlIG1vZHVsZS4KICogQHBhcmFtIEZkc1NlcnZpY2UgICAgICAgICAgICBUaGUgRkRTIHNlcnZpY2UgbW9kdWxlLgogKiBAcGFyYW0gZGlhbG9nICAgICAgICAgICAgICAgIFRoZSBhbmd1bGFyIG1hdGVyaWFsIGRpYWxvZyBtb2R1bGUuCiAqIEBwYXJhbSBUZERpYWxvZ1NlcnZpY2UgICAgICAgVGhlIGNvdmFsZW50IGRpYWxvZyBzZXJ2aWNlIG1vZHVsZS4KICogQHBhcmFtIFRkRGF0YVRhYmxlU2VydmljZSAgICBUaGUgY292YWxlbnQgZGF0YSB0YWJsZSBzZXJ2aWNlIG1vZHVsZS4KICogQGNvbnN0cnVjdG9yCiAqLwoKZnVuY3Rpb24gRmRzRGVtbyhGZHNTbmFja0JhclNlcnZpY2UsIEZkc1NlcnZpY2UsIGRpYWxvZywgVGREYXRhVGFibGVTZXJ2aWNlLCBGZHNEaWFsb2dTZXJ2aWNlKSB7CiAgdGhpcy5mZHNTZXJ2aWNlID0gRmRzU2VydmljZTsgLy88ZWRpdG9yLWZvbGQgZGVzYz0nU25hY2sgQmFycyc+CgogIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gRmRzU25hY2tCYXJTZXJ2aWNlOyAvLzwvZWRpdG9yLWZvbGQ+CiAgLy88ZWRpdG9yLWZvbGQgZGVzYz0nRGlhbG9nJz4KCiAgdGhpcy5kaWFsb2cgPSBkaWFsb2c7IC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdTaW1wbGUgRGlhbG9ncyc+CgogIHRoaXMuZGlhbG9nU2VydmljZSA9IEZkc0RpYWxvZ1NlcnZpY2U7IC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdFeHBhbnNpb24gUGFuZWwnPgoKICB0aGlzLmV4cGFuZENvbGxhcHNlRXhwYW5zaW9uMU1zZyA9ICdObyBleHBhbmRlZC9jb2xsYXBzZWQgZGV0ZWN0ZWQgeWV0JzsKICB0aGlzLmV4cGFuc2lvbjEgPSBmYWxzZTsKICB0aGlzLmRpc2FibGVkID0gZmFsc2U7IC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdBdXRvY29tcGxldGUnPgoKICB0aGlzLmN1cnJlbnRTdGF0ZSA9ICcnOwogIHRoaXMucmVhY3RpdmVTdGF0ZXMgPSAnJzsKICB0aGlzLnRkU3RhdGVzID0gW107CiAgdGhpcy50ZERpc2FibGVkID0gZmFsc2U7CiAgdGhpcy5zdGF0ZXMgPSBbewogICAgY29kZTogJ0FMJywKICAgIG5hbWU6ICdBbGFiYW1hJwogIH0sIHsKICAgIGNvZGU6ICdBSycsCiAgICBuYW1lOiAnQWxhc2thJwogIH0sIHsKICAgIGNvZGU6ICdBWicsCiAgICBuYW1lOiAnQXJpem9uYScKICB9LCB7CiAgICBjb2RlOiAnQVInLAogICAgbmFtZTogJ0Fya2Fuc2FzJwogIH0sIHsKICAgIGNvZGU6ICdDQScsCiAgICBuYW1lOiAnQ2FsaWZvcm5pYScKICB9LCB7CiAgICBjb2RlOiAnQ08nLAogICAgbmFtZTogJ0NvbG9yYWRvJwogIH0sIHsKICAgIGNvZGU6ICdDVCcsCiAgICBuYW1lOiAnQ29ubmVjdGljdXQnCiAgfSwgewogICAgY29kZTogJ0RFJywKICAgIG5hbWU6ICdEZWxhd2FyZScKICB9LCB7CiAgICBjb2RlOiAnRkwnLAogICAgbmFtZTogJ0Zsb3JpZGEnCiAgfSwgewogICAgY29kZTogJ0dBJywKICAgIG5hbWU6ICdHZW9yZ2lhJwogIH0sIHsKICAgIGNvZGU6ICdISScsCiAgICBuYW1lOiAnSGF3YWlpJwogIH0sIHsKICAgIGNvZGU6ICdJRCcsCiAgICBuYW1lOiAnSWRhaG8nCiAgfSwgewogICAgY29kZTogJ0lMJywKICAgIG5hbWU6ICdJbGxpbm9pcycKICB9LCB7CiAgICBjb2RlOiAnSU4nLAogICAgbmFtZTogJ0luZGlhbmEnCiAgfSwgewogICAgY29kZTogJ0lBJywKICAgIG5hbWU6ICdJb3dhJwogIH0sIHsKICAgIGNvZGU6ICdLUycsCiAgICBuYW1lOiAnS2Fuc2FzJwogIH0sIHsKICAgIGNvZGU6ICdLWScsCiAgICBuYW1lOiAnS2VudHVja3knCiAgfSwgewogICAgY29kZTogJ0xBJywKICAgIG5hbWU6ICdMb3Vpc2lhbmEnCiAgfSwgewogICAgY29kZTogJ01FJywKICAgIG5hbWU6ICdNYWluZScKICB9LCB7CiAgICBjb2RlOiAnTUQnLAogICAgbmFtZTogJ01hcnlsYW5kJwogIH0sIHsKICAgIGNvZGU6ICdNQScsCiAgICBuYW1lOiAnTWFzc2FjaHVzZXR0cycKICB9LCB7CiAgICBjb2RlOiAnTUknLAogICAgbmFtZTogJ01pY2hpZ2FuJwogIH0sIHsKICAgIGNvZGU6ICdNTicsCiAgICBuYW1lOiAnTWlubmVzb3RhJwogIH0sIHsKICAgIGNvZGU6ICdNUycsCiAgICBuYW1lOiAnTWlzc2lzc2lwcGknCiAgfSwgewogICAgY29kZTogJ01PJywKICAgIG5hbWU6ICdNaXNzb3VyaScKICB9LCB7CiAgICBjb2RlOiAnTVQnLAogICAgbmFtZTogJ01vbnRhbmEnCiAgfSwgewogICAgY29kZTogJ05FJywKICAgIG5hbWU6ICdOZWJyYXNrYScKICB9LCB7CiAgICBjb2RlOiAnTlYnLAogICAgbmFtZTogJ05ldmFkYScKICB9LCB7CiAgICBjb2RlOiAnTkgnLAogICAgbmFtZTogJ05ldyBIYW1wc2hpcmUnCiAgfSwgewogICAgY29kZTogJ05KJywKICAgIG5hbWU6ICdOZXcgSmVyc2V5JwogIH0sIHsKICAgIGNvZGU6ICdOTScsCiAgICBuYW1lOiAnTmV3IE1leGljbycKICB9LCB7CiAgICBjb2RlOiAnTlknLAogICAgbmFtZTogJ05ldyBZb3JrJwogIH0sIHsKICAgIGNvZGU6ICdOQycsCiAgICBuYW1lOiAnTm9ydGggQ2Fyb2xpbmEnCiAgfSwgewogICAgY29kZTogJ05EJywKICAgIG5hbWU6ICdOb3J0aCBEYWtvdGEnCiAgfSwgewogICAgY29kZTogJ09IJywKICAgIG5hbWU6ICdPaGlvJwogIH0sIHsKICAgIGNvZGU6ICdPSycsCiAgICBuYW1lOiAnT2tsYWhvbWEnCiAgfSwgewogICAgY29kZTogJ09SJywKICAgIG5hbWU6ICdPcmVnb24nCiAgfSwgewogICAgY29kZTogJ1BBJywKICAgIG5hbWU6ICdQZW5uc3lsdmFuaWEnCiAgfSwgewogICAgY29kZTogJ1JJJywKICAgIG5hbWU6ICdSaG9kZSBJc2xhbmQnCiAgfSwgewogICAgY29kZTogJ1NDJywKICAgIG5hbWU6ICdTb3V0aCBDYXJvbGluYScKICB9LCB7CiAgICBjb2RlOiAnU0QnLAogICAgbmFtZTogJ1NvdXRoIERha290YScKICB9LCB7CiAgICBjb2RlOiAnVE4nLAogICAgbmFtZTogJ1Rlbm5lc3NlZScKICB9LCB7CiAgICBjb2RlOiAnVFgnLAogICAgbmFtZTogJ1RleGFzJwogIH0sIHsKICAgIGNvZGU6ICdVVCcsCiAgICBuYW1lOiAnVXRhaCcKICB9LCB7CiAgICBjb2RlOiAnVlQnLAogICAgbmFtZTogJ1Zlcm1vbnQnCiAgfSwgewogICAgY29kZTogJ1ZBJywKICAgIG5hbWU6ICdWaXJnaW5pYScKICB9LCB7CiAgICBjb2RlOiAnV0EnLAogICAgbmFtZTogJ1dhc2hpbmd0b24nCiAgfSwgewogICAgY29kZTogJ1dWJywKICAgIG5hbWU6ICdXZXN0IFZpcmdpbmlhJwogIH0sIHsKICAgIGNvZGU6ICdXSScsCiAgICBuYW1lOiAnV2lzY29uc2luJwogIH0sIHsKICAgIGNvZGU6ICdXWScsCiAgICBuYW1lOiAnV3lvbWluZycKICB9XTsgLy88L2VkaXRvci1mb2xkPgogIC8vPGVkaXRvci1mb2xkIGRlc2M9J1NlYXJjaGFibGUgRXhwYW5zaW9uIFBhbmVscyc+CgogIHRoaXMuZGF0YVRhYmxlU2VydmljZSA9IFRkRGF0YVRhYmxlU2VydmljZTsKICB0aGlzLmRyb3BsZXRzID0gW3sKICAgIGlkOiAnMjNmNmNjNTktMDE1Ni0xMDAwLTA5YjQtMmIwNjEwMDg5MDkwJywKICAgIG5hbWU6ICdEZWNvbXByZXNzaW9uX0NpcmN1bGFyX0Zsb3cnLAogICAgZGlzcGxheU5hbWU6ICdEZWNvbXByZXNzZWQgQ2lyY3VsYXIgZmxvdycsCiAgICB0eXBlOiAnZmxvdycsCiAgICBzdWJsYWJlbDogJ0Egc3VibGFiZWwnLAogICAgY29tcGxpYW50OiB7CiAgICAgIGlkOiAnMjVmZDZ2djg3LTM1NDktMDAwMS0wNWc2LTRkNDU2Nzg5MDc2NScsCiAgICAgIGxhYmVsOiAnQ29tcGxpYW50JywKICAgICAgdHlwZTogJ2NlcnRpZmljYXRpb24nCiAgICB9LAogICAgZmxlZXQ6IHsKICAgICAgaWQ6ICcyM2Y2Y2M1OS0zNTQ5LTAwMDEtMDVnNi00ZDQ1Njc4OTA3NjUnLAogICAgICBsYWJlbDogJ0ZsZWV0JywKICAgICAgdHlwZTogJ2NlcnRpZmljYXRpb24nCiAgICB9LAogICAgcHJvZDogewogICAgICBpZDogJzUyZmQ2dnY4Ny0zNTQ5LTAwMDEtMDVnNi00ZDQ1Njc4OTA3NjUnLAogICAgICBsYWJlbDogJ1Byb2R1Y3Rpb24gUmVhZHknLAogICAgICB0eXBlOiAnY2VydGlmaWNhdGlvbicKICAgIH0sCiAgICBzZWN1cmU6IHsKICAgICAgaWQ6ICczMmY2Y2M1OS0zNTQ5LTAwMDEtMDVnNi00ZDQ1Njc4OTA3NjUnLAogICAgICBsYWJlbDogJ1NlY3VyZScsCiAgICAgIHR5cGU6ICdjZXJ0aWZpY2F0aW9uJwogICAgfSwKICAgIHZlcnNpb25zOiBbewogICAgICBpZDogJzIzZjZjYzU5LTAxNTYtMTAwMC0wNmI0LTJiMDgxMDA4OTA5MCcsCiAgICAgIHJldmlzaW9uOiAnMScsCiAgICAgIGRlcGVuZGVudEZsb3dzOiBbewogICAgICAgIGlkOiAnMjVmZDZ2djg3LTM1NDktMDAwMS0wNWc2LTRkNDU2Nzg5MDc2NScKICAgICAgfV0sCiAgICAgIGNyZWF0ZWQ6IGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpLAogICAgICB1cGRhdGVkOiBuZXcgRGF0ZSgpCiAgICB9LCB7CiAgICAgIGlkOiAnMjVmZDZ2djg3LTM1NDktMDAwMS0wNWc2LTRkNDU2Nzg5MDc2NScsCiAgICAgIHJldmlzaW9uOiAnMicsCiAgICAgIGRlcGVuZGVudEZsb3dzOiBbewogICAgICAgIGlkOiAnMjNmNmNjNTktMDE1Ni0xMDAwLTA2YjQtMmIwODEwMDg5MDkwJwogICAgICB9XSwKICAgICAgY3JlYXRlZDogbmV3IERhdGUoKSwKICAgICAgdXBkYXRlZDogbmV3IERhdGUoKQogICAgfV0sCiAgICBmbG93czogW10sCiAgICBleHRlbnNpb25zOiBbXSwKICAgIGFzc2V0czogW10sCiAgICBhY3Rpb25zOiBbewogICAgICAnbmFtZSc6ICdEZWxldGUnLAogICAgICAnaWNvbic6ICdmYSBmYS1jbG9zZScsCiAgICAgICd0b29sdGlwJzogJ0RlbGV0ZSBVc2VyJwogICAgfSwgewogICAgICAnbmFtZSc6ICdNYW5hZ2UnLAogICAgICAnaWNvbic6ICdmYSBmYS11c2VyJywKICAgICAgJ3Rvb2x0aXAnOiAnTWFuYWdlIFVzZXInCiAgICB9LCB7CiAgICAgICduYW1lJzogJ0FjdGlvbiAzJywKICAgICAgJ2ljb24nOiAnZmEgZmEtcXVlc3Rpb24nLAogICAgICAndG9vbHRpcCc6ICdXaGF0ZXZlciBlbHNlIHdlIHdhbnQgdG8gZG8uLi4nCiAgICB9XQogIH0sIHsKICAgIGlkOiAnMjVmZDZ2djg3LTMyNDktMDAwMS0wNWc2LTRkNDc2Nzg5MDc2NScsCiAgICBuYW1lOiAnRGF0ZUNvbnZlcnNpb24nLAogICAgZGlzcGxheU5hbWU6ICdEYXRlIGNvbnZlcnNpb24nLAogICAgdHlwZTogJ2Fzc2V0JywKICAgIHN1YmxhYmVsOiAnQSBzdWJsYWJlbCcsCiAgICBjb21wbGlhbnQ6IHsKICAgICAgaWQ6ICcyNWZkNnZ2MzQtMzU0OS0wMDAxLTA1ZzYtNGQ0NTY3ODkwNzY1JywKICAgICAgbGFiZWw6ICdDb21wbGlhbnQnLAogICAgICB0eXBlOiAnY2VydGlmaWNhdGlvbicKICAgIH0sCiAgICBwcm9kOiB7CiAgICAgIGlkOiAnNTJ2bjZ2djg3LTM1NDktMDAwMS0wNWc2LTRkNDU2Nzg5MDc2NScsCiAgICAgIGxhYmVsOiAnUHJvZHVjdGlvbiBSZWFkeScsCiAgICAgIHR5cGU6ICdjZXJ0aWZpY2F0aW9uJwogICAgfSwKICAgIHZlcnNpb25zOiBbewogICAgICBpZDogJzIzZjZpYzU5LTAxNTYtMTAwMC0wNmI0LTJiMDgxMDA4OTA5MCcsCiAgICAgIHJldmlzaW9uOiAnMScsCiAgICAgIGRlcGVuZGVudEZsb3dzOiBbewogICAgICAgIGlkOiAnMjNmNmNjMTktMDE1Ni0xMDAwLTA2YjQtMmIwODEwMDg5MDkwJwogICAgICB9XSwKICAgICAgY3JlYXRlZDogbmV3IERhdGUoKSwKICAgICAgdXBkYXRlZDogbmV3IERhdGUoKQogICAgfV0sCiAgICBmbG93czogW10sCiAgICBleHRlbnNpb25zOiBbXSwKICAgIGFzc2V0czogW10sCiAgICBhY3Rpb25zOiBbewogICAgICAnbmFtZSc6ICdEZWxldGUnLAogICAgICAnaWNvbic6ICdmYSBmYS1jbG9zZScsCiAgICAgICd0b29sdGlwJzogJ0RlbGV0ZSBVc2VyJwogICAgfV0KICB9LCB7CiAgICBpZDogJzUyZmQ2dnY4Ny0zMjk0LTAwMDEtMDVnNi00ZDQ3Njc4OTA3NjUnLAogICAgbmFtZTogJ25pZmktZW1haWwtYnVuZGxlJywKICAgIGRpc3BsYXlOYW1lOiAnbmlmaS1lbWFpbC1idW5kbGUnLAogICAgdHlwZTogJ2V4dGVuc2lvbicsCiAgICBzdWJsYWJlbDogJ0Egc3VibGFiZWwnLAogICAgY29tcGxpYW50OiB7CiAgICAgIGlkOiAnMzNmZDZ2djg3LTM1NDktMDAwMS0wNWc2LTRkNDU2Nzg5MDc2NScsCiAgICAgIGxhYmVsOiAnQ29tcGxpYW50JywKICAgICAgdGVzdDogewogICAgICAgIGxhYmVsOiAndGVzdCcKICAgICAgfSwKICAgICAgdHlwZTogJ2NlcnRpZmljYXRpb24nCiAgICB9LAogICAgdmVyc2lvbnM6IFt7CiAgICAgIGlkOiAnMjNkM2NjNTktMDE1Ni0xMDAwLTA2YjQtMmIwODEwMDg5MDkwJywKICAgICAgcmV2aXNpb246ICcxJywKICAgICAgZGVwZW5kZW50Rmxvd3M6IFt7CiAgICAgICAgaWQ6ICcyM2Y2Y2M4OS0wMTU2LTEwMDAtMDZiNC0yYjA4MTAwODkwOTAnCiAgICAgIH1dLAogICAgICBjcmVhdGVkOiBuZXcgRGF0ZSgpLAogICAgICB1cGRhdGVkOiBuZXcgRGF0ZSgpCiAgICB9XSwKICAgIGZsb3dzOiBbXSwKICAgIGV4dGVuc2lvbnM6IFtdLAogICAgYXNzZXRzOiBbXSwKICAgIGFjdGlvbnM6IFt7CiAgICAgICduYW1lJzogJ0RlbGV0ZScsCiAgICAgICdpY29uJzogJ2ZhIGZhLWNsb3NlJywKICAgICAgJ3Rvb2x0aXAnOiAnRGVsZXRlIFVzZXInCiAgICB9LCB7CiAgICAgICduYW1lJzogJ01hbmFnZScsCiAgICAgICdpY29uJzogJ2ZhIGZhLXVzZXInLAogICAgICAndG9vbHRpcCc6ICdNYW5hZ2UgVXNlcicKICAgIH1dCiAgfV07CiAgdGhpcy5maWx0ZXJlZERyb3BsZXRzID0gW107CiAgdGhpcy5kcm9wbGV0Q29sdW1ucyA9IFt7CiAgICBuYW1lOiAnaWQnLAogICAgbGFiZWw6ICdJRCcsCiAgICBzb3J0YWJsZTogdHJ1ZQogIH0sIHsKICAgIG5hbWU6ICduYW1lJywKICAgIGxhYmVsOiAnTmFtZScsCiAgICBzb3J0YWJsZTogdHJ1ZQogIH0sIHsKICAgIG5hbWU6ICdkaXNwbGF5TmFtZScsCiAgICBsYWJlbDogJ0Rpc3BsYXkgTmFtZScsCiAgICBzb3J0YWJsZTogdHJ1ZQogIH0sIHsKICAgIG5hbWU6ICdzdWJsYWJlbCcsCiAgICBsYWJlbDogJ0xhYmVsJywKICAgIHNvcnRhYmxlOiB0cnVlCiAgfSwgewogICAgbmFtZTogJ3R5cGUnLAogICAgbGFiZWw6ICdUeXBlJywKICAgIHNvcnRhYmxlOiB0cnVlCiAgfV07CiAgdGhpcy5hY3RpdmVEcm9wbGV0Q29sdW1uID0gdGhpcy5kcm9wbGV0Q29sdW1uc1swXTsKICB0aGlzLmF1dG9Db21wbGV0ZURyb3BsZXRzID0gW107CiAgdGhpcy5kcm9wbGV0c1NlYXJjaFRlcm1zID0gW107IC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdEYXRhIFRhYmxlcyc+CgogIHRoaXMuZGF0YSA9IFt7CiAgICAnaWQnOiAxLAogICAgJ25hbWUnOiAnRnJvemVuIHlvZ3VydCcsCiAgICAndHlwZSc6ICdJY2UgY3JlYW0nLAogICAgJ2NhbG9yaWVzJzogMTU5LjAsCiAgICAnZmF0JzogNi4wLAogICAgJ2NhcmJzJzogMjQuMCwKICAgICdwcm90ZWluJzogNC4wLAogICAgJ3NvZGl1bSc6IDg3LjAsCiAgICAnY2FsY2l1bSc6IDE0LjAsCiAgICAnaXJvbic6IDEuMCwKICAgICdjb21tZW50cyc6ICdJIGxvdmUgZnJveW8hJywKICAgICdhY3Rpb25zJzogW3sKICAgICAgJ25hbWUnOiAnQWN0aW9uIDEnLAogICAgICAnaWNvbic6ICdmYSBmYS11c2VyJywKICAgICAgJ3Rvb2x0aXAnOiAnTWFuYWdlIFVzZXJzJwogICAgfSwgewogICAgICAnbmFtZSc6ICdBY3Rpb24gMicsCiAgICAgICdpY29uJzogJ2ZhIGZhLWtleScsCiAgICAgICd0b29sdGlwJzogJ01hbmFnZSBQZXJtaXNzaW9ucycKICAgIH1dCiAgfSwgewogICAgJ2lkJzogMiwKICAgICduYW1lJzogJ0ljZSBjcmVhbSBzYW5kd2ljaCcsCiAgICAndHlwZSc6ICdJY2UgY3JlYW0nLAogICAgJ2NhbG9yaWVzJzogMjM3LjAsCiAgICAnZmF0JzogOS4wLAogICAgJ2NhcmJzJzogMzcuMCwKICAgICdwcm90ZWluJzogNC4zLAogICAgJ3NvZGl1bSc6IDEyOS4wLAogICAgJ2NhbGNpdW0nOiA4LjAsCiAgICAnaXJvbic6IDEuMCwKICAgICdhY3Rpb25zJzogW3sKICAgICAgJ25hbWUnOiAnQWN0aW9uIDEnLAogICAgICAnaWNvbic6ICdmYSBmYS11c2VyJywKICAgICAgJ3Rvb2x0aXAnOiAnTWFuYWdlIFVzZXJzJwogICAgfSwgewogICAgICAnbmFtZSc6ICdBY3Rpb24gMicsCiAgICAgICdpY29uJzogJ2ZhIGZhLWtleScsCiAgICAgICd0b29sdGlwJzogJ01hbmFnZSBQZXJtaXNzaW9ucycKICAgIH0sIHsKICAgICAgJ25hbWUnOiAnQWN0aW9uIDMnLAogICAgICAndG9vbHRpcCc6ICdBY3Rpb24gMycKICAgIH0sIHsKICAgICAgJ25hbWUnOiAnQWN0aW9uIDQnLAogICAgICAnZGlzYWJsZWQnOiB0cnVlLAogICAgICAndG9vbHRpcCc6ICdBY3Rpb24gNCcKICAgIH0sIHsKICAgICAgJ25hbWUnOiAnQWN0aW9uIDUnLAogICAgICAndG9vbHRpcCc6ICdBY3Rpb24gNScKICAgIH1dCiAgfSwgewogICAgJ2lkJzogMywKICAgICduYW1lJzogJ0VjbGFpcicsCiAgICAndHlwZSc6ICdQYXN0cnknLAogICAgJ2NhbG9yaWVzJzogMjYyLjAsCiAgICAnZmF0JzogMTYuMCwKICAgICdjYXJicyc6IDI0LjAsCiAgICAncHJvdGVpbic6IDYuMCwKICAgICdzb2RpdW0nOiAzMzcuMCwKICAgICdjYWxjaXVtJzogNi4wLAogICAgJ2lyb24nOiA3LjAsCiAgICAnYWN0aW9ucyc6IFt7CiAgICAgICduYW1lJzogJ0FjdGlvbiAxJywKICAgICAgJ2ljb24nOiAnZmEgZmEtdXNlcicsCiAgICAgICd0b29sdGlwJzogJ01hbmFnZSBVc2VycycKICAgIH0sIHsKICAgICAgJ25hbWUnOiAnQWN0aW9uIDInLAogICAgICAnaWNvbic6ICdmYSBmYS1rZXknLAogICAgICAndG9vbHRpcCc6ICdNYW5hZ2UgUGVybWlzc2lvbnMnCiAgICB9LCB7CiAgICAgICduYW1lJzogJ0FjdGlvbiAzJywKICAgICAgJ3Rvb2x0aXAnOiAnQWN0aW9uIDMnCiAgICB9LCB7CiAgICAgICduYW1lJzogJ0FjdGlvbiA0JywKICAgICAgJ2Rpc2FibGVkJzogdHJ1ZSwKICAgICAgJ3Rvb2x0aXAnOiAnQWN0aW9uIDQnCiAgICB9LCB7CiAgICAgICduYW1lJzogJ0FjdGlvbiA1JywKICAgICAgJ3Rvb2x0aXAnOiAnQWN0aW9uIDUnCiAgICB9XQogIH0sIHsKICAgICdpZCc6IDQsCiAgICAnbmFtZSc6ICdDdXBjYWtlJywKICAgICd0eXBlJzogJ1Bhc3RyeScsCiAgICAnY2Fsb3JpZXMnOiAzMDUuMCwKICAgICdmYXQnOiAzLjcsCiAgICAnY2FyYnMnOiA2Ny4wLAogICAgJ3Byb3RlaW4nOiA0LjMsCiAgICAnc29kaXVtJzogNDEzLjAsCiAgICAnY2FsY2l1bSc6IDMuMCwKICAgICdpcm9uJzogOC4wLAogICAgJ2FjdGlvbnMnOiBbewogICAgICAnbmFtZSc6ICdBY3Rpb24gMScsCiAgICAgICdpY29uJzogJ2ZhIGZhLXVzZXInLAogICAgICAndG9vbHRpcCc6ICdNYW5hZ2UgVXNlcnMnCiAgICB9LCB7CiAgICAgICduYW1lJzogJ0FjdGlvbiAyJywKICAgICAgJ2ljb24nOiAnZmEgZmEta2V5JywKICAgICAgJ3Rvb2x0aXAnOiAnTWFuYWdlIFBlcm1pc3Npb25zJwogICAgfSwgewogICAgICAnbmFtZSc6ICdBY3Rpb24gMycsCiAgICAgICd0b29sdGlwJzogJ0FjdGlvbiAzJwogICAgfSwgewogICAgICAnbmFtZSc6ICdBY3Rpb24gNCcsCiAgICAgICdkaXNhYmxlZCc6IHRydWUsCiAgICAgICd0b29sdGlwJzogJ0FjdGlvbiA0JwogICAgfSwgewogICAgICAnbmFtZSc6ICdBY3Rpb24gNScsCiAgICAgICd0b29sdGlwJzogJ0FjdGlvbiA1JwogICAgfV0KICB9LCB7CiAgICAnaWQnOiA1LAogICAgJ25hbWUnOiAnSmVsbHkgYmVhbicsCiAgICAndHlwZSc6ICdDYW5keScsCiAgICAnY2Fsb3JpZXMnOiAzNzUuMCwKICAgICdmYXQnOiAwLjAsCiAgICAnY2FyYnMnOiA5NC4wLAogICAgJ3Byb3RlaW4nOiAwLjAsCiAgICAnc29kaXVtJzogNTAuMCwKICAgICdjYWxjaXVtJzogMC4wLAogICAgJ2lyb24nOiAwLjAKICB9LCB7CiAgICAnaWQnOiA2LAogICAgJ25hbWUnOiAnTG9sbGlwb3AnLAogICAgJ3R5cGUnOiAnQ2FuZHknLAogICAgJ2NhbG9yaWVzJzogMzkyLjAsCiAgICAnZmF0JzogMC4yLAogICAgJ2NhcmJzJzogOTguMCwKICAgICdwcm90ZWluJzogMC4wLAogICAgJ3NvZGl1bSc6IDM4LjAsCiAgICAnY2FsY2l1bSc6IDAuMCwKICAgICdpcm9uJzogMi4wCiAgfSwgewogICAgJ2lkJzogNywKICAgICduYW1lJzogJ0hvbmV5Y29tYicsCiAgICAndHlwZSc6ICdPdGhlcicsCiAgICAnY2Fsb3JpZXMnOiA0MDguMCwKICAgICdmYXQnOiAzLjIsCiAgICAnY2FyYnMnOiA4Ny4wLAogICAgJ3Byb3RlaW4nOiA2LjUsCiAgICAnc29kaXVtJzogNTYyLjAsCiAgICAnY2FsY2l1bSc6IDAuMCwKICAgICdpcm9uJzogNDUuMAogIH0sIHsKICAgICdpZCc6IDgsCiAgICAnbmFtZSc6ICdEb251dCcsCiAgICAndHlwZSc6ICdQYXN0cnknLAogICAgJ2NhbG9yaWVzJzogNDUyLjAsCiAgICAnZmF0JzogMjUuMCwKICAgICdjYXJicyc6IDUxLjAsCiAgICAncHJvdGVpbic6IDQuOSwKICAgICdzb2RpdW0nOiAzMjYuMCwKICAgICdjYWxjaXVtJzogMi4wLAogICAgJ2lyb24nOiAyMi4wCiAgfSwgewogICAgJ2lkJzogOSwKICAgICduYW1lJzogJ0tpdEthdCcsCiAgICAndHlwZSc6ICdDYW5keScsCiAgICAnY2Fsb3JpZXMnOiA1MTguMCwKICAgICdmYXQnOiAyNi4wLAogICAgJ2NhcmJzJzogNjUuMCwKICAgICdwcm90ZWluJzogNy4wLAogICAgJ3NvZGl1bSc6IDU0LjAsCiAgICAnY2FsY2l1bSc6IDEyLjAsCiAgICAnaXJvbic6IDYuMAogIH0sIHsKICAgICdpZCc6IDEwLAogICAgJ25hbWUnOiAnQ2hvY29sYXRlJywKICAgICd0eXBlJzogJ0NhbmR5JywKICAgICdjYWxvcmllcyc6IDUxOC4wLAogICAgJ2ZhdCc6IDI2LjAsCiAgICAnY2FyYnMnOiA2NS4wLAogICAgJ3Byb3RlaW4nOiA3LjAsCiAgICAnc29kaXVtJzogNTQuMCwKICAgICdjYWxjaXVtJzogMTIuMCwKICAgICdpcm9uJzogNi4wCiAgfSwgewogICAgJ2lkJzogMTEsCiAgICAnbmFtZSc6ICdDaGFtb3knLAogICAgJ3R5cGUnOiAnQ2FuZHknLAogICAgJ2NhbG9yaWVzJzogNTE4LjAsCiAgICAnZmF0JzogMjYuMCwKICAgICdjYXJicyc6IDY1LjAsCiAgICAncHJvdGVpbic6IDcuMCwKICAgICdzb2RpdW0nOiA1NC4wLAogICAgJ2NhbGNpdW0nOiAxMi4wLAogICAgJ2lyb24nOiA2LjAKICB9XTsKICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YTsKICB0aGlzLmZpbHRlcmVkVG90YWwgPSB0aGlzLmRhdGEubGVuZ3RoOwogIHRoaXMuY29sdW1ucyA9IFt7CiAgICBuYW1lOiAnY29tbWVudHMnLAogICAgbGFiZWw6ICdDb21tZW50cycsCiAgICB3aWR0aDogMTAKICB9LCB7CiAgICBuYW1lOiAnbmFtZScsCiAgICBsYWJlbDogJ0Rlc3NlcnQgKDEwMGcgc2VydmluZyknLAogICAgc29ydGFibGU6IHRydWUsCiAgICB3aWR0aDogMTAKICB9LCB7CiAgICBuYW1lOiAndHlwZScsCiAgICBsYWJlbDogJ1R5cGUnLAogICAgc29ydGFibGU6IHRydWUsCiAgICB3aWR0aDogMTAKICB9LCB7CiAgICBuYW1lOiAnY2Fsb3JpZXMnLAogICAgbGFiZWw6ICdDYWxvcmllcycsCiAgICBudW1lcmljOiB0cnVlLAogICAgZm9ybWF0OiBOVU1CRVJfRk9STUFULAogICAgc29ydGFibGU6IHRydWUsCiAgICB3aWR0aDogMTAKICB9LCB7CiAgICBuYW1lOiAnZmF0JywKICAgIGxhYmVsOiAnRmF0IChnKScsCiAgICBudW1lcmljOiB0cnVlLAogICAgZm9ybWF0OiBERUNJTUFMX0ZPUk1BVCwKICAgIHNvcnRhYmxlOiB0cnVlLAogICAgd2lkdGg6IDEwCiAgfSwgewogICAgbmFtZTogJ2NhcmJzJywKICAgIGxhYmVsOiAnQ2FyYnMgKGcpJywKICAgIG51bWVyaWM6IHRydWUsCiAgICBmb3JtYXQ6IE5VTUJFUl9GT1JNQVQsCiAgICBzb3J0YWJsZTogdHJ1ZSwKICAgIHdpZHRoOiAxMAogIH0sIHsKICAgIG5hbWU6ICdwcm90ZWluJywKICAgIGxhYmVsOiAnUHJvdGVpbiAoZyknLAogICAgbnVtZXJpYzogdHJ1ZSwKICAgIGZvcm1hdDogREVDSU1BTF9GT1JNQVQsCiAgICBzb3J0YWJsZTogdHJ1ZSwKICAgIHdpZHRoOiAxMAogIH0sIHsKICAgIG5hbWU6ICdzb2RpdW0nLAogICAgbGFiZWw6ICdTb2RpdW0gKG1nKScsCiAgICBudW1lcmljOiB0cnVlLAogICAgZm9ybWF0OiBOVU1CRVJfRk9STUFULAogICAgc29ydGFibGU6IHRydWUsCiAgICB3aWR0aDogMTAKICB9LCB7CiAgICBuYW1lOiAnY2FsY2l1bScsCiAgICBsYWJlbDogJ0NhbGNpdW0gKCUpJywKICAgIG51bWVyaWM6IHRydWUsCiAgICBmb3JtYXQ6IE5VTUJFUl9GT1JNQVQsCiAgICBzb3J0YWJsZTogdHJ1ZSwKICAgIHdpZHRoOiAxMAogIH0sIHsKICAgIG5hbWU6ICdpcm9uJywKICAgIGxhYmVsOiAnSXJvbiAoJSknLAogICAgbnVtZXJpYzogdHJ1ZSwKICAgIGZvcm1hdDogTlVNQkVSX0ZPUk1BVCwKICAgIHdpZHRoOiAxMAogIH1dOwogIHRoaXMuYWxsUm93c1NlbGVjdGVkID0gZmFsc2U7CiAgdGhpcy5hdXRvQ29tcGxldGVEYXRhID0gW107CiAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTsKICB0aGlzLnNlYXJjaFRlcm0gPSBbXTsKICB0aGlzLmZyb21Sb3cgPSAxOwogIHRoaXMuY3VycmVudFBhZ2UgPSAxOwogIHRoaXMucGFnZVNpemUgPSA1OwogIHRoaXMucGFnZUNvdW50ID0gMDsgLy88L2VkaXRvci1mb2xkPgogIC8vPGVkaXRvci1mb2xkIGRlc2M9J0NoaXBzICQgQXV0b2NvbXBsZXRlJz4KCiAgdGhpcy5yZWFkT25seSA9IGZhbHNlOwogIHRoaXMuaXRlbXMgPSBbJ3N0ZXBwZXInLCAnZXhwYW5zaW9uLXBhbmVsJywgJ21hcmtkb3duJywgJ2hpZ2hsaWdodCcsICdsb2FkaW5nJywgJ21lZGlhJywgJ2NoaXBzJywgJ2h0dHAnLCAnanNvbi1mb3JtYXR0ZXInLCAncGlwZXMnLCAnbmVlZCBtb3JlPyddOwogIHRoaXMuaXRlbXNSZXF1aXJlTWF0Y2ggPSB0aGlzLml0ZW1zLnNsaWNlKDAsIDYpOyAvLzwvZWRpdG9yLWZvbGQ+CiAgLy88ZWRpdG9yLWZvbGQgZGVzYz0nUmFkaW9zJz4KCiAgdGhpcy5mYXZvcml0ZVNlYXNvbiA9ICdBdXR1bW4nOwogIHRoaXMuc2Vhc29uT3B0aW9ucyA9IFsnV2ludGVyJywgJ1NwcmluZycsICdTdW1tZXInLCAnQXV0dW1uJ107IC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdTZWxlY3QnPgoKICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAnJzsKICB0aGlzLmZvb2RzID0gW3sKICAgIHZhbHVlOiAnc3RlYWstMCcsCiAgICB2aWV3VmFsdWU6ICdTdGVhaycKICB9LCB7CiAgICB2YWx1ZTogJ3BpenphLTEnLAogICAgdmlld1ZhbHVlOiAnUGl6emEnCiAgfSwgewogICAgdmFsdWU6ICd0YWNvcy0yJywKICAgIHZpZXdWYWx1ZTogJ1RhY29zJwogIH1dOyAvLzwvZWRpdG9yLWZvbGQ+CiAgLy88ZWRpdG9yLWZvbGQgZGVzYz0nQ2hlY2tib3gnPgoKICB0aGlzLnVzZXIgPSB7CiAgICBhZ3JlZXNUb1RPUzogZmFsc2UKICB9OwogIHRoaXMuZ3JvY2VyaWVzID0gW3sKICAgIGJvdWdodDogdHJ1ZSwKICAgIG5hbWU6ICdTZWl0YW4nCiAgfSwgewogICAgYm91Z2h0OiBmYWxzZSwKICAgIG5hbWU6ICdBbG1vbmQgTWVhbCBGbG91cicKICB9LCB7CiAgICBib3VnaHQ6IGZhbHNlLAogICAgbmFtZTogJ09yZ2FuaWMgRWdncycKICB9XTsgLy88L2VkaXRvci1mb2xkPgogIC8vPGVkaXRvci1mb2xkIGRlc2M9J1NsaWRlIFRvZ2dsZSc+CgogIHRoaXMuc3lzdGVtcyA9IFt7CiAgICBuYW1lOiAnTGlnaHRzJywKICAgIG9uOiBmYWxzZSwKICAgIGNvbG9yOiAncHJpbWFyeScKICB9LCB7CiAgICBuYW1lOiAnU3Vycm91bmQgU291bmQnLAogICAgb246IHRydWUsCiAgICBjb2xvcjogJ2FjY2VudCcKICB9LCB7CiAgICBuYW1lOiAnVC5WLicsCiAgICBvbjogdHJ1ZSwKICAgIGNvbG9yOiAnd2FybicKICB9XTsKICB0aGlzLmhvdXNlID0gewogICAgbG9ja0hvdXNlOiBmYWxzZQogIH07IC8vPC9lZGl0b3ItZm9sZD4KfQoKRmRzRGVtby5wcm90b3R5cGUgPSB7CiAgY29uc3RydWN0b3I6IEZkc0RlbW8sCiAgLy88ZWRpdG9yLWZvbGQgZGVzYz0nQXV0b2NvbXBsZXRlJz4KICBkaXNwbGF5Rm46IGZ1bmN0aW9uIGRpc3BsYXlGbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyA/IHZhbHVlLm5hbWUgOiB2YWx1ZTsKICB9LAogIGZpbHRlclN0YXRlczogZnVuY3Rpb24gZmlsdGVyU3RhdGVzKHZhbCkgewogICAgcmV0dXJuIHZhbCA/IHRoaXMuc3RhdGVzLmZpbHRlcihmdW5jdGlvbiAocykgewogICAgICByZXR1cm4gcy5uYW1lLm1hdGNoKG5ldyBSZWdFeHAodmFsLCAnZ2knKSk7CiAgICB9KSA6IHRoaXMuc3RhdGVzOwogIH0sCiAgLy88L2VkaXRvci1mb2xkPgogIC8vPGVkaXRvci1mb2xkIGRlc2M9J1NuYWNrIEJhcnMnPgogIHNob3dTdWNjZXNzU25hY2tCYXI6IGZ1bmN0aW9uIHNob3dTdWNjZXNzU25hY2tCYXIoKSB7CiAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuQ29hc3Rlcih7CiAgICAgIHRpdGxlOiAnU3VjY2VzcycsCiAgICAgIG1lc3NhZ2U6ICdTb21lIGhlbHAgdGV4dCByZWdhcmRpbmcgdGhlIHN1Y2Nlc3NmdWwgZXZlbnQuJywKICAgICAgdmVydGljYWxQb3NpdGlvbjogJ3RvcCcsCiAgICAgIGhvcml6b250YWxQb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgaWNvbjogJ2ZhIGZhLWNoZWNrLWNpcmNsZS1vJywKICAgICAgY29sb3I6ICcjMUVCNDc1JywKICAgICAgZHVyYXRpb246IDMwMDAKICAgIH0pOwogIH0sCiAgc2hvd1dhcm5TbmFja0JhcjogZnVuY3Rpb24gc2hvd1dhcm5TbmFja0JhcigpIHsKICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW5Db2FzdGVyKHsKICAgICAgdGl0bGU6ICdXYXJuaW5nJywKICAgICAgbWVzc2FnZTogJ1NvbWUgaGVscCB0ZXh0IHJlZ2FyZGluZyB0aGUgd2FybmluZy4nLAogICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiAndG9wJywKICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uOiAnbGVmdCcsCiAgICAgIGljb246ICdmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsCiAgICAgIGNvbG9yOiAnI0U5OEE0MCcsCiAgICAgIGR1cmF0aW9uOiAzMDAwCiAgICB9KTsKICB9LAogIHNob3dFcnJvclNuYWNrQmFyOiBmdW5jdGlvbiBzaG93RXJyb3JTbmFja0JhcigpIHsKICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW5Db2FzdGVyKHsKICAgICAgdGl0bGU6ICdFcnJvcicsCiAgICAgIG1lc3NhZ2U6ICdTb21lIGhlbHAgdGV4dCByZWdhcmRpbmcgdGhlIGNyaXRpY2FsIGVycm9yLiBUaGlzIGNvYXN0ZXIgd2lsbCBzdGF5IG9wZW4gdW50aWwgY2xvc2VkIHdpdGggdGhlIGB4YCBvciBpZiBhbm90aGVyIGNvYXN0ZXIgaXMgY3JlYXRlZC4nLAogICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiAnYm90dG9tJywKICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uOiAncmlnaHQnLAogICAgICBpY29uOiAnZmEgZmEtdGltZXMtY2lyY2xlLW8nLAogICAgICBjb2xvcjogJyNFRjYxNjInCiAgICB9KTsKICB9LAogIHNob3dSZWd1bGFyU25hY2tCYXI6IGZ1bmN0aW9uIHNob3dSZWd1bGFyU25hY2tCYXIoKSB7CiAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuQ29hc3Rlcih7CiAgICAgIHRpdGxlOiAnUmVndWxhcicsCiAgICAgIG1lc3NhZ2U6ICdTb21ldGhpbmcgaW50ZXJlc3RpbmcuJywKICAgICAgdmVydGljYWxQb3NpdGlvbjogJ2JvdHRvbScsCiAgICAgIGhvcml6b250YWxQb3NpdGlvbjogJ2xlZnQnLAogICAgICBjb2xvcjogJyM4MDg3OTMnLAogICAgICBkdXJhdGlvbjogMzAwMAogICAgfSk7CiAgfSwKICAvLzwvZWRpdG9yLWZvbGQ+CiAgLy88ZWRpdG9yLWZvbGQgZGVzYz0nRGlhbG9nJz4KICBvcGVuRGlhbG9nOiBmdW5jdGlvbiBvcGVuRGlhbG9nKCkgewogICAgdGhpcy5kaWFsb2cub3BlbihGZHNEZW1vRGlhbG9nKTsKICB9LAogIC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdFeHBhbnNpb24gUGFuZWwnPgogIHRvZ2dsZUV4cGFuc2lvbjE6IGZ1bmN0aW9uIHRvZ2dsZUV4cGFuc2lvbjEoKSB7CiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgdGhpcy5leHBhbnNpb24xID0gIXRoaXMuZXhwYW5zaW9uMTsKICAgIH0KICB9LAogIHRvZ2dsZURpc2FibGVkOiBmdW5jdGlvbiB0b2dnbGVEaXNhYmxlZCgpIHsKICAgIHRoaXMuZGlzYWJsZWQgPSAhdGhpcy5kaXNhYmxlZDsKICB9LAogIGV4cGFuZEV4cGFuc2lvbjFFdmVudDogZnVuY3Rpb24gZXhwYW5kRXhwYW5zaW9uMUV2ZW50KCkgewogICAgdGhpcy5leHBhbmRDb2xsYXBzZUV4cGFuc2lvbjFNc2cgPSAnRXhwYW5kIGV2ZW50IGVtaXR0ZWQuJzsKICB9LAogIGNvbGxhcHNlRXhwYW5zaW9uMUV2ZW50OiBmdW5jdGlvbiBjb2xsYXBzZUV4cGFuc2lvbjFFdmVudCgpIHsKICAgIHRoaXMuZXhwYW5kQ29sbGFwc2VFeHBhbnNpb24xTXNnID0gJ0NvbGxhcHNlIGV2ZW50IGVtaXR0ZWQuJzsKICB9LAogIC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdTaW1wbGUgRGlhbG9ncyc+CiAgb3BlbkFsZXJ0OiBmdW5jdGlvbiBvcGVuQWxlcnQoKSB7CiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkFsZXJ0KHsKICAgICAgdGl0bGU6ICdBbGVydCcsCiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSwKICAgICAgbWVzc2FnZTogJ1RoaXMgaXMgaG93IHNpbXBsZSBpdCBpcyB0byBjcmVhdGUgYW4gYWxlcnQgd2l0aCB0aGlzIHdyYXBwZXIgc2VydmljZS4nCiAgICB9KTsKICB9LAogIG9wZW5Db25maXJtOiBmdW5jdGlvbiBvcGVuQ29uZmlybSgpIHsKICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlybSh7CiAgICAgIHRpdGxlOiAnQ29uZmlybScsCiAgICAgIG1lc3NhZ2U6ICdUaGlzIGlzIGhvdyBzaW1wbGUgaXQgaXMgdG8gY3JlYXRlIGEgY29uZmlybSB3aXRoIHRoaXMgd3JhcHBlciBzZXJ2aWNlLiBEbyB5b3UgYWdyZWU/JywKICAgICAgY2FuY2VsQnV0dG9uOiAnRGlzYWdyZWUnLAogICAgICBhY2NlcHRCdXR0b246ICdBZ3JlZScKICAgIH0pOwogIH0sCiAgb3BlblByb21wdDogZnVuY3Rpb24gb3BlblByb21wdCgpIHsKICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuUHJvbXB0KHsKICAgICAgdGl0bGU6ICdQcm9tcHQnLAogICAgICBtZXNzYWdlOiAnVGhpcyBpcyBob3cgc2ltcGxlIGl0IGlzIHRvIGNyZWF0ZSBhIHByb21wdCB3aXRoIHRoaXMgd3JhcHBlciBzZXJ2aWNlLiBQcm9tcHQgc29tZXRoaW5nLicsCiAgICAgIHZhbHVlOiAnUG9wdWxhdGVkIHZhbHVlJywKICAgICAgY2FuY2VsQnV0dG9uOiAnQ2FuY2VsJywKICAgICAgYWNjZXB0QnV0dG9uOiAnT2snCiAgICB9KTsKICB9LAogIC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdTZWFyY2hhYmxlIEV4cGFuc2lvbiBQYW5lbHMnPgogIGlzRHJvcGxldEZpbHRlckNoZWNrZWQ6IGZ1bmN0aW9uIGlzRHJvcGxldEZpbHRlckNoZWNrZWQodGVybSkgewogICAgcmV0dXJuIHRoaXMuZHJvcGxldHNTZWFyY2hUZXJtcy5pbmRleE9mKHRlcm0pID4gLTE7CiAgfSwKICBnZXREcm9wbGV0VHlwZUNvdW50OiBmdW5jdGlvbiBnZXREcm9wbGV0VHlwZUNvdW50KHR5cGUpIHsKICAgIHJldHVybiB0aGlzLmZpbHRlcmVkRHJvcGxldHMuZmlsdGVyKGZ1bmN0aW9uIChkcm9wbGV0KSB7CiAgICAgIHJldHVybiBkcm9wbGV0LnR5cGUgPT09IHR5cGU7CiAgICB9KS5sZW5ndGg7CiAgfSwKICBnZXREcm9wbGV0Q2VydGlmaWNhdGlvbkNvdW50OiBmdW5jdGlvbiBnZXREcm9wbGV0Q2VydGlmaWNhdGlvbkNvdW50KGNlcnRpZmljYXRpb24pIHsKICAgIHJldHVybiB0aGlzLmZpbHRlcmVkRHJvcGxldHMuZmlsdGVyKGZ1bmN0aW9uIChkcm9wbGV0KSB7CiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhkcm9wbGV0KS5maW5kKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICBpZiAoa2V5ID09PSBjZXJ0aWZpY2F0aW9uICYmIGRyb3BsZXRbY2VydGlmaWNhdGlvbl0udHlwZSA9PT0gJ2NlcnRpZmljYXRpb24nKSB7CiAgICAgICAgICByZXR1cm4gZHJvcGxldDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgICB9KTsKICAgIH0pLmxlbmd0aDsKICB9LAogIGdldFNvcnRCeTogZnVuY3Rpb24gZ2V0U29ydEJ5KCkgewogICAgdmFyIHNvcnRCeUNvbHVtbkxhYmVsOwogICAgdmFyIGFycmF5TGVuZ3RoID0gdGhpcy5kcm9wbGV0Q29sdW1ucy5sZW5ndGg7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0aGlzLmRyb3BsZXRDb2x1bW5zW2ldLmFjdGl2ZSA9PT0gdHJ1ZSkgewogICAgICAgIHNvcnRCeUNvbHVtbkxhYmVsID0gdGhpcy5kcm9wbGV0Q29sdW1uc1tpXS5sYWJlbDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBzb3J0QnlDb2x1bW5MYWJlbDsKICB9LAogIHNvcnREcm9wbGV0czogZnVuY3Rpb24gc29ydERyb3BsZXRzKGNvbHVtbikgewogICAgaWYgKGNvbHVtbi5zb3J0YWJsZSA9PT0gdHJ1ZSkgewogICAgICAvLyB0b2dnbGUgY29sdW1uIHNvcnQgb3JkZXIKICAgICAgY29sdW1uLnNvcnRPcmRlciA9IGNvbHVtbi5zb3J0T3JkZXIgPT09ICdBU0MnID8gJ0RFU0MnIDogJ0FTQyc7CiAgICAgIHZhciBzb3J0T3JkZXIgPSBjb2x1bW4uc29ydE9yZGVyOwogICAgICB0aGlzLmZpbHRlckRyb3BsZXRzKGNvbHVtbi5uYW1lLCBzb3J0T3JkZXIpOyAvL29ubHkgb25lIGNvbHVtbiBjYW4gYmUgYWN0aXZlbHkgc29ydGVkIHNvIHdlIHJlc2V0IGFsbCB0byBpbmFjdGl2ZQoKICAgICAgdGhpcy5kcm9wbGV0Q29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgYy5hY3RpdmUgPSBmYWxzZTsKICAgICAgfSk7IC8vYW5kIHNldCB0aGlzIGNvbHVtbiBhcyB0aGUgYWN0aXZlbHkgc29ydGVkIGNvbHVtbgoKICAgICAgY29sdW1uLmFjdGl2ZSA9IHRydWU7CiAgICAgIHRoaXMuYWN0aXZlRHJvcGxldENvbHVtbiA9IGNvbHVtbjsKICAgIH0KICB9LAogIHRvZ2dsZURyb3BsZXRzRmlsdGVyOiBmdW5jdGlvbiB0b2dnbGVEcm9wbGV0c0ZpbHRlcihzZWFyY2hUZXJtKSB7CiAgICB2YXIgYXBwbHlTZWFyY2hUZXJtID0gdHJ1ZTsgLy8gY2hlY2sgaWYgdGhlIHNlYXJjaCB0ZXJtIGlzIGFscmVhZHkgYXBwbGllZCBhbmQgcmVtb3ZlIGl0IGlmIHRydWUKCiAgICBpZiAodGhpcy5kcm9wbGV0c1NlYXJjaFRlcm1zLmxlbmd0aCA+IDApIHsKICAgICAgdmFyIGFycmF5TGVuZ3RoID0gdGhpcy5kcm9wbGV0c1NlYXJjaFRlcm1zLmxlbmd0aDsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlMZW5ndGg7IGkrKykgewogICAgICAgIHZhciBpbmRleCA9IHRoaXMuZHJvcGxldHNTZWFyY2hUZXJtcy5pbmRleE9mKHNlYXJjaFRlcm0pOwoKICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgdGhpcy5kcm9wbGV0c1NlYXJjaFRlcm1zLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgICBhcHBseVNlYXJjaFRlcm0gPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gLy8gaWYgd2UganVzdCByZW1vdmVkIHRoZSBzZWFyY2ggdGVybSBkbyBOT1QgYXBwbHkgaXQgYWdhaW4KCgogICAgaWYgKGFwcGx5U2VhcmNoVGVybSkgewogICAgICB0aGlzLmRyb3BsZXRzU2VhcmNoVGVybXMucHVzaChzZWFyY2hUZXJtKTsKICAgIH0KCiAgICB0aGlzLmZpbHRlckRyb3BsZXRzKHRoaXMuYWN0aXZlRHJvcGxldENvbHVtbi5uYW1lLCB0aGlzLmFjdGl2ZURyb3BsZXRDb2x1bW4uc29ydE9yZGVyKTsKICB9LAogIGZpbHRlckRyb3BsZXRzOiBmdW5jdGlvbiBmaWx0ZXJEcm9wbGV0cyhzb3J0QnksIHNvcnRPcmRlcikgewogICAgLy8gaWYgYHNvcnRPcmRlcmAgaXMgYHVuZGVmaW5lZGAgdGhlbiB1c2UgJ0FTQycKICAgIGlmIChzb3J0T3JkZXIgPT09IHVuZGVmaW5lZCkgewogICAgICBzb3J0T3JkZXIgPSAnQVNDJzsKICAgIH0gLy8gaWYgYHNvcnRCeWAgaXMgYHVuZGVmaW5lZGAgdGhlbiBmaW5kIHRoZSBmaXJzdCBzb3J0YWJsZSBjb2x1bW4gaW4gdGhpcy5kcm9wbGV0Q29sdW1ucwoKCiAgICBpZiAoc29ydEJ5ID09PSB1bmRlZmluZWQpIHsKICAgICAgdmFyIGFycmF5TGVuZ3RoID0gdGhpcy5kcm9wbGV0Q29sdW1ucy5sZW5ndGg7CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5TGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGhpcy5kcm9wbGV0Q29sdW1uc1tpXS5zb3J0YWJsZSA9PT0gdHJ1ZSkgewogICAgICAgICAgc29ydEJ5ID0gdGhpcy5kcm9wbGV0Q29sdW1uc1tpXS5uYW1lOwogICAgICAgICAgdGhpcy5hY3RpdmVEcm9wbGV0Q29sdW1uID0gdGhpcy5kcm9wbGV0Q29sdW1uc1tpXTsgLy9vbmx5IG9uZSBjb2x1bW4gY2FuIGJlIGFjdGl2ZWx5IHNvcnRlZCBzbyB3ZSByZXNldCBhbGwgdG8gaW5hY3RpdmUKCiAgICAgICAgICB0aGlzLmRyb3BsZXRDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKICAgICAgICAgICAgYy5hY3RpdmUgPSBmYWxzZTsKICAgICAgICAgIH0pOyAvL2FuZCBzZXQgdGhpcyBjb2x1bW4gYXMgdGhlIGFjdGl2ZWx5IHNvcnRlZCBjb2x1bW4KCiAgICAgICAgICB0aGlzLmRyb3BsZXRDb2x1bW5zW2ldLmFjdGl2ZSA9IHRydWU7CiAgICAgICAgICB0aGlzLmRyb3BsZXRDb2x1bW5zW2ldLnNvcnRPcmRlciA9IHNvcnRPcmRlcjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHZhciBuZXdEYXRhID0gdGhpcy5kcm9wbGV0czsKCiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdGhpcy5kcm9wbGV0c1NlYXJjaFRlcm1zLmxlbmd0aDsgX2krKykgewogICAgICBuZXdEYXRhID0gdGhpcy5maWx0ZXJEYXRhKG5ld0RhdGEsIHRoaXMuZHJvcGxldHNTZWFyY2hUZXJtc1tfaV0sIHRydWUsIHRoaXMuYWN0aXZlRHJvcGxldENvbHVtbi5uYW1lKTsKICAgIH0KCiAgICBuZXdEYXRhID0gdGhpcy5kYXRhVGFibGVTZXJ2aWNlLnNvcnREYXRhKG5ld0RhdGEsIHNvcnRCeSwgc29ydE9yZGVyKTsKICAgIHRoaXMuZmlsdGVyZWREcm9wbGV0cyA9IG5ld0RhdGE7CiAgICB0aGlzLmdldEF1dG9Db21wbGV0ZURyb3BsZXRzKCk7CiAgfSwKICBnZXRBdXRvQ29tcGxldGVEcm9wbGV0czogZnVuY3Rpb24gZ2V0QXV0b0NvbXBsZXRlRHJvcGxldHMoKSB7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICB0aGlzLmF1dG9Db21wbGV0ZURyb3BsZXRzID0gW107CiAgICB0aGlzLmRyb3BsZXRDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKICAgICAgc2VsZi5maWx0ZXJlZERyb3BsZXRzLmZvckVhY2goZnVuY3Rpb24gKHIpIHsKICAgICAgICByZXR1cm4gcltjLm5hbWUudG9Mb3dlckNhc2UoKV0gPyBzZWxmLmF1dG9Db21wbGV0ZURyb3BsZXRzLnB1c2gocltjLm5hbWUudG9Mb3dlckNhc2UoKV0udG9TdHJpbmcoKSkgOiAnJzsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8vPC9lZGl0b3ItZm9sZD4KICBmaWx0ZXJEYXRhOiBmdW5jdGlvbiBmaWx0ZXJEYXRhKGRhdGEsIHNlYXJjaFRlcm0sIGlnbm9yZUNhc2UpIHsKICAgIHZhciBmaWVsZCA9ICcnOwoKICAgIGlmIChzZWFyY2hUZXJtLmluZGV4T2YoJzonKSA+IC0xKSB7CiAgICAgIGZpZWxkID0gc2VhcmNoVGVybS5zcGxpdCgnOicpWzBdLnRyaW0oKTsKICAgICAgc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0uc3BsaXQoJzonKVsxXS50cmltKCk7CiAgICB9CgogICAgdmFyIGZpbHRlciA9IHNlYXJjaFRlcm0gPyBpZ25vcmVDYXNlID8gc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpIDogc2VhcmNoVGVybSA6ICcnOwoKICAgIGlmIChmaWx0ZXIpIHsKICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgdmFyIHJlcyA9IE9iamVjdC5rZXlzKGl0ZW0pLmZpbmQoZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoJy4nKSA+IC0xKSB7CiAgICAgICAgICAgIHZhciBvYmpBcnJheSA9IGZpZWxkLnNwbGl0KCcuJyk7CiAgICAgICAgICAgIHZhciBvYmogPSBpdGVtOwogICAgICAgICAgICB2YXIgYXJyYXlMZW5ndGggPSBvYmpBcnJheS5sZW5ndGg7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5TGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgb2JqID0gb2JqW29iakFycmF5W2ldXTsKICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgX3ByZUl0ZW1WYWx1ZSA9ICcnICsgb2JqOwoKICAgICAgICAgICAgdmFyIF9pdGVtVmFsdWUgPSBpZ25vcmVDYXNlID8gX3ByZUl0ZW1WYWx1ZS50b0xvd2VyQ2FzZSgpIDogX3ByZUl0ZW1WYWx1ZTsKCiAgICAgICAgICAgIHJldHVybiBfaXRlbVZhbHVlLmluZGV4T2YoZmlsdGVyKSA+IC0xOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChrZXkgIT09IGZpZWxkICYmIGZpZWxkICE9PSAnJykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CgogICAgICAgICAgdmFyIHByZUl0ZW1WYWx1ZSA9ICcnICsgaXRlbVtrZXldOwogICAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IGlnbm9yZUNhc2UgPyBwcmVJdGVtVmFsdWUudG9Mb3dlckNhc2UoKSA6IHByZUl0ZW1WYWx1ZTsKICAgICAgICAgIHJldHVybiBpdGVtVmFsdWUuaW5kZXhPZihmaWx0ZXIpID4gLTE7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuICEodHlwZW9mIHJlcyA9PT0gJ3VuZGVmaW5lZCcpOwogICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gZGF0YTsKICB9LAogIC8vPGVkaXRvci1mb2xkIGRlc2M9J0RhdGEgVGFibGVzJz4KICBzb3J0OiBmdW5jdGlvbiBzb3J0KHNvcnRFdmVudCwgY29sdW1uKSB7CiAgICBpZiAoY29sdW1uLnNvcnRhYmxlKSB7CiAgICAgIHZhciBzb3J0QnkgPSBjb2x1bW4ubmFtZTsKICAgICAgY29sdW1uLnNvcnRPcmRlciA9IGNvbHVtbi5zb3J0T3JkZXIgPT09ICdBU0MnID8gJ0RFU0MnIDogJ0FTQyc7CiAgICAgIHZhciBzb3J0T3JkZXIgPSBjb2x1bW4uc29ydE9yZGVyOwogICAgICB0aGlzLmZpbHRlcihzb3J0QnksIHNvcnRPcmRlcik7IC8vb25seSBvbmUgY29sdW1uIGNhbiBiZSBhY3RpdmVseSBzb3J0ZWQgc28gd2UgcmVzZXQgYWxsIHRvIGluYWN0aXZlCgogICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICAgIGMuYWN0aXZlID0gZmFsc2U7CiAgICAgIH0pOyAvL2FuZCBzZXQgdGhpcyBjb2x1bW4gYXMgdGhlIGFjdGl2ZWx5IHNvcnRlZCBjb2x1bW4KCiAgICAgIGNvbHVtbi5hY3RpdmUgPSB0cnVlOwogICAgfQogIH0sCiAgc2VhcmNoUmVtb3ZlOiBmdW5jdGlvbiBzZWFyY2hSZW1vdmUoc2VhcmNoVGVybSkgewogICAgLy9vbmx5IHJlbW92ZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VhcmNoIHRlcm0KICAgIHZhciBpbmRleCA9IHRoaXMuc2VhcmNoVGVybS5pbmRleE9mKHNlYXJjaFRlcm0pOwoKICAgIGlmIChpbmRleCAhPT0gLTEpIHsKICAgICAgdGhpcy5zZWFyY2hUZXJtLnNwbGljZShpbmRleCwgMSk7CiAgICB9CgogICAgdGhpcy5mcm9tUm93ID0gMTsKICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxOwogICAgdGhpcy5maWx0ZXIoKTsKICB9LAogIHNlYXJjaEFkZDogZnVuY3Rpb24gc2VhcmNoQWRkKHNlYXJjaFRlcm0pIHsKICAgIHRoaXMuc2VhcmNoVGVybS5wdXNoKHNlYXJjaFRlcm0pOwogICAgdGhpcy5mcm9tUm93ID0gMTsKICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxOwogICAgdGhpcy5maWx0ZXIoKTsKICB9LAogIHBhZ2U6IGZ1bmN0aW9uIHBhZ2UocGFnaW5nRXZlbnQpIHsKICAgIHRoaXMuZnJvbVJvdyA9IHBhZ2luZ0V2ZW50LmZyb21Sb3c7CiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnaW5nRXZlbnQucGFnZTsKICAgIHRoaXMucGFnZVNpemUgPSBwYWdpbmdFdmVudC5wYWdlU2l6ZTsKICAgIHRoaXMuYWxsUm93c1NlbGVjdGVkID0gZmFsc2U7CiAgICB0aGlzLmZpbHRlcigpOwogIH0sCiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoc29ydEJ5LCBzb3J0T3JkZXIpIHsKICAgIGlmICh0aGlzLmFsbFJvd3NTZWxlY3RlZCkgewogICAgICB0aGlzLnRvZ2dsZVNlbGVjdEFsbCgpOwogICAgfQoKICAgIHRoaXMuZGVzZWxlY3RBbGwoKTsKICAgIHZhciBuZXdEYXRhID0gdGhpcy5kYXRhOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zZWFyY2hUZXJtLmxlbmd0aDsgaSsrKSB7CiAgICAgIG5ld0RhdGEgPSB0aGlzLmZpbHRlckRhdGEobmV3RGF0YSwgdGhpcy5zZWFyY2hUZXJtW2ldLCB0cnVlKTsKICAgIH0KCiAgICB0aGlzLmZpbHRlcmVkVG90YWwgPSBuZXdEYXRhLmxlbmd0aDsKICAgIG5ld0RhdGEgPSB0aGlzLmRhdGFUYWJsZVNlcnZpY2Uuc29ydERhdGEobmV3RGF0YSwgc29ydEJ5LCBzb3J0T3JkZXIpOwogICAgdGhpcy5wYWdlQ291bnQgPSBuZXdEYXRhLmxlbmd0aDsKICAgIG5ld0RhdGEgPSB0aGlzLmRhdGFUYWJsZVNlcnZpY2UucGFnZURhdGEobmV3RGF0YSwgdGhpcy5mcm9tUm93LCB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSk7CiAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IG5ld0RhdGE7CiAgICB0aGlzLmdldEF1dG9Db21wbGV0ZURhdGEoKTsKICB9LAogIHRvZ2dsZVNlbGVjdDogZnVuY3Rpb24gdG9nZ2xlU2VsZWN0KHJvdykgewogICAgaWYgKHRoaXMuYWxsRmlsdGVyZWRSb3dzU2VsZWN0ZWQoKSkgewogICAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IGZhbHNlOwogICAgfQogIH0sCiAgdG9nZ2xlU2VsZWN0QWxsOiBmdW5jdGlvbiB0b2dnbGVTZWxlY3RBbGwoKSB7CiAgICBpZiAodGhpcy5hbGxSb3dzU2VsZWN0ZWQpIHsKICAgICAgdGhpcy5zZWxlY3RBbGwoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZGVzZWxlY3RBbGwoKTsKICAgIH0KICB9LAogIHNlbGVjdEFsbDogZnVuY3Rpb24gc2VsZWN0QWxsKCkgewogICAgdGhpcy5maWx0ZXJlZERhdGEuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICBjLmNoZWNrZWQgPSB0cnVlOwogICAgfSk7CiAgfSwKICBkZXNlbGVjdEFsbDogZnVuY3Rpb24gZGVzZWxlY3RBbGwoKSB7CiAgICB0aGlzLmZpbHRlcmVkRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CiAgICAgIGMuY2hlY2tlZCA9IGZhbHNlOwogICAgfSk7CiAgfSwKICBhbGxGaWx0ZXJlZFJvd3NTZWxlY3RlZDogZnVuY3Rpb24gYWxsRmlsdGVyZWRSb3dzU2VsZWN0ZWQoKSB7CiAgICB2YXIgYWxsRmlsdGVyZWRSb3dzU2VsZWN0ZWQgPSB0cnVlOwogICAgdGhpcy5maWx0ZXJlZERhdGEuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICBpZiAoYy5jaGVja2VkID09PSB1bmRlZmluZWQgfHwgYy5jaGVja2VkID09PSBmYWxzZSkgewogICAgICAgIGFsbEZpbHRlcmVkUm93c1NlbGVjdGVkID0gZmFsc2U7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGFsbEZpbHRlcmVkUm93c1NlbGVjdGVkOwogIH0sCiAgYXJlVG9vbHRpcHNPbjogZnVuY3Rpb24gYXJlVG9vbHRpcHNPbigpIHsKICAgIHJldHVybiB0aGlzLmNvbHVtbnNbMF0uaGFzT3duUHJvcGVydHkoJ3Rvb2x0aXAnKTsKICB9LAogIHRvZ2dsZVRvb2x0aXBzOiBmdW5jdGlvbiB0b2dnbGVUb29sdGlwcygpIHsKICAgIGlmICh0aGlzLmNvbHVtbnNbMF0udG9vbHRpcCkgewogICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICAgIGRlbGV0ZSBjLnRvb2x0aXA7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKICAgICAgICBjLnRvb2x0aXAgPSAnVGhpcyBpcyAnICsgYy5sYWJlbCArICchJzsKICAgICAgfSk7CiAgICB9CiAgfSwKICBvcGVuRGF0YVRhYmxlUHJvbXB0OiBmdW5jdGlvbiBvcGVuRGF0YVRhYmxlUHJvbXB0KHJvdywgbmFtZSkgewogICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5Qcm9tcHQoewogICAgICBtZXNzYWdlOiAnRW50ZXIgY29tbWVudD8nLAogICAgICB2YWx1ZTogcm93W25hbWVdCiAgICB9KS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICByb3dbbmFtZV0gPSB2YWx1ZTsKICAgICAgfQogICAgfSk7CiAgfSwKICBnZXRBdXRvQ29tcGxldGVEYXRhOiBmdW5jdGlvbiBnZXRBdXRvQ29tcGxldGVEYXRhKCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgdGhpcy5hdXRvQ29tcGxldGVEYXRhID0gW107CiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICBzZWxmLmZpbHRlcmVkRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7CiAgICAgICAgcmV0dXJuIHJbYy5uYW1lLnRvTG93ZXJDYXNlKCldID8gc2VsZi5hdXRvQ29tcGxldGVEYXRhLnB1c2gocltjLm5hbWUudG9Mb3dlckNhc2UoKV0udG9TdHJpbmcoKSkgOiAnJzsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdDaGlwcyAkIEF1dG9jb21wbGV0ZSc+CiAgdG9nZ2xlUmVhZE9ubHk6IGZ1bmN0aW9uIHRvZ2dsZVJlYWRPbmx5KCkgewogICAgdGhpcy5yZWFkT25seSA9ICF0aGlzLnJlYWRPbmx5OwogIH0sCiAgLy88L2VkaXRvci1mb2xkPgogIC8vPGVkaXRvci1mb2xkIGRlc2M9J0xpZmUgQ3ljbGUgTGlzdGVuZXJzJz4KCiAgLyoqCiAgICogSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50CiAgICovCiAgbmdPbkluaXQ6IGZ1bmN0aW9uIG5nT25Jbml0KCkgewogICAgdGhpcy5maWx0ZXIoKTsKICAgIHRoaXMuZmlsdGVyRHJvcGxldHMoKTsKICB9LAoKICAvKioKICAgKiBSZXNwb25kIGFmdGVyIEFuZ3VsYXIgY2hlY2tzIHRoZSBjb21wb25lbnQncyB2aWV3cyBhbmQgY2hpbGQgdmlld3MKICAgKi8KICBuZ0FmdGVyVmlld0NoZWNrZWQ6IGZ1bmN0aW9uIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHsKICAgIHRoaXMuZmRzU2VydmljZS5pblByb2dyZXNzID0gZmFsc2U7CiAgfSAvLzwvZWRpdG9yLWZvbGQ+Cgp9OwpGZHNEZW1vLmFubm90YXRpb25zID0gW25ldyBDb21wb25lbnQoewogIHRlbXBsYXRlOiByZXF1aXJlKCcuL2Zkcy1kZW1vLmh0bWwnKSwKICBhbmltYXRpb25zOiBbRmRzQW5pbWF0aW9ucy5zbGlkZUluTGVmdEFuaW1hdGlvbl0sCiAgaG9zdDogewogICAgJ1tAcm91dGVBbmltYXRpb25dJzogJ3JvdXRlQW5pbWF0aW9uJwogIH0KfSldOwpGZHNEZW1vLnBhcmFtZXRlcnMgPSBbRmRzU25hY2tCYXJTZXJ2aWNlLCBGZHNTZXJ2aWNlLCBNYXREaWFsb2csIFRkRGF0YVRhYmxlU2VydmljZSwgRmRzRGlhbG9nU2VydmljZV07CmV4cG9ydCBkZWZhdWx0IEZkc0RlbW87"}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/67754ec89a4f3b6af4bc221bce8f8469.json b/.cache-loader-coverage/67754ec89a4f3b6af4bc221bce8f8469.json
new file mode 100644
index 0000000..e08ad60
--- /dev/null
+++ b/.cache-loader-coverage/67754ec89a4f3b6af4bc221bce8f8469.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js","mtime":1562689731041},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOwovKioKICogRmRzQ29uZmlybURpYWxvZ0NvbXBvbmVudCBjb25zdHJ1Y3Rvci4KICoKICogQGNvbnN0cnVjdG9yCiAqLwoKZnVuY3Rpb24gRmRzQ29uZmlybURpYWxvZ0NvbXBvbmVudCgpIHsKICB0aGlzLnRpdGxlID0gJyc7CiAgdGhpcy5tZXNzYWdlID0gJyc7CiAgdGhpcy5hY2NlcHRCdXR0b24gPSAnJzsKICB0aGlzLmFjY2VwdEJ1dHRvbkNvbG9yID0gJ2Zkcy1wcmltYXJ5JzsKICB0aGlzLmNhbmNlbEJ1dHRvbiA9ICcnOwogIHRoaXMuY2FuY2VsQnV0dG9uQ29sb3IgPSAnZmRzLXJlZ3VsYXInOwogIHRoaXMuZGlhbG9nUmVmID0gdW5kZWZpbmVkOwogIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IHVuZGVmaW5lZDsKICB0aGlzLmRpc2FibGVDbG9zZSA9IHRydWU7Cn0KCkZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQucHJvdG90eXBlID0gewogIGNvbnN0cnVjdG9yOiBGZHNDb25maXJtRGlhbG9nQ29tcG9uZW50LAoKICAvKioKICAgKiBDbG9zZSB0aGUgZGlhbG9nIGFuZCBzZW5kIGEgY2FuY2VsIHJlc3BvbnNlIHRvIGFueSBzdWJzY3JpYmVycy4KICAgKi8KICBjYW5jZWw6IGZ1bmN0aW9uIGNhbmNlbCgpIHsKICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKTsKICB9LAoKICAvKioKICAgKiBDbG9zZSB0aGUgZGlhbG9nIGFuZCBzZW5kIGFuIGFjY2VwdCByZXNwb25zZSB0byBhbnkgc3Vic2NyaWJlcnMuCiAgICovCiAgYWNjZXB0OiBmdW5jdGlvbiBhY2NlcHQoKSB7CiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTsKICB9Cn07CkZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQuYW5ub3RhdGlvbnMgPSBbbmV3IENvbXBvbmVudCh7CiAgc2VsZWN0b3I6ICdmZHMtY29uZmlybS1kaWFsb2cnLAogIHRlbXBsYXRlOiByZXF1aXJlKCcuL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC5odG1sJyl9KV07CkZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQucGFyYW1ldGVycyA9IFtdOwpleHBvcnQgeyBGZHNDb25maXJtRGlhbG9nQ29tcG9uZW50IH07"}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/695f60fb7cd43940765d2f3f6ff2e4f0.json b/.cache-loader-coverage/695f60fb7cd43940765d2f3f6ff2e4f0.json
new file mode 100644
index 0000000..fc62093
--- /dev/null
+++ b/.cache-loader-coverage/695f60fb7cd43940765d2f3f6ff2e4f0.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/webapp/services/fds.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/services/fds.service.js","mtime":1563472991608},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgJ0xpY2Vuc2UnKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IFRkRGF0YVRhYmxlU2VydmljZSB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2RhdGEtdGFibGUnOwppbXBvcnQgeyBGZHNEaWFsb2dTZXJ2aWNlLCBGZHNTbmFja0JhclNlcnZpY2UgfSBmcm9tICdAbmlmaS1mZHMvY29yZSc7CmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nOwovKioKICogRmRzU2VydmljZSBjb25zdHJ1Y3Rvci4KICoKICogQHBhcmFtIHRkRGF0YVRhYmxlU2VydmljZSAgICBUaGUgY292YWxlbnQgZGF0YSB0YWJsZSBzZXJ2aWNlIG1vZHVsZS4KICogQHBhcmFtIGZkc0RpYWxvZ1NlcnZpY2UgICAgICBUaGUgRkRTIGRpYWxvZyBzZXJ2aWNlLgogKiBAcGFyYW0gZmRzU25hY2tCYXJTZXJ2aWNlICAgIFRoZSBGRFMgc25hY2sgYmFyIHNlcnZpY2UgbW9kdWxlLgogKiBAY29uc3RydWN0b3IKICovCgpmdW5jdGlvbiBGZHNTZXJ2aWNlKHRkRGF0YVRhYmxlU2VydmljZSwgZmRzRGlhbG9nU2VydmljZSwgZmRzU25hY2tCYXJTZXJ2aWNlKSB7CiAgLy8gU2VydmljZXMKICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSBmZHNEaWFsb2dTZXJ2aWNlOwogIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gZmRzU25hY2tCYXJTZXJ2aWNlOwogIHRoaXMuZGF0YVRhYmxlU2VydmljZSA9IHRkRGF0YVRhYmxlU2VydmljZTsgLy8gR2VuZXJhbAoKICB0aGlzLnRpdGxlID0gJ0FwYWNoZSBOaUZpIEZsb3cgRGVzaWduIFN5c3RlbSBEZW1vIHYnICsgdmVyc2lvbjsKICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlOwogIHRoaXMucGVyc3BlY3RpdmUgPSAnJzsKfQoKRmRzU2VydmljZS5wcm90b3R5cGUgPSB7CiAgY29uc3RydWN0b3I6IEZkc1NlcnZpY2UKfTsKRmRzU2VydmljZS5wYXJhbWV0ZXJzID0gW1RkRGF0YVRhYmxlU2VydmljZSwgRmRzRGlhbG9nU2VydmljZSwgRmRzU25hY2tCYXJTZXJ2aWNlXTsKZXhwb3J0IGRlZmF1bHQgRmRzU2VydmljZTs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/a968f461f11ef8f72f9f0e45254aebff.json b/.cache-loader-coverage/a968f461f11ef8f72f9f0e45254aebff.json
new file mode 100644
index 0000000..8e5ba04
--- /dev/null
+++ b/.cache-loader-coverage/a968f461f11ef8f72f9f0e45254aebff.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js","mtime":1563469805293},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIGNvdl8ybzB3cHF6ZnFmID0gZnVuY3Rpb24gKCkgewogIHZhciBwYXRoID0gIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9zbmFja2JhcnMvc2VydmljZXMvc25hY2tiYXIuc2VydmljZS5qcyI7CiAgdmFyIGhhc2ggPSAiOTQ1MjRkY2E1YmY5NGZiOWJjNjU4NDg2MjBlMzg2YzFjYjViOGJiMSI7CiAgdmFyIGdsb2JhbCA9IG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOwogIHZhciBnY3YgPSAiX19jb3ZlcmFnZV9fIjsKICB2YXIgY292ZXJhZ2VEYXRhID0gewogICAgcGF0aDogIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9zbmFja2JhcnMvc2VydmljZXMvc25hY2tiYXIuc2VydmljZS5qcyIsCiAgICBzdGF0ZW1lbnRNYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI2LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI2LAogICAgICAgICAgY29sdW1uOiAyMAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI3LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI3LAogICAgICAgICAgY29sdW1uOiAyMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjIiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI4LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI4LAogICAgICAgICAgY29sdW1uOiAzMwogICAgICAgIH0KICAgICAgfSwKICAgICAgIjMiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDI5LAogICAgICAgICAgY29sdW1uOiA0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDI5LAogICAgICAgICAgY29sdW1uOiAzOAogICAgICAgIH0KICAgICAgfSwKICAgICAgIjQiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDMyLAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDM0LAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiNSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMzYsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMzYsCiAgICAgICAgICBjb2x1bW46IDQ1CiAgICAgICAgfQogICAgICB9LAogICAgICAiNiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMzksCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMzksCiAgICAgICAgICBjb2x1bW46IDE5CiAgICAgICAgfQogICAgICB9LAogICAgICAiNyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDAsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDAsCiAgICAgICAgICBjb2x1bW46IDIwCiAgICAgICAgfQogICAgICB9LAogICAgICAiOCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDMsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDUsCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI5IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA0NywKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA0NywKICAgICAgICAgIGNvbHVtbjogNDIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxMCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNTYsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNTYsCiAgICAgICAgICBjb2x1bW46IDM5CiAgICAgICAgfQogICAgICB9LAogICAgICAiMTEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDU5LAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEzMiwKICAgICAgICAgIGNvbHVtbjogMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEyIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA3MiwKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA3MiwKICAgICAgICAgIGNvbHVtbjogNjYKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxMyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogODUsCiAgICAgICAgICBjb2x1bW46IDgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogODUsCiAgICAgICAgICBjb2x1bW46IDczCiAgICAgICAgfQogICAgICB9LAogICAgICAiMTQiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDkzLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDkzLAogICAgICAgICAgY29sdW1uOiAzOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjE1IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMTEsCiAgICAgICAgICBjb2x1bW46IDMxCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExMSwKICAgICAgICAgIGNvbHVtbjogNTEKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxNiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTEyLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExMiwKICAgICAgICAgIGNvbHVtbjogNjYKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxNyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTEzLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExMywKICAgICAgICAgIGNvbHVtbjogNzAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxOCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTE0LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExNCwKICAgICAgICAgIGNvbHVtbjogNTAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxOSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTE1LAogICAgICAgICAgY29sdW1uOiAyOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxMTUsCiAgICAgICAgICBjb2x1bW46IDEwMwogICAgICAgIH0KICAgICAgfSwKICAgICAgIjIwIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMTYsCiAgICAgICAgICBjb2x1bW46IDMzCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExNiwKICAgICAgICAgIGNvbHVtbjogNTMKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyMSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTE3LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExNywKICAgICAgICAgIGNvbHVtbjogNTEKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyMiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTE4LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyMCwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjIzIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMTksCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDExOSwKICAgICAgICAgIGNvbHVtbjogNTAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyNCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTIxLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyMywKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjI1IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMjIsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyMiwKICAgICAgICAgIGNvbHVtbjogNTQKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyNiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTI0LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyNiwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjI3IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMjUsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyNSwKICAgICAgICAgIGNvbHVtbjogNDgKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIyOCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTI3LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyOSwKICAgICAgICAgIGNvbHVtbjogOQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjI5IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiAxMjgsCiAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEyOCwKICAgICAgICAgIGNvbHVtbjogNTAKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzMCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTMwLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEzMCwKICAgICAgICAgIGNvbHVtbjogMjcKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIzMSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMTM0LAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDEzNCwKICAgICAgICAgIGNvbHVtbjogNDYKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmbk1hcDogewogICAgICAiMCI6IHsKICAgICAgICBuYW1lOiAiSVNuYWNrQmFyQ29uZmlnIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAyNSwKICAgICAgICAgICAgY29sdW1uOiAxNgogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAyNSwKICAgICAgICAgICAgY29sdW1uOiAzMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAyNSwKICAgICAgICAgICAgY29sdW1uOiAzNAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAzMCwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiAyNQogICAgICB9LAogICAgICAiMSI6IHsKICAgICAgICBuYW1lOiAiSUNvYXN0ZXJDb25maWciLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDM4LAogICAgICAgICAgICBjb2x1bW46IDE2CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDM4LAogICAgICAgICAgICBjb2x1bW46IDMwCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDM4LAogICAgICAgICAgICBjb2x1bW46IDMzCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDQxLAogICAgICAgICAgICBjb2x1bW46IDEKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDM4CiAgICAgIH0sCiAgICAgICIyIjogewogICAgICAgIG5hbWU6ICJGZHNTbmFja0JhclNlcnZpY2UiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDU1LAogICAgICAgICAgICBjb2x1bW46IDE2CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDU1LAogICAgICAgICAgICBjb2x1bW46IDM0CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDU1LAogICAgICAgICAgICBjb2x1bW46IDQ4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDU3LAogICAgICAgICAgICBjb2x1bW46IDEKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDU1CiAgICAgIH0sCiAgICAgICIzIjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzMpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA3MSwKICAgICAgICAgICAgY29sdW1uOiAxMAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA3MSwKICAgICAgICAgICAgY29sdW1uOiAxMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA3MSwKICAgICAgICAgICAgY29sdW1uOiA0NQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA3MywKICAgICAgICAgICAgY29sdW1uOiA1CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiA3MQogICAgICB9LAogICAgICAiNCI6IHsKICAgICAgICBuYW1lOiAiKGFub255bW91c180KSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogODQsCiAgICAgICAgICAgIGNvbHVtbjogMjMKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogODQsCiAgICAgICAgICAgIGNvbHVtbjogMjQKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogODQsCiAgICAgICAgICAgIGNvbHVtbjogNTIKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogODYsCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogODQKICAgICAgfSwKICAgICAgIjUiOiB7CiAgICAgICAgbmFtZTogIihhbm9ueW1vdXNfNSkiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDkyLAogICAgICAgICAgICBjb2x1bW46IDEzCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDkyLAogICAgICAgICAgICBjb2x1bW46IDE0CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDkyLAogICAgICAgICAgICBjb2x1bW46IDI1CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDk0LAogICAgICAgICAgICBjb2x1bW46IDUKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDkyCiAgICAgIH0sCiAgICAgICI2IjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzYpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMTAsCiAgICAgICAgICAgIGNvbHVtbjogMTcKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTEwLAogICAgICAgICAgICBjb2x1bW46IDE4CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDExMCwKICAgICAgICAgICAgY29sdW1uOiAzNQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMzEsCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogMTEwCiAgICAgIH0KICAgIH0sCiAgICBicmFuY2hNYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMTgsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMjAsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdHlwZTogImlmIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMTgsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMjAsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDExOCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDEyMCwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogMTE4CiAgICAgIH0sCiAgICAgICIxIjogewogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTIxLAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTIzLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHR5cGU6ICJpZiIsCiAgICAgICAgbG9jYXRpb25zOiBbewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTIxLAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTIzLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMjEsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMjMsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH1dLAogICAgICAgIGxpbmU6IDEyMQogICAgICB9LAogICAgICAiMiI6IHsKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEyNCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDEyNiwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAiaWYiLAogICAgICAgIGxvY2F0aW9uczogW3sKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEyNCwKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDEyNiwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMTI0LAogICAgICAgICAgICBjb2x1bW46IDgKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogMTI2LAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9XSwKICAgICAgICBsaW5lOiAxMjQKICAgICAgfSwKICAgICAgIjMiOiB7CiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMjcsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMjksCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdHlwZTogImlmIiwKICAgICAgICBsb2NhdGlvbnM6IFt7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAxMjcsCiAgICAgICAgICAgIGNvbHVtbjogOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAxMjksCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDEyNywKICAgICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDEyOSwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfV0sCiAgICAgICAgbGluZTogMTI3CiAgICAgIH0KICAgIH0sCiAgICBzOiB7CiAgICAgICIwIjogMCwKICAgICAgIjEiOiAwLAogICAgICAiMiI6IDAsCiAgICAgICIzIjogMCwKICAgICAgIjQiOiAwLAogICAgICAiNSI6IDAsCiAgICAgICI2IjogMCwKICAgICAgIjciOiAwLAogICAgICAiOCI6IDAsCiAgICAgICI5IjogMCwKICAgICAgIjEwIjogMCwKICAgICAgIjExIjogMCwKICAgICAgIjEyIjogMCwKICAgICAgIjEzIjogMCwKICAgICAgIjE0IjogMCwKICAgICAgIjE1IjogMCwKICAgICAgIjE2IjogMCwKICAgICAgIjE3IjogMCwKICAgICAgIjE4IjogMCwKICAgICAgIjE5IjogMCwKICAgICAgIjIwIjogMCwKICAgICAgIjIxIjogMCwKICAgICAgIjIyIjogMCwKICAgICAgIjIzIjogMCwKICAgICAgIjI0IjogMCwKICAgICAgIjI1IjogMCwKICAgICAgIjI2IjogMCwKICAgICAgIjI3IjogMCwKICAgICAgIjI4IjogMCwKICAgICAgIjI5IjogMCwKICAgICAgIjMwIjogMCwKICAgICAgIjMxIjogMAogICAgfSwKICAgIGY6IHsKICAgICAgIjAiOiAwLAogICAgICAiMSI6IDAsCiAgICAgICIyIjogMCwKICAgICAgIjMiOiAwLAogICAgICAiNCI6IDAsCiAgICAgICI1IjogMCwKICAgICAgIjYiOiAwCiAgICB9LAogICAgYjogewogICAgICAiMCI6IFswLCAwXSwKICAgICAgIjEiOiBbMCwgMF0sCiAgICAgICIyIjogWzAsIDBdLAogICAgICAiMyI6IFswLCAwXQogICAgfSwKICAgIF9jb3ZlcmFnZVNjaGVtYTogIjQzZTI3ZTEzOGViZjljZmM1OTY2YjA4MmNmOWEwMjgzMDJlZDQxODQiLAogICAgaGFzaDogIjk0NTI0ZGNhNWJmOTRmYjliYzY1ODQ4NjIwZTM4NmMxY2I1YjhiYjEiCiAgfTsKICB2YXIgY292ZXJhZ2UgPSBnbG9iYWxbZ2N2XSB8fCAoZ2xvYmFsW2djdl0gPSB7fSk7CgogIGlmIChjb3ZlcmFnZVtwYXRoXSAmJiBjb3ZlcmFnZVtwYXRoXS5oYXNoID09PSBoYXNoKSB7CiAgICByZXR1cm4gY292ZXJhZ2VbcGF0aF07CiAgfQoKICByZXR1cm4gY292ZXJhZ2VbcGF0aF0gPSBjb3ZlcmFnZURhdGE7Cn0oKTsKCi8qCiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQogKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgogKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAogKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAogKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqLwppbXBvcnQgeyBNYXRTbmFja0JhckNvbmZpZywgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7CmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7CmltcG9ydCB7IEZkc0NvYXN0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb2FzdGVyL2NvYXN0ZXIuY29tcG9uZW50JzsKZXhwb3J0IGZ1bmN0aW9uIElTbmFja0JhckNvbmZpZygpIHsKICBjb3ZfMm8wd3BxemZxZi5mWzBdKys7CiAgY292XzJvMHdwcXpmcWYuc1swXSsrOwogIHRoaXMudGl0bGUgPSAnJzsKICBjb3ZfMm8wd3BxemZxZi5zWzFdKys7CiAgdGhpcy5tZXNzYWdlID0gJyc7CiAgY292XzJvMHdwcXpmcWYuc1syXSsrOwogIHRoaXMuc25hY2tCYXJSZWYgPSB1bmRlZmluZWQ7CiAgY292XzJvMHdwcXpmcWYuc1szXSsrOwogIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IHVuZGVmaW5lZDsKfQpjb3ZfMm8wd3BxemZxZi5zWzRdKys7CklTbmFja0JhckNvbmZpZy5wcm90b3R5cGUgPSB7CiAgY29udHN0cnVjdG9yOiBJU25hY2tCYXJDb25maWcKfTsKY292XzJvMHdwcXpmcWYuc1s1XSsrOwokLmV4dGVuZChJU25hY2tCYXJDb25maWcsIE1hdFNuYWNrQmFyQ29uZmlnKTsKZXhwb3J0IGZ1bmN0aW9uIElDb2FzdGVyQ29uZmlnKCkgewogIGNvdl8ybzB3cHF6ZnFmLmZbMV0rKzsKICBjb3ZfMm8wd3BxemZxZi5zWzZdKys7CiAgdGhpcy5pY29uID0gJyc7CiAgY292XzJvMHdwcXpmcWYuc1s3XSsrOwogIHRoaXMuY29sb3IgPSAnJzsKfQpjb3ZfMm8wd3BxemZxZi5zWzhdKys7CklDb2FzdGVyQ29uZmlnLnByb3RvdHlwZSA9IHsKICBjb250c3RydWN0b3I6IElDb2FzdGVyQ29uZmlnCn07CmNvdl8ybzB3cHF6ZnFmLnNbOV0rKzsKJC5leHRlbmQoSUNvYXN0ZXJDb25maWcsIElTbmFja0JhckNvbmZpZyk7Ci8qKgogKiBGZHNTbmFja0JhclNlcnZpY2UgY29uc3RydWN0b3IuCiAqCiAqIEBwYXJhbSBNYXRTbmFja0JhciAgICAgIFRoZSBhbmd1bGFyIG1hdGVyaWFsIE1hdFNuYWNrQmFyLgogKiBAY29uc3RydWN0b3IKICovCgpleHBvcnQgZnVuY3Rpb24gRmRzU25hY2tCYXJTZXJ2aWNlKE1hdFNuYWNrQmFyKSB7CiAgY292XzJvMHdwcXpmcWYuZlsyXSsrOwogIGNvdl8ybzB3cHF6ZnFmLnNbMTBdKys7CiAgdGhpcy5zbmFja0JhclNlcnZpY2UgPSBNYXRTbmFja0JhcjsKfQpjb3ZfMm8wd3BxemZxZi5zWzExXSsrOwpGZHNTbmFja0JhclNlcnZpY2UucHJvdG90eXBlID0gewogIGNvbnRzdHJ1Y3RvcjogRmRzU25hY2tCYXJTZXJ2aWNlLAoKICAvKioKICAgKiBXcmFwcGVyIGZ1bmN0aW9uIG92ZXIgdGhlIG9wZW4oKSBtZXRob2QgaW4gTWF0U25hY2tCYXIuCiAgICoKICAgKiBAcGFyYW0gbWVzc2FnZSAgICAgICAgICAgICAgIFRoZSBtZXNzYWdlIHRvIHNob3cgaW4gdGhlIHNuYWNrYmFyLgogICAqIEBwYXJhbSBhY3Rpb24gICAgICAgICAgICAgICAgVGhlIGxhYmVsIGZvciB0aGUgc25hY2tiYXIgYWN0aW9uLgogICAqIEBwYXJhbSBjb25maWcgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzbmFja2Jhci4KICAgKgogICAqIEByZXR1cm5zIHtNYXRTbmFja0JhclJlZn0gICAgVGhlIHJlZmVyZW5jZSB0byB0aGUgc25hY2tiYXIuCiAgICovCiAgb3BlbjogZnVuY3Rpb24gb3BlbihtZXNzYWdlLCBhY3Rpb24sIGNvbmZpZykgewogICAgY292XzJvMHdwcXpmcWYuZlszXSsrOwogICAgY292XzJvMHdwcXpmcWYuc1sxMl0rKzsKICAgIHJldHVybiB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKG1lc3NhZ2UsIGFjdGlvbiwgY29uZmlnKTsKICB9LAoKICAvKioKICAgKiBXcmFwcGVyIGZ1bmN0aW9uIG92ZXIgdGhlIG9wZW5Gcm9tQ29tcG9uZW50KCkgbWV0aG9kIGluIE1hdFNuYWNrQmFyLgogICAqIE9wZW5zIGEgc25hY2tiYXIgY29udGFpbmluZyB0aGUgZ2l2ZW4gY29tcG9uZW50LgogICAqCiAgICogQHBhcmFtIGNvbXBvbmVudCAgICAgVGhlIGFuZ3VsYXIgQ29tcG9uZW50VHlwZTxUPi4KICAgKiBAcGFyYW0gY29uZmlnICAgICAgICBUaGUgYW5ndWxhciBtYXRlcmlhbCBNYXRTbmFja0JhckNvbmZpZy4KICAgKgogICAqIEByZXR1cm5zIHtNYXRTbmFja0JhclJlZn0gICAgVGhlIHJlZmVyZW5jZSB0byB0aGUgc25hY2tiYXIuCiAgICovCiAgb3BlbkZyb21Db21wb25lbnQ6IGZ1bmN0aW9uIG9wZW5Gcm9tQ29tcG9uZW50KGNvbXBvbmVudCwgY29uZmlnKSB7CiAgICBjb3ZfMm8wd3BxemZxZi5mWzRdKys7CiAgICBjb3ZfMm8wd3BxemZxZi5zWzEzXSsrOwogICAgcmV0dXJuIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW5Gcm9tQ29tcG9uZW50KGNvbXBvbmVudCwgY29uZmlnKTsKICB9LAoKICAvKioKICAgKiBXcmFwcGVyIGZ1bmN0aW9uIG92ZXIgdGhlIGRpc21pc3MoKSBtZXRob2QgaW4gTWF0U25hY2tCYXIuCiAgICogRGlzbWlzc2VzIHRoZSBjdXJyZW50bHktb3BlbiBzbmFja2Jhci4KICAgKi8KICBkaXNtaXNzOiBmdW5jdGlvbiBkaXNtaXNzKCkgewogICAgY292XzJvMHdwcXpmcWYuZls1XSsrOwogICAgY292XzJvMHdwcXpmcWYuc1sxNF0rKzsKICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLmRpc21pc3MoKTsKICB9LAoKICAvKioKICAgKiBPcGVucyBhIGNvYXN0ZXIgc25hY2tiYXIgd2l0aCB0aGUgcHJvdmlkZWQgY29uZmlnLgogICAqCiAgICogQHBhcmFtIGNvbmZpZyAgICAgSUNvYXN0ZXJDb25maWcgewogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT86IHN0cmluZzsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hY2tCYXJSZWY/OiBNYXRTbmFja0JhclJlZjsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZj86IFZpZXdDb250YWluZXJSZWY7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb24/OiBzdHJpbmc7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPzogc3RyaW5nOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICoKICAgKiBAcmV0dXJucyB7TWF0U25hY2tCYXJSZWZ9ICAgIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNuYWNrYmFyLgogICAqLwogIG9wZW5Db2FzdGVyOiBmdW5jdGlvbiBvcGVuQ29hc3Rlcihjb25maWcpIHsKICAgIGNvdl8ybzB3cHF6ZnFmLmZbNl0rKzsKICAgIHZhciBzbmFja0JhckNvbmZpZyA9IChjb3ZfMm8wd3BxemZxZi5zWzE1XSsrLCBuZXcgSUNvYXN0ZXJDb25maWcoKSk7CiAgICBjb3ZfMm8wd3BxemZxZi5zWzE2XSsrOwogICAgc25hY2tCYXJDb25maWcudmVydGljYWxQb3NpdGlvbiA9IGNvbmZpZy52ZXJ0aWNhbFBvc2l0aW9uOwogICAgY292XzJvMHdwcXpmcWYuc1sxN10rKzsKICAgIHNuYWNrQmFyQ29uZmlnLmhvcml6b250YWxQb3NpdGlvbiA9IGNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb247CiAgICBjb3ZfMm8wd3BxemZxZi5zWzE4XSsrOwogICAgc25hY2tCYXJDb25maWcuZHVyYXRpb24gPSBjb25maWcuZHVyYXRpb247CiAgICB2YXIgc25hY2tCYXJSZWYgPSAoY292XzJvMHdwcXpmcWYuc1sxOV0rKywgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbkZyb21Db21wb25lbnQoRmRzQ29hc3RlckNvbXBvbmVudCwgc25hY2tCYXJDb25maWcpKTsKICAgIHZhciBjb2FzdGVyQ29tcG9uZW50ID0gKGNvdl8ybzB3cHF6ZnFmLnNbMjBdKyssIHNuYWNrQmFyUmVmLmluc3RhbmNlKTsKICAgIGNvdl8ybzB3cHF6ZnFmLnNbMjFdKys7CiAgICBjb2FzdGVyQ29tcG9uZW50LnNuYWNrQmFyUmVmID0gc25hY2tCYXJSZWY7CiAgICBjb3ZfMm8wd3BxemZxZi5zWzIyXSsrOwoKICAgIGlmIChjb25maWcudGl0bGUpIHsKICAgICAgY292XzJvMHdwcXpmcWYuYlswXVswXSsrOwogICAgICBjb3ZfMm8wd3BxemZxZi5zWzIzXSsrOwogICAgICBjb2FzdGVyQ29tcG9uZW50LnRpdGxlID0gY29uZmlnLnRpdGxlOwogICAgfSBlbHNlIHsKICAgICAgY292XzJvMHdwcXpmcWYuYlswXVsxXSsrOwogICAgfQoKICAgIGNvdl8ybzB3cHF6ZnFmLnNbMjRdKys7CgogICAgaWYgKGNvbmZpZy5tZXNzYWdlKSB7CiAgICAgIGNvdl8ybzB3cHF6ZnFmLmJbMV1bMF0rKzsKICAgICAgY292XzJvMHdwcXpmcWYuc1syNV0rKzsKICAgICAgY29hc3RlckNvbXBvbmVudC5tZXNzYWdlID0gY29uZmlnLm1lc3NhZ2U7CiAgICB9IGVsc2UgewogICAgICBjb3ZfMm8wd3BxemZxZi5iWzFdWzFdKys7CiAgICB9CgogICAgY292XzJvMHdwcXpmcWYuc1syNl0rKzsKCiAgICBpZiAoY29uZmlnLmljb24pIHsKICAgICAgY292XzJvMHdwcXpmcWYuYlsyXVswXSsrOwogICAgICBjb3ZfMm8wd3BxemZxZi5zWzI3XSsrOwogICAgICBjb2FzdGVyQ29tcG9uZW50Lmljb24gPSBjb25maWcuaWNvbjsKICAgIH0gZWxzZSB7CiAgICAgIGNvdl8ybzB3cHF6ZnFmLmJbMl1bMV0rKzsKICAgIH0KCiAgICBjb3ZfMm8wd3BxemZxZi5zWzI4XSsrOwoKICAgIGlmIChjb25maWcuY29sb3IpIHsKICAgICAgY292XzJvMHdwcXpmcWYuYlszXVswXSsrOwogICAgICBjb3ZfMm8wd3BxemZxZi5zWzI5XSsrOwogICAgICBjb2FzdGVyQ29tcG9uZW50LmNvbG9yID0gY29uZmlnLmNvbG9yOwogICAgfSBlbHNlIHsKICAgICAgY292XzJvMHdwcXpmcWYuYlszXVsxXSsrOwogICAgfQoKICAgIGNvdl8ybzB3cHF6ZnFmLnNbMzBdKys7CiAgICByZXR1cm4gc25hY2tCYXJSZWY7CiAgfQp9Owpjb3ZfMm8wd3BxemZxZi5zWzMxXSsrOwpGZHNTbmFja0JhclNlcnZpY2UucGFyYW1ldGVycyA9IFtNYXRTbmFja0Jhcl07"}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/ab4d01b93bc8341d986df0e9d6b3e207.json b/.cache-loader-coverage/ab4d01b93bc8341d986df0e9d6b3e207.json
new file mode 100644
index 0000000..8efd1aa
--- /dev/null
+++ b/.cache-loader-coverage/ab4d01b93bc8341d986df0e9d6b3e207.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/webapp/fds.routes.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/fds.routes.js","mtime":1562689731054},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7CmltcG9ydCBGZHNEZW1vIGZyb20gJ3dlYmFwcC9jb21wb25lbnRzL2Zsb3ctZGVzaWduLXN5c3RlbS9mZHMtZGVtby5qcyc7CnZhciBGZHNSb3V0ZXMgPSBSb3V0ZXJNb2R1bGUuZm9yUm9vdChbewogIHBhdGg6ICcnLAogIGNvbXBvbmVudDogRmRzRGVtbwp9XSk7CmV4cG9ydCBkZWZhdWx0IEZkc1JvdXRlczs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/bcc9c702845945bd2363d75653fe7326.json b/.cache-loader-coverage/bcc9c702845945bd2363d75653fe7326.json
new file mode 100644
index 0000000..2fe68a7
--- /dev/null
+++ b/.cache-loader-coverage/bcc9c702845945bd2363d75653fe7326.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/common/fds-common.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/common/fds-common.module.js","mtime":1563469805284},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmltcG9ydCBGZHNTdG9yYWdlU2VydmljZSBmcm9tICcuL3NlcnZpY2VzL2Zkcy1zdG9yYWdlLnNlcnZpY2UnOwovKioKICogRmRzQ29tbW9uc01vZHVsZSBjb25zdHJ1Y3Rvci4KICoKICogQGNvbnN0cnVjdG9yCiAqLwoKZnVuY3Rpb24gRmRzQ29tbW9uc01vZHVsZSgpIHt9CgpGZHNDb21tb25zTW9kdWxlLnByb3RvdHlwZSA9IHsKICBjb25zdHJ1Y3RvcjogRmRzQ29tbW9uc01vZHVsZQp9OwpGZHNDb21tb25zTW9kdWxlLmFubm90YXRpb25zID0gW25ldyBOZ01vZHVsZSh7CiAgaW1wb3J0czogW10sCiAgZGVjbGFyYXRpb25zOiBbXSwKICBleHBvcnRzOiBbXSwKICBwcm92aWRlcnM6IFtGZHNTdG9yYWdlU2VydmljZV0KfSldOwpleHBvcnQgeyBGZHNDb21tb25zTW9kdWxlLCBGZHNTdG9yYWdlU2VydmljZSB9Ow=="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/ca513476b9a03438a3ecc8b770f3c34a.json b/.cache-loader-coverage/ca513476b9a03438a3ecc8b770f3c34a.json
new file mode 100644
index 0000000..4b12124
--- /dev/null
+++ b/.cache-loader-coverage/ca513476b9a03438a3ecc8b770f3c34a.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js","mtime":1563469805293},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7CmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7CmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdFNuYWNrQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnOwppbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJzsKaW1wb3J0IHsgRmRzU25hY2tCYXJDb21wb25lbnQsIEZkc1NuYWNrQmFyVGl0bGVEaXJlY3RpdmUsIEZkc1NuYWNrQmFyQWN0aW9uc0RpcmVjdGl2ZSwgRmRzU25hY2tCYXJDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9mZHMtc25hY2tiYXIuY29tcG9uZW50JzsKaW1wb3J0IHsgSUNvYXN0ZXJDb25maWcsIEZkc1NuYWNrQmFyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc25hY2tiYXIuc2VydmljZSc7CmltcG9ydCB7IEZkc0NvYXN0ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvYXN0ZXIvY29hc3Rlci5jb21wb25lbnQnOwp2YXIgRkRTX1NOQUNLQkFSUyA9IFtGZHNTbmFja0JhckNvbXBvbmVudCwgRmRzU25hY2tCYXJUaXRsZURpcmVjdGl2ZSwgRmRzU25hY2tCYXJBY3Rpb25zRGlyZWN0aXZlLCBGZHNTbmFja0JhckNvbnRlbnREaXJlY3RpdmUsIEZkc0NvYXN0ZXJDb21wb25lbnRdOwp2YXIgRkRTX1NOQUNLQkFSU19FTlRSWV9DT01QT05FTlRTID0gW0Zkc0NvYXN0ZXJDb21wb25lbnRdOwovKioKICogRmRzU25hY2tCYXJzTW9kdWxlIGNvbnN0cnVjdG9yLgogKgogKiBAY29uc3RydWN0b3IKICovCgpmdW5jdGlvbiBGZHNTbmFja0JhcnNNb2R1bGUoKSB7fQoKRmRzU25hY2tCYXJzTW9kdWxlLnByb3RvdHlwZSA9IHsKICBjb25zdHJ1Y3RvcjogRmRzU25hY2tCYXJzTW9kdWxlCn07CkZkc1NuYWNrQmFyc01vZHVsZS5hbm5vdGF0aW9ucyA9IFtuZXcgTmdNb2R1bGUoewogIGltcG9ydHM6IFtGbGV4TGF5b3V0TW9kdWxlLCBGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlLCBNYXRTbmFja0Jhck1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZV0sCiAgZGVjbGFyYXRpb25zOiBbRkRTX1NOQUNLQkFSU10sCiAgZXhwb3J0czogW0ZEU19TTkFDS0JBUlNdLAogIHByb3ZpZGVyczogW0Zkc1NuYWNrQmFyU2VydmljZV0sCiAgZW50cnlDb21wb25lbnRzOiBbRkRTX1NOQUNLQkFSU19FTlRSWV9DT01QT05FTlRTXQp9KV07CmV4cG9ydCB7IEZkc1NuYWNrQmFyc01vZHVsZSwgSUNvYXN0ZXJDb25maWcsIEZkc1NuYWNrQmFyU2VydmljZSwgRmRzU25hY2tCYXJDb21wb25lbnQsIEZkc1NuYWNrQmFyVGl0bGVEaXJlY3RpdmUsIEZkc1NuYWNrQmFyQ29udGVudERpcmVjdGl2ZSwgRmRzU25hY2tCYXJBY3Rpb25zRGlyZWN0aXZlLCBGZHNDb2FzdGVyQ29tcG9uZW50IH07"}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/d17bcd2c557cc79a4b61993973fa3c3c.json b/.cache-loader-coverage/d17bcd2c557cc79a4b61993973fa3c3c.json
new file mode 100644
index 0000000..ab7f5d9
--- /dev/null
+++ b/.cache-loader-coverage/d17bcd2c557cc79a4b61993973fa3c3c.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/webapp/fds.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/fds.js","mtime":1563469805298},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOwppbXBvcnQgRmRzU2VydmljZSBmcm9tICd3ZWJhcHAvc2VydmljZXMvZmRzLnNlcnZpY2UuanMnOwppbXBvcnQgeyBGZHNBbmltYXRpb25zIH0gZnJvbSAnQG5pZmktZmRzL2NvcmUnOwovKioKICogRmRzIGNvbnN0cnVjdG9yLgogKgogKiBAcGFyYW0gZmRzU2VydmljZSAgICAgICAgICAgIFRoZSBmZHMgc2VydmljZS4KICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmICAgICBUaGUgY2hhbmdlIGRldGVjdG9yIHJlZi4KICogQGNvbnN0cnVjdG9yCiAqLwoKZnVuY3Rpb24gRmRzKGZkc1NlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmKSB7CiAgdGhpcy5mZHNTZXJ2aWNlID0gZmRzU2VydmljZTsKICB0aGlzLmNkID0gY2hhbmdlRGV0ZWN0b3JSZWY7Cn0KCkZkcy5wcm90b3R5cGUgPSB7CiAgY29uc3RydWN0b3I6IEZkcywKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50CiAgICovCiAgbmdPbkluaXQ6IGZ1bmN0aW9uIG5nT25Jbml0KCkgewogICAgdGhpcy5mZHNTZXJ2aWNlLnNpZGVuYXYgPSB0aGlzLnNpZGVuYXY7IC8vbmdDb3JlLlZpZXdDaGlsZAogIH0sCgogIC8qKgogICAqIFNpbmNlIHRoZSBjaGlsZCB2aWV3cyBhcmUgdXBkYXRpbmcgdGhlIGZkc1NlcnZpY2UgdmFsdWVzIHRoYXQgYXJlIHVzZWQgdG8gZGlzcGxheQogICAqIHRoZSBicmVhZGNydW1icyBpbiB0aGlzIGNvbXBvbmVudCdzIHZpZXcgd2UgbmVlZCB0byBtYW51YWxseSBkZXRlY3QgY2hhbmdlcyBhdCB0aGUgY29ycmVjdAogICAqIHBvaW50IGluIHRoZSBsaWZlY3ljbGUuCiAgICovCiAgbmdBZnRlclZpZXdDaGVja2VkOiBmdW5jdGlvbiBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7CiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTsKICB9Cn07CkZkcy5hbm5vdGF0aW9ucyA9IFtuZXcgQ29tcG9uZW50KHsKICBzZWxlY3RvcjogJ2Zkcy1hcHAnLAogIHRlbXBsYXRlOiByZXF1aXJlKCcuL2Zkcy5odG1sJyksCiAgcXVlcmllczogewogICAgc2lkZW5hdjogbmV3IFZpZXdDaGlsZCgnc2lkZW5hdicpCiAgfSwKICBhbmltYXRpb25zOiBbRmRzQW5pbWF0aW9ucy5mbHlJbk91dEFuaW1hdGlvbl0KfSldOwpGZHMucGFyYW1ldGVycyA9IFtGZHNTZXJ2aWNlLCBDaGFuZ2VEZXRlY3RvclJlZl07CmV4cG9ydCBkZWZhdWx0IEZkczs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/d1f63e1c623cd9867b58e8ca4bb40f87.json b/.cache-loader-coverage/d1f63e1c623cd9867b58e8ca4bb40f87.json
new file mode 100644
index 0000000..c77b76d
--- /dev/null
+++ b/.cache-loader-coverage/d1f63e1c623cd9867b58e8ca4bb40f87.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js","mtime":1562689731051},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnOwppbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsKLyoqCiAqIE5mUmVnaXN0cnlFZGl0QnVja2V0UG9saWN5IGNvbnN0cnVjdG9yLgogKgogKiBAcGFyYW0gbmZSZWdpc3RyeUFwaSAgICAgICAgIFRoZSBhcGkgc2VydmljZS4KICogQHBhcmFtIG5mUmVnaXN0cnlTZXJ2aWNlICAgICBUaGUgbmYtcmVnaXN0cnkuc2VydmljZSBtb2R1bGUuCiAqIEBwYXJhbSBhY3RpdmF0ZWRSb3V0ZSAgICAgICAgVGhlIGFuZ3VsYXIgcm91dGUgbW9kdWxlLgogKiBAcGFyYW0gbWF0RGlhbG9nUmVmICAgICAgICAgIFRoZSBhbmd1bGFyIG1hdGVyaWFsIGRpYWxvZyByZWYuCiAqIEBwYXJhbSBkYXRhICAgICAgICAgICAgICAgICAgVGhlIGRhdGEgcGFzc2VkIGludG8gdGhpcyBjb21wb25lbnQuCiAqIEBjb25zdHJ1Y3RvcgogKi8KCmZ1bmN0aW9uIEZkc0RlbW9EaWFsb2cobWF0RGlhbG9nUmVmLCBkYXRhKSB7CiAgLy8gU2VydmljZXMKICB0aGlzLmRpYWxvZ1JlZiA9IG1hdERpYWxvZ1JlZjsKICB0aGlzLmRhdGEgPSBkYXRhOwp9CgpGZHNEZW1vRGlhbG9nLnByb3RvdHlwZSA9IHsKICBjb25zdHJ1Y3RvcjogRmRzRGVtb0RpYWxvZywKCiAgLyoqCiAgICogQ2FuY2VsIGNyZWF0aW9uIG9mIGEgbmV3IHBvbGljeSBhbmQgY2xvc2UgZGlhbG9nLgogICAqLwogIGNhbmNlbDogZnVuY3Rpb24gY2FuY2VsKCkgewogICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTsKICB9Cn07CkZkc0RlbW9EaWFsb2cuYW5ub3RhdGlvbnMgPSBbbmV3IENvbXBvbmVudCh7CiAgdGVtcGxhdGU6IHJlcXVpcmUoJy4vZmRzLWRlbW8tZGlhbG9nLmh0bWwnKX0pXTsKRmRzRGVtb0RpYWxvZy5wYXJhbWV0ZXJzID0gW01hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBXTsKZXhwb3J0IGRlZmF1bHQgRmRzRGVtb0RpYWxvZzs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/d5d8b37db1b5b24ed9391eb8a8971fb2.json b/.cache-loader-coverage/d5d8b37db1b5b24ed9391eb8a8971fb2.json
new file mode 100644
index 0000000..c4a8902
--- /dev/null
+++ b/.cache-loader-coverage/d5d8b37db1b5b24ed9391eb8a8971fb2.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js","mtime":1563472991603},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIGNvdl8xMW5sNWoyajEzID0gZnVuY3Rpb24gKCkgewogIHZhciBwYXRoID0gIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9mbG93LWRlc2lnbi1zeXN0ZW0ubW9kdWxlLmpzIjsKICB2YXIgaGFzaCA9ICI3NzNiZTUyZWFkNTdkODI1NDRmZDI0OWZkMjc0MzM2YTBlNTFkMzQ0IjsKICB2YXIgZ2xvYmFsID0gbmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7CiAgdmFyIGdjdiA9ICJfX2NvdmVyYWdlX18iOwogIHZhciBjb3ZlcmFnZURhdGEgPSB7CiAgICBwYXRoOiAiL1VzZXJzL2phc2xhbi9EZXZlbG9wbWVudC9uaWZpLWZkcy9wbGF0Zm9ybS9jb3JlL2Zsb3ctZGVzaWduLXN5c3RlbS5tb2R1bGUuanMiLAogICAgc3RhdGVtZW50TWFwOiB7CiAgICAgICIwIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA3NCwKICAgICAgICAgIGNvbHVtbjogNAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA4NSwKICAgICAgICAgIGNvbHVtbjogNwogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDc2LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDc2LAogICAgICAgICAgY29sdW1uOiA0NgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjIiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDc5LAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDgxLAogICAgICAgICAgY29sdW1uOiAxMQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjMiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDgwLAogICAgICAgICAgY29sdW1uOiAxMgogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA4MCwKICAgICAgICAgIGNvbHVtbjogNzkKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI0IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA4MiwKICAgICAgICAgIGNvbHVtbjogOAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA4NCwKICAgICAgICAgIGNvbHVtbjogMTEKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI1IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA4MywKICAgICAgICAgIGNvbHVtbjogMTIKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogODMsCiAgICAgICAgICBjb2x1bW46IDc5CiAgICAgICAgfQogICAgICB9LAogICAgICAiNiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogODgsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogOTAsCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICI3IjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA5MiwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiAxODUsCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmbk1hcDogewogICAgICAiMCI6IHsKICAgICAgICBuYW1lOiAiRmxvd0Rlc2lnblN5c3RlbU1vZHVsZSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzMsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA3MywKICAgICAgICAgICAgY29sdW1uOiAzMQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA3MywKICAgICAgICAgICAgY29sdW1uOiAzNAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA4NiwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiA3MwogICAgICB9LAogICAgICAiMSI6IHsKICAgICAgICBuYW1lOiAiKGFub255bW91c18xKSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzQsCiAgICAgICAgICAgIGNvbHVtbjogMjIKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNzQsCiAgICAgICAgICAgIGNvbHVtbjogMjMKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNzQsCiAgICAgICAgICAgIGNvbHVtbjogMzQKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogODUsCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogNzQKICAgICAgfSwKICAgICAgIjIiOiB7CiAgICAgICAgbmFtZTogIihhbm9ueW1vdXNfMikiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDc5LAogICAgICAgICAgICBjb2x1bW46IDc1CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDc5LAogICAgICAgICAgICBjb2x1bW46IDc2CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDc5LAogICAgICAgICAgICBjb2x1bW46IDg3CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDgxLAogICAgICAgICAgICBjb2x1bW46IDkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDc5CiAgICAgIH0sCiAgICAgICIzIjogewogICAgICAgIG5hbWU6ICIoYW5vbnltb3VzXzMpIiwKICAgICAgICBkZWNsOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA4MiwKICAgICAgICAgICAgY29sdW1uOiA3NQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA4MiwKICAgICAgICAgICAgY29sdW1uOiA3NgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA4MiwKICAgICAgICAgICAgY29sdW1uOiA4NwogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA4NCwKICAgICAgICAgICAgY29sdW1uOiA5CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiA4MgogICAgICB9CiAgICB9LAogICAgYnJhbmNoTWFwOiB7fSwKICAgIHM6IHsKICAgICAgIjAiOiAwLAogICAgICAiMSI6IDAsCiAgICAgICIyIjogMCwKICAgICAgIjMiOiAwLAogICAgICAiNCI6IDAsCiAgICAgICI1IjogMCwKICAgICAgIjYiOiAwLAogICAgICAiNyI6IDAKICAgIH0sCiAgICBmOiB7CiAgICAgICIwIjogMCwKICAgICAgIjEiOiAwLAogICAgICAiMiI6IDAsCiAgICAgICIzIjogMAogICAgfSwKICAgIGI6IHt9LAogICAgX2NvdmVyYWdlU2NoZW1hOiAiNDNlMjdlMTM4ZWJmOWNmYzU5NjZiMDgyY2Y5YTAyODMwMmVkNDE4NCIsCiAgICBoYXNoOiAiNzczYmU1MmVhZDU3ZDgyNTQ0ZmQyNDlmZDI3NDMzNmEwZTUxZDM0NCIKICB9OwogIHZhciBjb3ZlcmFnZSA9IGdsb2JhbFtnY3ZdIHx8IChnbG9iYWxbZ2N2XSA9IHt9KTsKCiAgaWYgKGNvdmVyYWdlW3BhdGhdICYmIGNvdmVyYWdlW3BhdGhdLmhhc2ggPT09IGhhc2gpIHsKICAgIHJldHVybiBjb3ZlcmFnZVtwYXRoXTsKICB9CgogIHJldHVybiBjb3ZlcmFnZVtwYXRoXSA9IGNvdmVyYWdlRGF0YTsKfSgpOwoKLyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7CmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7CmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7CmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsIE1hdENhcmRNb2R1bGUsIE1hdENoZWNrYm94TW9kdWxlLCBNYXRDaGlwc01vZHVsZSwgTWF0RGF0ZXBpY2tlck1vZHVsZSwgTWF0RGlhbG9nTW9kdWxlLCBNYXRFeHBhbnNpb25Nb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0R3JpZExpc3RNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRMaXN0TW9kdWxlLCBNYXRNZW51TW9kdWxlLCBNYXRQcm9ncmVzc0Jhck1vZHVsZSwgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLCBNYXRSYWRpb01vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBNYXRTbGlkZVRvZ2dsZU1vZHVsZSwgTWF0U2xpZGVyTW9kdWxlLCBNYXRTaWRlbmF2TW9kdWxlLCBNYXRTbmFja0Jhck1vZHVsZSwgTWF0U3RlcHBlck1vZHVsZSwgTWF0VGFic01vZHVsZSwgTWF0VG9vbGJhck1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZSwgTWF0UGFnaW5hdG9yTW9kdWxlLCBNYXRTb3J0TW9kdWxlLCBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJzsKaW1wb3J0IHsgQnJvd3Nlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInOwppbXBvcnQgeyBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7CmltcG9ydCB7IENvdmFsZW50Q29tbW9uTW9kdWxlLCBDb3ZhbGVudENoaXBzTW9kdWxlLCBDb3ZhbGVudERpYWxvZ3NNb2R1bGUsIENvdmFsZW50RXhwYW5zaW9uUGFuZWxNb2R1bGUsIENvdmFsZW50UGFnaW5nTW9kdWxlIH0gZnJvbSAnQGNvdmFsZW50L2NvcmUnOwppbXBvcnQgeyBDb3ZhbGVudFN0ZXBzTW9kdWxlIH0gZnJvbSAnQGNvdmFsZW50L2NvcmUvc3RlcHMnOwppbXBvcnQgeyBDb3ZhbGVudERhdGFUYWJsZU1vZHVsZSB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2RhdGEtdGFibGUnOwppbXBvcnQgeyBGZHNEaWFsb2dzTW9kdWxlIH0gZnJvbSAnLi9kaWFsb2dzL2Zkcy1kaWFsb2dzLm1vZHVsZSc7CmltcG9ydCB7IEZkc1NuYWNrQmFyc01vZHVsZSB9IGZyb20gJy4vc25hY2tiYXJzL2Zkcy1zbmFja2JhcnMubW9kdWxlJzsKLyoqCiAqIEZsb3dEZXNpZ25TeXN0ZW1Nb2R1bGUgY29uc3RydWN0b3IuCiAqCiAqIEBjb25zdHJ1Y3RvcgogKi8KCmZ1bmN0aW9uIEZsb3dEZXNpZ25TeXN0ZW1Nb2R1bGUoKSB7CiAgY292XzExbmw1ajJqMTMuZlswXSsrOwogIGNvdl8xMW5sNWoyajEzLnNbMF0rKzsKICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICBjb3ZfMTFubDVqMmoxMy5mWzFdKys7CiAgICBjb3ZfMTFubDVqMmoxMy5zWzFdKys7CiAgICAvL2FkZCBmZHMgYXR0ciB0byBib2R5IHRhZyB0byBhbGxvdyBmaW5lIGdyYWluIHN0eWxlIG92ZXJyaWRlcwogICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ2ZkcycsICcnKTsgLy9vdmVycmlkZSB0aGUgaG92ZXIgc3R5bGVzIGZvciBjaGVja2JveCBib3JkZXJzCgogICAgY292XzExbmw1ajJqMTMuc1syXSsrOwogICAgJChkb2N1bWVudC5ib2R5KS5vbignbW91c2VlbnRlcicsICcubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcicsIGZ1bmN0aW9uICgpIHsKICAgICAgY292XzExbmw1ajJqMTMuZlsyXSsrOwogICAgICBjb3ZfMTFubDVqMmoxMy5zWzNdKys7CiAgICAgICQodGhpcykuZmluZCgnLm1hdC1jaGVja2JveC1mcmFtZScpLmNzcygnYm9yZGVyLWNvbG9yJywgJyMxNDkxQzEnKTsKICAgIH0pOwogICAgY292XzExbmw1ajJqMTMuc1s0XSsrOwogICAgJChkb2N1bWVudC5ib2R5KS5vbignbW91c2VsZWF2ZScsICcubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcicsIGZ1bmN0aW9uICgpIHsKICAgICAgY292XzExbmw1ajJqMTMuZlszXSsrOwogICAgICBjb3ZfMTFubDVqMmoxMy5zWzVdKys7CiAgICAgICQodGhpcykuZmluZCgnLm1hdC1jaGVja2JveC1mcmFtZScpLmNzcygnYm9yZGVyLWNvbG9yJywgJyNEREREREQnKTsKICAgIH0pOwogIH0pOwp9Cgpjb3ZfMTFubDVqMmoxMy5zWzZdKys7CkZsb3dEZXNpZ25TeXN0ZW1Nb2R1bGUucHJvdG90eXBlID0gewogIGNvbnN0cnVjdG9yOiBGbG93RGVzaWduU3lzdGVtTW9kdWxlCn07CmNvdl8xMW5sNWoyajEzLnNbN10rKzsKRmxvd0Rlc2lnblN5c3RlbU1vZHVsZS5hbm5vdGF0aW9ucyA9IFtuZXcgTmdNb2R1bGUoewogIGltcG9ydHM6IFtGbGV4TGF5b3V0TW9kdWxlLCBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSwgQ29tbW9uTW9kdWxlLCBCcm93c2VyTW9kdWxlLCBNYXRBdXRvY29tcGxldGVNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLCBNYXRDYXJkTW9kdWxlLCBNYXRDaGVja2JveE1vZHVsZSwgTWF0Q2hpcHNNb2R1bGUsIE1hdERhdGVwaWNrZXJNb2R1bGUsIE1hdERpYWxvZ01vZHVsZSwgTWF0RXhwYW5zaW9uTW9kdWxlLCBNYXRGb3JtRmllbGRNb2R1bGUsIE1hdEdyaWRMaXN0TW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0TGlzdE1vZHVsZSwgTWF0TWVudU1vZHVsZSwgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSwgTWF0UmFkaW9Nb2R1bGUsIE1hdFNlbGVjdE1vZHVsZSwgTWF0U2xpZGVUb2dnbGVNb2R1bGUsIE1hdFNsaWRlck1vZHVsZSwgTWF0U2lkZW5hdk1vZHVsZSwgTWF0U25hY2tCYXJNb2R1bGUsIE1hdFN0ZXBwZXJNb2R1bGUsIE1hdFRhYnNNb2R1bGUsIE1hdFRvb2xiYXJNb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGUsIE1hdFBhZ2luYXRvck1vZHVsZSwgTWF0U29ydE1vZHVsZSwgTWF0VGFibGVNb2R1bGUsIENvdmFsZW50Q29tbW9uTW9kdWxlLCBDb3ZhbGVudENoaXBzTW9kdWxlLCBDb3ZhbGVudFN0ZXBzTW9kdWxlLCBDb3ZhbGVudERhdGFUYWJsZU1vZHVsZSwgQ292YWxlbnREaWFsb2dzTW9kdWxlLCBDb3ZhbGVudEV4cGFuc2lvblBhbmVsTW9kdWxlLCBDb3ZhbGVudFBhZ2luZ01vZHVsZSwgRmRzRGlhbG9nc01vZHVsZSwgRmRzU25hY2tCYXJzTW9kdWxlXSwKICBleHBvcnRzOiBbRmxleExheW91dE1vZHVsZSwgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUsIENvbW1vbk1vZHVsZSwgQnJvd3Nlck1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSwgTWF0Q2FyZE1vZHVsZSwgTWF0Q2hlY2tib3hNb2R1bGUsIE1hdENoaXBzTW9kdWxlLCBNYXREYXRlcGlja2VyTW9kdWxlLCBNYXREaWFsb2dNb2R1bGUsIE1hdEV4cGFuc2lvbk1vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRHcmlkTGlzdE1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdExpc3RNb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdFByb2dyZXNzQmFyTW9kdWxlLCBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsIE1hdFJhZGlvTW9kdWxlLCBNYXRTZWxlY3RNb2R1bGUsIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLCBNYXRTbGlkZXJNb2R1bGUsIE1hdFNpZGVuYXZNb2R1bGUsIE1hdFNuYWNrQmFyTW9kdWxlLCBNYXRTdGVwcGVyTW9kdWxlLCBNYXRUYWJzTW9kdWxlLCBNYXRUb29sYmFyTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBNYXRQYWdpbmF0b3JNb2R1bGUsIE1hdFNvcnRNb2R1bGUsIE1hdFRhYmxlTW9kdWxlLCBDb3ZhbGVudENvbW1vbk1vZHVsZSwgQ292YWxlbnRDaGlwc01vZHVsZSwgQ292YWxlbnRTdGVwc01vZHVsZSwgQ292YWxlbnREYXRhVGFibGVNb2R1bGUsIENvdmFsZW50RGlhbG9nc01vZHVsZSwgQ292YWxlbnRFeHBhbnNpb25QYW5lbE1vZHVsZSwgQ292YWxlbnRQYWdpbmdNb2R1bGUsIEZkc0RpYWxvZ3NNb2R1bGUsIEZkc1NuYWNrQmFyc01vZHVsZV0KfSldOwpleHBvcnQgZGVmYXVsdCBGbG93RGVzaWduU3lzdGVtTW9kdWxlOw=="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/d7f3e159bdf50885434076da93002e97.json b/.cache-loader-coverage/d7f3e159bdf50885434076da93002e97.json
new file mode 100644
index 0000000..d49ce7c
--- /dev/null
+++ b/.cache-loader-coverage/d7f3e159bdf50885434076da93002e97.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/webapp/fds-bootstrap.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/fds-bootstrap.js","mtime":1562689731053},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCAnY29yZS1qcyc7CmltcG9ydCAnem9uZS5qcyc7CmltcG9ydCAnaGFtbWVyanMnOwppbXBvcnQgJCBmcm9tICdqcXVlcnknOwppbXBvcnQgeyBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJzsKaW1wb3J0IHsgZW5hYmxlUHJvZE1vZGUsIFRSQU5TTEFUSU9OUywgVFJBTlNMQVRJT05TX0ZPUk1BVCwgTE9DQUxFX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmltcG9ydCBGZHNNb2R1bGUgZnJvbSAnd2ViYXBwL2Zkcy5tb2R1bGUuanMnOyAvLyBDb21tZW50IG91dCB0aGlzIGxpbmUgd2hlbiBkZXZlbG9waW5nIHRvIGFzc2VydCBmb3IgdW5pZGlyZWN0aW9uYWwgZGF0YSBmbG93CgplbmFibGVQcm9kTW9kZSgpOyAvLyBHZXQgdGhlIGxvY2FsZSBpZCBmcm9tIHRoZSBnbG9iYWwKCnZhciBsb2NhbGUgPSBuYXZpZ2F0b3IubGFuZ3VhZ2U7CnZhciBwcm92aWRlcnMgPSBbXTsgLy8gTm8gbG9jYWxlIG9yIFUuUy4gRW5nbGlzaDogbm8gdHJhbnNsYXRpb24gcHJvdmlkZXJzIHNvIGdvIGFoZWFkIGFuZCBib290c3RyYXAgdGhlIGFwcAoKaWYgKCFsb2NhbGUgfHwgbG9jYWxlID09PSAnZW4tVVMnKSB7CiAgcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShGZHNNb2R1bGUsIHsKICAgIHByb3ZpZGVyczogcHJvdmlkZXJzCiAgfSk7Cn0gZWxzZSB7CiAgLy9sb2FkIHRoZSB0cmFuc2xhdGlvbiBwcm92aWRlcnMgYW5kIGJvb3RzdHJhcCB0aGUgbW9kdWxlCiAgdmFyIHRyYW5zbGF0aW9uRmlsZSA9ICcvbG9jYWxlL21lc3NhZ2VzLicgKyBsb2NhbGUgKyAnLnhsZic7CiAgJC5hamF4KHsKICAgIHVybDogdHJhbnNsYXRpb25GaWxlCiAgfSkuZG9uZShmdW5jdGlvbiAodHJhbnNsYXRpb25zKSB7CiAgICAvLyBhZGQgcHJvdmlkZXJzIGlmIHRyYW5zbGF0aW9uIGZpbGUgZm9yIGxvY2FsZSBpcyBsb2FkZWQKICAgIGlmICh0cmFuc2xhdGlvbnMpIHsKICAgICAgcHJvdmlkZXJzLnB1c2goewogICAgICAgIHByb3ZpZGU6IFRSQU5TTEFUSU9OUywKICAgICAgICB1c2VWYWx1ZTogdHJhbnNsYXRpb25zCiAgICAgIH0pOwogICAgICBwcm92aWRlcnMucHVzaCh7CiAgICAgICAgcHJvdmlkZTogVFJBTlNMQVRJT05TX0ZPUk1BVCwKICAgICAgICB1c2VWYWx1ZTogJ3hsZicKICAgICAgfSk7CiAgICAgIHByb3ZpZGVycy5wdXNoKHsKICAgICAgICBwcm92aWRlOiBMT0NBTEVfSUQsCiAgICAgICAgdXNlVmFsdWU6IGxvY2FsZQogICAgICB9KTsKICAgIH0KCiAgICBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEZkc01vZHVsZSwgewogICAgICBwcm92aWRlcnM6IHByb3ZpZGVycwogICAgfSk7CiAgfSkuZmFpbChmdW5jdGlvbiAoKSB7CiAgICBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEZkc01vZHVsZSwgewogICAgICBwcm92aWRlcnM6IHByb3ZpZGVycwogICAgfSk7CiAgfSk7Cn0="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/df9f6ad93491a401343b46565ca35353.json b/.cache-loader-coverage/df9f6ad93491a401343b46565ca35353.json
new file mode 100644
index 0000000..e5bd759
--- /dev/null
+++ b/.cache-loader-coverage/df9f6ad93491a401343b46565ca35353.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js","mtime":1562689731041},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIGNvdl9xMTExcXl4c2MgPSBmdW5jdGlvbiAoKSB7CiAgdmFyIHBhdGggPSAiL1VzZXJzL2phc2xhbi9EZXZlbG9wbWVudC9uaWZpLWZkcy9wbGF0Zm9ybS9jb3JlL2RpYWxvZ3MvY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50LmpzIjsKICB2YXIgaGFzaCA9ICI5MGNiN2E0NjJmZDY2ODQ5ODQxOWQwNmJiOGQ5M2M0ZmJiYmU3N2JiIjsKICB2YXIgZ2xvYmFsID0gbmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7CiAgdmFyIGdjdiA9ICJfX2NvdmVyYWdlX18iOwogIHZhciBjb3ZlcmFnZURhdGEgPSB7CiAgICBwYXRoOiAiL1VzZXJzL2phc2xhbi9EZXZlbG9wbWVudC9uaWZpLWZkcy9wbGF0Zm9ybS9jb3JlL2RpYWxvZ3MvY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50LmpzIiwKICAgIHN0YXRlbWVudE1hcDogewogICAgICAiMCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMjYsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMjYsCiAgICAgICAgICBjb2x1bW46IDIwCiAgICAgICAgfQogICAgICB9LAogICAgICAiMSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMjcsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMjcsCiAgICAgICAgICBjb2x1bW46IDIyCiAgICAgICAgfQogICAgICB9LAogICAgICAiMiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMjgsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMjgsCiAgICAgICAgICBjb2x1bW46IDI3CiAgICAgICAgfQogICAgICB9LAogICAgICAiMyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMjksCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMjksCiAgICAgICAgICBjb2x1bW46IDQzCiAgICAgICAgfQogICAgICB9LAogICAgICAiNCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMzAsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMzAsCiAgICAgICAgICBjb2x1bW46IDI3CiAgICAgICAgfQogICAgICB9LAogICAgICAiNSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMzEsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMzEsCiAgICAgICAgICBjb2x1bW46IDQzCiAgICAgICAgfQogICAgICB9LAogICAgICAiNiI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMzIsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMzIsCiAgICAgICAgICBjb2x1bW46IDMxCiAgICAgICAgfQogICAgICB9LAogICAgICAiNyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMzMsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMzMsCiAgICAgICAgICBjb2x1bW46IDM4CiAgICAgICAgfQogICAgICB9LAogICAgICAiOCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMzQsCiAgICAgICAgICBjb2x1bW46IDQKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogMzQsCiAgICAgICAgICBjb2x1bW46IDI5CiAgICAgICAgfQogICAgICB9LAogICAgICAiOSI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogMzcsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNTMsCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICIxMCI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNDQsCiAgICAgICAgICBjb2x1bW46IDgKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogNDQsCiAgICAgICAgICBjb2x1bW46IDM2CiAgICAgICAgfQogICAgICB9LAogICAgICAiMTEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDUxLAogICAgICAgICAgY29sdW1uOiA4CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDUxLAogICAgICAgICAgY29sdW1uOiAzNQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEyIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA1NSwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA2MCwKICAgICAgICAgIGNvbHVtbjogMgogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEzIjogewogICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICBsaW5lOiA2MiwKICAgICAgICAgIGNvbHVtbjogMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA2MiwKICAgICAgICAgIGNvbHVtbjogNDIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmbk1hcDogewogICAgICAiMCI6IHsKICAgICAgICBuYW1lOiAiRmRzQ29uZmlybURpYWxvZ0NvbXBvbmVudCIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogMjUsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAyNSwKICAgICAgICAgICAgY29sdW1uOiAzNAogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiAyNSwKICAgICAgICAgICAgY29sdW1uOiAzNwogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiAzNSwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiAyNQogICAgICB9LAogICAgICAiMSI6IHsKICAgICAgICBuYW1lOiAiKGFub255bW91c18xKSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNDMsCiAgICAgICAgICAgIGNvbHVtbjogMTIKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNDMsCiAgICAgICAgICAgIGNvbHVtbjogMTMKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvYzogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNDMsCiAgICAgICAgICAgIGNvbHVtbjogMjQKICAgICAgICAgIH0sCiAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgbGluZTogNDUsCiAgICAgICAgICAgIGNvbHVtbjogNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGluZTogNDMKICAgICAgfSwKICAgICAgIjIiOiB7CiAgICAgICAgbmFtZTogIihhbm9ueW1vdXNfMikiLAogICAgICAgIGRlY2w6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDUwLAogICAgICAgICAgICBjb2x1bW46IDEyCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDUwLAogICAgICAgICAgICBjb2x1bW46IDEzCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2M6IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IDUwLAogICAgICAgICAgICBjb2x1bW46IDI0CiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIGxpbmU6IDUyLAogICAgICAgICAgICBjb2x1bW46IDUKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxpbmU6IDUwCiAgICAgIH0KICAgIH0sCiAgICBicmFuY2hNYXA6IHt9LAogICAgczogewogICAgICAiMCI6IDAsCiAgICAgICIxIjogMCwKICAgICAgIjIiOiAwLAogICAgICAiMyI6IDAsCiAgICAgICI0IjogMCwKICAgICAgIjUiOiAwLAogICAgICAiNiI6IDAsCiAgICAgICI3IjogMCwKICAgICAgIjgiOiAwLAogICAgICAiOSI6IDAsCiAgICAgICIxMCI6IDAsCiAgICAgICIxMSI6IDAsCiAgICAgICIxMiI6IDAsCiAgICAgICIxMyI6IDAKICAgIH0sCiAgICBmOiB7CiAgICAgICIwIjogMCwKICAgICAgIjEiOiAwLAogICAgICAiMiI6IDAKICAgIH0sCiAgICBiOiB7fSwKICAgIF9jb3ZlcmFnZVNjaGVtYTogIjQzZTI3ZTEzOGViZjljZmM1OTY2YjA4MmNmOWEwMjgzMDJlZDQxODQiLAogICAgaGFzaDogIjkwY2I3YTQ2MmZkNjY4NDk4NDE5ZDA2YmI4ZDkzYzRmYmJiZTc3YmIiCiAgfTsKICB2YXIgY292ZXJhZ2UgPSBnbG9iYWxbZ2N2XSB8fCAoZ2xvYmFsW2djdl0gPSB7fSk7CgogIGlmIChjb3ZlcmFnZVtwYXRoXSAmJiBjb3ZlcmFnZVtwYXRoXS5oYXNoID09PSBoYXNoKSB7CiAgICByZXR1cm4gY292ZXJhZ2VbcGF0aF07CiAgfQoKICByZXR1cm4gY292ZXJhZ2VbcGF0aF0gPSBjb3ZlcmFnZURhdGE7Cn0oKTsKCi8qCiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQogKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgogKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAogKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAogKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqLwppbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsKLyoqCiAqIEZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQgY29uc3RydWN0b3IuCiAqCiAqIEBjb25zdHJ1Y3RvcgogKi8KCmZ1bmN0aW9uIEZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQoKSB7CiAgY292X3ExMTFxeXhzYy5mWzBdKys7CiAgY292X3ExMTFxeXhzYy5zWzBdKys7CiAgdGhpcy50aXRsZSA9ICcnOwogIGNvdl9xMTExcXl4c2Muc1sxXSsrOwogIHRoaXMubWVzc2FnZSA9ICcnOwogIGNvdl9xMTExcXl4c2Muc1syXSsrOwogIHRoaXMuYWNjZXB0QnV0dG9uID0gJyc7CiAgY292X3ExMTFxeXhzYy5zWzNdKys7CiAgdGhpcy5hY2NlcHRCdXR0b25Db2xvciA9ICdmZHMtcHJpbWFyeSc7CiAgY292X3ExMTFxeXhzYy5zWzRdKys7CiAgdGhpcy5jYW5jZWxCdXR0b24gPSAnJzsKICBjb3ZfcTExMXF5eHNjLnNbNV0rKzsKICB0aGlzLmNhbmNlbEJ1dHRvbkNvbG9yID0gJ2Zkcy1yZWd1bGFyJzsKICBjb3ZfcTExMXF5eHNjLnNbNl0rKzsKICB0aGlzLmRpYWxvZ1JlZiA9IHVuZGVmaW5lZDsKICBjb3ZfcTExMXF5eHNjLnNbN10rKzsKICB0aGlzLnZpZXdDb250YWluZXJSZWYgPSB1bmRlZmluZWQ7CiAgY292X3ExMTFxeXhzYy5zWzhdKys7CiAgdGhpcy5kaXNhYmxlQ2xvc2UgPSB0cnVlOwp9Cgpjb3ZfcTExMXF5eHNjLnNbOV0rKzsKRmRzQ29uZmlybURpYWxvZ0NvbXBvbmVudC5wcm90b3R5cGUgPSB7CiAgY29uc3RydWN0b3I6IEZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQsCgogIC8qKgogICAqIENsb3NlIHRoZSBkaWFsb2cgYW5kIHNlbmQgYSBjYW5jZWwgcmVzcG9uc2UgdG8gYW55IHN1YnNjcmliZXJzLgogICAqLwogIGNhbmNlbDogZnVuY3Rpb24gY2FuY2VsKCkgewogICAgY292X3ExMTFxeXhzYy5mWzFdKys7CiAgICBjb3ZfcTExMXF5eHNjLnNbMTBdKys7CiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSk7CiAgfSwKCiAgLyoqCiAgICogQ2xvc2UgdGhlIGRpYWxvZyBhbmQgc2VuZCBhbiBhY2NlcHQgcmVzcG9uc2UgdG8gYW55IHN1YnNjcmliZXJzLgogICAqLwogIGFjY2VwdDogZnVuY3Rpb24gYWNjZXB0KCkgewogICAgY292X3ExMTFxeXhzYy5mWzJdKys7CiAgICBjb3ZfcTExMXF5eHNjLnNbMTFdKys7CiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTsKICB9Cn07CmNvdl9xMTExcXl4c2Muc1sxMl0rKzsKRmRzQ29uZmlybURpYWxvZ0NvbXBvbmVudC5hbm5vdGF0aW9ucyA9IFtuZXcgQ29tcG9uZW50KHsKICBzZWxlY3RvcjogJ2Zkcy1jb25maXJtLWRpYWxvZycsCiAgdGVtcGxhdGU6IHJlcXVpcmUoJy4vY29uZmlybS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnKX0pXTsKY292X3ExMTFxeXhzYy5zWzEzXSsrOwpGZHNDb25maXJtRGlhbG9nQ29tcG9uZW50LnBhcmFtZXRlcnMgPSBbXTsKZXhwb3J0IHsgRmRzQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9Ow=="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/e83be08852a3f79f75185cce4b5c2405.json b/.cache-loader-coverage/e83be08852a3f79f75185cce4b5c2405.json
new file mode 100644
index 0000000..7b0b22e
--- /dev/null
+++ b/.cache-loader-coverage/e83be08852a3f79f75185cce4b5c2405.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js","mtime":1563469805290},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIGNvdl8yb2V6cHEzNDJvID0gZnVuY3Rpb24gKCkgewogIHZhciBwYXRoID0gIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9kaWFsb2dzL2Zkcy1kaWFsb2dzLm1vZHVsZS5qcyI7CiAgdmFyIGhhc2ggPSAiODc0ZmE4NmVhN2IyMTNkZTFlNGVlZDgyYjkyNDk0OTYzNTc4NTM0ZSI7CiAgdmFyIGdsb2JhbCA9IG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOwogIHZhciBnY3YgPSAiX19jb3ZlcmFnZV9fIjsKICB2YXIgY292ZXJhZ2VEYXRhID0gewogICAgcGF0aDogIi9Vc2Vycy9qYXNsYW4vRGV2ZWxvcG1lbnQvbmlmaS1mZHMvcGxhdGZvcm0vY29yZS9kaWFsb2dzL2Zkcy1kaWFsb2dzLm1vZHVsZS5qcyIsCiAgICBzdGF0ZW1lbnRNYXA6IHsKICAgICAgIjAiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDQwLAogICAgICAgICAgY29sdW1uOiAyMAogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA0NiwKICAgICAgICAgIGNvbHVtbjogMQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjEiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDQ4LAogICAgICAgICAgY29sdW1uOiAzNwogICAgICAgIH0sCiAgICAgICAgZW5kOiB7CiAgICAgICAgICBsaW5lOiA1MCwKICAgICAgICAgIGNvbHVtbjogMQogICAgICAgIH0KICAgICAgfSwKICAgICAgIjIiOiB7CiAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgIGxpbmU6IDYxLAogICAgICAgICAgY29sdW1uOiAwCiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIGxpbmU6IDYzLAogICAgICAgICAgY29sdW1uOiAyCiAgICAgICAgfQogICAgICB9LAogICAgICAiMyI6IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbGluZTogNjUsCiAgICAgICAgICBjb2x1bW46IDAKICAgICAgICB9LAogICAgICAgIGVuZDogewogICAgICAgICAgbGluZTogODksCiAgICAgICAgICBjb2x1bW46IDIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmbk1hcDogewogICAgICAiMCI6IHsKICAgICAgICBuYW1lOiAiRmRzRGlhbG9nc01vZHVsZSIsCiAgICAgICAgZGVjbDogewogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgbGluZTogNTcsCiAgICAgICAgICAgIGNvbHVtbjogOQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA1NywKICAgICAgICAgICAgY29sdW1uOiAyNQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbG9jOiB7CiAgICAgICAgICBzdGFydDogewogICAgICAgICAgICBsaW5lOiA1NywKICAgICAgICAgICAgY29sdW1uOiAyOAogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICBsaW5lOiA1OSwKICAgICAgICAgICAgY29sdW1uOiAxCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsaW5lOiA1NwogICAgICB9CiAgICB9LAogICAgYnJhbmNoTWFwOiB7fSwKICAgIHM6IHsKICAgICAgIjAiOiAwLAogICAgICAiMSI6IDAsCiAgICAgICIyIjogMCwKICAgICAgIjMiOiAwCiAgICB9LAogICAgZjogewogICAgICAiMCI6IDAKICAgIH0sCiAgICBiOiB7fSwKICAgIF9jb3ZlcmFnZVNjaGVtYTogIjQzZTI3ZTEzOGViZjljZmM1OTY2YjA4MmNmOWEwMjgzMDJlZDQxODQiLAogICAgaGFzaDogIjg3NGZhODZlYTdiMjEzZGUxZTRlZWQ4MmI5MjQ5NDk2MzU3ODUzNGUiCiAgfTsKICB2YXIgY292ZXJhZ2UgPSBnbG9iYWxbZ2N2XSB8fCAoZ2xvYmFsW2djdl0gPSB7fSk7CgogIGlmIChjb3ZlcmFnZVtwYXRoXSAmJiBjb3ZlcmFnZVtwYXRoXS5oYXNoID09PSBoYXNoKSB7CiAgICByZXR1cm4gY292ZXJhZ2VbcGF0aF07CiAgfQoKICByZXR1cm4gY292ZXJhZ2VbcGF0aF0gPSBjb3ZlcmFnZURhdGE7Cn0oKTsKCi8qCiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQogKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgogKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAogKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAogKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqLwppbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOwppbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQnOwppbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nOwppbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7CmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnOwppbXBvcnQgeyBGZHNEaWFsb2dUaXRsZURpcmVjdGl2ZSwgRmRzRGlhbG9nQ29udGVudERpcmVjdGl2ZSwgRmRzRGlhbG9nQWN0aW9uc0RpcmVjdGl2ZSwgRmRzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9mZHMtZGlhbG9nLmNvbXBvbmVudCc7CmltcG9ydCB7IElDb25maXJtQ29uZmlnLCBGZHNEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7CmltcG9ydCB7IEZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7CnZhciBGRFNfRElBTE9HUyA9IChjb3ZfMm9lenBxMzQyby5zWzBdKyssIFtGZHNEaWFsb2dDb21wb25lbnQsIEZkc0RpYWxvZ1RpdGxlRGlyZWN0aXZlLCBGZHNEaWFsb2dBY3Rpb25zRGlyZWN0aXZlLCBGZHNEaWFsb2dDb250ZW50RGlyZWN0aXZlLCBGZHNDb25maXJtRGlhbG9nQ29tcG9uZW50XSk7CnZhciBGRFNfRElBTE9HU19FTlRSWV9DT01QT05FTlRTID0gKGNvdl8yb2V6cHEzNDJvLnNbMV0rKywgW0Zkc0NvbmZpcm1EaWFsb2dDb21wb25lbnRdKTsKLyoqCiAqIEZkc0RpYWxvZ3NNb2R1bGUgY29uc3RydWN0b3IuCiAqCiAqIEBjb25zdHJ1Y3RvcgogKi8KCmZ1bmN0aW9uIEZkc0RpYWxvZ3NNb2R1bGUoKSB7CiAgY292XzJvZXpwcTM0Mm8uZlswXSsrOwp9Cgpjb3ZfMm9lenBxMzQyby5zWzJdKys7CkZkc0RpYWxvZ3NNb2R1bGUucHJvdG90eXBlID0gewogIGNvbnN0cnVjdG9yOiBGZHNEaWFsb2dzTW9kdWxlCn07CmNvdl8yb2V6cHEzNDJvLnNbM10rKzsKRmRzRGlhbG9nc01vZHVsZS5hbm5vdGF0aW9ucyA9IFtuZXcgTmdNb2R1bGUoewogIGltcG9ydHM6IFtGbGV4TGF5b3V0TW9kdWxlLCBGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlLCBNYXREaWFsb2dNb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGVdLAogIGRlY2xhcmF0aW9uczogW0ZEU19ESUFMT0dTXSwKICBleHBvcnRzOiBbRkRTX0RJQUxPR1NdLAogIHByb3ZpZGVyczogW0Zkc0RpYWxvZ1NlcnZpY2VdLAogIGVudHJ5Q29tcG9uZW50czogW0ZEU19ESUFMT0dTX0VOVFJZX0NPTVBPTkVOVFNdCn0pXTsKZXhwb3J0IHsgRmRzRGlhbG9nc01vZHVsZSwgSUNvbmZpcm1Db25maWcsIEZkc0RpYWxvZ1NlcnZpY2UsIEZkc0RpYWxvZ0NvbXBvbmVudCwgRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUsIEZkc0RpYWxvZ0NvbnRlbnREaXJlY3RpdmUsIEZkc0RpYWxvZ0FjdGlvbnNEaXJlY3RpdmUsIEZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQgfTs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/eab1c68eb1d06e62c1ad966b794aa017.json b/.cache-loader-coverage/eab1c68eb1d06e62c1ad966b794aa017.json
new file mode 100644
index 0000000..86c8a63
--- /dev/null
+++ b/.cache-loader-coverage/eab1c68eb1d06e62c1ad966b794aa017.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js","mtime":1563469805290},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7CmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7CmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJzsKaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7CmltcG9ydCB7IEZkc0RpYWxvZ1RpdGxlRGlyZWN0aXZlLCBGZHNEaWFsb2dDb250ZW50RGlyZWN0aXZlLCBGZHNEaWFsb2dBY3Rpb25zRGlyZWN0aXZlLCBGZHNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2Zkcy1kaWFsb2cuY29tcG9uZW50JzsKaW1wb3J0IHsgSUNvbmZpcm1Db25maWcsIEZkc0RpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJzsKaW1wb3J0IHsgRmRzQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50JzsKdmFyIEZEU19ESUFMT0dTID0gW0Zkc0RpYWxvZ0NvbXBvbmVudCwgRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUsIEZkc0RpYWxvZ0FjdGlvbnNEaXJlY3RpdmUsIEZkc0RpYWxvZ0NvbnRlbnREaXJlY3RpdmUsIEZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnRdOwp2YXIgRkRTX0RJQUxPR1NfRU5UUllfQ09NUE9ORU5UUyA9IFtGZHNDb25maXJtRGlhbG9nQ29tcG9uZW50XTsKLyoqCiAqIEZkc0RpYWxvZ3NNb2R1bGUgY29uc3RydWN0b3IuCiAqCiAqIEBjb25zdHJ1Y3RvcgogKi8KCmZ1bmN0aW9uIEZkc0RpYWxvZ3NNb2R1bGUoKSB7fQoKRmRzRGlhbG9nc01vZHVsZS5wcm90b3R5cGUgPSB7CiAgY29uc3RydWN0b3I6IEZkc0RpYWxvZ3NNb2R1bGUKfTsKRmRzRGlhbG9nc01vZHVsZS5hbm5vdGF0aW9ucyA9IFtuZXcgTmdNb2R1bGUoewogIGltcG9ydHM6IFtGbGV4TGF5b3V0TW9kdWxlLCBGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlLCBNYXREaWFsb2dNb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGVdLAogIGRlY2xhcmF0aW9uczogW0ZEU19ESUFMT0dTXSwKICBleHBvcnRzOiBbRkRTX0RJQUxPR1NdLAogIHByb3ZpZGVyczogW0Zkc0RpYWxvZ1NlcnZpY2VdLAogIGVudHJ5Q29tcG9uZW50czogW0ZEU19ESUFMT0dTX0VOVFJZX0NPTVBPTkVOVFNdCn0pXTsKZXhwb3J0IHsgRmRzRGlhbG9nc01vZHVsZSwgSUNvbmZpcm1Db25maWcsIEZkc0RpYWxvZ1NlcnZpY2UsIEZkc0RpYWxvZ0NvbXBvbmVudCwgRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUsIEZkc0RpYWxvZ0NvbnRlbnREaXJlY3RpdmUsIEZkc0RpYWxvZ0FjdGlvbnNEaXJlY3RpdmUsIEZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQgfTs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/f583c2e11f6ccfb8b4fac53021c01d12.json b/.cache-loader-coverage/f583c2e11f6ccfb8b4fac53021c01d12.json
new file mode 100644
index 0000000..d386b8c
--- /dev/null
+++ b/.cache-loader-coverage/f583c2e11f6ccfb8b4fac53021c01d12.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js","mtime":1563469805293},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IE1hdFNuYWNrQmFyQ29uZmlnLCBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJzsKaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JzsKaW1wb3J0IHsgRmRzQ29hc3RlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvYXN0ZXIvY29hc3Rlci5jb21wb25lbnQnOwpleHBvcnQgZnVuY3Rpb24gSVNuYWNrQmFyQ29uZmlnKCkgewogIHRoaXMudGl0bGUgPSAnJzsKICB0aGlzLm1lc3NhZ2UgPSAnJzsKICB0aGlzLnNuYWNrQmFyUmVmID0gdW5kZWZpbmVkOwogIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IHVuZGVmaW5lZDsKfQpJU25hY2tCYXJDb25maWcucHJvdG90eXBlID0gewogIGNvbnRzdHJ1Y3RvcjogSVNuYWNrQmFyQ29uZmlnCn07CiQuZXh0ZW5kKElTbmFja0JhckNvbmZpZywgTWF0U25hY2tCYXJDb25maWcpOwpleHBvcnQgZnVuY3Rpb24gSUNvYXN0ZXJDb25maWcoKSB7CiAgdGhpcy5pY29uID0gJyc7CiAgdGhpcy5jb2xvciA9ICcnOwp9CklDb2FzdGVyQ29uZmlnLnByb3RvdHlwZSA9IHsKICBjb250c3RydWN0b3I6IElDb2FzdGVyQ29uZmlnCn07CiQuZXh0ZW5kKElDb2FzdGVyQ29uZmlnLCBJU25hY2tCYXJDb25maWcpOwovKioKICogRmRzU25hY2tCYXJTZXJ2aWNlIGNvbnN0cnVjdG9yLgogKgogKiBAcGFyYW0gTWF0U25hY2tCYXIgICAgICBUaGUgYW5ndWxhciBtYXRlcmlhbCBNYXRTbmFja0Jhci4KICogQGNvbnN0cnVjdG9yCiAqLwoKZXhwb3J0IGZ1bmN0aW9uIEZkc1NuYWNrQmFyU2VydmljZShNYXRTbmFja0JhcikgewogIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gTWF0U25hY2tCYXI7Cn0KRmRzU25hY2tCYXJTZXJ2aWNlLnByb3RvdHlwZSA9IHsKICBjb250c3RydWN0b3I6IEZkc1NuYWNrQmFyU2VydmljZSwKCiAgLyoqCiAgICogV3JhcHBlciBmdW5jdGlvbiBvdmVyIHRoZSBvcGVuKCkgbWV0aG9kIGluIE1hdFNuYWNrQmFyLgogICAqCiAgICogQHBhcmFtIG1lc3NhZ2UgICAgICAgICAgICAgICBUaGUgbWVzc2FnZSB0byBzaG93IGluIHRoZSBzbmFja2Jhci4KICAgKiBAcGFyYW0gYWN0aW9uICAgICAgICAgICAgICAgIFRoZSBsYWJlbCBmb3IgdGhlIHNuYWNrYmFyIGFjdGlvbi4KICAgKiBAcGFyYW0gY29uZmlnICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgc25hY2tiYXIuCiAgICoKICAgKiBAcmV0dXJucyB7TWF0U25hY2tCYXJSZWZ9ICAgIFRoZSByZWZlcmVuY2UgdG8gdGhlIHNuYWNrYmFyLgogICAqLwogIG9wZW46IGZ1bmN0aW9uIG9wZW4obWVzc2FnZSwgYWN0aW9uLCBjb25maWcpIHsKICAgIHJldHVybiB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKG1lc3NhZ2UsIGFjdGlvbiwgY29uZmlnKTsKICB9LAoKICAvKioKICAgKiBXcmFwcGVyIGZ1bmN0aW9uIG92ZXIgdGhlIG9wZW5Gcm9tQ29tcG9uZW50KCkgbWV0aG9kIGluIE1hdFNuYWNrQmFyLgogICAqIE9wZW5zIGEgc25hY2tiYXIgY29udGFpbmluZyB0aGUgZ2l2ZW4gY29tcG9uZW50LgogICAqCiAgICogQHBhcmFtIGNvbXBvbmVudCAgICAgVGhlIGFuZ3VsYXIgQ29tcG9uZW50VHlwZTxUPi4KICAgKiBAcGFyYW0gY29uZmlnICAgICAgICBUaGUgYW5ndWxhciBtYXRlcmlhbCBNYXRTbmFja0JhckNvbmZpZy4KICAgKgogICAqIEByZXR1cm5zIHtNYXRTbmFja0JhclJlZn0gICAgVGhlIHJlZmVyZW5jZSB0byB0aGUgc25hY2tiYXIuCiAgICovCiAgb3BlbkZyb21Db21wb25lbnQ6IGZ1bmN0aW9uIG9wZW5Gcm9tQ29tcG9uZW50KGNvbXBvbmVudCwgY29uZmlnKSB7CiAgICByZXR1cm4gdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbkZyb21Db21wb25lbnQoY29tcG9uZW50LCBjb25maWcpOwogIH0sCgogIC8qKgogICAqIFdyYXBwZXIgZnVuY3Rpb24gb3ZlciB0aGUgZGlzbWlzcygpIG1ldGhvZCBpbiBNYXRTbmFja0Jhci4KICAgKiBEaXNtaXNzZXMgdGhlIGN1cnJlbnRseS1vcGVuIHNuYWNrYmFyLgogICAqLwogIGRpc21pc3M6IGZ1bmN0aW9uIGRpc21pc3MoKSB7CiAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5kaXNtaXNzKCk7CiAgfSwKCiAgLyoqCiAgICogT3BlbnMgYSBjb2FzdGVyIHNuYWNrYmFyIHdpdGggdGhlIHByb3ZpZGVkIGNvbmZpZy4KICAgKgogICAqIEBwYXJhbSBjb25maWcgICAgIElDb2FzdGVyQ29uZmlnIHsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU/OiBzdHJpbmc7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYWNrQmFyUmVmPzogTWF0U25hY2tCYXJSZWY7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY/OiBWaWV3Q29udGFpbmVyUmVmOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPzogc3RyaW5nOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj86IHN0cmluZzsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAqCiAgICogQHJldHVybnMge01hdFNuYWNrQmFyUmVmfSAgICBUaGUgcmVmZXJlbmNlIHRvIHRoZSBzbmFja2Jhci4KICAgKi8KICBvcGVuQ29hc3RlcjogZnVuY3Rpb24gb3BlbkNvYXN0ZXIoY29uZmlnKSB7CiAgICB2YXIgc25hY2tCYXJDb25maWcgPSBuZXcgSUNvYXN0ZXJDb25maWcoKTsKICAgIHNuYWNrQmFyQ29uZmlnLnZlcnRpY2FsUG9zaXRpb24gPSBjb25maWcudmVydGljYWxQb3NpdGlvbjsKICAgIHNuYWNrQmFyQ29uZmlnLmhvcml6b250YWxQb3NpdGlvbiA9IGNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb247CiAgICBzbmFja0JhckNvbmZpZy5kdXJhdGlvbiA9IGNvbmZpZy5kdXJhdGlvbjsKICAgIHZhciBzbmFja0JhclJlZiA9IHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW5Gcm9tQ29tcG9uZW50KEZkc0NvYXN0ZXJDb21wb25lbnQsIHNuYWNrQmFyQ29uZmlnKTsKICAgIHZhciBjb2FzdGVyQ29tcG9uZW50ID0gc25hY2tCYXJSZWYuaW5zdGFuY2U7CiAgICBjb2FzdGVyQ29tcG9uZW50LnNuYWNrQmFyUmVmID0gc25hY2tCYXJSZWY7CgogICAgaWYgKGNvbmZpZy50aXRsZSkgewogICAgICBjb2FzdGVyQ29tcG9uZW50LnRpdGxlID0gY29uZmlnLnRpdGxlOwogICAgfQoKICAgIGlmIChjb25maWcubWVzc2FnZSkgewogICAgICBjb2FzdGVyQ29tcG9uZW50Lm1lc3NhZ2UgPSBjb25maWcubWVzc2FnZTsKICAgIH0KCiAgICBpZiAoY29uZmlnLmljb24pIHsKICAgICAgY29hc3RlckNvbXBvbmVudC5pY29uID0gY29uZmlnLmljb247CiAgICB9CgogICAgaWYgKGNvbmZpZy5jb2xvcikgewogICAgICBjb2FzdGVyQ29tcG9uZW50LmNvbG9yID0gY29uZmlnLmNvbG9yOwogICAgfQoKICAgIHJldHVybiBzbmFja0JhclJlZjsKICB9Cn07CkZkc1NuYWNrQmFyU2VydmljZS5wYXJhbWV0ZXJzID0gW01hdFNuYWNrQmFyXTs="}]}
\ No newline at end of file
diff --git a/.cache-loader-coverage/fda316f8f3dd9eb61ee42866a8306c92.json b/.cache-loader-coverage/fda316f8f3dd9eb61ee42866a8306c92.json
new file mode 100644
index 0000000..ffb2347
--- /dev/null
+++ b/.cache-loader-coverage/fda316f8f3dd9eb61ee42866a8306c92.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/platform/core/index.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/index.js","mtime":1563469805291},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:LyoKICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCB7IEZkc0RpYWxvZ3NNb2R1bGUsIEZkc0NvbmZpcm1EaWFsb2dDb21wb25lbnQsIEZkc0RpYWxvZ0FjdGlvbnNEaXJlY3RpdmUsIEZkc0RpYWxvZ0NvbXBvbmVudCwgRmRzRGlhbG9nQ29udGVudERpcmVjdGl2ZSwgRmRzRGlhbG9nU2VydmljZSwgRmRzRGlhbG9nVGl0bGVEaXJlY3RpdmUsIElDb25maXJtQ29uZmlnIH0gZnJvbSAnLi9kaWFsb2dzL2Zkcy1kaWFsb2dzLm1vZHVsZSc7CmltcG9ydCB7IEZkc0NvbW1vbnNNb2R1bGUsIEZkc1N0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24vZmRzLWNvbW1vbi5tb2R1bGUnOwppbXBvcnQgRmRzQW5pbWF0aW9ucyBmcm9tICcuL2NvbW1vbi9mZHMuYW5pbWF0aW9ucyc7CmltcG9ydCB7IEZkc0NvYXN0ZXJDb21wb25lbnQsIEZkc1NuYWNrQmFyQWN0aW9uc0RpcmVjdGl2ZSwgRmRzU25hY2tCYXJDb21wb25lbnQsIEZkc1NuYWNrQmFyQ29udGVudERpcmVjdGl2ZSwgRmRzU25hY2tCYXJTZXJ2aWNlLCBGZHNTbmFja0JhcnNNb2R1bGUsIEZkc1NuYWNrQmFyVGl0bGVEaXJlY3RpdmUsIElDb2FzdGVyQ29uZmlnIH0gZnJvbSAnLi9zbmFja2JhcnMvZmRzLXNuYWNrYmFycy5tb2R1bGUnOwppbXBvcnQgRmxvd0Rlc2lnblN5c3RlbU1vZHVsZSBmcm9tICcuL2Zsb3ctZGVzaWduLXN5c3RlbS5tb2R1bGUnOwpleHBvcnQgeyBGZHNEaWFsb2dzTW9kdWxlLCBGZHNDb25maXJtRGlhbG9nQ29tcG9uZW50LCBGZHNEaWFsb2dBY3Rpb25zRGlyZWN0aXZlLCBGZHNEaWFsb2dDb21wb25lbnQsIEZkc0RpYWxvZ0NvbnRlbnREaXJlY3RpdmUsIEZkc0RpYWxvZ1NlcnZpY2UsIEZkc0RpYWxvZ1RpdGxlRGlyZWN0aXZlLCBJQ29uZmlybUNvbmZpZywgRmRzQ29tbW9uc01vZHVsZSwgRmRzU3RvcmFnZVNlcnZpY2UsIEZkc0FuaW1hdGlvbnMsIEZkc0NvYXN0ZXJDb21wb25lbnQsIEZkc1NuYWNrQmFyQWN0aW9uc0RpcmVjdGl2ZSwgRmRzU25hY2tCYXJDb21wb25lbnQsIEZkc1NuYWNrQmFyQ29udGVudERpcmVjdGl2ZSwgRmRzU25hY2tCYXJTZXJ2aWNlLCBGZHNTbmFja0JhcnNNb2R1bGUsIEZkc1NuYWNrQmFyVGl0bGVEaXJlY3RpdmUsIElDb2FzdGVyQ29uZmlnLCBGbG93RGVzaWduU3lzdGVtTW9kdWxlIGFzIEZkc0NvcmVNb2R1bGUgfTs="}]}
\ No newline at end of file
diff --git a/.cache-loader/00a3d8969b5f6d9af54efa7844daef9b.json b/.cache-loader/00a3d8969b5f6d9af54efa7844daef9b.json
new file mode 100644
index 0000000..2945e0d
--- /dev/null
+++ b/.cache-loader/00a3d8969b5f6d9af54efa7844daef9b.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js??ref--5-1!/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-3!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js","mtime":1562689731046},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js","mtime":1522257694000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["var cov_10hzmt5pal=function(){var path='/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js',hash='bcba094f63afffd0d9051d1debd5149c12409334',Function=function(){}.constructor,global=new Function('return this')(),gcv='__coverage__',coverageData={path:'/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js',statementMap:{'0':{start:{line:25,column:20},end:{line:25,column:148}},'1':{start:{line:26,column:37},end:{line:26,column:58}},'2':{start:{line:35,column:0},end:{line:37,column:2}},'3':{start:{line:38,column:0},end:{line:44,column:4}}},fnMap:{'0':{name:'FdsSnackBarsModule',decl:{start:{line:33,column:9},end:{line:33,column:27}},loc:{start:{line:33,column:30},end:{line:33,column:32}},line:33}},branchMap:{},s:{'0':0,'1':0,'2':0,'3':0},f:{'0':0},b:{},_coverageSchema:'332fd63041d2c1bcb487cc26dd0d5f7d97098a6c'},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();import{NgModule}from'@angular/core';import{FlexLayoutModule}from'@angular/flex-layout';import{CommonModule}from'@angular/common';import{MatButtonModule,MatIconModule,MatInputModule,MatSnackBarModule}from'@angular/material';import{FormsModule}from'@angular/forms';import{FdsSnackBarComponent,FdsSnackBarTitleDirective,FdsSnackBarActionsDirective,FdsSnackBarContentDirective}from'./fds-snackbar.component';import{ICoasterConfig,FdsSnackBarService}from'./services/snackbar.service';import{FdsCoasterComponent}from'./coaster/coaster.component';var FDS_SNACKBARS=(cov_10hzmt5pal.s[0]++,[FdsSnackBarComponent,FdsSnackBarTitleDirective,FdsSnackBarActionsDirective,FdsSnackBarContentDirective,FdsCoasterComponent]);var FDS_SNACKBARS_ENTRY_COMPONENTS=(cov_10hzmt5pal.s[1]++,[FdsCoasterComponent]);function FdsSnackBarsModule(){cov_10hzmt5pal.f[0]++;}cov_10hzmt5pal.s[2]++;FdsSnackBarsModule.prototype={constructor:FdsSnackBarsModule};cov_10hzmt5pal.s[3]++;FdsSnackBarsModule.annotations=[new NgModule({imports:[FlexLayoutModule,FormsModule,CommonModule,MatSnackBarModule,MatInputModule,MatButtonModule,MatIconModule],declarations:[FDS_SNACKBARS],exports:[FDS_SNACKBARS],providers:[FdsSnackBarService],entryComponents:[FDS_SNACKBARS_ENTRY_COMPONENTS]})];export{FdsSnackBarsModule,ICoasterConfig,FdsSnackBarService,FdsSnackBarComponent,FdsSnackBarTitleDirective,FdsSnackBarContentDirective,FdsSnackBarActionsDirective,FdsCoasterComponent};",{"version":3,"sources":["/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js"],"names":["NgModule","FlexLayoutModule","CommonModule","MatButtonModule","MatIconModule","MatInputModule","MatSnackBarModule","FormsModule","FdsSnackBarComponent","FdsSnackBarTitleDirective","FdsSnackBarActionsDirective","FdsSnackBarContentDirective","ICoasterConfig","FdsSnackBarService","FdsCoasterComponent","FDS_SNACKBARS","FDS_SNACKBARS_ENTRY_COMPONENTS","FdsSnackBarsModule","prototype","constructor","annotations","imports","declarations","exports","providers","entryComponents"],"mappings":"yhCAgBA,OAASA,QAAT,KAAyB,eAAzB,CACA,OAASC,gBAAT,KAAiC,sBAAjC,CACA,OAASC,YAAT,KAA6B,iBAA7B,CACA,OAASC,eAAT,CAA0BC,aAA1B,CAAyCC,cAAzC,CAAyDC,iBAAzD,KAAkF,mBAAlF,CACA,OAASC,WAAT,KAA4B,gBAA5B,CACA,OAASC,oBAAT,CAA+BC,yBAA/B,CAA0DC,2BAA1D,CAAuFC,2BAAvF,KAA0H,0BAA1H,CACA,OAASC,cAAT,CAAyBC,kBAAzB,KAAmD,6BAAnD,CACA,OAASC,mBAAT,KAAoC,6BAApC,CACA,GAAIC,sCAAgB,CAACP,oBAAD,CAAuBC,yBAAvB,CAAkDC,2BAAlD,CAA+EC,2BAA/E,CAA4GG,mBAA5G,CAAhB,CAAJ,CACA,GAAIE,uDAAiC,CAACF,mBAAD,CAAjC,CAAJ,CAOA,QAASG,mBAAT,EAA8B,uBAAE,C,sBAEhCA,mBAAmBC,SAAnB,CAA+B,CAC7BC,YAAaF,kBADgB,CAA/B,C,sBAGAA,mBAAmBG,WAAnB,CAAiC,CAAC,GAAIpB,SAAJ,CAAa,CAC7CqB,QAAS,CAACpB,gBAAD,CAAmBM,WAAnB,CAAgCL,YAAhC,CAA8CI,iBAA9C,CAAiED,cAAjE,CAAiFF,eAAjF,CAAkGC,aAAlG,CADoC,CAE7CkB,aAAc,CAACP,aAAD,CAF+B,CAG7CQ,QAAS,CAACR,aAAD,CAHoC,CAI7CS,UAAW,CAACX,kBAAD,CAJkC,CAK7CY,gBAAiB,CAACT,8BAAD,CAL4B,CAAb,CAAD,CAAjC,CAOA,OAASC,kBAAT,CAA6BL,cAA7B,CAA6CC,kBAA7C,CAAiEL,oBAAjE,CAAuFC,yBAAvF,CAAkHE,2BAAlH,CAA+ID,2BAA/I,CAA4KI,mBAA5K","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule, MatIconModule, MatInputModule, MatSnackBarModule } from '@angular/material';\nimport { FormsModule } from '@angular/forms';\nimport { FdsSnackBarComponent, FdsSnackBarTitleDirective, FdsSnackBarActionsDirective, FdsSnackBarContentDirective } from './fds-snackbar.component';\nimport { ICoasterConfig, FdsSnackBarService } from './services/snackbar.service';\nimport { FdsCoasterComponent } from './coaster/coaster.component';\nvar FDS_SNACKBARS = [FdsSnackBarComponent, FdsSnackBarTitleDirective, FdsSnackBarActionsDirective, FdsSnackBarContentDirective, FdsCoasterComponent];\nvar FDS_SNACKBARS_ENTRY_COMPONENTS = [FdsCoasterComponent];\n/**\n * FdsSnackBarsModule constructor.\n *\n * @constructor\n */\n\nfunction FdsSnackBarsModule() {}\n\nFdsSnackBarsModule.prototype = {\n  constructor: FdsSnackBarsModule\n};\nFdsSnackBarsModule.annotations = [new NgModule({\n  imports: [FlexLayoutModule, FormsModule, CommonModule, MatSnackBarModule, MatInputModule, MatButtonModule, MatIconModule],\n  declarations: [FDS_SNACKBARS],\n  exports: [FDS_SNACKBARS],\n  providers: [FdsSnackBarService],\n  entryComponents: [FDS_SNACKBARS_ENTRY_COMPONENTS]\n})];\nexport { FdsSnackBarsModule, ICoasterConfig, FdsSnackBarService, FdsSnackBarComponent, FdsSnackBarTitleDirective, FdsSnackBarContentDirective, FdsSnackBarActionsDirective, FdsCoasterComponent };"]}]}
\ No newline at end of file
diff --git a/.cache-loader/01a8511768dec791bc3f5438a5e6e1b4.json b/.cache-loader/01a8511768dec791bc3f5438a5e6e1b4.json
new file mode 100644
index 0000000..9a70e21
--- /dev/null
+++ b/.cache-loader/01a8511768dec791bc3f5438a5e6e1b4.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js","mtime":1562689731033},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Store items for two days before being eligible for removal.\nvar MILLIS_PER_DAY = 86400000;\nvar TWO_DAYS = MILLIS_PER_DAY * 2;\n\nvar isUndefined = function isUndefined(obj) {\n  return typeof obj === 'undefined';\n};\n\nvar isNull = function isNull(obj) {\n  return obj === null;\n};\n\nvar isDefinedAndNotNull = function isDefinedAndNotNull(obj) {\n  return !isUndefined(obj) && !isNull(obj);\n};\n/**\n * Checks the expiration for the specified entry.\n *\n * @param {object} entry\n * @returns {boolean}\n */\n\n\nvar checkExpiration = function checkExpiration(entry) {\n  if (isDefinedAndNotNull(entry.expires)) {\n    // get the expiration\n    var expires = new Date(entry.expires);\n    var now = new Date(); // return whether the expiration date has passed\n\n    return expires.valueOf() < now.valueOf();\n  }\n\n  return false;\n};\n/**\n * Gets an enty for the key. The entry expiration is not checked.\n *\n * @param {string} key\n */\n\n\nvar getEntry = function getEntry(key) {\n  try {\n    // parse the entry\n    var entry = JSON.parse(localStorage.getItem(key)); // ensure the entry and item are present\n\n    if (isDefinedAndNotNull(entry)) {\n      return entry;\n    }\n\n    return null;\n  } catch (e) {\n    return null;\n  }\n};\n/**\n * FdsStorageService constructor.\n * @constructor\n */\n\n\nfunction FdsStorageService() {}\n\nFdsStorageService.prototype = {\n  constructor: FdsStorageService,\n\n  /**\n   * Initializes the storage. Items will be persisted for two days. Once the scripts runs\n   * thereafter, all eligible items will be removed. This strategy does not support persistence.\n   */\n  init: function init() {\n    for (var i = 0; i < localStorage.length; i++) {\n      try {\n        // get the next item\n        var key = localStorage.key(i); // attempt to get the item which will expire if necessary\n\n        this.getItem(key);\n      } catch (e) {// Do nothing\n      }\n    }\n  },\n\n  /**\n   * Stores the specified item.\n   *\n   * @param {string} key\n   * @param {object} item\n   * @param {integer} expires\n   */\n  setItem: function setItem(key, item, expires) {\n    // calculate the expiration\n    expires = isDefinedAndNotNull(expires) ? expires : new Date().valueOf() + TWO_DAYS; // create the entry\n\n    var entry = {\n      expires: expires,\n      item: item\n    }; // store the item\n\n    localStorage.setItem(key, JSON.stringify(entry));\n  },\n\n  /**\n   * Returns whether there is an entry for this key. This will not check the expiration. If\n   * the entry is expired, it will return null on a subsequent getItem invocation.\n   *\n   * @param {string} key\n   * @returns {boolean}\n   */\n  hasItem: function hasItem(key) {\n    return getEntry(key) !== null;\n  },\n\n  /**\n   * Gets the item with the specified key. If an item with this key does\n   * not exist, null is returned. If an item exists but cannot be parsed\n   * or is malformed/unrecognized, null is returned.\n   *\n   * @param {type} key\n   */\n  getItem: function getItem(key) {\n    var entry = getEntry(key);\n\n    if (entry === null) {\n      return null;\n    } // if the entry is expired, drop it and return null\n\n\n    if (checkExpiration(entry)) {\n      this.removeItem(key);\n      return null;\n    } // if the entry has the specified field return its value\n\n\n    if (isDefinedAndNotNull(entry['item'])) {\n      return entry['item'];\n    }\n\n    return null;\n  },\n\n  /**\n   * Gets the expiration for the specified item. This will not check the expiration. If\n   * the entry is expired, it will return null on a subsequent getItem invocation.\n   *\n   * @param {string} key\n   * @returns {integer}\n   */\n  getItemExpiration: function getItemExpiration(key) {\n    var entry = getEntry(key);\n\n    if (entry === null) {\n      return null;\n    } // if the entry has the specified field return its value\n\n\n    if (isDefinedAndNotNull(entry['expires'])) {\n      return entry['expires'];\n    }\n\n    return null;\n  },\n\n  /**\n   * Extracts the subject from the specified jwt. If the jwt is not as expected\n   * an empty string is returned.\n   *\n   * @param {string} jwt\n   * @returns {string}\n   */\n  getJwtPayload: function getJwtPayload(jwt) {\n    if (isDefinedAndNotNull(jwt)) {\n      var segments = jwt.split(/\\./);\n\n      if (segments.length !== 3) {\n        return '';\n      }\n\n      var rawPayload = window.atob(segments[1]);\n      var payload = JSON.parse(rawPayload);\n\n      if (isDefinedAndNotNull(payload)) {\n        return payload;\n      }\n\n      return null;\n    }\n\n    return null;\n  },\n\n  /**\n   * Removes the item with the specified key.\n   *\n   * @param {type} key\n   */\n  removeItem: function removeItem(key) {\n    localStorage.removeItem(key);\n  }\n};\nFdsStorageService.parameters = [];\nexport default FdsStorageService;"]}
\ No newline at end of file
diff --git a/.cache-loader/048f16b17e0a751e1038d002d75c1696.json b/.cache-loader/048f16b17e0a751e1038d002d75c1696.json
new file mode 100644
index 0000000..906c03e
--- /dev/null
+++ b/.cache-loader/048f16b17e0a751e1038d002d75c1696.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js!/Users/jaslan/Development/nifi-fds/webapp/fds.html","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/fds.html","mtime":1562689731053},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js","mtime":1516207864000}],"contextDependencies":[],"result":["module.exports = \"<!--\\nLicensed to the Apache Software Foundation (ASF) under one or more\\ncontributor license agreements.  See the NOTICE file distributed with\\nthis work for additional information regarding copyright ownership.\\nThe ASF licenses this file to You under the Apache License, Version 2.0\\n(the \\\"License\\\"); you may not use this file except in compliance with\\nthe License.  You may obtain a copy of the License at\\n\\nhttp://www.apache.org/licenses/LICENSE-2.0\\n\\nUnless required by applicable law or agreed to in writing, software\\ndistributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\nSee the License for the specific language governing permissions and\\nlimitations under the License.\\n-->\\n\\n<mat-progress-spinner id=\\\"loading-spinner\\\" *ngIf=\\\"fdsService.inProgress\\\" mode=\\\"indeterminate\\\"></mat-progress-spinner>\\n<mat-sidenav-container>\\n    <mat-sidenav #sidenav mode=\\\"over\\\" align=\\\"end\\\" opened=\\\"false\\\" disableClose=\\\"true\\\">\\n        <router-outlet name=\\\"sidenav\\\"></router-outlet>\\n    </mat-sidenav>\\n    <div id=\\\"fds-app-container\\\">\\n        <mat-toolbar id=\\\"fds-toolbar\\\">\\n            <!-- <img id=\\\"fds-logo\\\" src=\\\"fds/images/fds-logo-web-app.svg\\\"> -->\\n            <div *ngIf=\\\"fdsService.perspective !== 'login' && fdsService.perspective !== 'not-found'\\\" fxFlex=\\\"1 1 auto\\\" class=\\\"pad-left-xl\\\" [@flyInOut]=\\\"fdsService.breadCrumbState\\\">\\n                <span class=\\\"pointer\\\">{{fdsService.title}}</span>\\n            </div>\\n        </mat-toolbar>\\n        <div id=\\\"fds-perspectives-container\\\">\\n            <router-outlet></router-outlet>\\n        </div>\\n    </div>\\n</mat-sidenav-container>\\n\";"]}
\ No newline at end of file
diff --git a/.cache-loader/0787dca2c38b28b07e07965923122586.json b/.cache-loader/0787dca2c38b28b07e07965923122586.json
new file mode 100644
index 0000000..e0f81ab
--- /dev/null
+++ b/.cache-loader/0787dca2c38b28b07e07965923122586.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js??ref--5-1!/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-3!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js","mtime":1562689731043},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js","mtime":1522257694000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["var cov_yk2fwqdbs=function(){var path='/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js',hash='0965c92e3dc8d38ad93e3fbb67b77ad6374b21f7',Function=function(){}.constructor,global=new Function('return this')(),gcv='__coverage__',coverageData={path:'/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js',statementMap:{'0':{start:{line:22,column:2},end:{line:22,column:18}},'1':{start:{line:23,column:2},end:{line:23,column:20}},'2':{start:{line:24,column:2},end:{line:24,column:29}},'3':{start:{line:25,column:2},end:{line:25,column:36}},'4':{start:{line:26,column:2},end:{line:26,column:27}},'5':{start:{line:29,column:0},end:{line:31,column:2}},'6':{start:{line:32,column:0},end:{line:32,column:41}},'7':{start:{line:35,column:2},end:{line:35,column:31}},'8':{start:{line:36,column:2},end:{line:36,column:41}},'9':{start:{line:37,column:2},end:{line:37,column:31}},'10':{start:{line:38,column:2},end:{line:38,column:43}},'11':{start:{line:41,column:0},end:{line:43,column:2}},'12':{start:{line:44,column:0},end:{line:44,column:40}},'13':{start:{line:47,column:21},end:{line:47,column:41}},'14':{start:{line:48,column:2},end:{line:48,column:58}},'15':{start:{line:49,column:2},end:{line:49,column:50}},'16':{start:{line:50,column:2},end:{line:50,column:22}},'17':{start:{line:61,column:2},end:{line:61,column:33}},'18':{start:{line:64,column:0},end:{line:137,column:2}},'19':{start:{line:77,column:4},end:{line:77,column:54}},'20':{start:{line:85,column:4},end:{line:85,column:34}},'21':{start:{line:106,column:23},end:{line:106,column:43}},'22':{start:{line:107,column:20},end:{line:107,column:84}},'23':{start:{line:108,column:33},end:{line:108,column:60}},'24':{start:{line:109,column:4},end:{line:109,column:49}},'25':{start:{line:111,column:4},end:{line:113,column:5}},'26':{start:{line:112,column:6},end:{line:112,column:50}},'27':{start:{line:115,column:4},end:{line:117,column:5}},'28':{start:{line:116,column:6},end:{line:116,column:54}},'29':{start:{line:119,column:4},end:{line:121,column:5}},'30':{start:{line:120,column:6},end:{line:120,column:64}},'31':{start:{line:123,column:4},end:{line:125,column:5}},'32':{start:{line:124,column:6},end:{line:124,column:74}},'33':{start:{line:127,column:4},end:{line:129,column:5}},'34':{start:{line:128,column:6},end:{line:128,column:64}},'35':{start:{line:131,column:4},end:{line:133,column:5}},'36':{start:{line:132,column:6},end:{line:132,column:74}},'37':{start:{line:135,column:4},end:{line:135,column:21}},'38':{start:{line:138,column:0},end:{line:138,column:42}}},fnMap:{'0':{name:'IDialogConfig',decl:{start:{line:21,column:9},end:{line:21,column:22}},loc:{start:{line:21,column:25},end:{line:27,column:1}},line:21},'1':{name:'IConfirmConfig',decl:{start:{line:34,column:9},end:{line:34,column:23}},loc:{start:{line:34,column:26},end:{line:39,column:1}},line:34},'2':{name:'createConfig',decl:{start:{line:46,column:9},end:{line:46,column:21}},loc:{start:{line:46,column:30},end:{line:51,column:1}},line:46},'3':{name:'FdsDialogService',decl:{start:{line:60,column:9},end:{line:60,column:25}},loc:{start:{line:60,column:37},end:{line:62,column:1}},line:60},'4':{name:'open',decl:{start:{line:76,column:17},end:{line:76,column:21}},loc:{start:{line:76,column:41},end:{line:78,column:3}},line:76},'5':{name:'closeAll',decl:{start:{line:84,column:21},end:{line:84,column:29}},loc:{start:{line:84,column:32},end:{line:86,column:3}},line:84},'6':{name:'openConfirm',decl:{start:{line:105,column:24},end:{line:105,column:35}},loc:{start:{line:105,column:44},end:{line:136,column:3}},line:105}},branchMap:{'0':{loc:{start:{line:111,column:4},end:{line:113,column:5}},type:'if',locations:[{start:{line:111,column:4},end:{line:113,column:5}},{start:{line:111,column:4},end:{line:113,column:5}}],line:111},'1':{loc:{start:{line:115,column:4},end:{line:117,column:5}},type:'if',locations:[{start:{line:115,column:4},end:{line:117,column:5}},{start:{line:115,column:4},end:{line:117,column:5}}],line:115},'2':{loc:{start:{line:119,column:4},end:{line:121,column:5}},type:'if',locations:[{start:{line:119,column:4},end:{line:121,column:5}},{start:{line:119,column:4},end:{line:121,column:5}}],line:119},'3':{loc:{start:{line:123,column:4},end:{line:125,column:5}},type:'if',locations:[{start:{line:123,column:4},end:{line:125,column:5}},{start:{line:123,column:4},end:{line:125,column:5}}],line:123},'4':{loc:{start:{line:127,column:4},end:{line:129,column:5}},type:'if',locations:[{start:{line:127,column:4},end:{line:129,column:5}},{start:{line:127,column:4},end:{line:129,column:5}}],line:127},'5':{loc:{start:{line:131,column:4},end:{line:133,column:5}},type:'if',locations:[{start:{line:131,column:4},end:{line:133,column:5}},{start:{line:131,column:4},end:{line:133,column:5}}],line:131}},s:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0,'7':0,'8':0,'9':0,'10':0,'11':0,'12':0,'13':0,'14':0,'15':0,'16':0,'17':0,'18':0,'19':0,'20':0,'21':0,'22':0,'23':0,'24':0,'25':0,'26':0,'27':0,'28':0,'29':0,'30':0,'31':0,'32':0,'33':0,'34':0,'35':0,'36':0,'37':0,'38':0},f:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0},b:{'0':[0,0],'1':[0,0],'2':[0,0],'3':[0,0],'4':[0,0],'5':[0,0]},_coverageSchema:'332fd63041d2c1bcb487cc26dd0d5f7d97098a6c'},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();import $ from'jquery';import{MatDialogConfig,MatDialog}from'@angular/material';import{FdsConfirmDialogComponent}from'../confirm-dialog/confirm-dialog.component';function IDialogConfig(){cov_yk2fwqdbs.f[0]++;cov_yk2fwqdbs.s[0]++;this.title='';cov_yk2fwqdbs.s[1]++;this.message='';cov_yk2fwqdbs.s[2]++;this.dialogRef=undefined;cov_yk2fwqdbs.s[3]++;this.viewContainerRef=undefined;cov_yk2fwqdbs.s[4]++;this.disableClose=true;}cov_yk2fwqdbs.s[5]++;IDialogConfig.prototype={contstructor:IDialogConfig};cov_yk2fwqdbs.s[6]++;$.extend(IDialogConfig,MatDialogConfig);function IConfirmConfig(){cov_yk2fwqdbs.f[1]++;cov_yk2fwqdbs.s[7]++;this.acceptButton='ACCEPT';cov_yk2fwqdbs.s[8]++;this.acceptButtonColor='fds-primary';cov_yk2fwqdbs.s[9]++;this.cancelButton='CANCEL';cov_yk2fwqdbs.s[10]++;this.cancelButtonColor='fds-secondary';}cov_yk2fwqdbs.s[11]++;IConfirmConfig.prototype={contstructor:IConfirmConfig};cov_yk2fwqdbs.s[12]++;$.extend(IConfirmConfig,IDialogConfig);function createConfig(config){cov_yk2fwqdbs.f[2]++;var dialogConfig=(cov_yk2fwqdbs.s[13]++,new IConfirmConfig());cov_yk2fwqdbs.s[14]++;dialogConfig.viewContainerRef=config.viewContainerRef;cov_yk2fwqdbs.s[15]++;dialogConfig.disableClose=config.disableClose;cov_yk2fwqdbs.s[16]++;return dialogConfig;}function FdsDialogService(MatDialog){cov_yk2fwqdbs.f[3]++;cov_yk2fwqdbs.s[17]++;this.dialogService=MatDialog;}cov_yk2fwqdbs.s[18]++;FdsDialogService.prototype={contstructor:FdsDialogService,open:function open(component,config){cov_yk2fwqdbs.f[4]++;cov_yk2fwqdbs.s[19]++;return this.dialogService.open(component,config);},closeAll:function closeAll(){cov_yk2fwqdbs.f[5]++;cov_yk2fwqdbs.s[20]++;this.dialogService.closeAll();},openConfirm:function openConfirm(config){cov_yk2fwqdbs.f[6]++;var dialogConfig=(cov_yk2fwqdbs.s[21]++,createConfig(config));var dialogRef=(cov_yk2fwqdbs.s[22]++,this.dialogService.open(FdsConfirmDialogComponent,dialogConfig));var confirmDialogComponent=(cov_yk2fwqdbs.s[23]++,dialogRef.componentInstance);cov_yk2fwqdbs.s[24]++;confirmDialogComponent.dialogRef=dialogRef;cov_yk2fwqdbs.s[25]++;if(config.title){cov_yk2fwqdbs.b[0][0]++;cov_yk2fwqdbs.s[26]++;confirmDialogComponent.title=config.title;}else{cov_yk2fwqdbs.b[0][1]++;}cov_yk2fwqdbs.s[27]++;if(config.message){cov_yk2fwqdbs.b[1][0]++;cov_yk2fwqdbs.s[28]++;confirmDialogComponent.message=config.message;}else{cov_yk2fwqdbs.b[1][1]++;}cov_yk2fwqdbs.s[29]++;if(config.acceptButton){cov_yk2fwqdbs.b[2][0]++;cov_yk2fwqdbs.s[30]++;confirmDialogComponent.acceptButton=config.acceptButton;}else{cov_yk2fwqdbs.b[2][1]++;}cov_yk2fwqdbs.s[31]++;if(config.acceptButtonColor){cov_yk2fwqdbs.b[3][0]++;cov_yk2fwqdbs.s[32]++;confirmDialogComponent.acceptButtonColor=config.acceptButtonColor;}else{cov_yk2fwqdbs.b[3][1]++;}cov_yk2fwqdbs.s[33]++;if(config.cancelButton){cov_yk2fwqdbs.b[4][0]++;cov_yk2fwqdbs.s[34]++;confirmDialogComponent.cancelButton=config.cancelButton;}else{cov_yk2fwqdbs.b[4][1]++;}cov_yk2fwqdbs.s[35]++;if(config.cancelButtonColor){cov_yk2fwqdbs.b[5][0]++;cov_yk2fwqdbs.s[36]++;confirmDialogComponent.cancelButtonColor=config.cancelButtonColor;}else{cov_yk2fwqdbs.b[5][1]++;}cov_yk2fwqdbs.s[37]++;return dialogRef;}};cov_yk2fwqdbs.s[38]++;FdsDialogService.parameters=[MatDialog];export{IDialogConfig,IConfirmConfig,FdsDialogService};",{"version":3,"sources":["/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js"],"names":["$","MatDialogConfig","MatDialog","FdsConfirmDialogComponent","IDialogConfig","title","message","dialogRef","undefined","viewContainerRef","disableClose","prototype","contstructor","extend","IConfirmConfig","acceptButton","acceptButtonColor","cancelButton","cancelButtonColor","createConfig","config","dialogConfig","FdsDialogService","dialogService","open","component","closeAll","openConfirm","confirmDialogComponent","componentInstance","parameters"],"mappings":"uyKAgBA,MAAOA,EAAP,KAAc,QAAd,CACA,OAASC,eAAT,CAA0BC,SAA1B,KAA2C,mBAA3C,CACA,OAASC,yBAAT,KAA0C,4CAA1C,CAEA,QAASC,cAAT,EAAyB,2CACvB,KAAKC,KAAL,CAAa,EAAb,CADuB,qBAEvB,KAAKC,OAAL,CAAe,EAAf,CAFuB,qBAGvB,KAAKC,SAAL,CAAiBC,SAAjB,CAHuB,qBAIvB,KAAKC,gBAAL,CAAwBD,SAAxB,CAJuB,qBAKvB,KAAKE,YAAL,CAAoB,IAApB,CACD,C,qBAEDN,cAAcO,SAAd,CAA0B,CACxBC,aAAcR,aADU,CAA1B,C,qBAGAJ,EAAEa,MAAF,CAAST,aAAT,CAAwBH,eAAxB,EAEA,QAASa,eAAT,EAA0B,2CACxB,KAAKC,YAAL,CAAoB,QAApB,CADwB,qBAExB,KAAKC,iBAAL,CAAyB,aAAzB,CAFwB,qBAGxB,KAAKC,YAAL,CAAoB,QAApB,CAHwB,sBAIxB,KAAKC,iBAAL,CAAyB,eAAzB,CACD,C,sBAEDJ,eAAeH,SAAf,CAA2B,CACzBC,aAAcE,cADW,CAA3B,C,sBAGAd,EAAEa,MAAF,CAASC,cAAT,CAAyBV,aAAzB,EAEA,QAASe,aAAT,CAAsBC,MAAtB,CAA8B,sBAC5B,GAAIC,qCAAe,GAAIP,eAAJ,EAAf,CAAJ,CAD4B,sBAE5BO,aAAaZ,gBAAb,CAAgCW,OAAOX,gBAAvC,CAF4B,sBAG5BY,aAAaX,YAAb,CAA4BU,OAAOV,YAAnC,CAH4B,sBAI5B,MAAOW,aAAP,CACD,CASD,QAASC,iBAAT,CAA0BpB,SAA1B,CAAqC,4CACnC,KAAKqB,aAAL,CAAqBrB,SAArB,CACD,C,sBAEDoB,iBAAiBX,SAAjB,CAA6B,CAC3BC,aAAcU,gBADa,CAY3BE,KAAM,QAASA,KAAT,CAAcC,SAAd,CAAyBL,MAAzB,CAAiC,4CACrC,MAAO,MAAKG,aAAL,CAAmBC,IAAnB,CAAwBC,SAAxB,CAAmCL,MAAnC,CAAP,CACD,CAd0B,CAoB3BM,SAAU,QAASA,SAAT,EAAoB,4CAC5B,KAAKH,aAAL,CAAmBG,QAAnB,GACD,CAtB0B,CAyC3BC,YAAa,QAASA,YAAT,CAAqBP,MAArB,CAA6B,sBACxC,GAAIC,qCAAeF,aAAaC,MAAb,CAAf,CAAJ,CACA,GAAIb,kCAAY,KAAKgB,aAAL,CAAmBC,IAAnB,CAAwBrB,yBAAxB,CAAmDkB,YAAnD,CAAZ,CAAJ,CACA,GAAIO,+CAAyBrB,UAAUsB,iBAAnC,CAAJ,CAHwC,sBAIxCD,uBAAuBrB,SAAvB,CAAmCA,SAAnC,CAJwC,sBAMxC,GAAIa,OAAOf,KAAX,CAAkB,+CAChBuB,uBAAuBvB,KAAvB,CAA+Be,OAAOf,KAAtC,CACD,CAFD,8BANwC,sBAUxC,GAAIe,OAAOd,OAAX,CAAoB,+CAClBsB,uBAAuBtB,OAAvB,CAAiCc,OAAOd,OAAxC,CACD,CAFD,8BAVwC,sBAcxC,GAAIc,OAAOL,YAAX,CAAyB,+CACvBa,uBAAuBb,YAAvB,CAAsCK,OAAOL,YAA7C,CACD,CAFD,8BAdwC,sBAkBxC,GAAIK,OAAOJ,iBAAX,CAA8B,+CAC5BY,uBAAuBZ,iBAAvB,CAA2CI,OAAOJ,iBAAlD,CACD,CAFD,8BAlBwC,sBAsBxC,GAAII,OAAOH,YAAX,CAAyB,+CACvBW,uBAAuBX,YAAvB,CAAsCG,OAAOH,YAA7C,CACD,CAFD,8BAtBwC,sBA0BxC,GAAIG,OAAOF,iBAAX,CAA8B,+CAC5BU,uBAAuBV,iBAAvB,CAA2CE,OAAOF,iBAAlD,CACD,CAFD,8BA1BwC,sBA8BxC,MAAOX,UAAP,CACD,CAxE0B,CAA7B,C,sBA0EAe,iBAAiBQ,UAAjB,CAA8B,CAAC5B,SAAD,CAA9B,CACA,OAASE,aAAT,CAAwBU,cAAxB,CAAwCQ,gBAAxC","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport $ from 'jquery';\nimport { MatDialogConfig, MatDialog } from '@angular/material';\nimport { FdsConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\n\nfunction IDialogConfig() {\n  this.title = '';\n  this.message = '';\n  this.dialogRef = undefined;\n  this.viewContainerRef = undefined;\n  this.disableClose = true;\n}\n\nIDialogConfig.prototype = {\n  contstructor: IDialogConfig\n};\n$.extend(IDialogConfig, MatDialogConfig);\n\nfunction IConfirmConfig() {\n  this.acceptButton = 'ACCEPT';\n  this.acceptButtonColor = 'fds-primary';\n  this.cancelButton = 'CANCEL';\n  this.cancelButtonColor = 'fds-secondary';\n}\n\nIConfirmConfig.prototype = {\n  contstructor: IConfirmConfig\n};\n$.extend(IConfirmConfig, IDialogConfig);\n\nfunction createConfig(config) {\n  var dialogConfig = new IConfirmConfig();\n  dialogConfig.viewContainerRef = config.viewContainerRef;\n  dialogConfig.disableClose = config.disableClose;\n  return dialogConfig;\n}\n/**\n * FdsDialogService constructor.\n *\n * @param MatDialog      The angular material MatDialog.\n * @constructor\n */\n\n\nfunction FdsDialogService(MatDialog) {\n  this.dialogService = MatDialog;\n}\n\nFdsDialogService.prototype = {\n  contstructor: FdsDialogService,\n\n  /**\n   * Wrapper function over the open() method in MatDialog.\n   * Opens a modal dialog containing the given component.\n   *\n   * @param component     The angular ComponentType<T>.\n   * @param config        The angular material MatDialogConfig.\n   *\n   * @returns {MatDialoRef}    The reference to the dialog.\n   */\n  open: function open(component, config) {\n    return this.dialogService.open(component, config);\n  },\n\n  /**\n   * Wrapper function over the closeAll() method in MatDialog.\n   * Closes all of the currently-open dialogs.\n   */\n  closeAll: function closeAll() {\n    this.dialogService.closeAll();\n  },\n\n  /**\n   * Opens a confirm dialog with the provided config.\n   *\n   * @param config     IConfirmConfig {\n   *                                      message?: string;\n   *                                      title?: string;\n   *                                      dialogRef?: MatDialoRef;\n   *                                      viewContainerRef?: ViewContainerRef;\n   *                                      disableClose?: boolean;\n   *                                      acceptButton?: string;\n   *                                      acceptButtonColor?: string;\n   *                                      cancelButton?: string;\n   *                                      cancelButtonColor?: string;\n   *                                   }\n   *\n   * @returns {MatDialoRef}    The reference to the dialog.\n   */\n  openConfirm: function openConfirm(config) {\n    var dialogConfig = createConfig(config);\n    var dialogRef = this.dialogService.open(FdsConfirmDialogComponent, dialogConfig);\n    var confirmDialogComponent = dialogRef.componentInstance;\n    confirmDialogComponent.dialogRef = dialogRef;\n\n    if (config.title) {\n      confirmDialogComponent.title = config.title;\n    }\n\n    if (config.message) {\n      confirmDialogComponent.message = config.message;\n    }\n\n    if (config.acceptButton) {\n      confirmDialogComponent.acceptButton = config.acceptButton;\n    }\n\n    if (config.acceptButtonColor) {\n      confirmDialogComponent.acceptButtonColor = config.acceptButtonColor;\n    }\n\n    if (config.cancelButton) {\n      confirmDialogComponent.cancelButton = config.cancelButton;\n    }\n\n    if (config.cancelButtonColor) {\n      confirmDialogComponent.cancelButtonColor = config.cancelButtonColor;\n    }\n\n    return dialogRef;\n  }\n};\nFdsDialogService.parameters = [MatDialog];\nexport { IDialogConfig, IConfirmConfig, FdsDialogService };"]}]}
\ No newline at end of file
diff --git a/.cache-loader/0b640143670b65d0a5007208358615df.json b/.cache-loader/0b640143670b65d0a5007208358615df.json
new file mode 100644
index 0000000..f1d3585
--- /dev/null
+++ b/.cache-loader/0b640143670b65d0a5007208358615df.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js??ref--5-1!/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-3!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js","mtime":1562689731044},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js","mtime":1522257694000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["var cov_2dxoolsv96=function(){var path='/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js',hash='83974501f5c8671fa564d00db320f4e60c7ff1fc',Function=function(){}.constructor,global=new Function('return this')(),gcv='__coverage__',coverageData={path:'/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js',statementMap:{'0':{start:{line:26,column:2},end:{line:26,column:18}},'1':{start:{line:27,column:2},end:{line:27,column:20}},'2':{start:{line:28,column:2},end:{line:28,column:17}},'3':{start:{line:29,column:2},end:{line:29,column:18}},'4':{start:{line:30,column:2},end:{line:30,column:31}},'5':{start:{line:31,column:2},end:{line:31,column:36}},'6':{start:{line:34,column:0},end:{line:58,column:2}},'7':{start:{line:41,column:4},end:{line:41,column:63}},'8':{start:{line:42,column:4},end:{line:42,column:54}},'9':{start:{line:43,column:4},end:{line:43,column:52}},'10':{start:{line:45,column:4},end:{line:49,column:5}},'11':{start:{line:46,column:6},end:{line:46,column:71}},'12':{start:{line:48,column:6},end:{line:48,column:71}},'13':{start:{line:56,column:4},end:{line:56,column:36}},'14':{start:{line:59,column:0},end:{line:61,column:51}},'15':{start:{line:62,column:0},end:{line:62,column:36}}},fnMap:{'0':{name:'FdsCoasterComponent',decl:{start:{line:25,column:9},end:{line:25,column:28}},loc:{start:{line:25,column:31},end:{line:32,column:1}},line:25},'1':{name:'ngAfterViewChecked',decl:{start:{line:40,column:31},end:{line:40,column:49}},loc:{start:{line:40,column:52},end:{line:50,column:3}},line:40},'2':{name:'cancel',decl:{start:{line:55,column:19},end:{line:55,column:25}},loc:{start:{line:55,column:28},end:{line:57,column:3}},line:55}},branchMap:{'0':{loc:{start:{line:45,column:4},end:{line:49,column:5}},type:'if',locations:[{start:{line:45,column:4},end:{line:49,column:5}},{start:{line:45,column:4},end:{line:49,column:5}}],line:45}},s:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0,'7':0,'8':0,'9':0,'10':0,'11':0,'12':0,'13':0,'14':0,'15':0},f:{'0':0,'1':0,'2':0},b:{'0':[0,0]},_coverageSchema:'332fd63041d2c1bcb487cc26dd0d5f7d97098a6c'},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();import{Component}from'@angular/core';import $ from'jquery';function FdsCoasterComponent(){cov_2dxoolsv96.f[0]++;cov_2dxoolsv96.s[0]++;this.title='';cov_2dxoolsv96.s[1]++;this.message='';cov_2dxoolsv96.s[2]++;this.icon='';cov_2dxoolsv96.s[3]++;this.color='';cov_2dxoolsv96.s[4]++;this.snackBarRef=undefined;cov_2dxoolsv96.s[5]++;this.viewContainerRef=undefined;}cov_2dxoolsv96.s[6]++;FdsCoasterComponent.prototype={constructor:FdsCoasterComponent,ngAfterViewChecked:function ngAfterViewChecked(){cov_2dxoolsv96.f[1]++;cov_2dxoolsv96.s[7]++;$('.fds-snackbar-wrapper').css('border-color',this.color);cov_2dxoolsv96.s[8]++;$('.fds-snackbar-title').css('color',this.color);cov_2dxoolsv96.s[9]++;$('.fds-coaster-icon').css('color',this.color);cov_2dxoolsv96.s[10]++;if(this.icon){cov_2dxoolsv96.b[0][0]++;cov_2dxoolsv96.s[11]++;$('.fds-snackbar-wrapper').css('padding','15px 15px 15px 45px');}else{cov_2dxoolsv96.b[0][1]++;cov_2dxoolsv96.s[12]++;$('.fds-snackbar-wrapper').css('padding','15px 15px 15px 15px');}},cancel:function cancel(){cov_2dxoolsv96.f[2]++;cov_2dxoolsv96.s[13]++;this.snackBarRef.dismiss(false);}};cov_2dxoolsv96.s[14]++;FdsCoasterComponent.annotations=[new Component({selector:'fds-coaster',template:require('./coaster.component.html')})];cov_2dxoolsv96.s[15]++;FdsCoasterComponent.parameters=[];export{FdsCoasterComponent};",{"version":3,"sources":["/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js"],"names":["Component","$","FdsCoasterComponent","title","message","icon","color","snackBarRef","undefined","viewContainerRef","prototype","constructor","ngAfterViewChecked","css","cancel","dismiss","annotations","selector","template","require","parameters"],"mappings":"8vEAgBA,OAASA,SAAT,KAA0B,eAA1B,CACA,MAAOC,EAAP,KAAc,QAAd,CAOA,QAASC,oBAAT,EAA+B,6CAC7B,KAAKC,KAAL,CAAa,EAAb,CAD6B,sBAE7B,KAAKC,OAAL,CAAe,EAAf,CAF6B,sBAG7B,KAAKC,IAAL,CAAY,EAAZ,CAH6B,sBAI7B,KAAKC,KAAL,CAAa,EAAb,CAJ6B,sBAK7B,KAAKC,WAAL,CAAmBC,SAAnB,CAL6B,sBAM7B,KAAKC,gBAAL,CAAwBD,SAAxB,CACD,C,sBAEDN,oBAAoBQ,SAApB,CAAgC,CAC9BC,YAAaT,mBADiB,CAM9BU,mBAAoB,QAASA,mBAAT,EAA8B,6CAChDX,EAAE,uBAAF,EAA2BY,GAA3B,CAA+B,cAA/B,CAA+C,KAAKP,KAApD,EADgD,sBAEhDL,EAAE,qBAAF,EAAyBY,GAAzB,CAA6B,OAA7B,CAAsC,KAAKP,KAA3C,EAFgD,sBAGhDL,EAAE,mBAAF,EAAuBY,GAAvB,CAA2B,OAA3B,CAAoC,KAAKP,KAAzC,EAHgD,uBAKhD,GAAI,KAAKD,IAAT,CAAe,iDACbJ,EAAE,uBAAF,EAA2BY,GAA3B,CAA+B,SAA/B,CAA0C,qBAA1C,EACD,CAFD,IAEO,iDACLZ,EAAE,uBAAF,EAA2BY,GAA3B,CAA+B,SAA/B,CAA0C,qBAA1C,EACD,CACF,CAhB6B,CAqB9BC,OAAQ,QAASA,OAAT,EAAkB,8CACxB,KAAKP,WAAL,CAAiBQ,OAAjB,CAAyB,KAAzB,EACD,CAvB6B,CAAhC,C,uBAyBAb,oBAAoBc,WAApB,CAAkC,CAAC,GAAIhB,UAAJ,CAAc,CAC/CiB,SAAU,aADqC,CAE/CC,SAAUC,QAAQ,0BAAR,CAFqC,CAAd,CAAD,CAAlC,C,uBAGAjB,oBAAoBkB,UAApB,CAAiC,EAAjC,CACA,OAASlB,mBAAT","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component } from '@angular/core';\nimport $ from 'jquery';\n/**\n * FdsCoasterComponent constructor.\n *\n * @constructor\n */\n\nfunction FdsCoasterComponent() {\n  this.title = '';\n  this.message = '';\n  this.icon = '';\n  this.color = '';\n  this.snackBarRef = undefined;\n  this.viewContainerRef = undefined;\n}\n\nFdsCoasterComponent.prototype = {\n  constructor: FdsCoasterComponent,\n\n  /**\n   * Initialize the component.\n   */\n  ngAfterViewChecked: function ngAfterViewChecked() {\n    $('.fds-snackbar-wrapper').css('border-color', this.color);\n    $('.fds-snackbar-title').css('color', this.color);\n    $('.fds-coaster-icon').css('color', this.color);\n\n    if (this.icon) {\n      $('.fds-snackbar-wrapper').css('padding', '15px 15px 15px 45px');\n    } else {\n      $('.fds-snackbar-wrapper').css('padding', '15px 15px 15px 15px');\n    }\n  },\n\n  /**\n   * Close the snackbar and send a cancel response to any subscribers.\n   */\n  cancel: function cancel() {\n    this.snackBarRef.dismiss(false);\n  }\n};\nFdsCoasterComponent.annotations = [new Component({\n  selector: 'fds-coaster',\n  template: require('./coaster.component.html')})];\nFdsCoasterComponent.parameters = [];\nexport { FdsCoasterComponent };"]}]}
\ No newline at end of file
diff --git a/.cache-loader/124071a851f9d58079ba1eef103ba11a.json b/.cache-loader/124071a851f9d58079ba1eef103ba11a.json
new file mode 100644
index 0000000..cf3879c
--- /dev/null
+++ b/.cache-loader/124071a851f9d58079ba1eef103ba11a.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js??ref--5-1!/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-3!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js","mtime":1562689731041},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js","mtime":1522257694000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["var cov_q111qyxsc=function(){var path='/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js',hash='141afb9f4c5a58a1fd9f811442e3a78667e2d7f4',Function=function(){}.constructor,global=new Function('return this')(),gcv='__coverage__',coverageData={path:'/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js',statementMap:{'0':{start:{line:25,column:2},end:{line:25,column:18}},'1':{start:{line:26,column:2},end:{line:26,column:20}},'2':{start:{line:27,column:2},end:{line:27,column:25}},'3':{start:{line:28,column:2},end:{line:28,column:41}},'4':{start:{line:29,column:2},end:{line:29,column:25}},'5':{start:{line:30,column:2},end:{line:30,column:41}},'6':{start:{line:31,column:2},end:{line:31,column:29}},'7':{start:{line:32,column:2},end:{line:32,column:36}},'8':{start:{line:33,column:2},end:{line:33,column:27}},'9':{start:{line:36,column:0},end:{line:52,column:2}},'10':{start:{line:43,column:4},end:{line:43,column:32}},'11':{start:{line:50,column:4},end:{line:50,column:31}},'12':{start:{line:53,column:0},end:{line:55,column:58}},'13':{start:{line:56,column:0},end:{line:56,column:42}}},fnMap:{'0':{name:'FdsConfirmDialogComponent',decl:{start:{line:24,column:9},end:{line:24,column:34}},loc:{start:{line:24,column:37},end:{line:34,column:1}},line:24},'1':{name:'cancel',decl:{start:{line:42,column:19},end:{line:42,column:25}},loc:{start:{line:42,column:28},end:{line:44,column:3}},line:42},'2':{name:'accept',decl:{start:{line:49,column:19},end:{line:49,column:25}},loc:{start:{line:49,column:28},end:{line:51,column:3}},line:49}},branchMap:{},s:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0,'7':0,'8':0,'9':0,'10':0,'11':0,'12':0,'13':0},f:{'0':0,'1':0,'2':0},b:{},_coverageSchema:'332fd63041d2c1bcb487cc26dd0d5f7d97098a6c'},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();import{Component}from'@angular/core';function FdsConfirmDialogComponent(){cov_q111qyxsc.f[0]++;cov_q111qyxsc.s[0]++;this.title='';cov_q111qyxsc.s[1]++;this.message='';cov_q111qyxsc.s[2]++;this.acceptButton='';cov_q111qyxsc.s[3]++;this.acceptButtonColor='fds-primary';cov_q111qyxsc.s[4]++;this.cancelButton='';cov_q111qyxsc.s[5]++;this.cancelButtonColor='fds-regular';cov_q111qyxsc.s[6]++;this.dialogRef=undefined;cov_q111qyxsc.s[7]++;this.viewContainerRef=undefined;cov_q111qyxsc.s[8]++;this.disableClose=true;}cov_q111qyxsc.s[9]++;FdsConfirmDialogComponent.prototype={constructor:FdsConfirmDialogComponent,cancel:function cancel(){cov_q111qyxsc.f[1]++;cov_q111qyxsc.s[10]++;this.dialogRef.close(false);},accept:function accept(){cov_q111qyxsc.f[2]++;cov_q111qyxsc.s[11]++;this.dialogRef.close(true);}};cov_q111qyxsc.s[12]++;FdsConfirmDialogComponent.annotations=[new Component({selector:'fds-confirm-dialog',template:require('./confirm-dialog.component.html')})];cov_q111qyxsc.s[13]++;FdsConfirmDialogComponent.parameters=[];export{FdsConfirmDialogComponent};",{"version":3,"sources":["/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js"],"names":["Component","FdsConfirmDialogComponent","title","message","acceptButton","acceptButtonColor","cancelButton","cancelButtonColor","dialogRef","undefined","viewContainerRef","disableClose","prototype","constructor","cancel","close","accept","annotations","selector","template","require","parameters"],"mappings":"48DAgBA,OAASA,SAAT,KAA0B,eAA1B,CAOA,QAASC,0BAAT,EAAqC,2CACnC,KAAKC,KAAL,CAAa,EAAb,CADmC,qBAEnC,KAAKC,OAAL,CAAe,EAAf,CAFmC,qBAGnC,KAAKC,YAAL,CAAoB,EAApB,CAHmC,qBAInC,KAAKC,iBAAL,CAAyB,aAAzB,CAJmC,qBAKnC,KAAKC,YAAL,CAAoB,EAApB,CALmC,qBAMnC,KAAKC,iBAAL,CAAyB,aAAzB,CANmC,qBAOnC,KAAKC,SAAL,CAAiBC,SAAjB,CAPmC,qBAQnC,KAAKC,gBAAL,CAAwBD,SAAxB,CARmC,qBASnC,KAAKE,YAAL,CAAoB,IAApB,CACD,C,qBAEDV,0BAA0BW,SAA1B,CAAsC,CACpCC,YAAaZ,yBADuB,CAMpCa,OAAQ,QAASA,OAAT,EAAkB,4CACxB,KAAKN,SAAL,CAAeO,KAAf,CAAqB,KAArB,EACD,CARmC,CAapCC,OAAQ,QAASA,OAAT,EAAkB,4CACxB,KAAKR,SAAL,CAAeO,KAAf,CAAqB,IAArB,EACD,CAfmC,CAAtC,C,sBAiBAd,0BAA0BgB,WAA1B,CAAwC,CAAC,GAAIjB,UAAJ,CAAc,CACrDkB,SAAU,oBAD2C,CAErDC,SAAUC,QAAQ,iCAAR,CAF2C,CAAd,CAAD,CAAxC,C,sBAGAnB,0BAA0BoB,UAA1B,CAAuC,EAAvC,CACA,OAASpB,yBAAT","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component } from '@angular/core';\n/**\n * FdsConfirmDialogComponent constructor.\n *\n * @constructor\n */\n\nfunction FdsConfirmDialogComponent() {\n  this.title = '';\n  this.message = '';\n  this.acceptButton = '';\n  this.acceptButtonColor = 'fds-primary';\n  this.cancelButton = '';\n  this.cancelButtonColor = 'fds-regular';\n  this.dialogRef = undefined;\n  this.viewContainerRef = undefined;\n  this.disableClose = true;\n}\n\nFdsConfirmDialogComponent.prototype = {\n  constructor: FdsConfirmDialogComponent,\n\n  /**\n   * Close the dialog and send a cancel response to any subscribers.\n   */\n  cancel: function cancel() {\n    this.dialogRef.close(false);\n  },\n\n  /**\n   * Close the dialog and send an accept response to any subscribers.\n   */\n  accept: function accept() {\n    this.dialogRef.close(true);\n  }\n};\nFdsConfirmDialogComponent.annotations = [new Component({\n  selector: 'fds-confirm-dialog',\n  template: require('./confirm-dialog.component.html')})];\nFdsConfirmDialogComponent.parameters = [];\nexport { FdsConfirmDialogComponent };"]}]}
\ No newline at end of file
diff --git a/.cache-loader/159d7d66d0b45091c5f2133b6980916f.json b/.cache-loader/159d7d66d0b45091c5f2133b6980916f.json
new file mode 100644
index 0000000..9a8a87e
--- /dev/null
+++ b/.cache-loader/159d7d66d0b45091c5f2133b6980916f.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js!/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.html","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.html","mtime":1562689731050},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js","mtime":1516207864000}],"contextDependencies":[],"result":["module.exports = \"<!--\\nLicensed to the Apache Software Foundation (ASF) under one or more\\ncontributor license agreements.  See the NOTICE file distributed with\\nthis work for additional information regarding copyright ownership.\\nThe ASF licenses this file to You under the Apache License, Version 2.0\\n(the \\\"License\\\"); you may not use this file except in compliance with\\nthe License.  You may obtain a copy of the License at\\n\\nhttp://www.apache.org/licenses/LICENSE-2.0\\n\\nUnless required by applicable law or agreed to in writing, software\\ndistributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\nSee the License for the specific language governing permissions and\\nlimitations under the License.\\n-->\\n\\n<div>Hello Dialog!</div>\\n\";"]}
\ No newline at end of file
diff --git a/.cache-loader/191c1c20e0f6cbf38f0ec502008801c1.json b/.cache-loader/191c1c20e0f6cbf38f0ec502008801c1.json
new file mode 100644
index 0000000..8106799
--- /dev/null
+++ b/.cache-loader/191c1c20e0f6cbf38f0ec502008801c1.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js!/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/fds-demo.html","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/fds-demo.html","mtime":1563293960490},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js","mtime":1516207864000}],"contextDependencies":[],"result":["module.exports = \"<!--\\nLicensed to the Apache Software Foundation (ASF) under one or more\\ncontributor license agreements.  See the NOTICE file distributed with\\nthis work for additional information regarding copyright ownership.\\nThe ASF licenses this file to You under the Apache License, Version 2.0\\n(the \\\"License\\\"); you may not use this file except in compliance with\\nthe License.  You may obtain a copy of the License at\\n\\nhttp://www.apache.org/licenses/LICENSE-2.0\\n\\nUnless required by applicable law or agreed to in writing, software\\ndistributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\nSee the License for the specific language governing permissions and\\nlimitations under the License.\\n-->\\n\\n<mat-sidenav-container>\\n    <mat-sidenav #sidenav mode=\\\"over\\\" position=\\\"end\\\" opened=\\\"false\\\">\\n        <div fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between center\\\">\\n            <p>You can also open a dialog from a side nav.</p>\\n            <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"openDialog()\\\">Show simple dialog</button>\\n        </div>\\n    </mat-sidenav>\\n    <div id=\\\"fds-demo\\\">\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Apache NiFi Flow Design System</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content class=\\\"pad-top-sm\\\">\\n                <p>With the Apache NiFi Flow Design System module, we get an atomic, reusable component platform for Apache NiFi and its sub-projects to consume, while collaborating in an open source model. This module packages the <a class=\\\"link\\\" href=\\\"https://material.angular.io/components\\\" target=\\\"_blank\\\">Angular Material</a> module as well as the <a class=\\\"link\\\" href=\\\"https://teradata.github.io/covalent/#/components\\\" target=\\\"_blank\\\">Teradata Covalent</a> module. These modules have been themed to match the FDS color palette.</p>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Setup</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <p>Import the FDS Core NgModule into your AppModule</p>\\n                <p>Javascript:</p>\\n                <pre lang=\\\"javascript\\\">\\n        <![CDATA[\\n        var ngCore = require('@angular/core');\\n        var fdsCore = require('flow-design-system/core');\\n        // other imports\\n          ...\\n        new ngCore.NgModule({\\n            imports: [\\n                fdsCore,\\n                // (optional) Additional imports\\n              ],\\n              ...\\n        })\\n        ]]>\\n    </pre>\\n                <p>The core FDS styles also need to be included in your `index.html` like:</p>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n        <![CDATA[\\n        <link href=\\\"../node_modules/flow-design-system/core/common/styles/css/flow-design-system.css\\\" rel=\\\"stylesheet\\\">\\n        ]]>\\n    </pre>\\n                <p>Or, if you are using the Angular CLI you will need to add a new entry to the \\\"styles\\\" list in .angular-cli.json.</p>\\n                <p>JSON:</p>\\n                <pre lang=\\\"json\\\">\\n        <![CDATA[\\n        \\\"styles\\\": [\\n            \\\"../node_modules/flow-design-system/core/common/styles/flow-design-system.scss\\\"\\n        ]\\n        ]]>\\n    </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Typography</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <p class=\\\"mat-body-1\\\">FDS provides typography CSS classes you can use to create visual consistency across your application. Optionally style tags with the classes shown below:</p>\\n                <div layout-align=\\\"center end\\\">\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.mat-display-4</code>\\n                        <span class=\\\"mat-display-4\\\">Display 4</span>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.mat-display-3</code>\\n                        <span class=\\\"mat-display-3\\\">Display 3</span>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.mat-display-2</code>\\n                        <span class=\\\"mat-display-2\\\">Display 2</span>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.mat-display-1</code>\\n                        <span class=\\\"mat-display-1\\\">Display 1</span>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.mat-headline</code>\\n                        <span class=\\\"mat-headline\\\">Headline</span>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.mat-title</code>\\n                        <span class=\\\"mat-title\\\">Title</span>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.md-subhead</code>\\n                        <span class=\\\"md-subhead\\\">Subhead</span>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.link</code>\\n                        <span class=\\\"link\\\">Link</span>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.mat-body-1</code>\\n                        <span class=\\\"mat-body-1\\\">Body 1</span>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.mat-body-2</code>\\n                        <span class=\\\"mat-body-2\\\">Body 2</span>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                        <code flex=\\\"15\\\">.mat-caption</code>\\n                        <span class=\\\"mat-caption\\\">Caption</span>\\n                    </div>\\n                </div>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n    <pre lang=\\\"html\\\">\\n    <![CDATA[\\n        <span class=\\\"mat-display-4\\\">Display 4</span>\\n        <span class=\\\"mat-display-3\\\">Display 3</span>\\n        <span class=\\\"mat-display-2\\\">Display 2</span>\\n        <span class=\\\"mat-display-1\\\">Display 1</span>\\n        <span class=\\\"mat-headline\\\">Headline</span>\\n        <span class=\\\"md-title\\\">Title</span>\\n        <span class=\\\"md-subhead\\\">Subhead</span>\\n        <span class=\\\"link\\\">Link</span>\\n        <span class=\\\"mat-body-1\\\">Body 1</span>\\n        <span class=\\\"mat-body-2\\\">Body 2</span>\\n        <span class=\\\"mat-caption\\\">Caption</span>\\n    ]]>\\n    </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Raised Buttons</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <p>Tip: Use UPPERCASE text for 1-2 words, and Titlecase text for 3+ words.</p>\\n                <button mat-raised-button color=\\\"primary\\\">Primary</button>\\n                <button mat-raised-button color=\\\"accent\\\">Accent</button>\\n                <button mat-raised-button color=\\\"warn\\\">Warn</button>\\n                <button mat-raised-button color=\\\"fds-primary\\\">FDS Primary</button>\\n                <button mat-raised-button color=\\\"fds-secondary\\\">FDS Secondary</button>\\n                <button mat-raised-button color=\\\"fds-regular\\\">FDS regular</button>\\n                <button mat-raised-button color=\\\"fds-warn\\\">FDS warn</button>\\n                <button mat-raised-button color=\\\"fds-critical\\\">FDS critical</button>\\n                <button mat-raised-button disabled color=\\\"primary\\\">Primary</button>\\n                <button mat-raised-button disabled color=\\\"accent\\\">Accent</button>\\n                <button mat-raised-button disabled color=\\\"warn\\\">Warn</button>\\n                <button mat-raised-button disabled color=\\\"fds-primary\\\">FDS primary</button>\\n                <button mat-raised-button disabled color=\\\"fds-secondary\\\">FDS Secondary</button>\\n                <button mat-raised-button disabled color=\\\"fds-regular\\\">FDS regular</button>\\n                <button mat-raised-button disabled color=\\\"fds-warn\\\">FDS warn</button>\\n                <button mat-raised-button disabled color=\\\"fds-critical\\\">FDS critical</button>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n    <![CDATA[\\n                    <!-- Themed Raised Buttons -->\\n        <button mat-raised-button color=\\\"primary\\\">Primary</button>\\n        <button mat-raised-button color=\\\"accent\\\">Secondary</button>\\n        <button mat-raised-button color=\\\"warn\\\">warn</button>\\n        <button mat-raised-button color=\\\"fds-primary\\\">FDS Primary</button>\\n        <button mat-raised-button color=\\\"fds-secondary\\\">FDS Secondary</button>\\n        <button mat-raised-button color=\\\"fds-regular\\\">FDS regular</button>\\n        <button mat-raised-button color=\\\"fds-warn\\\">FDS warn</button>\\n        <button mat-raised-button color=\\\"fds-critical\\\">FDS critical</button>\\n                    <!-- Disabled Raised Buttons -->\\n        <button mat-raised-button disabled color=\\\"primary\\\">Primary</button>\\n        <button mat-raised-button disabled color=\\\"accent\\\">Secondary</button>\\n        <button mat-raised-button disabled color=\\\"warn\\\">warn</button>\\n        <button mat-raised-button disabled color=\\\"fds-primary\\\">FDS primary</button>\\n        <button mat-raised-button disabled color=\\\"fds-secondary\\\">FDS Secondary</button>\\n        <button mat-raised-button disabled color=\\\"fds-regular\\\">FDS regular</button>\\n        <button mat-raised-button disabled color=\\\"fds-warn\\\">FDS warn</button>\\n        <button mat-raised-button disabled color=\\\"fds-critical\\\">FDS critical</button>\\n    ]]>\\n    </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Flat Buttons</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <mat-card-actions>\\n                    <button mat-button>Default</button>\\n                    <button mat-button color=\\\"primary\\\">Primary</button>\\n                    <button mat-button color=\\\"accent\\\">Secondary</button>\\n                    <button mat-button color=\\\"warn\\\">Warn</button>\\n                    <button mat-button disabled>Disabled Default</button>\\n                    <button mat-button disabled color=\\\"primary\\\">Disabled Primary</button>\\n                    <button mat-button disabled color=\\\"accent\\\">Disabled Secondary</button>\\n                    <button mat-button disabled color=\\\"warn\\\">Disabled Warn</button>\\n                </mat-card-actions>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n    <![CDATA[\\n                    <!-- Themed Flat Buttons -->\\n        <button mat-button>Default</button>\\n        <button mat-button color=\\\"primary\\\">Primary</button>\\n        <button mat-button color=\\\"accent\\\">Secondary</button>\\n        <button mat-button color=\\\"warn\\\">warn</button>\\n                    <!-- Disabled Flat Buttons -->\\n        <button mat-button disabled>disabled Default</button>\\n        <button mat-button disabled color=\\\"primary\\\">disabled primary</button>\\n        <button mat-button disabled color=\\\"accent\\\">disabled Secondary</button>\\n        <button mat-button disabled color=\\\"warn\\\">disabled warn</button>\\n    ]]>\\n    </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Fab Buttons</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <mat-card-actions class=\\\"pad-left-sm\\\">\\n                    <button mat-mini-fab color=\\\"primary\\\">P</button>\\n                    <button mat-mini-fab color=\\\"accent\\\">A</button>\\n                    <button mat-mini-fab color=\\\"warn\\\">W</button>\\n                    <button mat-mini-fab disabled color=\\\"primary\\\">P</button>\\n                    <button mat-mini-fab disabled color=\\\"accent\\\">A</button>\\n                    <button mat-mini-fab disabled color=\\\"warn\\\">W</button>\\n                </mat-card-actions>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n    <![CDATA[\\n                    <!-- Themed Fab Buttons -->\\n        <button mat-mini-fab color=\\\"primary\\\">P</button>\\n        <button mat-mini-fab color=\\\"accent\\\">A</button>\\n        <button mat-mini-fab color=\\\"warn\\\">W</button>\\n                    <!-- Disabled Fab Buttons -->\\n        <button mat-mini-fab disabled color=\\\"primary\\\">P</button>\\n        <button mat-mini-fab disabled color=\\\"accent\\\">A</button>\\n        <button mat-mini-fab disabled color=\\\"warn\\\">W</button>\\n    ]]>\\n    </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Button Toggles</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <mat-button-toggle-group name=\\\"alignment\\\">\\n                    <mat-button-toggle value=\\\"left\\\">\\n                        <mat-icon>format_align_left</mat-icon>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle value=\\\"center\\\">\\n                        <mat-icon>format_align_center</mat-icon>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle value=\\\"right\\\">\\n                        <mat-icon>format_align_right</mat-icon>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle value=\\\"justify\\\">\\n                        <mat-icon>format_align_justify</mat-icon>\\n                    </mat-button-toggle>\\n                </mat-button-toggle-group>\\n                <div fxLayout=\\\"row\\\" class=\\\"pad-top-md pad-bot-md\\\"></div>\\n                <mat-button-toggle-group name=\\\"onOffToggle\\\" class=\\\"on-off-toggle-group\\\">\\n                    <mat-button-toggle value=\\\"on\\\" [checked]=\\\"true\\\">\\n                        ON\\n                    </mat-button-toggle>\\n                    <mat-button-toggle value=\\\"off\\\" class=\\\"off-toggle\\\">\\n                        OFF\\n                    </mat-button-toggle>\\n                </mat-button-toggle-group>\\n                <div fxLayout=\\\"row\\\" class=\\\"pad-top-md pad-bot-md\\\"></div>\\n                <mat-button-toggle-group fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\" class=\\\"expansion-panel-filter-toggle-group\\\" multiple>\\n                    <mat-button-toggle>\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">34</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Assets</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle>\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">300</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Extensions</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle>\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">5000</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Flows</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle>\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">0</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Certifications</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                </mat-button-toggle-group>\\n                <div fxLayout=\\\"row\\\" class=\\\"pad-top-md pad-bot-md\\\"></div>\\n                <mat-button-toggle-group name=\\\"fds-administration-perspective\\\" fxLayout=\\\"row\\\" class=\\\"tab-toggle-group\\\">\\n                    <mat-button-toggle value=\\\"general\\\" class=\\\"uppercase\\\">\\n                        general\\n                    </mat-button-toggle>\\n                    <div fxLayout=\\\"row\\\" class=\\\"pad-left-md\\\"></div>\\n                    <mat-button-toggle value=\\\"users\\\" class=\\\"uppercase\\\">\\n                        Users\\n                    </mat-button-toggle>\\n                    <div fxLayout=\\\"row\\\" class=\\\"pad-left-md\\\"></div>\\n                    <mat-button-toggle value=\\\"workflow\\\" class=\\\"uppercase\\\">\\n                        Workflow\\n                    </mat-button-toggle>\\n                </mat-button-toggle-group>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n         <mat-button-toggle-group name=\\\"alignment\\\">\\n            <mat-button-toggle value=\\\"left\\\">\\n                <mat-icon>format_align_left</mat-icon>\\n            </mat-button-toggle>\\n            <mat-button-toggle value=\\\"center\\\">\\n                <mat-icon>format_align_center</mat-icon>\\n            </mat-button-toggle>\\n            <mat-button-toggle value=\\\"right\\\">\\n                <mat-icon>format_align_right</mat-icon>\\n            </mat-button-toggle>\\n            <mat-button-toggle value=\\\"justify\\\">\\n                <mat-icon>format_align_justify</mat-icon>\\n            </mat-button-toggle>\\n        </mat-button-toggle-group>\\n        <div fxLayout=\\\"row\\\" class=\\\"pad-top-md pad-bot-md\\\"></div>\\n        <mat-button-toggle-group name=\\\"onOffToggle\\\" class=\\\"on-off-toggle-group\\\">\\n            <mat-button-toggle value=\\\"on\\\" [checked]=\\\"true\\\">\\n                ON\\n            </mat-button-toggle>\\n            <mat-button-toggle value=\\\"off\\\" class=\\\"off-toggle\\\">\\n                OFF\\n            </mat-button-toggle>\\n        </mat-button-toggle-group>\\n        <div fxLayout=\\\"row\\\" class=\\\"pad-top-md pad-bot-md\\\"></div>\\n        <mat-button-toggle-group fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\" class=\\\"expansion-panel-filter-toggle-group\\\" multiple>\\n            <mat-button-toggle>\\n                <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                    <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">34</div>\\n                    <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Assets</div>\\n                </div>\\n            </mat-button-toggle>\\n            <mat-button-toggle>\\n                <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                    <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">300</div>\\n                    <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Extensions</div>\\n                </div>\\n            </mat-button-toggle>\\n            <mat-button-toggle>\\n                <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                    <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">5000</div>\\n                    <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Flows</div>\\n                </div>\\n            </mat-button-toggle>\\n            <mat-button-toggle>\\n                <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                    <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">0</div>\\n                    <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Certifications</div>\\n                </div>\\n            </mat-button-toggle>\\n        </mat-button-toggle-group>\\n        <div fxLayout=\\\"row\\\" class=\\\"pad-top-md pad-bot-md\\\"></div>\\n        <mat-button-toggle-group name=\\\"fds-administration-perspective\\\" fxLayout=\\\"row\\\" class=\\\"tab-toggle-group\\\">\\n            <mat-button-toggle value=\\\"general\\\" class=\\\"uppercase\\\">\\n                general\\n            </mat-button-toggle>\\n            <div fxLayout=\\\"row\\\" class=\\\"pad-left-md\\\"></div>\\n            <mat-button-toggle value=\\\"users\\\" class=\\\"uppercase\\\">\\n                Users\\n            </mat-button-toggle>\\n            <div fxLayout=\\\"row\\\" class=\\\"pad-left-md\\\"></div>\\n            <mat-button-toggle value=\\\"workflow\\\" class=\\\"uppercase\\\">\\n                Workflow\\n            </mat-button-toggle>\\n        </mat-button-toggle-group>\\n        ]]>\\n      </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Input</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <form>\\n                    <div layout=\\\"row\\\" layout-margin>\\n                        <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                            <input matInput placeholder=\\\"Company (disabled)\\\" disabled value=\\\"Google\\\">\\n                        </mat-form-field>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-margin>\\n                        <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                            <input matInput disabled placeholder=\\\"First name\\\">\\n                        </mat-form-field>\\n                        <mat-form-field floatLabel=\\\"always\\\" flex>\\n                            <input matInput placeholder=\\\"Long Last Name That Will Be Truncated\\\">\\n                        </mat-form-field>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-margin>\\n                        <div flex fxLayoutAlign=\\\"start center\\\">\\n                            <mat-form-field floatLabel=\\\"always\\\" flex>\\n                                <input matInput placeholder=\\\"Button Addon with dropdown\\\">\\n                            </mat-form-field>\\n                            <button class=\\\"input-button\\\" color=\\\"fds-regular\\\" mat-raised-button [matMenuTriggerFor]=\\\"inputButtonDropdownAddonMenu\\\">\\n                                Select<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                            </button>\\n                            <mat-menu xPosition=\\\"before\\\" #inputButtonDropdownAddonMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                                <button mat-menu-item> Refresh </button>\\n                                <button mat-menu-item> Settings </button>\\n                                <button mat-menu-item> Help </button>\\n                                <button mat-menu-item disabled> Sign Out </button>\\n                            </mat-menu>\\n                        </div>\\n                        <div flex fxLayoutAlign=\\\"start center\\\">\\n                            <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                                <input matInput placeholder=\\\"Button Addon\\\">\\n                            </mat-form-field>\\n                            <button class=\\\"input-button\\\" color=\\\"fds-regular\\\" mat-raised-button>\\n                                Search\\n                            </button>\\n                        </div>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-margin>\\n                        <div flex fxLayoutAlign=\\\"start center\\\">\\n                            <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                                <input disabled matInput placeholder=\\\"Button Addon with dropdown\\\">\\n                            </mat-form-field>\\n                            <button disabled class=\\\"input-button\\\" color=\\\"fds-regular\\\" mat-raised-button>\\n                                Select<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div flex fxLayoutAlign=\\\"start center\\\">\\n                            <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                                <input disabled matInput placeholder=\\\"Button Addon\\\">\\n                            </mat-form-field>\\n                            <button disabled class=\\\"input-button\\\" color=\\\"fds-regular\\\" mat-raised-button>\\n                                Search\\n                            </button>\\n                        </div>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-margin>\\n                        <mat-form-field floatLabel=\\\"always\\\" flex>\\n                            <textarea matInput placeholder=\\\"Address\\\" value=\\\"1600 Amphitheatre Pkway\\\"></textarea>\\n                        </mat-form-field>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-margin>\\n                        <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                            <textarea disabled value=\\\"Address 2 Value\\\" matInput placeholder=\\\"Address 2\\\"></textarea>\\n                        </mat-form-field>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-margin>\\n                        <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                            <input matInput placeholder=\\\"City\\\">\\n                        </mat-form-field>\\n                        <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                            <input matInput placeholder=\\\"State\\\">\\n                        </mat-form-field>\\n                        <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                            <input matInput #postalCode maxlength=\\\"5\\\" placeholder=\\\"Postal Code\\\" value=\\\"94043\\\">\\n                            <mat-hint align=\\\"end\\\">{{postalCode.value.length}} / 5</mat-hint>\\n                        </mat-form-field>\\n                    </div>\\n                </form>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n    <![CDATA[\\n                    <!-- Inputs -->\\n        <form>\\n            <div layout=\\\"row\\\" layout-margin>\\n                <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                    <input matInput placeholder=\\\"Company (disabled)\\\" disabled value=\\\"Google\\\">\\n                </mat-form-field>\\n            </div>\\n            <div layout=\\\"row\\\" layout-margin>\\n                <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                    <input matInput disabled placeholder=\\\"First name\\\">\\n                </mat-form-field>\\n                <mat-form-field floatLabel=\\\"always\\\" flex>\\n                    <input matInput placeholder=\\\"Long Last Name That Will Be Truncated\\\">\\n                </mat-form-field>\\n            </div>\\n            <div layout=\\\"row\\\" layout-margin>\\n                <div flex fxLayoutAlign=\\\"start center\\\">\\n                    <mat-form-field floatLabel=\\\"always\\\" flex>\\n                        <input matInput placeholder=\\\"Button Addon with dropdown\\\">\\n                    </mat-form-field>\\n                    <button class=\\\"input-button\\\" color=\\\"fds-regular\\\" mat-raised-button [matMenuTriggerFor]=\\\"inputButtonDropdownAddonMenu\\\">\\n                        Select<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                    </button>\\n                    <mat-menu xPosition=\\\"before\\\" #inputButtonDropdownAddonMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                        <button mat-menu-item> Refresh </button>\\n                        <button mat-menu-item> Settings </button>\\n                        <button mat-menu-item> Help </button>\\n                        <button mat-menu-item disabled> Sign Out </button>\\n                    </mat-menu>\\n                </div>\\n                <div flex fxLayoutAlign=\\\"start center\\\">\\n                    <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                        <input matInput placeholder=\\\"Button Addon\\\">\\n                    </mat-form-field>\\n                    <button class=\\\"input-button\\\" color=\\\"fds-regular\\\" mat-raised-button>\\n                        Search\\n                    </button>\\n                </div>\\n            </div>\\n            <div layout=\\\"row\\\" layout-margin>\\n                <div flex fxLayoutAlign=\\\"start center\\\">\\n                    <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                        <input disabled matInput placeholder=\\\"Button Addon with dropdown\\\">\\n                    </mat-form-field>\\n                    <button disabled class=\\\"input-button\\\" color=\\\"fds-regular\\\" mat-raised-button>\\n                        Select<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                    </button>\\n                </div>\\n                <div flex fxLayoutAlign=\\\"start center\\\">\\n                    <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                        <input disabled matInput placeholder=\\\"Button Addon\\\">\\n                    </mat-form-field>\\n                    <button disabled class=\\\"input-button\\\" color=\\\"fds-regular\\\" mat-raised-button>\\n                        Search\\n                    </button>\\n                </div>\\n            </div>\\n            <div layout=\\\"row\\\" layout-margin>\\n                <mat-form-field floatLabel=\\\"always\\\" flex>\\n                    <textarea matInput placeholder=\\\"Address\\\" value=\\\"1600 Amphitheatre Pkway\\\"></textarea>\\n                </mat-form-field>\\n            </div>\\n            <div layout=\\\"row\\\" layout-margin>\\n                <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                    <textarea disabled value=\\\"Address 2 Value\\\" matInput placeholder=\\\"Address 2\\\"></textarea>\\n                </mat-form-field>\\n            </div>\\n            <div layout=\\\"row\\\" layout-margin>\\n                <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                    <input matInput placeholder=\\\"City\\\">\\n                </mat-form-field>\\n                <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                    <input matInput placeholder=\\\"State\\\">\\n                </mat-form-field>\\n                <mat-form-field floatLabel=\\\"always\\\" floatPlaceholder=\\\"always\\\" flex>\\n                    <input matInput #postalCode maxlength=\\\"5\\\" placeholder=\\\"Postal Code\\\" value=\\\"94043\\\">\\n                    <mat-hint align=\\\"end\\\">{{postalCode.value.length}} / 5</mat-hint>\\n                </mat-form-field>\\n            </div>\\n        </form>\\n    ]]>\\n    </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Tabs</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <mat-tab-group dynamicHeight>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>One</ng-template>\\n                        <h3 class=\\\"mat-title\\\">First tab content</h3>\\n                        <p>Plaid echo park knausgaard normcore franzen cronut. Pickled humblebrag tofu hoodie, umami salvia farm-to-table schlitz try-hard food truck knausgaard pabst. Yuccie portland jean shorts, authentic mixtape waistcoat gentrify blue bottle. Fixie kickstarter church-key small batch seitan, shabby chic vegan listicle before they sold out. Hammock raw denim flannel tousled seitan you probably haven't heard of them. Trust fund man bun pug, kickstarter artisan selvage letterpress cornhole tote bag butcher locavore. Affogato try-hard kickstarter seitan, DIY pickled hella godard pork belly four loko ugh.</p>\\n                    </mat-tab>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Two</ng-template>\\n                        <h3 class=\\\"mat-title\\\">Second tab content</h3>\\n                        <p>Hashtag distillery skateboard man bun gochujang, salvia man braid art party meggings heirloom kitsch farm-to-table. Franzen beard fingerstache gentrify, heirloom portland ennui XOXO microdosing kitsch plaid. Chicharrones bushwick chia, banh mi irony tattooed hammock butcher shabby chic taxidermy semiotics marfa post-ironic. Blue bottle keffiyeh farm-to-table ennui, chambray pitchfork art party pinterest artisan pop-up. Etsy banjo marfa, blue bottle kombucha crucifix XOXO tousled beard. Tilde disrupt kale chips bicycle rights skateboard master cleanse hella shoreditch, meditation retro shabby chic vice heirloom. Etsy listicle vice actually, iPhone chia hoodie four loko.</p>\\n                    </mat-tab>\\n                </mat-tab-group>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <mat-tab-group dynamicHeight>\\n          <mat-tab>\\n            <ng-template mat-tab-label>First tab content</ng-template>\\n            <h1>First content</h1>\\n            <p>...</p>\\n          </mat-tab>\\n          <mat-tab>\\n            <ng-template mat-tab-label>Second tab content</ng-template>\\n            <h1>Second tab content</h1>\\n            <p>...</p>\\n          </mat-tab>\\n        </mat-tab-group>\\n        ]]>\\n      </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Autocomplete</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <div class=\\\"pad-top-sm\\\" layout=\\\"row\\\">\\n                    <mat-form-field floatLabel=\\\"always\\\" flex=\\\"50\\\">\\n                        <input matInput placeholder=\\\"State\\\" [matAutocomplete]=\\\"tdAuto\\\" [(ngModel)]=\\\"currentState\\\" #modelDir=\\\"ngModel\\\" (ngModelChange)=\\\"this.tdStates = filterStates(currentState)\\\" [disabled]=\\\"tdDisabled\\\">\\n                    </mat-form-field>\\n                </div>\\n                <div class=\\\"push-top\\\">\\n                    <button mat-button (click)=\\\"modelDir.reset()\\\" class=\\\"text-upper\\\">Reset</button>\\n                    <button mat-button (click)=\\\"currentState='California'\\\" class=\\\"text-upper\\\">Set value</button>\\n                    <button mat-button (click)=\\\"tdDisabled=!tdDisabled\\\" class=\\\"text-upper\\\">Toggle disabled</button>\\n                </div>\\n                <mat-autocomplete #tdAuto=\\\"matAutocomplete\\\">\\n                    <mat-option *ngFor=\\\"let state of tdStates\\\" [value]=\\\"state.name\\\">\\n                        <span>{{ state.name }}</span>\\n                        <span class=\\\"demo-secondary-text\\\"> ({{state.code}}) </span>\\n                    </mat-option>\\n                </mat-autocomplete>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <div class=\\\"pad-top-sm\\\" layout=\\\"row\\\">\\n            <mat-form-field floatLabel=\\\"always\\\" flex=\\\"50\\\">\\n                <input matInput placeholder=\\\"State\\\" [matAutocomplete]=\\\"tdAuto\\\" [(ngModel)]=\\\"currentState\\\" #modelDir=\\\"ngModel\\\" (ngModelChange)=\\\"this.tdStates = filterStates(currentState)\\\" [disabled]=\\\"tdDisabled\\\">\\n            </mat-form-field>\\n        </div>\\n        <div class=\\\"push-top\\\">\\n            <button mat-button (click)=\\\"modelDir.reset()\\\" class=\\\"text-upper\\\">Reset</button>\\n            <button mat-button (click)=\\\"currentState='California'\\\" class=\\\"text-upper\\\">Set value</button>\\n            <button mat-button (click)=\\\"tdDisabled=!tdDisabled\\\" class=\\\"text-upper\\\">Toggle disabled</button>\\n        </div>\\n        <mat-autocomplete #tdAuto=\\\"matAutocomplete\\\">\\n            <mat-option *ngFor=\\\"let state of tdStates\\\" [value]=\\\"state.name\\\">\\n                <span>{ { state.name } }</span>\\n                <span class=\\\"demo-secondary-text\\\"> ({ {state.code} }) </span>\\n            </mat-option>\\n        </mat-autocomplete>\\n        ]]>\\n      </pre>\\n                <p>Javascript:</p>\\n                <pre lang=\\\"javascript\\\">\\n      <![CDATA[\\n        this.currentState = '';\\n        this.reactiveStates = '';\\n        this.tdStates = [];\\n        this.tdDisabled = false;\\n        this.states = [\\n                    { code: 'AL', name: 'Alabama' },\\n                    { code: 'AK', name: 'Alaska' },\\n                    { code: 'AZ', name: 'Arizona' },\\n                    { code: 'AR', name: 'Arkansas' },\\n                    { code: 'CA', name: 'California' },\\n                    { code: 'CO', name: 'Colorado' },\\n                    { code: 'CT', name: 'Connecticut' },\\n                    { code: 'DE', name: 'Delaware' },\\n                    { code: 'FL', name: 'Florida' },\\n                    { code: 'GA', name: 'Georgia' },\\n                    { code: 'HI', name: 'Hawaii' },\\n                    { code: 'ID', name: 'Idaho' },\\n                    { code: 'IL', name: 'Illinois' },\\n                    { code: 'IN', name: 'Indiana' },\\n                    { code: 'IA', name: 'Iowa' },\\n                    { code: 'KS', name: 'Kansas' },\\n                    { code: 'KY', name: 'Kentucky' },\\n                    { code: 'LA', name: 'Louisiana' },\\n                    { code: 'ME', name: 'Maine' },\\n                    { code: 'MD', name: 'Maryland' },\\n                    { code: 'MA', name: 'Massachusetts' },\\n                    { code: 'MI', name: 'Michigan' },\\n                    { code: 'MN', name: 'Minnesota' },\\n                    { code: 'MS', name: 'Mississippi' },\\n                    { code: 'MO', name: 'Missouri' },\\n                    { code: 'MT', name: 'Montana' },\\n                    { code: 'NE', name: 'Nebraska' },\\n                    { code: 'NV', name: 'Nevada' },\\n                    { code: 'NH', name: 'New Hampshire' },\\n                    { code: 'NJ', name: 'New Jersey' },\\n                    { code: 'NM', name: 'New Mexico' },\\n                    { code: 'NY', name: 'New York' },\\n                    { code: 'NC', name: 'North Carolina' },\\n                    { code: 'ND', name: 'North Dakota' },\\n                    { code: 'OH', name: 'Ohio' },\\n                    { code: 'OK', name: 'Oklahoma' },\\n                    { code: 'OR', name: 'Oregon' },\\n                    { code: 'PA', name: 'Pennsylvania' },\\n                    { code: 'RI', name: 'Rhode Island' },\\n                    { code: 'SC', name: 'South Carolina' },\\n                    { code: 'SD', name: 'South Dakota' },\\n                    { code: 'TN', name: 'Tennessee' },\\n                    { code: 'TX', name: 'Texas' },\\n                    { code: 'UT', name: 'Utah' },\\n                    { code: 'VT', name: 'Vermont' },\\n                    { code: 'VA', name: 'Virginia' },\\n                    { code: 'WA', name: 'Washington' },\\n                    { code: 'WV', name: 'West Virginia' },\\n                    { code: 'WI', name: 'Wisconsin' },\\n                    { code: 'WY', name: 'Wyoming' },\\n        ];\\n\\n        ...\\n\\n        displayFn: function(value) {\\n                    return value && typeof value === 'object' ? value.name : value;\\n        },\\n\\n        filterStates: function(val) {\\n                    return val ? this.states.filter((s) => s.name.match(new RegExp(val, 'gi'))) : this.states;\\n        },\\n\\n        ...\\n        ]]>\\n      </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Filter</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <h3 class=\\\"mat-title\\\">Autocomplete with chips and no custom inputs</h3>\\n                <mat-divider></mat-divider>\\n                <mat-tab-group mat-stretch-tabs dynamicHeight>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Demo</ng-template>\\n                        <div class=\\\"push\\\">\\n                            <div class=\\\"mat-body-1\\\">Type and select a preset option:</div>\\n                            <td-chips [items]=\\\"items\\\" [(ngModel)]=\\\"itemsRequireMatch\\\" placeholder=\\\"Enter autocomplete strings\\\" [disabled]=\\\"readOnly\\\" requireMatch></td-chips>\\n                        </div>\\n                    </mat-tab>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Code</ng-template>\\n                        <mat-card-content>\\n                            <p>HTML:</p>\\n                            <pre lang=\\\"html\\\">\\n                            <![CDATA[\\n        <td-chips [items]=\\\"items\\\" [(ngModel)]=\\\"itemsRequireMatch\\\" placeholder=\\\"Enter autocomplete strings\\\" [disabled]=\\\"readOnly\\\" requireMatch></td-chips>\\n          ]]>\\n                        </pre>\\n                            <p>Javascript:</p>\\n                            <pre lang=\\\"javascript\\\">\\n                            <![CDATA[\\n        this.readOnly = false;\\n\\n        this.items = [\\n            'stepper',\\n            'expansion-panel',\\n            'markdown',\\n            'highlight',\\n            'loading',\\n            'media',\\n            'chips',\\n            'http',\\n            'json-formatter',\\n            'pipes',\\n            'need more?',\\n        ];\\n\\n        this.itemsRequireMatch = this.items.slice(0, 6);\\n\\n        ...\\n\\n        toggleReadOnly: function() {\\n                                this.readOnly = !this.readOnly;\\n        },\\n\\n        ...\\n          ]]>\\n                        </pre>\\n                        </mat-card-content>\\n                    </mat-tab>\\n                </mat-tab-group>\\n                <mat-divider></mat-divider>\\n                <mat-card-actions>\\n                    <button mat-button color=\\\"primary\\\" (click)=\\\"toggleReadOnly()\\\" class=\\\"text-upper\\\">Toggle ReadOnly</button>\\n                </mat-card-actions>\\n            </mat-card-content>\\n            <mat-card-content>\\n                <h3 class=\\\"mat-title\\\">Autocomplete with custom inputs</h3>\\n                <mat-divider></mat-divider>\\n                <mat-tab-group mat-stretch-tabs dynamicHeight>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Demo</ng-template>\\n                        <div class=\\\"push\\\">\\n                            <div class=\\\"mat-body-1\\\">Type and select option or enter custom text and press enter:</div>\\n                            <td-chips [items]=\\\"items\\\" placeholder=\\\"Enter any string\\\"></td-chips>\\n                        </div>\\n                    </mat-tab>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Code</ng-template>\\n                        <mat-card-content>\\n                            <p>HTML:</p>\\n                            <pre lang=\\\"html\\\">\\n                            <![CDATA[\\n        <td-chips [items]=\\\"items\\\" placeholder=\\\"Enter any string\\\"></td-chips>\\n          ]]>\\n                        </pre>\\n                            <p>Javascript:</p>\\n                            <pre lang=\\\"javascript\\\">\\n                            <![CDATA[\\n        this.items = [\\n            'stepper',\\n            'expansion-panel',\\n            'markdown',\\n            'highlight',\\n            'loading',\\n            'media',\\n            'chips',\\n            'http',\\n            'json-formatter',\\n            'pipes',\\n            'need more?',\\n        ];\\n          ]]>\\n                        </pre>\\n                        </mat-card-content>\\n                    </mat-tab>\\n                </mat-tab-group>\\n            </mat-card-content>\\n            <mat-card-content>\\n                <h3 class=\\\"mat-title\\\">Demo allowing custom inputs for tags</h3>\\n                <mat-divider></mat-divider>\\n                <mat-tab-group mat-stretch-tabs dynamicHeight>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Demo</ng-template>\\n                        <div class=\\\"push\\\">\\n                            <div class=\\\"mat-body-1\\\">Type any test and press enter:</div>\\n                            <td-chips placeholder=\\\"Enter any string\\\"></td-chips>\\n                        </div>\\n                    </mat-tab>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Code</ng-template>\\n                        <mat-card-content>\\n                            <p>HTML:</p>\\n                            <pre lang=\\\"html\\\">\\n                            <![CDATA[\\n        <td-chips placeholder=\\\"Enter any string\\\"></td-chips>\\n          ]]>\\n                        </pre>\\n                        </mat-card-content>\\n                    </mat-tab>\\n                </mat-tab-group>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Searchable/Filterable Expansion Panels</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <mat-tab-group mat-stretch-tabs>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Demo</ng-template>\\n                        <div class=\\\"pad-top-md pad-bottom-md pad-right-xxl pad-left-xxl\\\">\\n                            <div class=\\\"pad-top-md pad-bottom-sm\\\">\\n                                <mat-button-toggle-group fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\" class=\\\"expansion-panel-filter-toggle-group\\\" multiple>\\n                                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('type:asset')\\\" [checked]=\\\"isDropletFilterChecked('type:asset')\\\">\\n                                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{{getDropletTypeCount('asset')}}</div>\\n                                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Assets</div>\\n                                        </div>\\n                                    </mat-button-toggle>\\n                                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('type:extension')\\\" [checked]=\\\"isDropletFilterChecked('type:extension')\\\">\\n                                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{{getDropletTypeCount('extension')}}</div>\\n                                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Extensions</div>\\n                                        </div>\\n                                    </mat-button-toggle>\\n                                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('type:flow')\\\" [checked]=\\\"isDropletFilterChecked('type:flow')\\\">\\n                                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{{getDropletTypeCount('flow')}}</div>\\n                                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Flows</div>\\n                                        </div>\\n                                    </mat-button-toggle>\\n                                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('compliant.label:Compliant')\\\" [checked]=\\\"isDropletFilterChecked('compliant.label:Compliant')\\\">\\n                                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{{getDropletCertificationCount('compliant')}}</div>\\n                                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Compliant</div>\\n                                        </div>\\n                                    </mat-button-toggle>\\n                                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('fleet.label:Fleet')\\\" [checked]=\\\"isDropletFilterChecked('fleet.label:Fleet')\\\">\\n                                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{{getDropletCertificationCount('fleet')}}</div>\\n                                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Fleet</div>\\n                                        </div>\\n                                    </mat-button-toggle>\\n                                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('prod.label:Production Ready')\\\" [checked]=\\\"isDropletFilterChecked('prod.label:Production Ready')\\\">\\n                                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{{getDropletCertificationCount('prod')}}</div>\\n                                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Production Ready</div>\\n                                        </div>\\n                                    </mat-button-toggle>\\n                                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('secure.label:Secure')\\\" [checked]=\\\"isDropletFilterChecked('secure.label:Secure')\\\">\\n                                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{{getDropletCertificationCount('secure')}}</div>\\n                                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Secure</div>\\n                                        </div>\\n                                    </mat-button-toggle>\\n                                </mat-button-toggle-group>\\n                                <div id=\\\"fds-droplet-filter-clear-grouping-button-container\\\">\\n                                    <span *ngIf=\\\"dropletsSearchTerms.length > 0\\\" (click)=\\\"dropletsSearchTerms = [];filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);\\\"><i class=\\\"fa fa-plus-circle fa-rotate-45\\\" aria-hidden=\\\"true\\\"></i><span class=\\\"pad-left-sm link\\\">Clear Grouping</span></span>\\n                                </div>\\n                            </div>\\n                            <div layout=\\\"row\\\" layout-align=\\\"space-between center\\\">\\n                                <div flex fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                                    <td-chips [(ngModel)]=\\\"dropletsSearchTerms\\\" [items]=\\\"autoCompleteDroplets\\\" (add)=\\\"filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);\\\" (remove)=\\\"filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);\\\" class=\\\"push-right-sm\\\"></td-chips>\\n                                    <span class=\\\"push-top-sm pad-right-sm\\\">Sort by:</span>\\n                                    <button class=\\\"push-top-sm\\\" color=\\\"fds-primary\\\" mat-raised-button [matMenuTriggerFor]=\\\"dropletGridSortMenu\\\">\\n                                        {{getSortBy()}}<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <mat-menu class=\\\"fds-primary-dropdown-button-menu\\\" #dropletGridSortMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                                    <div *ngFor=\\\"let column of dropletColumns\\\">\\n                                        <button mat-menu-item *ngIf=\\\"column.sortable\\\" (click)=\\\"sortDroplets(column);\\\">{{column.label}} {{(column.sortOrder === 'ASC') ? 'DESC' : 'ASC'}}</button>\\n                                    </div>\\n                                </mat-menu>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"pad-right-xxl pad-left-xxl\\\">\\n                            <div *ngFor=\\\"let droplet of filteredDroplets\\\">\\n                                <td-expansion-panel class=\\\"mat-elevation-z5\\\" label={{droplet.label}} sublabel={{droplet.sublabel}} [disabled]=\\\"disabled\\\">\\n                                    <ng-template td-expansion-panel-label>\\n                                        <div fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between start\\\">\\n                                            <span class=\\\"mat-title capitalize\\\">{{droplet.displayName}}</span>\\n                                            <span class=\\\"md-subhead\\\">{{droplet.type}}</span>\\n                                        </div>\\n                                    </ng-template>\\n                                    <ng-template td-expansion-panel-sublabel>\\n                                        <div fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\">\\n                                            <div class=\\\"pad-right-xxl pad-left-xxl\\\" fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between start\\\">\\n                                                <span class=\\\"uppercase\\\">Versions</span> {{droplet.versions.length}}\\n                                            </div>\\n                                            <div class=\\\"pad-right-xxl pad-left-xxl\\\" fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between start\\\">\\n                                                <span class=\\\"uppercase\\\">Flows</span> {{droplet.flows.length}}\\n                                            </div>\\n                                            <div class=\\\"pad-right-xxl pad-left-xxl\\\" fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between start\\\">\\n                                                <span class=\\\"uppercase\\\">Extensions</span> {{droplet.extensions.length}}\\n                                            </div>\\n                                            <div class=\\\"pad-right-xxl pad-left-xxl\\\" fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between start\\\">\\n                                                <span class=\\\"uppercase\\\">Assests</span> {{droplet.assets.length}}\\n                                            </div>\\n                                        </div>\\n                                    </ng-template>\\n                                    <div class=\\\"mat-padding\\\">\\n                                        <div fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between stretch\\\">\\n                                            <div class=\\\"pad-bottom-sm\\\" fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                                                <button color=\\\"fds-primary\\\" [matMenuTriggerFor]=\\\"primaryButtonDropdownMenu\\\" mat-raised-button>\\n                                                    Actions<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                                <mat-menu class=\\\"fds-primary-dropdown-button-menu\\\" #primaryButtonDropdownMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                                                    <button mat-menu-item *ngFor=\\\"let action of droplet.actions\\\">\\n                                                        <span>{{action.name}}</span>\\n                                                    </button>\\n                                                </mat-menu>\\n                                            </div>\\n                                            <div fxLayout=\\\"row\\\">\\n                                                <div fxFlex=\\\"25\\\">\\n                                                    <span class=\\\"uppercase\\\">Description</span>\\n                                                    <p>Blah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah bla</p>\\n                                                </div>\\n                                                <div fxFlex=\\\"50\\\">\\n                                                    <mat-card fxFlex>\\n                                                        <mat-card-content class=\\\"pad-top-sm\\\">\\n                                                            <img src=\\\"{{droplet.img}}\\\">\\n                                                        </mat-card-content>\\n                                                    </mat-card>\\n                                                </div>\\n                                                <div fxFlex=\\\"25\\\">\\n                                                    <span class=\\\"uppercase\\\">Change Log</span>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </td-expansion-panel>\\n                                <div class=\\\"pad-bottom-sm\\\"></div>\\n                            </div>\\n                        </div>\\n                    </mat-tab>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Code</ng-template>\\n                        <p>HTML:</p>\\n                        <pre lang=\\\"html\\\">\\n                        <![CDATA[\\n        <div class=\\\"pad-top-md pad-bottom-md pad-right-xxl pad-left-xxl\\\">\\n            <div class=\\\"pad-top-md pad-bottom-sm\\\">\\n                <mat-button-toggle-group fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\" class=\\\"expansion-panel-filter-toggle-group\\\" multiple>\\n                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('type:asset')\\\" [checked]=\\\"isDropletFilterChecked('type:asset')\\\">\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{ {getDropletTypeCount('asset')} }</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Assets</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('type:extension')\\\" [checked]=\\\"isDropletFilterChecked('type:extension')\\\">\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{ {getDropletTypeCount('extension')} }</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Extensions</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('type:flow')\\\" [checked]=\\\"isDropletFilterChecked('type:flow')\\\">\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{ {getDropletTypeCount('flow')} }</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Flows</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('compliant.label:Compliant')\\\" [checked]=\\\"isDropletFilterChecked('compliant.label:Compliant')\\\">\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{ {getDropletCertificationCount('compliant')} }</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Compliant</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('fleet.label:Fleet')\\\" [checked]=\\\"isDropletFilterChecked('fleet.label:Fleet')\\\">\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{ {getDropletCertificationCount('fleet')} }</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Fleet</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('prod.label:Production Ready')\\\" [checked]=\\\"isDropletFilterChecked('prod.label:Production Ready')\\\">\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{ {getDropletCertificationCount('prod')} }</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Production Ready</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                    <mat-button-toggle (change)=\\\"toggleDropletsFilter('secure.label:Secure')\\\" [checked]=\\\"isDropletFilterChecked('secure.label:Secure')\\\">\\n                        <div fxFlex fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-around stretch\\\">\\n                            <div class=\\\"mat-display-1 pad-top-sm\\\" fxFlex=\\\"55\\\">{ {getDropletCertificationCount('secure')} }</div>\\n                            <div class=\\\"pad-top-sm\\\" fxFlex=\\\"45\\\">Secure</div>\\n                        </div>\\n                    </mat-button-toggle>\\n                </mat-button-toggle-group>\\n                <button *ngIf=\\\"activeDropletColumn\\\" mat-button color=\\\"primary\\\" (click)=\\\"dropletsSearchTerms = [];filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);\\\">Clear Grouping</button>\\n            </div>\\n            <div layout=\\\"row\\\" layout-align=\\\"space-between center\\\">\\n                <div flex fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                    <td-chips [(ngModel)]=\\\"dropletsSearchTerms\\\" [items]=\\\"autoCompleteDroplets\\\" (add)=\\\"filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);\\\" (remove)=\\\"filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);\\\" class=\\\"push-right-sm\\\"></td-chips>\\n                    <span class=\\\"pad-right-sm\\\">Sort by:</span>\\n                    <button color=\\\"fds-primary\\\" mat-raised-button [matMenuTriggerFor]=\\\"dropletGridSortMenu\\\">\\n                        { {getSortBy()} }<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                    </button>\\n                </div>\\n                <mat-menu class=\\\"fds-primary-dropdown-button-menu\\\" #dropletGridSortMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                    <div *ngFor=\\\"let column of dropletColumns\\\">\\n                        <button mat-menu-item *ngIf=\\\"column.sortable\\\" (click)=\\\"sortDroplets(column);\\\">{ {column.label} } { {(column.sortOrder === 'ASC') ? 'DESC' : 'ASC'} }</button>\\n                    </div>\\n                </mat-menu>\\n            </div>\\n        </div>\\n        <div class=\\\"pad-right-xxl pad-left-xxl\\\">\\n            <div *ngFor=\\\"let droplet of filteredDroplets\\\">\\n                <td-expansion-panel class=\\\"mat-elevation-z5\\\" label={ {droplet.label} } sublabel={ {droplet.sublabel} } [disabled]=\\\"disabled\\\">\\n                    <ng-template td-expansion-panel-label>\\n                        <div fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between start\\\">\\n                            <span class=\\\"mat-title capitalize\\\">{ {droplet.displayName} }</span>\\n                            <span class=\\\"md-subhead\\\">{ {droplet.type} }</span>\\n                        </div>\\n                    </ng-template>\\n                    <ng-template td-expansion-panel-sublabel>\\n                        <div fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\">\\n                            <div class=\\\"pad-right-xxl pad-left-xxl\\\" fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between start\\\">\\n                                <span class=\\\"uppercase\\\">Versions</span> { {droplet.versions.length} }\\n                            </div>\\n                            <div class=\\\"pad-right-xxl pad-left-xxl\\\" fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between start\\\">\\n                                <span class=\\\"uppercase\\\">Flows</span> { {droplet.flows.length} }\\n                            </div>\\n                            <div class=\\\"pad-right-xxl pad-left-xxl\\\" fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between start\\\">\\n                                <span class=\\\"uppercase\\\">Extensions</span> { {droplet.extensions.length} }\\n                            </div>\\n                            <div class=\\\"pad-right-xxl pad-left-xxl\\\" fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between start\\\">\\n                                <span class=\\\"uppercase\\\">Assests</span> { {droplet.assets.length} }\\n                            </div>\\n                        </div>\\n                    </ng-template>\\n                    <div class=\\\"mat-padding\\\">\\n                        <div fxLayout=\\\"column\\\" fxLayoutAlign=\\\"space-between stretch\\\">\\n                            <div class=\\\"pad-bottom-sm\\\" fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                                <button color=\\\"fds-primary\\\" [matMenuTriggerFor]=\\\"primaryButtonDropdownMenu\\\" mat-raised-button>\\n                                    Actions<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                                <mat-menu class=\\\"fds-primary-dropdown-button-menu\\\" #primaryButtonDropdownMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                                    <button mat-menu-item *ngFor=\\\"let action of droplet.actions\\\">\\n                                        <span>{ {action.name} }</span>\\n                                    </button>\\n                                </mat-menu>\\n                            </div>\\n                            <div fxLayout=\\\"row\\\">\\n                                <div fxFlex=\\\"25\\\">\\n                                    <span class=\\\"uppercase\\\">Description</span>\\n                                    <p>Blah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah bla</p>\\n                                </div>\\n                                <div fxFlex=\\\"50\\\">\\n                                    <mat-card fxFlex>\\n                                        <mat-card-content class=\\\"pad-top-sm\\\">\\n                                            <img src=\\\"{ {droplet.img} }\\\">\\n                                        </mat-card-content>\\n                                    </mat-card>\\n                                </div>\\n                                <div fxFlex=\\\"25\\\">\\n                                    <span class=\\\"uppercase\\\">Change Log</span>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </td-expansion-panel>\\n                <div class=\\\"pad-bottom-sm\\\"></div>\\n            </div>\\n        </div>\\n          ]]>\\n                    </pre>\\n                        <p>Javascript:</p>\\n                        <pre lang=\\\"javascript\\\">\\n                        <![CDATA[\\n        this.dataTableService = TdDataTableService;\\n\\n        this.droplets = [{\\n                            id: '23f6cc59-0156-1000-09b4-2b0610089090',\\n                            name: \\\"Decompression_Circular_Flow\\\",\\n                            displayName: 'Decompressed Circular flow',\\n                            type: 'flow',\\n                            sublabel: 'A sublabel',\\n                            compliant: {\\n                id: '25fd6vv87-3549-0001-05g6-4d4567890765',\\n                label: 'Compliant',\\n                type: 'certification'\\n            },\\n            fleet: {\\n                id: '23f6cc59-3549-0001-05g6-4d4567890765',\\n                label: 'Fleet',\\n                type: 'certification'\\n            },\\n            prod: {\\n                id: '52fd6vv87-3549-0001-05g6-4d4567890765',\\n                label: 'Production Ready',\\n                type: 'certification'\\n            },\\n            secure: {\\n                id: '32f6cc59-3549-0001-05g6-4d4567890765',\\n                label: 'Secure',\\n                type: 'certification'\\n            },\\n            versions: [{\\n                id: '23f6cc59-0156-1000-06b4-2b0810089090',\\n                revision: '1',\\n                dependentFlows: [{\\n                            id: '25fd6vv87-3549-0001-05g6-4d4567890765'\\n                }],\\n                created: date.setDate(date.getDate() - 1),\\n                updated: new Date()\\n            }, {\\n                id: '25fd6vv87-3549-0001-05g6-4d4567890765',\\n                revision: '2',\\n                dependentFlows: [{\\n                            id: '23f6cc59-0156-1000-06b4-2b0810089090'\\n                }],\\n                created: new Date(),\\n                updated: new Date()\\n            }],\\n            flows: [],\\n            extensions: [],\\n            assets: [],\\n            actions: [{\\n                'name': 'Delete',\\n                'icon': 'fa fa-close',\\n                'tooltip': 'Delete User'\\n            }, {\\n                'name': 'Manage',\\n                'icon': 'fa fa-user',\\n                'tooltip': 'Manage User'\\n            }, {\\n                'name': 'Action 3',\\n                'icon': 'fa fa-question',\\n                'tooltip': 'Whatever else we want to do...'\\n            }]\\n        }, {\\n                            id: '25fd6vv87-3249-0001-05g6-4d4767890765',\\n                            name: \\\"DateConversion\\\",\\n                            displayName: 'Date conversion',\\n                            type: 'asset',\\n                            sublabel: 'A sublabel',\\n                            compliant: {\\n                id: '25fd6vv34-3549-0001-05g6-4d4567890765',\\n                label: 'Compliant',\\n                type: 'certification'\\n            },\\n            prod: {\\n                id: '52vn6vv87-3549-0001-05g6-4d4567890765',\\n                label: 'Production Ready',\\n                type: 'certification'\\n            },\\n            versions: [{\\n                id: '23f6ic59-0156-1000-06b4-2b0810089090',\\n                revision: '1',\\n                dependentFlows: [{\\n                            id: '23f6cc19-0156-1000-06b4-2b0810089090'\\n                }],\\n                created: new Date(),\\n                updated: new Date()\\n            }],\\n            flows: [],\\n            extensions: [],\\n            assets: [],\\n            actions: [{\\n                'name': 'Delete',\\n                'icon': 'fa fa-close',\\n                'tooltip': 'Delete User'\\n            }]\\n        }, {\\n                            id: '52fd6vv87-3294-0001-05g6-4d4767890765',\\n                            name: \\\"nifi-email-bundle\\\",\\n                            displayName: 'nifi-email-bundle',\\n                            type: 'extension',\\n                            sublabel: 'A sublabel',\\n                            compliant: {\\n                id: '33fd6vv87-3549-0001-05g6-4d4567890765',\\n                label: 'Compliant',\\n                test: {\\n                            label: 'test'\\n                },\\n                type: 'certification'\\n            },\\n            versions: [{\\n                id: '23d3cc59-0156-1000-06b4-2b0810089090',\\n                revision: '1',\\n                dependentFlows: [{\\n                            id: '23f6cc89-0156-1000-06b4-2b0810089090'\\n                }],\\n                created: new Date(),\\n                updated: new Date()\\n            }],\\n            flows: [],\\n            extensions: [],\\n            assets: [],\\n            actions: [{\\n                'name': 'Delete',\\n                'icon': 'fa fa-close',\\n                'tooltip': 'Delete User'\\n            }, {\\n                'name': 'Manage',\\n                'icon': 'fa fa-user',\\n                'tooltip': 'Manage User'\\n            }, ]\\n        }];\\n\\n        this.filteredDroplets = [];\\n\\n        this.dropletColumns = [\\n                            { name: 'id', label: 'ID', sortable: true },\\n                            { name: 'name', label: 'Name', sortable: true },\\n                            { name: 'displayName', label: 'Display Name', sortable: true },\\n                            { name: 'sublabel', label: 'Label', sortable: true },\\n                            { name: 'type', label: 'Type', sortable: true }\\n        ];\\n\\n        this.autoCompleteDroplets = [];\\n        this.dropletsSearchTerms = [];\\n\\n        ...\\n\\n        isDropletFilterChecked: function(term) {\\n                            return (this.dropletsSearchTerms.indexOf(term) > -1);\\n        },\\n\\n        getDropletTypeCount: function(type) {\\n                            return this.filteredDroplets.filter(function(droplet) {\\n                return droplet.type === type;\\n            }).length;\\n        },\\n\\n        getDropletCertificationCount: function(certification) {\\n                            return this.filteredDroplets.filter(droplet => {\\n                return Object.keys(droplet).find((key) => {\\n                            if (key === certification && droplet[certification].type === 'certification') {\\n                        return droplet;\\n                    }\\n                });\\n            }).length;\\n        },\\n\\n        getSortBy: function() {\\n                            var sortByColumnLabel;\\n                            var arrayLength = this.dropletColumns.length;\\n                            for (var i = 0; i < arrayLength; i++) {\\n                if (this.dropletColumns[i].active === true) {\\n                            sortByColumnLabel = this.dropletColumns[i].label;\\n                            break;\\n                }\\n            }\\n            return sortByColumnLabel;\\n        },\\n\\n        sortDroplets: function(column) {\\n                            if (column.sortable === true) {\\n                // toggle column sort order\\n                var sortOrder = column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC';\\n                this.filterDroplets(column.name, sortOrder);\\n                //only one column can be actively sorted so we reset all to inactive\\n                this.dropletColumns.forEach(function (c) {\\n                            c.active = false;\\n                });\\n                //and set this column as the actively sorted column\\n                column.active = true;\\n                this.activeDropletColumn = column;\\n            }\\n        },\\n\\n        toggleDropletsFilter: function(searchTerm) {\\n                            var applySearchTerm = true;\\n                            // check if the search term is already applied and remove it if true\\n                            if (this.dropletsSearchTerms.length > 0) {\\n                var arrayLength = this.dropletsSearchTerms.length;\\n                for (var i = 0; i < arrayLength; i++) {\\n                            var index = this.dropletsSearchTerms.indexOf(searchTerm);\\n                            if (index > -1) {\\n                        this.dropletsSearchTerms.splice(index, 1);\\n                        applySearchTerm = false;\\n                    }\\n                }\\n            }\\n\\n            // if we just removed the search term do NOT apply it again\\n            if (applySearchTerm) {\\n                this.dropletsSearchTerms.push(searchTerm);\\n            }\\n\\n            this.filterDroplets(this.activeDropletColumn.name, this.activeDropletColumn.sortOrder);\\n        },\\n\\n        filterDroplets: function(sortBy, sortOrder) {\\n                            // if `sortBy` is `undefined` then find the first sortable column in this.dropletColumns\\n                            if (sortBy === undefined) {\\n                var arrayLength = this.dropletColumns.length;\\n                for (var i = 0; i < arrayLength; i++) {\\n                            if (this.dropletColumns[i].sortable === true) {\\n                        sortBy = this.dropletColumns[i].name;\\n                        this.activeDropletColumn = this.dropletColumns[i];\\n                        //only one column can be actively sorted so we reset all to inactive\\n                        this.dropletColumns.forEach(c => c.active = false);\\n                        //and set this column as the actively sorted column\\n                        this.dropletColumns[i].active = true;\\n                        break;\\n                    }\\n                }\\n            }\\n\\n            // if `sortOrder` is `undefined` then use 'ASC'\\n            if (sortOrder === undefined) {\\n                sortOrder = 'ASC'\\n            }\\n\\n            var newData = this.droplets;\\n\\n            for (var i = 0; i < this.dropletsSearchTerms.length; i++) {\\n                newData = this.filterData(newData, this.dropletsSearchTerms[i], true, this.activeDropletColumn.name);\\n            }\\n\\n            newData = this.dataTableService.sortData(newData, sortBy, sortOrder);\\n            this.filteredDroplets = newData;\\n            this.getAutoCompleteDroplets();\\n        },\\n\\n        getAutoCompleteDroplets: function() {\\n                            this.autoCompleteDroplets = [];\\n                            this.dropletColumns.forEach(c => this.filteredDroplets.forEach(r => (r[c.name.toLowerCase()]) ? this.autoCompleteDroplets.push(r[c.name.toLowerCase()].toString()) : ''));\\n        },\\n\\n        filterData: function(data, searchTerm, ignoreCase) {\\n                            var field = '';\\n                            if (searchTerm.indexOf(\\\":\\\") > -1) {\\n                field = searchTerm.split(':')[0].trim();\\n                searchTerm = searchTerm.split(':')[1].trim();\\n            }\\n            var filter = searchTerm ? (ignoreCase ? searchTerm.toLowerCase() : searchTerm) : '';\\n\\n            if (filter) {\\n                data = data.filter(item => {\\n                            var res = Object.keys(item).find((key) => {\\n                        if (field.indexOf(\\\".\\\") > -1) {\\n                            var objArray = field.split(\\\".\\\");\\n                            var obj = item;\\n                            var arrayLength = objArray.length;\\n                            for (var i = 0; i < arrayLength; i++) {\\n                                try {\\n                            obj = obj[objArray[i]];\\n                                } catch (e) {\\n                            return false;\\n                                }\\n                            }\\n                            var preItemValue = ('' + obj);\\n                            var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue;\\n                            return itemValue.indexOf(filter) > -1;\\n                        } else {\\n                            if (key !== field && field !== '') {\\n                                return false;\\n                            }\\n                            var preItemValue = ('' + item[key]);\\n                            var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue;\\n                            return itemValue.indexOf(filter) > -1;\\n                        }\\n                    });\\n                    return !(typeof res === 'undefined');\\n                });\\n            }\\n            return data;\\n        },\\n\\n        ...\\n          ]]>\\n                    </pre>\\n                    </mat-tab>\\n                </mat-tab-group>\\n            </mat-card-content>\\n            <mat-divider></mat-divider>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Table</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <p>Example table with: Paging Bar / Filter / Sortable Columns / Multi-select with available Actions</p>\\n                <mat-tab-group mat-stretch-tabs>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Demo</ng-template>\\n                        <div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" class=\\\"pad-top-md pad-bottom-sm pad-left-md pad-right-md\\\">\\n                            <span class=\\\"table-title\\\">\\n                            <span>Table title</span>\\n                            </span>\\n                            <div flex class=\\\"push-right-sm\\\" fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                                <td-chips [items]=\\\"autoCompleteData\\\" (add)=\\\"searchAdd($event)\\\" (remove)=\\\"searchRemove($event)\\\"></td-chips>\\n                                <button class=\\\"push-top-sm\\\" color=\\\"fds-primary\\\" mat-raised-button [matMenuTriggerFor]=\\\"dataTableActionMenu\\\">\\n                                    Actions<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <mat-menu class=\\\"fds-primary-dropdown-button-menu\\\" #dataTableActionMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                                <button mat-menu-item> Option 1 </button>\\n                                <button mat-menu-item> Option 2 </button>\\n                            </mat-menu>\\n                        </div>\\n                        <div class=\\\"pad-left-md pad-right-md\\\">\\n                            <div fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\" class=\\\"td-data-table\\\">\\n                                <div class=\\\"td-data-table-column\\\" (click)=\\\"sort($event, column)\\\" [matTooltip]=\\\"column.tooltip\\\" *ngFor=\\\"let column of columns\\\" fxFlex=\\\"{{column.width}}\\\">\\n                                    <i *ngIf=\\\"column.active && column.sortable && column.sortOrder === 'ASC'\\\" class=\\\"fa fa-caret-up\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <i *ngIf=\\\"column.active && column.sortable && column.sortOrder === 'DESC'\\\" class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                                    {{column.label}}\\n                                </div>\\n                                <div class=\\\"td-data-table-column\\\" fxFlex=10>\\n                                    <div fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                                        <mat-checkbox class=\\\"pad-left-sm\\\" [(ngModel)]=\\\"allRowsSelected\\\" (checked)=\\\"allRowsSelected\\\" (change)=\\\"toggleSelectAll()\\\"></mat-checkbox>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div>\\n                                <div fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\" class=\\\"td-data-table-row\\\" [ngClass]=\\\"{'selected' : row.checked}\\\" *ngFor=\\\"let row of filteredData\\\" (click)=\\\"row.checked = !row.checked;toggleSelect(row)\\\">\\n                                    <div class=\\\"td-data-table-cell\\\" *ngFor=\\\"let column of columns\\\" fxFlex=\\\"{{column.width}}\\\">\\n                                        <div *ngIf=\\\"column.name !== 'comments' || row['comments']\\\">\\n                                            {{column.format ? column.format(row[column.name]) : row[column.name]}}\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"td-data-table-cell\\\" fxFlex=10>\\n                                        <div *ngIf=\\\"row.actions\\\">\\n                                            <div *ngIf=\\\"row.actions.length <= 4\\\" fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                                                <button (click)=\\\"row.checked = !row.checked\\\" *ngFor=\\\"let action of row.actions\\\" matTooltip=\\\"{{action.tooltip}}\\\" mat-icon-button color=\\\"accent\\\" [disabled]=\\\"action.disabled ? '' : null\\\">\\n                                                    <i class=\\\"{{action.icon}}\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                                <mat-checkbox class=\\\"pad-left-sm\\\" [(ngModel)]=\\\"row.checked\\\" [checked]=\\\"row.checked\\\" (change)=\\\"toggleSelect(row)\\\" (click)=\\\"row.checked = !row.checked;toggleSelect(row)\\\"></mat-checkbox>\\n                                            </div>\\n                                            <div *ngIf=\\\"row.actions.length > 4\\\" fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                                                <button (click)=\\\"row.checked = !row.checked\\\" matTooltip=\\\"Actions\\\" mat-icon-button color=\\\"accent\\\" [matMenuTriggerFor]=\\\"tableActionMenu\\\">\\n                                                    <i class=\\\"fa fa-ellipsis-h\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                                <mat-menu #tableActionMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                                                    <button *ngFor=\\\"let action of row.actions\\\" matTooltip=\\\"{{action.tooltip}}\\\" mat-menu-item [disabled]=\\\"action.disabled ? '' : null\\\">\\n                                                        <i class=\\\"{{action.icon}}\\\" aria-hidden=\\\"true\\\"></i>\\n                                                        <span>{{action.name}}</span>\\n                                                    </button>\\n                                                </mat-menu>\\n                                                <mat-checkbox class=\\\"pad-left-sm\\\" [(ngModel)]=\\\"row.checked\\\" [checked]=\\\"row.checked\\\" (change)=\\\"toggleSelect(row)\\\" (click)=\\\"row.checked = !row.checked;toggleSelect(row)\\\"></mat-checkbox>\\n                                            </div>\\n                                        </div>\\n                                        <div *ngIf=\\\"!row.actions\\\" fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                                            <mat-checkbox class=\\\"pad-left-sm\\\" [(ngModel)]=\\\"row.checked\\\" [checked]=\\\"row.checked\\\" (change)=\\\"toggleSelect(row)\\\" (click)=\\\"row.checked = !row.checked;toggleSelect(row)\\\"></mat-checkbox>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"mat-padding\\\" *ngIf=\\\"!filteredData.length > 0\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n                                <h3>No results to display.</h3>\\n                            </div>\\n                            <td-paging-bar #pagingBar [initialPage]=\\\"1\\\" [pageSize]=\\\"pageSize\\\" [total]=\\\"pageCount\\\" (change)=\\\"page($event)\\\">\\n                                <span hide-xs>Row per page:</span> {{pagingBar.range}} <span hide-xs>of {{pagingBar.total}}</span>\\n                            </td-paging-bar>\\n                        </div>\\n                    </mat-tab>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Code</ng-template>\\n                        <p>HTML:</p>\\n                        <pre lang=\\\"html\\\">\\n                        <![CDATA[\\n        <div layout=\\\"row\\\" layout-align=\\\"space-between center\\\" class=\\\"pad-top-md pad-bottom-sm pad-left-md pad-right-md\\\">\\n            <span class=\\\"table-title\\\">\\n            <span>Table title</span>\\n            </span>\\n            <div flex class=\\\"push-right-sm\\\" fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                <td-chips [items]=\\\"autoCompleteData\\\" (add)=\\\"searchAdd($event)\\\" (remove)=\\\"searchRemove($event)\\\"></td-chips>\\n                <button color=\\\"fds-primary\\\" mat-raised-button [matMenuTriggerFor]=\\\"dataTableActionMenu\\\">\\n                    Actions<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                </button>\\n            </div>\\n            <mat-menu class=\\\"fds-primary-dropdown-button-menu\\\" #dataTableActionMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                <button mat-menu-item> Option 1 </button>\\n                <button mat-menu-item> Option 2 </button>\\n            </mat-menu>\\n        </div>\\n        <div class=\\\"pad-left-md pad-right-md\\\">\\n            <div fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\" class=\\\"td-data-table\\\">\\n                <div class=\\\"td-data-table-column\\\" (click)=\\\"sort($event, column)\\\" [matTooltip]=\\\"column.tooltip\\\" *ngFor=\\\"let column of columns\\\" fxFlex=\\\"{ { column.width } }\\\">\\n                    { { column.label } }\\n                    <i *ngIf=\\\"column.active && column.sortable && column.sortOrder === 'ASC'\\\" class=\\\"fa fa-caret-up\\\" aria-hidden=\\\"true\\\"></i>\\n                    <i *ngIf=\\\"column.active && column.sortable && column.sortOrder === 'DESC'\\\" class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                </div>\\n                <div class=\\\"td-data-table-column\\\" fxFlex=10>\\n                    <div fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                        <mat-checkbox class=\\\"pad-left-sm\\\" [(ngModel)]=\\\"allRowsSelected\\\" (checked)=\\\"allRowsSelected\\\" (change)=\\\"toggleSelectAll()\\\"></mat-checkbox>\\n                    </div>\\n                </div>\\n            </div>\\n            <div>\\n                <div fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\" class=\\\"td-data-table-row\\\" [ngClass]=\\\"{'selected' : row.checked}\\\" *ngFor=\\\"let row of filteredData\\\" (click)=\\\"row.checked = !row.checked;toggleSelect(row)\\\">\\n                    <div class=\\\"td-data-table-cell\\\" *ngFor=\\\"let column of columns\\\" fxFlex=\\\"{ { column.width } }\\\">\\n                        <div *ngIf=\\\"column.name !== 'comments' || row['comments']\\\">\\n                            { { column.format ? column.format(row[column.name]) : row[column.name] } }\\n                        </div>\\n                    </div>\\n                    <div class=\\\"td-data-table-cell\\\" fxFlex=10>\\n                        <div *ngIf=\\\"row.actions\\\">\\n                            <div *ngIf=\\\"row.actions.length <= 4\\\" fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                                <button (click)=\\\"row.checked = !row.checked\\\" *ngFor=\\\"let action of row.actions\\\" matTooltip=\\\"{ { action.tooltip } }\\\" mat-icon-button color=\\\"accent\\\" [disabled]=\\\"action.disabled ? '' : null\\\">\\n                                    <i class=\\\"{ { action.icon } }\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                                <mat-checkbox class=\\\"pad-left-sm\\\" [(ngModel)]=\\\"row.checked\\\" [checked]=\\\"row.checked\\\" (change)=\\\"toggleSelect(row)\\\" (click)=\\\"row.checked = !row.checked;toggleSelect(row)\\\"></mat-checkbox>\\n                            </div>\\n                            <div *ngIf=\\\"row.actions.length > 4\\\" fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                                <button (click)=\\\"row.checked = !row.checked\\\" matTooltip=\\\"Actions\\\" mat-icon-button color=\\\"accent\\\" [matMenuTriggerFor]=\\\"tableActionMenu\\\">\\n                                    <i class=\\\"fa fa-ellipsis-h\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                                <mat-menu #tableActionMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                                    <button *ngFor=\\\"let action of row.actions\\\" matTooltip=\\\"{ { action.tooltip } }\\\" mat-menu-item [disabled]=\\\"action.disabled ? '' : null\\\">\\n                                        <i class=\\\"{ { action.icon } }\\\" aria-hidden=\\\"true\\\"></i>\\n                                        <span>{ { action.name } }</span>\\n                                    </button>\\n                                </mat-menu>\\n                                <mat-checkbox class=\\\"pad-left-sm\\\" [(ngModel)]=\\\"row.checked\\\" [checked]=\\\"row.checked\\\" (change)=\\\"toggleSelect(row)\\\" (click)=\\\"row.checked = !row.checked;toggleSelect(row)\\\"></mat-checkbox>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"!row.actions\\\" fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                            <mat-checkbox class=\\\"pad-left-sm\\\" [(ngModel)]=\\\"row.checked\\\" [checked]=\\\"row.checked\\\" (change)=\\\"toggleSelect(row)\\\" (click)=\\\"row.checked = !row.checked;toggleSelect(row)\\\"></mat-checkbox>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"mat-padding\\\" *ngIf=\\\"!filteredData.length > 0\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\">\\n                <h3>No results to display.</h3>\\n            </div>\\n            <td-paging-bar #pagingBar [initialPage]=\\\"1\\\" [pageSize]=\\\"pageSize\\\" [total]=\\\"pageCount\\\" (change)=\\\"page($event)\\\">\\n                <span hide-xs>Row per page:</span> { { pagingBar.range } } <span hide-xs>of { { pagingBar.total } }</span>\\n            </td-paging-bar>\\n        </div>\\n          ]]>\\n                    </pre>\\n                        <p>Javascript:</p>\\n                        <pre lang=\\\"javascript\\\">\\n                        <![CDATA[\\n        this.dataTableService = TdDataTableService;\\n\\n        this.data = [{\\n                            'id': 1,\\n                            'name': 'Frozen yogurt',\\n                            'type': 'Ice cream',\\n                            'calories': 159.0,\\n                            'fat': 6.0,\\n                            'carbs': 24.0,\\n                            'protein': 4.0,\\n                            'sodium': 87.0,\\n                            'calcium': 14.0,\\n                            'iron': 1.0,\\n                            'comments': 'I love froyo!',\\n                            'actions': [{\\n                'name': 'Action 1',\\n                'icon': 'fa fa-user',\\n                'tooltip': 'Manage Users'\\n            }, {\\n                'name': 'Action 2',\\n                'icon': 'fa fa-key',\\n                'tooltip': 'Manage Permissions'\\n            }]\\n        }, {\\n                            'id': 2,\\n                            'name': 'Ice cream sandwich',\\n                            'type': 'Ice cream',\\n                            'calories': 237.0,\\n                            'fat': 9.0,\\n                            'carbs': 37.0,\\n                            'protein': 4.3,\\n                            'sodium': 129.0,\\n                            'calcium': 8.0,\\n                            'iron': 1.0,\\n                            'actions': [{\\n                'name': 'Action 1',\\n                'icon': 'fa fa-user',\\n                'tooltip': 'Manage Users'\\n            }, {\\n                'name': 'Action 2',\\n                'icon': 'fa fa-key',\\n                'tooltip': 'Manage Permissions'\\n            }, {\\n                'name': 'Action 3',\\n                'tooltip': 'Action 3'\\n            }, {\\n                'name': 'Action 4',\\n                'disabled': true,\\n                'tooltip': 'Action 4'\\n            }, {\\n                'name': 'Action 5',\\n                'tooltip': 'Action 5'\\n            }]\\n        }, {\\n                            'id': 3,\\n                            'name': 'Eclair',\\n                            'type': 'Pastry',\\n                            'calories': 262.0,\\n                            'fat': 16.0,\\n                            'carbs': 24.0,\\n                            'protein': 6.0,\\n                            'sodium': 337.0,\\n                            'calcium': 6.0,\\n                            'iron': 7.0,\\n                            'actions': [{\\n                'name': 'Action 1',\\n                'icon': 'fa fa-user',\\n                'tooltip': 'Manage Users'\\n            }, {\\n                'name': 'Action 2',\\n                'icon': 'fa fa-key',\\n                'tooltip': 'Manage Permissions'\\n            }, {\\n                'name': 'Action 3',\\n                'tooltip': 'Action 3'\\n            }, {\\n                'name': 'Action 4',\\n                'disabled': true,\\n                'tooltip': 'Action 4'\\n            }, {\\n                'name': 'Action 5',\\n                'tooltip': 'Action 5'\\n            }],\\n        }, {\\n                            'id': 4,\\n                            'name': 'Cupcake',\\n                            'type': 'Pastry',\\n                            'calories': 305.0,\\n                            'fat': 3.7,\\n                            'carbs': 67.0,\\n                            'protein': 4.3,\\n                            'sodium': 413.0,\\n                            'calcium': 3.0,\\n                            'iron': 8.0,\\n                            'actions': [{\\n                'name': 'Action 1',\\n                'icon': 'fa fa-user',\\n                'tooltip': 'Manage Users'\\n            }, {\\n                'name': 'Action 2',\\n                'icon': 'fa fa-key',\\n                'tooltip': 'Manage Permissions'\\n            }, {\\n                'name': 'Action 3',\\n                'tooltip': 'Action 3'\\n            }, {\\n                'name': 'Action 4',\\n                'disabled': true,\\n                'tooltip': 'Action 4'\\n            }, {\\n                'name': 'Action 5',\\n                'tooltip': 'Action 5'\\n            }],\\n        }, {\\n                            'id': 5,\\n                            'name': 'Jelly bean',\\n                            'type': 'Candy',\\n                            'calories': 375.0,\\n                            'fat': 0.0,\\n                            'carbs': 94.0,\\n                            'protein': 0.0,\\n                            'sodium': 50.0,\\n                            'calcium': 0.0,\\n                            'iron': 0.0,\\n        }, {\\n                            'id': 6,\\n                            'name': 'Lollipop',\\n                            'type': 'Candy',\\n                            'calories': 392.0,\\n                            'fat': 0.2,\\n                            'carbs': 98.0,\\n                            'protein': 0.0,\\n                            'sodium': 38.0,\\n                            'calcium': 0.0,\\n                            'iron': 2.0,\\n        }, {\\n                            'id': 7,\\n                            'name': 'Honeycomb',\\n                            'type': 'Other',\\n                            'calories': 408.0,\\n                            'fat': 3.2,\\n                            'carbs': 87.0,\\n                            'protein': 6.5,\\n                            'sodium': 562.0,\\n                            'calcium': 0.0,\\n                            'iron': 45.0,\\n        }, {\\n                            'id': 8,\\n                            'name': 'Donut',\\n                            'type': 'Pastry',\\n                            'calories': 452.0,\\n                            'fat': 25.0,\\n                            'carbs': 51.0,\\n                            'protein': 4.9,\\n                            'sodium': 326.0,\\n                            'calcium': 2.0,\\n                            'iron': 22.0,\\n        }, {\\n                            'id': 9,\\n                            'name': 'KitKat',\\n                            'type': 'Candy',\\n                            'calories': 518.0,\\n                            'fat': 26.0,\\n                            'carbs': 65.0,\\n                            'protein': 7.0,\\n                            'sodium': 54.0,\\n                            'calcium': 12.0,\\n                            'iron': 6.0,\\n        }, {\\n                            'id': 10,\\n                            'name': 'Chocolate',\\n                            'type': 'Candy',\\n                            'calories': 518.0,\\n                            'fat': 26.0,\\n                            'carbs': 65.0,\\n                            'protein': 7.0,\\n                            'sodium': 54.0,\\n                            'calcium': 12.0,\\n                            'iron': 6.0,\\n        }, {\\n                            'id': 11,\\n                            'name': 'Chamoy',\\n                            'type': 'Candy',\\n                            'calories': 518.0,\\n                            'fat': 26.0,\\n                            'carbs': 65.0,\\n                            'protein': 7.0,\\n                            'sodium': 54.0,\\n                            'calcium': 12.0,\\n                            'iron': 6.0,\\n        }, ];\\n\\n        this.filteredData = this.data;\\n        this.filteredTotal = this.data.length;\\n\\n        this.columns = [\\n                            { name: 'comments', label: 'Comments' },\\n                            { name: 'name', label: 'Dessert (100g serving)', sortable: true },\\n                            { name: 'type', label: 'Type', sortable: true },\\n                            { name: 'calories', label: 'Calories', numeric: true, format: NUMBER_FORMAT, sortable: true },\\n                            { name: 'fat', label: 'Fat (g)', numeric: true, format: DECIMAL_FORMAT, sortable: true },\\n                            { name: 'carbs', label: 'Carbs (g)', numeric: true, format: NUMBER_FORMAT, sortable: true },\\n                            { name: 'protein', label: 'Protein (g)', numeric: true, format: DECIMAL_FORMAT, sortable: true },\\n                            { name: 'sodium', label: 'Sodium (mg)', numeric: true, format: NUMBER_FORMAT, sortable: true },\\n                            { name: 'calcium', label: 'Calcium (%)', numeric: true, format: NUMBER_FORMAT, sortable: true },\\n                            { name: 'iron', label: 'Iron (%)', numeric: true, format: NUMBER_FORMAT },\\n        ];\\n\\n        this.allRowsSelected = false;\\n        this.autoCompleteData = [];\\n        this.selectedRows = [];\\n\\n        this.searchTerm = [];\\n        this.fromRow = 1;\\n        this.currentPage = 1;\\n        this.pageSize = 5;\\n\\n        ...\\n\\n        sort: function(sortEvent, column) {\\n                            if (column.sortable) {\\n                var sortBy = column.name;\\n                var sortOrder = column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC';\\n                this.filter(sortBy, sortOrder);\\n\\n                //only one column can be actively sorted so we reset all to inactive\\n                this.columns.forEach(c => c.active = false);\\n                //and set this column as the actively sorted column\\n                column.active = true;\\n            }\\n        },\\n\\n        searchRemove: function(searchTerm) {\\n                            //only remove the first occurrence of the search term\\n                            var index = this.searchTerm.indexOf(searchTerm);\\n                            if (index !== -1) {\\n                this.searchTerm.splice(index, 1);\\n            }\\n            this.filter();\\n        },\\n\\n        searchAdd: function(searchTerm) {\\n                            this.searchTerm.push(searchTerm);\\n                            this.filter();\\n        },\\n\\n        page: function(pagingEvent) {\\n                            this.fromRow = pagingEvent.fromRow;\\n                            this.currentPage = pagingEvent.page;\\n                            this.pageSize = pagingEvent.pageSize;\\n                            this.filter();\\n        },\\n\\n        filterData: function(data, searchTerm, ignoreCase) {\\n                            var field = '';\\n                            if (searchTerm.indexOf(\\\":\\\") > -1) {\\n                field = searchTerm.split(':')[0].trim();\\n                searchTerm = searchTerm.split(':')[1].trim();\\n            }\\n            var filter = searchTerm ? (ignoreCase ? searchTerm.toLowerCase() : searchTerm) : '';\\n\\n            if (filter) {\\n                data = data.filter(item => {\\n                            var res = Object.keys(item).find((key) => {\\n                        if (field.indexOf(\\\".\\\") > -1) {\\n                            var objArray = field.split(\\\".\\\");\\n                            var obj = item;\\n                            var arrayLength = objArray.length;\\n                            for (var i = 0; i < arrayLength; i++) {\\n                                try {\\n                            obj = obj[objArray[i]];\\n                                } catch (e) {\\n                            return false;\\n                                }\\n                            }\\n                            var preItemValue = ('' + obj);\\n                            var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue;\\n                            return itemValue.indexOf(filter) > -1;\\n                        } else {\\n                            if (key !== field && field !== '') {\\n                                return false;\\n                            }\\n                            var preItemValue = ('' + item[key]);\\n                            var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue;\\n                            return itemValue.indexOf(filter) > -1;\\n                        }\\n                    });\\n                    return !(typeof res === 'undefined');\\n                });\\n            }\\n            return data;\\n        },\\n\\n        filter: function(sortBy, sortOrder) {\\n                            if (this.allRowsSelected) {\\n                this.toggleSelectAll();\\n            }\\n            this.deselectAll();\\n            var newData = this.data;\\n\\n            if (this.searchTerm.length > 0) {\\n                for (var i = 0; i < this.searchTerm.length; i++) {\\n                            //account for column/field name specific search syntax\\n                            if (this.searchTerm[i].indexOf(\\\":\\\") > -1) {\\n                        newData = this.filterData(newData, this.searchTerm[i].split(':')[1].trim(), true, this.searchTerm[i].split(':')[0].trim());\\n                    } else { //otherwise search all cells\\n                        newData = this.filterData(newData, this.searchTerm[i], true);\\n                    }\\n                }\\n            } else {\\n                newData = this.dataTableService.filterData(newData, '', true);\\n            }\\n            this.filteredTotal = newData.length;\\n            newData = this.dataTableService.sortData(newData, sortBy, sortOrder);\\n            newData = this.dataTableService.pageData(newData, this.fromRow, this.currentPage * this.pageSize);\\n            this.filteredData = newData;\\n            this.getAutoCompleteData();\\n        },\\n\\n        toggleSelect: function(row) {\\n                            if (!row.checked) {\\n                                this.allRowsSelected = false;\\n                                } else {\\n                                if (this.allFilteredRowsSelected()) {\\n                                this.allRowsSelected = true;\\n                                } else {\\n                                this.allRowsSelected = false;\\n                                }\\n                                }\\n                                },\\n\\n                                toggleSelectAll: function() {\\n                                this.allRowsSelected = !this.allRowsSelected;\\n                                if (this.allRowsSelected) {\\n                                this.selectAll();\\n                                } else {\\n                                this.deselectAll();\\n                                }\\n                                },\\n\\n                                selectAll: function() {\\n                                this.filteredData.forEach(c => c.checked = true);\\n                                },\\n\\n                                deselectAll: function() {\\n                                this.filteredData.forEach(c => c.checked = false);\\n                                },\\n\\n                                allFilteredRowsSelected: function() {\\n                                var allFilteredRowsSelected = true;\\n                                this.filteredData.forEach(function(c) {\\n                                if (c.checked === undefined || c.checked === false) {\\n                                allFilteredRowsSelected = false;\\n                                }\\n                                });\\n\\n                                return allFilteredRowsSelected;\\n                                },\\n\\n                                areTooltipsOn: function() {\\n                                return this.columns[0].hasOwnProperty('tooltip');\\n                                },\\n\\n                                toggleTooltips: function() {\\n                                if (this.columns[0].tooltip) {\\n                                this.columns.forEach(c => delete c.tooltip);\\n                                } else {\\n                                this.columns.forEach(c => c.tooltip = `This is ${c.label}!`);\\n                                }\\n                                },\\n\\n                                openDataTablePrompt: function(row, name) {\\n                                this.dialogService.openPrompt({\\n                                message: 'Enter comment?',\\n                                value: row[name],\\n                            }).afterClosed().subscribe(value => {\\n                                if (value !== undefined) {\\n                                row[name] = value;\\n                                }\\n                                })\\n                                },\\n\\n                                getAutoCompleteData: function() {\\n                                this.autoCompleteData = [];\\n                                this.columns.forEach(c => this.filteredData.forEach(r => (r[c.name.toLowerCase()]) ? this.autoCompleteData.push(r[c.name.toLowerCase()].toString()):''));\\n                                },\\n\\n                                ...\\n                                ]]>\\n                                </pre>\\n                            </mat-tab>\\n                            </mat-tab-group>\\n                            </mat-card-content>\\n                            <mat-divider></mat-divider>\\n                            <mat-card-actions>\\n                            <button matTooltip=\\\"Column field name tooltips toggle.\\\" mat-button color=\\\"primary\\\" (click)=\\\"toggleTooltips()\\\" class=\\\"text-upper\\\">\\n                                Tooltips ({{areTooltipsOn() ? 'ON' : 'OFF'}})\\n                                </button>\\n                            </mat-card-actions>\\n                            </mat-card>\\n                            <mat-card>\\n                            <mat-card-title class=\\\"pad-bottom-sm\\\">Checkbox</mat-card-title>\\n                                <mat-divider></mat-divider>\\n                                <mat-card-content>\\n                                <h3 class=\\\"mat-title\\\">Basic Usage</h3>\\n                            <mat-divider></mat-divider>\\n                            <mat-list>\\n                            <mat-list-item *ngFor=\\\"let grocery of groceries\\\">\\n                            <mat-checkbox [checked]=\\\"grocery.bought\\\">\\n                                {{grocery.name}}\\n                                </mat-checkbox>\\n                            </mat-list-item>\\n                            </mat-list>\\n                            <h3 class=\\\"mat-title\\\">Usage</h3>\\n                                <p>HTML:</p>\\n                            <pre lang=\\\"html\\\">\\n                                <![CDATA[\\n                                <!-- Basic Usage -->\\n                                <mat-checkbox [checked]=\\\"grocery.bought\\\">\\n                                    { {grocery.name} }\\n                                </mat-checkbox>\\n                                ]]>\\n                                </pre>\\n                            <p>Javascript:</p>\\n                            <pre lang=\\\"javascript\\\">\\n                                <![CDATA[\\n                                    this.groceries = [{\\n                                        bought: true,\\n                                name: 'Seitan',\\n                                }, {\\n                            bought: false,\\n                                name: 'Almond Meal Flour',\\n                                }, {\\n                            bought: false,\\n                                name: 'Organic Eggs',\\n                                }, ];\\n                        ]]>\\n                    </pre>\\n                        <h3 class=\\\"mat-title\\\">Usage within Forms</h3>\\n                        <mat-divider></mat-divider>\\n                        <form>\\n                            <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                                <mat-checkbox flex=\\\"initial\\\" [(ngModel)]=\\\"user.agreesToTOS\\\" name=\\\"agreesToTOS\\\">\\n                                    I agree to the terms\\n                                </mat-checkbox>\\n                                <button mat-raised-button color=\\\"fds-secondary\\\" [disabled]=\\\"!user.agreesToTOS\\\" class=\\\"pad-right-sm\\\" class=\\\"text-upper\\\">Sign Up</button>\\n                            </div>\\n                            <mat-divider></mat-divider>\\n                            <div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pad-top-sm pad-bottom-sm\\\">\\n                                <mat-checkbox labelPosition=\\\"after\\\">\\n                                    I come after my label.\\n                                </mat-checkbox>\\n                            </div>\\n                            <mat-divider></mat-divider>\\n                            <div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pad-top-sm pad-bottom-sm\\\">\\n                                <mat-checkbox labelPosition=\\\"before\\\">\\n                                    I come before my label\\n                                </mat-checkbox>\\n                            </div>\\n                            <mat-divider></mat-divider>\\n                        </form>\\n                        <h3 class=\\\"mat-title\\\">Usage</h3>\\n                        <p>HTML:</p>\\n                        <pre lang=\\\"html\\\">\\n        <![CDATA[\\n                            <!-- Usage within Forms -->\\n        <form>\\n            <div layout=\\\"row\\\" layout-align=\\\"start center\\\">\\n                <mat-checkbox flex=\\\"initial\\\" [(ngModel)]=\\\"user.agreesToTOS\\\" name=\\\"agreesToTOS\\\">\\n                    I agree to the terms\\n                </mat-checkbox>\\n                <button mat-raised-button color=\\\"fds-secondary\\\" [disabled]=\\\"!user.agreesToTOS\\\" class=\\\"pad-right-sm\\\" class=\\\"text-upper\\\">Sign Up</button>\\n            </div>\\n            <mat-divider></mat-divider>\\n            <div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pad-top-sm pad-bottom-sm\\\">\\n                <mat-checkbox labelPosition=\\\"after\\\">\\n                    I come after my label.\\n                </mat-checkbox>\\n            </div>\\n            <mat-divider></mat-divider>\\n            <div layout=\\\"row\\\" layout-align=\\\"start center\\\" class=\\\"pad-top-sm pad-bottom-sm\\\">\\n                <mat-checkbox labelPosition=\\\"before\\\">\\n                    I come before my label\\n                </mat-checkbox>\\n            </div>\\n            <mat-divider></mat-divider>\\n        </form>\\n        ]]>\\n        </pre>\\n                        <p>Javascript:</p>\\n                        <pre lang=\\\"javascript\\\">\\n                        <![CDATA[\\n        this.user = {\\n                            agreesToTOS: false\\n        };\\n                        ]]>\\n                    </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Radios</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content layout=\\\"row\\\">\\n                <div flex=\\\"48\\\" class=\\\"pad-right\\\">\\n                    <!-- Basic Radios -->\\n                    <h3 class=\\\"mat-title\\\">Basic Radios</h3>\\n                    <mat-radio-group name=\\\"group1\\\">\\n                        <mat-radio-button class=\\\"pad-right-sm\\\" name=\\\"group1\\\">Option 1 </mat-radio-button>\\n                        <mat-radio-button class=\\\"pad-right-sm\\\" name=\\\"group1\\\">Option 2 </mat-radio-button>\\n                        <mat-radio-button class=\\\"pad-right-sm\\\" name=\\\"group1\\\" disabled=\\\"true\\\">Option 3 (disabled) </mat-radio-button>\\n                    </mat-radio-group>\\n                    <h3 class=\\\"mat-title\\\">Usage</h3>\\n                    <p>HTML:</p>\\n                    <pre lang=\\\"html\\\">\\n                <![CDATA[\\n                        <!-- Basic Radios -->\\n        <mat-radio-group name=\\\"group1\\\">\\n            <mat-radio-button class=\\\"pad-right-sm\\\" name=\\\"group1\\\">Option 1 </mat-radio-button>\\n            <mat-radio-button class=\\\"pad-right-sm\\\" name=\\\"group1\\\">Option 2 </mat-radio-button>\\n            <mat-radio-button class=\\\"pad-right-sm\\\" name=\\\"group1\\\" disabled=\\\"true\\\">Option 3 (disabled) </mat-radio-button>\\n        </mat-radio-group>\\n        ]]>\\n        </pre>\\n                </div>\\n                <div flex=\\\"48\\\">\\n                    <!-- Dynamic Radios -->\\n                    <h3 class=\\\"mat-title\\\">Dynamic Radios</h3>\\n                    <mat-radio-group name=\\\"more_options\\\" [(ngModel)]=\\\"favoriteSeason\\\">\\n                        <mat-radio-button class=\\\"fds-radio pad-right-sm\\\" *ngFor=\\\"let season of seasonOptions\\\" name=\\\"more_options\\\" [value]=\\\"season\\\">\\n                            {{season}}\\n                        </mat-radio-button>\\n                    </mat-radio-group>\\n                    <p>Your favorite season is: <strong>{{favoriteSeason}}</strong></p>\\n                    <h3 class=\\\"mat-title\\\">Usage</h3>\\n                    <p>HTML:</p>\\n                    <pre lang=\\\"html\\\">\\n      <![CDATA[\\n                        <!-- Dynamic Radios -->\\n        <mat-radio-group name=\\\"more_options\\\" [(ngModel)]=\\\"favoriteSeason\\\">\\n          <mat-radio-button class=\\\"fds-radio\\\" *ngFor=\\\"let season of seasonOptions\\\" name=\\\"more_options\\\" [value]=\\\"season\\\">\\n            { {season} }\\n          </mat-radio-button>\\n        </mat-radio-group>\\n        <p>Your favorite season is: <strong>{ { favoriteSeason } }</strong></p>\\n      ]]>\\n      </pre>\\n                    <p>Javascript:</p>\\n                    <pre lang=\\\"javascript\\\">\\n      <![CDATA[\\n\\n        this.favoriteSeason = 'Autumn';\\n\\n        this.seasonOptions = [\\n            'Winter',\\n            'Spring',\\n            'Summer',\\n            'Autumn',\\n        ];\\n      ]]>\\n      </pre>\\n                </div>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Tooltips</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <button mat-raised-button color=\\\"fds-primary\\\" matTooltip=\\\"I show above\\\" matTooltipPosition=\\\"above\\\" class=\\\"text-upper\\\">Above Tooltip</button>\\n                <button mat-raised-button color=\\\"fds-primary\\\" matTooltip=\\\"I show after\\\" matTooltipPosition=\\\"after\\\" class=\\\"text-upper\\\">After Tooltip</button>\\n                <button mat-raised-button color=\\\"fds-primary\\\" matTooltip=\\\"I show below\\\" matTooltipPosition=\\\"below\\\" class=\\\"text-upper\\\">Below Tooltip</button>\\n                <button mat-raised-button color=\\\"fds-primary\\\" matTooltip=\\\"I show before\\\" matTooltipPosition=\\\"before\\\" class=\\\"text-upper\\\">Before Tooltip</button>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <button mat-raised-button color=\\\"fds-primary\\\" matTooltip=\\\"I show above\\\" matTooltipPosition=\\\"above\\\" class=\\\"text-upper\\\">Bottom Tooltip</button>\\n        <button mat-raised-button color=\\\"fds-primary\\\" matTooltip=\\\"I show after\\\" matTooltipPosition=\\\"after\\\" class=\\\"text-upper\\\">Bottom Tooltip</button>\\n        <button mat-raised-button color=\\\"fds-primary\\\" matTooltip=\\\"I show below\\\" matTooltipPosition=\\\"below\\\" class=\\\"text-upper\\\">Bottom Tooltip</button>\\n        <button mat-raised-button color=\\\"fds-primary\\\" matTooltip=\\\"I show before\\\" matTooltipPosition=\\\"before\\\" class=\\\"text-upper\\\">Bottom Tooltip</button>\\n        ]]>\\n      </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Panels</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <h3 class=\\\"mat-title\\\">Standard Card</h3>\\n                <mat-card>\\n                    <button class=\\\"fds-panel-menu-button\\\" matTooltip=\\\"Standard Card Menu\\\" mat-icon-button [matMenuTriggerFor]=\\\"standardCardMenu\\\">\\n                        <i class=\\\"fa fa-ellipsis-v \\\" aria-hidden=\\\"true\\\"></i>\\n                    </button>\\n                    <mat-menu class=\\\"primary-icon-button-menu\\\" #standardCardMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                        <button mat-menu-item>\\n                            <span>Option1</span>\\n                        </button>\\n                        <button mat-menu-item>\\n                            <span>Option2</span>\\n                        </button>\\n                    </mat-menu>\\n                    <mat-card-title class=\\\"pad-bottom-sm\\\">\\n                        <span>Title</span>\\n                    </mat-card-title>\\n                    <mat-card-content>\\n                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do tempor incididunt ut labore et dolore magna aliqua. Ut enim ad</p>\\n                    </mat-card-content>\\n                    <mat-card-actions fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                        <button mat-raised-button color=\\\"fds-primary\\\" class=\\\"text-upper\\\">Action</button>\\n                    </mat-card-actions>\\n                </mat-card>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n                <![CDATA[\\n                    <!-- Basic Card -->\\n        <mat-card>\\n            <button class=\\\"fds-panel-menu-button\\\" matTooltip=\\\"Standard Card Menu\\\" mat-icon-button [matMenuTriggerFor]=\\\"standardCardMenu\\\">\\n                <i class=\\\"fa fa-ellipsis-v \\\" aria-hidden=\\\"true\\\"></i>\\n            </button>\\n            <mat-menu class=\\\"primary-icon-button-menu\\\" #standardCardMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                <button mat-menu-item>\\n                    <span>Option1</span>\\n                </button>\\n                <button mat-menu-item>\\n                    <span>Option2</span>\\n                </button>\\n            </mat-menu>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">\\n                <span>Title</span>\\n            </mat-card-title>\\n            <mat-card-content>\\n                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do tempor incididunt ut labore et dolore magna aliqua. Ut enim ad</p>\\n            </mat-card-content>\\n            <mat-card-actions fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                <button mat-raised-button color=\\\"fds-primary\\\" class=\\\"text-upper\\\">Action</button>\\n            </mat-card-actions>\\n        </mat-card>\\n    ]]>\\n            </pre>\\n                <h3 class=\\\"mat-title\\\">Tabbed Card</h3>\\n                <mat-card>\\n                    <button class=\\\"fds-panel-menu-button\\\" matTooltip=\\\"Standard Card Menu\\\" mat-icon-button [matMenuTriggerFor]=\\\"standardCardMenu\\\">\\n                        <i class=\\\"fa fa-ellipsis-v \\\" aria-hidden=\\\"true\\\"></i>\\n                    </button>\\n                    <mat-menu class=\\\"primary-icon-button-menu\\\" #standardCardMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                        <button mat-menu-item>\\n                            <span>Option1</span>\\n                        </button>\\n                        <button mat-menu-item>\\n                            <span>Option2</span>\\n                        </button>\\n                    </mat-menu>\\n                    <mat-card-content>\\n                        <mat-tab-group dynamicHeight>\\n                            <mat-tab>\\n                                <ng-template mat-tab-label>One</ng-template>\\n                                <h3 class=\\\"mat-title\\\">First tab content</h3>\\n                                <p>Plaid echo park knausgaard normcore franzen cronut. Pickled humblebrag tofu hoodie, umami salvia farm-to-table schlitz try-hard food truck knausgaard pabst. Yuccie portland jean shorts, authentic mixtape waistcoat gentrify blue bottle. Fixie kickstarter church-key small batch seitan, shabby chic vegan listicle before they sold out. Hammock raw denim flannel tousled seitan you probably haven't heard of them. Trust fund man bun pug, kickstarter artisan selvage letterpress cornhole tote bag butcher locavore. Affogato try-hard kickstarter seitan, DIY pickled hella godard pork belly four loko ugh.</p>\\n                            </mat-tab>\\n                            <mat-tab>\\n                                <ng-template mat-tab-label>Two</ng-template>\\n                                <h3 class=\\\"mat-title\\\">Second tab content</h3>\\n                                <p>Hashtag distillery skateboard man bun gochujang, salvia man braid art party meggings heirloom kitsch farm-to-table. Franzen beard fingerstache gentrify, heirloom portland ennui XOXO microdosing kitsch plaid. Chicharrones bushwick chia, banh mi irony tattooed hammock butcher shabby chic taxidermy semiotics marfa post-ironic. Blue bottle keffiyeh farm-to-table ennui, chambray pitchfork art party pinterest artisan pop-up. Etsy banjo marfa, blue bottle kombucha crucifix XOXO tousled beard. Tilde disrupt kale chips bicycle rights skateboard master cleanse hella shoreditch, meditation retro shabby chic vice heirloom. Etsy listicle vice actually, iPhone chia hoodie four loko.</p>\\n                            </mat-tab>\\n                        </mat-tab-group>\\n                    </mat-card-content>\\n                    <mat-card-actions fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                        <button mat-raised-button color=\\\"fds-primary\\\" class=\\\"text-upper\\\">Action</button>\\n                    </mat-card-actions>\\n                </mat-card>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n                <![CDATA[\\n                    <!-- Basic Card -->\\n        <mat-card>\\n            <button class=\\\"fds-panel-menu-button\\\" matTooltip=\\\"Standard Card Menu\\\" mat-icon-button [matMenuTriggerFor]=\\\"standardCardMenu\\\">\\n                <i class=\\\"fa fa-ellipsis-v \\\" aria-hidden=\\\"true\\\"></i>\\n            </button>\\n            <mat-menu class=\\\"primary-icon-button-menu\\\" #standardCardMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                <button mat-menu-item>\\n                    <span>Option1</span>\\n                </button>\\n                <button mat-menu-item>\\n                    <span>Option2</span>\\n                </button>\\n            </mat-menu>\\n            <mat-card-content>\\n                <mat-tab-group dynamicHeight>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>One</ng-template>\\n                        <h3 class=\\\"mat-title\\\">First tab content</h3>\\n                        <p>Plaid echo park knausgaard normcore franzen cronut. Pickled humblebrag tofu hoodie, umami salvia farm-to-table schlitz try-hard food truck knausgaard pabst. Yuccie portland jean shorts, authentic mixtape waistcoat gentrify blue bottle. Fixie kickstarter church-key small batch seitan, shabby chic vegan listicle before they sold out. Hammock raw denim flannel tousled seitan you probably haven't heard of them. Trust fund man bun pug, kickstarter artisan selvage letterpress cornhole tote bag butcher locavore. Affogato try-hard kickstarter seitan, DIY pickled hella godard pork belly four loko ugh.</p>\\n                    </mat-tab>\\n                    <mat-tab>\\n                        <ng-template mat-tab-label>Two</ng-template>\\n                        <h3 class=\\\"mat-title\\\">Second tab content</h3>\\n                        <p>Hashtag distillery skateboard man bun gochujang, salvia man braid art party meggings heirloom kitsch farm-to-table. Franzen beard fingerstache gentrify, heirloom portland ennui XOXO microdosing kitsch plaid. Chicharrones bushwick chia, banh mi irony tattooed hammock butcher shabby chic taxidermy semiotics marfa post-ironic. Blue bottle keffiyeh farm-to-table ennui, chambray pitchfork art party pinterest artisan pop-up. Etsy banjo marfa, blue bottle kombucha crucifix XOXO tousled beard. Tilde disrupt kale chips bicycle rights skateboard master cleanse hella shoreditch, meditation retro shabby chic vice heirloom. Etsy listicle vice actually, iPhone chia hoodie four loko.</p>\\n                    </mat-tab>\\n                </mat-tab-group>\\n            </mat-card-content>\\n            <mat-card-actions fxLayout=\\\"row\\\" fxLayoutAlign=\\\"end center\\\">\\n                <button mat-raised-button color=\\\"fds-primary\\\" class=\\\"text-upper\\\">Action</button>\\n            </mat-card-actions>\\n        </mat-card>\\n    ]]>\\n            </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Select</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <form>\\n                    <div layout=\\\"row\\\" layout-margin>\\n                        <mat-select color=\\\"accent\\\" floatPlaceholder=\\\"never\\\" placeholder=\\\"Favorite food\\\" [(ngModel)]=\\\"selectedValue\\\" name=\\\"food\\\">\\n                            <mat-option *ngFor=\\\"let food of foods\\\" [value]=\\\"food.value\\\">\\n                                {{food.viewValue}}\\n                            </mat-option>\\n                        </mat-select>\\n                    </div>\\n                    <div layout=\\\"row\\\" layout-margin>\\n                        <div flex> Selected food value: {{selectedValue}} </div>\\n                    </div>\\n                </form>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <form>\\n            <div layout=\\\"row\\\" layout-margin>\\n                <mat-select color=\\\"accent\\\" floatPlaceholder=\\\"never\\\" placeholder=\\\"Favorite food\\\" [(ngModel)]=\\\"selectedValue\\\" name=\\\"food\\\">\\n                    <mat-option *ngFor=\\\"let food of foods\\\" [value]=\\\"food.value\\\">\\n                        { {food.viewValue} }\\n                    </mat-option>\\n                </mat-select>\\n            </div>\\n            <div layout=\\\"row\\\" layout-margin>\\n                <div flex> Selected food value: { {selectedValue} } </div>\\n            </div>\\n        </form>\\n        ]]>\\n      </pre>\\n                <p>Javascript:</p>\\n                <pre lang=\\\"javascript\\\">\\n      <![CDATA[\\n        this.selectedValue = '';\\n\\n        this.foods = [\\n                    { value: 'steak-0', viewValue: 'Steak' },\\n                    { value: 'pizza-1', viewValue: 'Pizza' },\\n                    { value: 'tacos-2', viewValue: 'Tacos' },\\n        ];\\n        ]]>\\n      </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Menus (dropdowns)</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <button mat-icon-button [matMenuTriggerFor]=\\\"menu\\\">\\n                    <mat-icon>more_vert</mat-icon>\\n                </button>\\n                <mat-menu #menu=\\\"matMenu\\\">\\n                    <button mat-menu-item> Refresh </button>\\n                    <button mat-menu-item> Settings </button>\\n                    <button mat-menu-item> Help </button>\\n                    <button mat-menu-item disabled> Sign Out </button>\\n                </mat-menu>\\n                <button color=\\\"fds-regular\\\" mat-raised-button [matMenuTriggerFor]=\\\"posXMenu\\\">\\n                    Before<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                </button>\\n                <mat-menu xPosition=\\\"before\\\" #posXMenu=\\\"matMenu\\\">\\n                    <button mat-menu-item> Refresh </button>\\n                    <button mat-menu-item> Settings </button>\\n                    <button mat-menu-item> Help </button>\\n                    <button mat-menu-item disabled> Sign Out </button>\\n                </mat-menu>\\n                <button color=\\\"fds-regular\\\" mat-raised-button [matMenuTriggerFor]=\\\"aboveMenu\\\">\\n                    Above<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                </button>\\n                <mat-menu yPosition=\\\"above\\\" #aboveMenu=\\\"matMenu\\\">\\n                    <button mat-menu-item> Refresh </button>\\n                    <button mat-menu-item> Settings </button>\\n                    <button mat-menu-item> Help </button>\\n                    <button mat-menu-item disabled> Sign Out </button>\\n                </mat-menu>\\n                <button color=\\\"fds-regular\\\" mat-raised-button [matMenuTriggerFor]=\\\"iconsMenu\\\">\\n                    Icons in Menu<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                </button>\\n                <mat-menu #iconsMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                    <button mat-menu-item>\\n                        <mat-icon>dialpad</mat-icon>\\n                        <span>Redial</span>\\n                    </button>\\n                    <button mat-menu-item disabled>\\n                        <mat-icon>voicemail</mat-icon>\\n                        <span>Check voicemail</span>\\n                    </button>\\n                    <button mat-menu-item>\\n                        <mat-icon>notifications_off</mat-icon>\\n                        <span>Disable alerts</span>\\n                    </button>\\n                </mat-menu>\\n                <button color=\\\"fds-primary\\\" [matMenuTriggerFor]=\\\"primaryButtonDropdownMenu\\\" mat-raised-button>\\n                    FDS Primary<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n                </button>\\n                <mat-menu class=\\\"fds-primary-dropdown-button-menu\\\" #primaryButtonDropdownMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n                    <button mat-menu-item>\\n                        <span>Option 1</span>\\n                    </button>\\n                    <button mat-menu-item disabled>\\n                        <span>Option 2</span>\\n                    </button>\\n                </mat-menu>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <button mat-icon-button [matMenuTriggerFor]=\\\"menu\\\">\\n            <mat-icon>more_vert</mat-icon>\\n        </button>\\n        <mat-menu #menu=\\\"matMenu\\\">\\n            <button mat-menu-item> Refresh </button>\\n            <button mat-menu-item> Settings </button>\\n            <button mat-menu-item> Help </button>\\n            <button mat-menu-item disabled> Sign Out </button>\\n        </mat-menu>\\n        <button color=\\\"fds-regular\\\" mat-raised-button [matMenuTriggerFor]=\\\"posXMenu\\\">\\n            Before<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n        </button>\\n        <mat-menu xPosition=\\\"before\\\" #posXMenu=\\\"matMenu\\\">\\n            <button mat-menu-item> Refresh </button>\\n            <button mat-menu-item> Settings </button>\\n            <button mat-menu-item> Help </button>\\n            <button mat-menu-item disabled> Sign Out </button>\\n        </mat-menu>\\n        <button color=\\\"fds-regular\\\" mat-raised-button [matMenuTriggerFor]=\\\"aboveMenu\\\">\\n            Above<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n        </button>\\n        <mat-menu yPosition=\\\"above\\\" #aboveMenu=\\\"matMenu\\\">\\n            <button mat-menu-item> Refresh </button>\\n            <button mat-menu-item> Settings </button>\\n            <button mat-menu-item> Help </button>\\n            <button mat-menu-item disabled> Sign Out </button>\\n        </mat-menu>\\n        <button color=\\\"fds-regular\\\" mat-raised-button [matMenuTriggerFor]=\\\"iconsMenu\\\">\\n            Icons in Menu<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n        </button>\\n        <mat-menu #iconsMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n            <button mat-menu-item>\\n                <mat-icon>dialpad</mat-icon>\\n                <span>Redial</span>\\n            </button>\\n            <button mat-menu-item disabled>\\n                <mat-icon>voicemail</mat-icon>\\n                <span>Check voicemail</span>\\n            </button>\\n            <button mat-menu-item>\\n                <mat-icon>notifications_off</mat-icon>\\n                <span>Disable alerts</span>\\n            </button>\\n        </mat-menu>\\n        <button color=\\\"fds-primary\\\" [matMenuTriggerFor]=\\\"primaryButtonDropdownMenu\\\" mat-raised-button>\\n            FDS Primary<i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\"></i>\\n        </button>\\n        <mat-menu class=\\\"fds-primary-dropdown-button-menu\\\" #primaryButtonDropdownMenu=\\\"matMenu\\\" [overlapTrigger]=\\\"false\\\">\\n            <button mat-menu-item>\\n                <span>Option 1</span>\\n            </button>\\n            <button mat-menu-item disabled>\\n                <span>Option 2</span>\\n            </button>\\n        </mat-menu>\\n        ]]>\\n      </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Dialog</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"openDialog()\\\">Show simple dialog</button>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"openDialog()\\\">Show simple dialog</button>\\n      ]]>\\n    </pre>\\n                <p>Javascript:</p>\\n                <pre lang=\\\"javascript\\\">\\n      <![CDATA[\\n        var ngCore = require('@angular/core');\\n        function DialogComponent() {};\\n\\n        DialogComponent.prototype = {\\n            constructor: DialogComponent\\n        };\\n\\n        DialogComponent.annotations = [\\n            new ngCore.Component({\\n                template: 'Hello Dialog'\\n        })];\\n\\n        ...\\n\\n        constructor(MatDialog) {\\n            this.dialog = MatDialog;\\n        }\\n\\n        ...\\n\\n        openDialog: function() {\\n            this.dialog.open(DialogComponent, {\\n                            height: '50%', // can be px or %\\n                                    width: '60%', // can be px or %\\n                            });\\n                            }\\n\\n                    ...\\n\\n        ]]>\\n      </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Simple Dialogs</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <div class=\\\"pad-left-sm\\\">\\n                    <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"openConfirm()\\\" class=\\\"text-upper\\\">Open Confirm</button>\\n                </div>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <button mat-button color=\\\"primary\\\" (click)=\\\"openConfirm()\\\" class=\\\"text-upper\\\">Open Confirm</button>\\n        ]]>\\n      </pre>\\n                <p>Javascript:</p>\\n                <pre lang=\\\"javascript\\\">\\n      <![CDATA[\\n        ...\\n\\n        constructor(TdDialogService) {\\n                    this.dialogService = TdDialogService\\n        }\\n\\n        ...\\n\\n        openConfirm: function() {\\n                    this.dialogService.openConfirm({\\n                title: 'Confirm',\\n                message: 'This is how simple it is to create a confirm with this wrapper service. Do you agree?',\\n                cancelButton: 'Disagree',\\n                acceptButton: 'Agree',\\n            });\\n        },\\n\\n        ...\\n        ]]>\\n      </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Snack Bars</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"showSuccessSnackBar()\\\">Success Snack Bar</button>\\n                <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"showWarnSnackBar()\\\">Warning Snack Bar</button>\\n                <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"showErrorSnackBar()\\\">Error Snack Bar</button>\\n                <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"showRegularSnackBar()\\\">Regular Snack Bar</button>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n                <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"showSuccessSnackBar()\\\">Success Snack Bar</button>\\n                <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"showWarnSnackBar()\\\">Warning Snack Bar</button>\\n                <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"showErrorSnackBar()\\\">Error Snack Bar</button>\\n                <button mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"showRegularSnackBar()\\\">Regular Snack Bar</button>\\n      ]]>\\n    </pre>\\n                <p>Javascript:</p>\\n                <pre lang=\\\"javascript\\\">\\n      <![CDATA[\\n        ...\\n\\n        constructor(FdsSnackBarService) {\\n                    this.snackBarService = FdsSnackBarService;\\n        },\\n\\n        ...\\n\\n        /** Possible values for horizontalPosition on MatSnackBarConfig are 'start' | 'center' | 'end' | 'left' | 'right'. */\\n        /** Possible values for verticalPosition on MatSnackBarConfig are 'top' | 'bottom'. */\\n        /** Possible values for icon on MatSnackBarConfig are any available icons loaded on the page. */\\n\\n        showSuccessSnackBar: function () {\\n                    var snackBarRef = this.snackBarService.openCoaster({\\n                title: 'Success',\\n                message: 'Some help text regarding the successful event.',\\n                verticalPosition: 'top',\\n                horizontalPosition: 'right',\\n                icon: 'fa fa-check-circle-o',\\n                color: '#1EB475',\\n                duration: 3000\\n            });\\n        },\\n\\n        showWarnSnackBar: function () {\\n                    var snackBarRef = this.snackBarService.openCoaster({\\n                title: 'Warning',\\n                message: 'Some help text regarding the warning.',\\n                verticalPosition: 'top',\\n                horizontalPosition: 'left',\\n                icon: 'fa fa-exclamation-triangle',\\n                color: '#E98A40',\\n                duration: 3000\\n            });\\n        },\\n\\n        showErrorSnackBar: function () {\\n                    var snackBarRef = this.snackBarService.openCoaster({\\n                title: 'Error',\\n                message: 'Some help text regarding the critical error. This coaster will stay open until closed with the `x` or if another coaster is created.',\\n                verticalPosition: 'bottom',\\n                horizontalPosition: 'right',\\n                icon: 'fa fa-times-circle-o',\\n                color: '#EF6162'\\n            });\\n        },\\n\\n        showRegularSnackBar: function () {\\n                    var snackBarRef = this.snackBarService.openCoaster({\\n                title: 'Regular',\\n                message: 'Something interesting.',\\n                verticalPosition: 'bottom',\\n                horizontalPosition: 'left',\\n                color: '#808793',\\n                duration: 3000\\n            });\\n        },\\n\\n        ...\\n        ]]>\\n      </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Expansion Panels</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <p>Expand/Collapse Event for Expansion 1: {{expandCollapseExpansion1Msg}}</p>\\n                <div>\\n                    <button mat-button color=\\\"primary\\\" (click)=\\\"toggleDisabled()\\\" class=\\\"text-upper\\\">Toggle disable</button>\\n                    <button mat-button color=\\\"primary\\\" (click)=\\\"toggleExpansion1()\\\" class=\\\"text-upper\\\">Toggle first</button>\\n                </div>\\n                <div layout-gt-xs=\\\"row\\\" layout-align-gt-xs=\\\"center start\\\">\\n                    <div flex-gt-xs=\\\"90\\\">\\n                        <td-expansion-panel label=\\\"Google\\\" sublabel=\\\"1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA\\\" [expand]=\\\"expansion1\\\" [disabled]=\\\"disabled\\\" (expanded)=\\\"expandExpansion1Event()\\\" (collapsed)=\\\"collapseExpansion1Event()\\\">\\n                            <td-expansion-summary>\\n                                <mat-list>\\n                                    <mat-list-item>\\n                                        <mat-icon mat-list-avatar>pin_drop</mat-icon>\\n                                        <h3 mat-line>Google</h3>\\n                                        <h4 mat-line>Headquarters</h4>\\n                                        <p mat-line>\\n                                            1600 Amphitheatre Pkwy\\n                                            <br/>Mountain View, CA 94043, USA\\n                                        </p>\\n                                    </mat-list-item>\\n                                </mat-list>\\n                            </td-expansion-summary>\\n                            <div class=\\\"mat-padding\\\">\\n                                <form class=\\\"mat-padding\\\" layout=\\\"column\\\">\\n                                    <mat-form-field floatLabel=\\\"always\\\" flex>\\n                                        <input matInput placeholder=\\\"Company (disabled)\\\" disabled value=\\\"Google\\\" />\\n                                    </mat-form-field>\\n                                    <mat-form-field floatLabel=\\\"always\\\" flex>\\n                                        <textarea matInput placeholder=\\\"Description\\\" rows=\\\"4\\\"></textarea>\\n                                    </mat-form-field>\\n                                </form>\\n                                <div layout=\\\"row\\\" layout-margin layout-align=\\\"end center\\\">\\n                                    <button mat-button class=\\\"text-upper\\\">Cancel</button>\\n                                    <button mat-button color=\\\"accent\\\" class=\\\"text-upper\\\">Save</button>\\n                                </div>\\n                            </div>\\n                        </td-expansion-panel>\\n                    </div>\\n                </div>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <td-expansion-panel label=\\\"Google\\\" sublabel=\\\"1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA\\\" [expand]=\\\"expansion1\\\" [disabled]=\\\"disabled\\\" (expanded)=\\\"expandExpansion1Event()\\\" (collapsed)=\\\"collapseExpansion1Event()\\\">\\n            <td-expansion-summary>\\n                <mat-list>\\n                    <mat-list-item>\\n                        <mat-icon mat-list-avatar>pin_drop</mat-icon>\\n                        <h3 mat-line>Google</h3>\\n                        <h4 mat-line>Headquarters</h4>\\n                        <p mat-line>\\n                            1600 Amphitheatre Pkwy\\n                            <br/>Mountain View, CA 94043, USA\\n                        </p>\\n                    </mat-list-item>\\n                </mat-list>\\n            </td-expansion-summary>\\n            <div class=\\\"mat-padding\\\">\\n                <form class=\\\"mat-padding\\\" layout=\\\"column\\\">\\n                    <mat-form-field floatLabel=\\\"always\\\" flex>\\n                        <input matInput placeholder=\\\"Company (disabled)\\\" disabled value=\\\"Google\\\" />\\n                    </mat-form-field>\\n                    <mat-form-field floatLabel=\\\"always\\\" flex>\\n                        <textarea matInput placeholder=\\\"Description\\\" rows=\\\"4\\\"></textarea>\\n                    </mat-form-field>\\n                </form>\\n                <mat-divider></mat-divider>\\n                <div layout=\\\"row\\\" layout-margin layout-align=\\\"end center\\\">\\n                    <button mat-button class=\\\"text-upper\\\">Cancel</button>\\n                    <button mat-button color=\\\"accent\\\" class=\\\"text-upper\\\">Save</button>\\n                </div>\\n            </div>\\n        </td-expansion-panel>\\n        ]]>\\n      </pre>\\n                <p>Javascript:</p>\\n                <pre lang=\\\"javascript\\\">\\n          <![CDATA[\\n        this.expandCollapseExpansion1Msg = 'No expanded/collapsed detected yet';\\n        this.expansion1 = false;\\n        this.disabled = false;\\n\\n        ...\\n\\n        toggleExpansion1: function() {\\n                    if (!this.disabled) {\\n                this.expansion1 = !this.expansion1;\\n            }\\n        },\\n\\n        toggleDisabled: function() {\\n                    this.disabled = !this.disabled;\\n        },\\n\\n        expandExpansion1Event: function() {\\n                    this.expandCollapseExpansion1Msg = 'Expand event emitted.';\\n        },\\n\\n        collapseExpansion1Event: function() {\\n                    this.expandCollapseExpansion1Msg = 'Collapse event emitted.';\\n        },\\n\\n        ...\\n            ]]>\\n          </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Progress</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content layout=\\\"row\\\">\\n                <div flex=\\\"48\\\" class=\\\"pad-right\\\">\\n                    <h3 class=\\\"mat-title\\\">Progress Bars</h3>\\n                    <h4>Determinate</h4>\\n                    <mat-progress-bar mode=\\\"determinate\\\" value=\\\"40\\\"></mat-progress-bar>\\n                    <h4>Indeterminate</h4>\\n                    <mat-progress-bar mode=\\\"indeterminate\\\"></mat-progress-bar>\\n                    <h4>Buffer</h4>\\n                    <mat-progress-bar mode=\\\"buffer\\\" value=\\\"15\\\" bufferValue=\\\"15\\\"></mat-progress-bar>\\n                    <h4>Query</h4>\\n                    <mat-progress-bar mode=\\\"query\\\"></mat-progress-bar>\\n                    <h4>Colors</h4>\\n                    <mat-progress-bar mode=\\\"indeterminate\\\" color=\\\"primary\\\"></mat-progress-bar>\\n                    <mat-progress-bar mode=\\\"indeterminate\\\" color=\\\"accent\\\"></mat-progress-bar>\\n                    <mat-progress-bar mode=\\\"indeterminate\\\" color=\\\"warn\\\"></mat-progress-bar>\\n                    <h3 class=\\\"mat-title\\\">Usage</h3>\\n                    <p>HTML:</p>\\n                    <pre lang=\\\"html\\\">\\n      <![CDATA[\\n                        <!-- Determinate-->\\n        <mat-progress-bar mode=\\\"determinate\\\" value=\\\"40\\\"></mat-progress-bar>\\n\\n                        <!-- Indeterminate-->\\n        <mat-progress-bar mode=\\\"indeterminate\\\"></mat-progress-bar>\\n\\n                        <!-- Buffer-->\\n        <mat-progress-bar mode=\\\"buffer\\\" value=\\\"15\\\" bufferValue=\\\"15\\\"></mat-progress-bar>\\n\\n                        <!-- Query-->\\n        <mat-progress-bar mode=\\\"query\\\"></mat-progress-bar>\\n\\n                        <!-- Colors-->\\n        <mat-progress-bar mode=\\\"indeterminate\\\" color=\\\"primary\\\"></mat-progress-bar>\\n\\n        <mat-progress-bar mode=\\\"indeterminate\\\" color=\\\"accent\\\"></mat-progress-bar>\\n\\n        <mat-progress-bar mode=\\\"indeterminate\\\" color=\\\"warn\\\"></mat-progress-bar>\\n      ]]>\\n      </pre>\\n                </div>\\n                <div flex=\\\"48\\\">\\n                    <!-- Progress circles-->\\n                    <h3 class=\\\"mat-title\\\">Progress Spinner</h3>\\n                    <div layout=\\\"row\\\">\\n                        <div>\\n                            <h4>Determinate</h4>\\n                            <mat-progress-spinner mode=\\\"determinate\\\" value=\\\"66\\\"></mat-progress-spinner>\\n                        </div>\\n                        <div>\\n                            <h4>indeterminate</h4>\\n                            <mat-progress-spinner mode=\\\"indeterminate\\\"></mat-progress-spinner>\\n                        </div>\\n                        <div>\\n                            <h4>Spinner</h4>\\n                            <mat-spinner></mat-spinner>\\n                        </div>\\n                    </div>\\n                    <div>\\n                        <h4>Colors</h4>\\n                        <div layout=\\\"row\\\">\\n                            <mat-progress-spinner mode=\\\"indeterminate\\\" color=\\\"primary\\\"></mat-progress-spinner>\\n                            <mat-progress-spinner mode=\\\"indeterminate\\\" color=\\\"accent\\\"></mat-progress-spinner>\\n                            <mat-progress-spinner mode=\\\"indeterminate\\\" color=\\\"warn\\\"></mat-progress-spinner>\\n                        </div>\\n                    </div>\\n                    <h3 class=\\\"mat-title\\\">Usage</h3>\\n                    <p>HTML:</p>\\n                    <pre lang=\\\"html\\\">\\n      <![CDATA[\\n                        <!-- Determinate -->\\n        <mat-progress-spinner mode=\\\"determinate\\\" value=\\\"66\\\"></mat-progress-spinner>\\n                        <!-- Indeterminate -->\\n        <mat-progress-spinner mode=\\\"indeterminate\\\"></mat-progress-spinner>\\n                        <!-- Spinner -->\\n        <mat-spinner></mat-spinner>\\n                        <!-- Colors -->\\n        <mat-progress-spinner mode=\\\"indeterminate\\\" color=\\\"primary\\\"></mat-progress-spinner>\\n        <mat-progress-spinner mode=\\\"indeterminate\\\" color=\\\"accent\\\"></mat-progress-spinner>\\n        <mat-progress-spinner mode=\\\"indeterminate\\\" color=\\\"warn\\\"></mat-progress-spinner>\\n      ]]>\\n      </pre>\\n                </div>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Side Nav</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <p>The side nav can be opened at the `start` or `end` of a container and can be displayed in `over`, `side`, or `push` mode. You can also define its width.</p>\\n                <button matTooltip=\\\"Open side nav\\\" mat-raised-button color=\\\"fds-primary\\\" (click)=\\\"sidenav.toggle()\\\">\\n                    Open\\n                </button>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n        <![CDATA[\\n                    <!-- Basic Usage -->\\n        <mat-sidenav #sidenav mode=\\\"over\\\" align=\\\"end\\\" opened=\\\"false\\\">\\n            ...\\n        </mat-sidenav>\\n        ]]>\\n        </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Slide Toggle</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <h3 class=\\\"mat-title\\\">Basic Usage</h3>\\n                <mat-divider></mat-divider>\\n                <mat-list>\\n                    <mat-list-item *ngFor=\\\"let system of systems\\\">\\n                        <mat-slide-toggle [color]=\\\"system.color\\\" [(ngModel)]=\\\"system.on\\\">\\n                            {{system.name}}\\n                        </mat-slide-toggle>\\n                    </mat-list-item>\\n                </mat-list>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n        <![CDATA[\\n                    <!-- Basic Usage -->\\n        <mat-list>\\n            <mat-list-item *ngFor=\\\"let system of systems\\\">\\n              <mat-slide-toggle [color]=\\\"system.color\\\" [(ngModel)]=\\\"system.on\\\">\\n                { {system.name} }\\n              </mat-slide-toggle>\\n            </mat-list-item>\\n        </mat-list>\\n        ]]>\\n        </pre>\\n                <p>Javascript:</p>\\n                <pre lang=\\\"javascript\\\">\\n          <![CDATA[\\n        this.systems = [{\\n                    name: 'Lights',\\n                    on: false,\\n                    color: 'primary',\\n        }, {\\n                    name: 'Surround Sound',\\n                    on: true,\\n                    color: 'accent',\\n        }, {\\n                    name: 'T.V.',\\n                    on: true,\\n                    color: 'warn',\\n        }, ];\\n            ]]>\\n          </pre>\\n                <h3 class=\\\"mat-title\\\">Usage within Forms</h3>\\n                <form>\\n                    <mat-list>\\n                        <mat-list-item>\\n                            <mat-slide-toggle color=\\\"accent\\\" [(ngModel)]=\\\"house.lockHouse\\\" name=\\\"lockHouse\\\">\\n                                Lock?\\n                            </mat-slide-toggle>\\n                            <mat-icon *ngIf=\\\"house.lockHouse\\\" class=\\\"pad-right-sm\\\">lock</mat-icon>\\n                        </mat-list-item>\\n                        <mat-list-item>\\n                            <mat-slide-toggle disabled>\\n                                I am disabled.\\n                            </mat-slide-toggle>\\n                        </mat-list-item>\\n                    </mat-list>\\n                </form>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n        <![CDATA[\\n                    <!-- Usage within Forms -->\\n        <form>\\n            <mat-list>\\n                <mat-list-item>\\n                    <mat-slide-toggle color=\\\"accent\\\" [(ngModel)]=\\\"house.lockHouse\\\" name=\\\"lockHouse\\\">\\n                        Lock?\\n                    </mat-slide-toggle>\\n                    <mat-icon *ngIf=\\\"house.lockHouse\\\" class=\\\"pad-right-sm\\\">lock</mat-icon>\\n                </mat-list-item>\\n                <mat-list-item>\\n                    <mat-slide-toggle disabled>\\n                    I am disabled.\\n                </mat-slide-toggle>\\n                </mat-list-item>\\n            </mat-list>\\n        </form>\\n        ]]>\\n        </pre>\\n                <p>Javascript:</p>\\n                <pre lang=\\\"javascript\\\">\\n          <![CDATA[\\n        this.house = {\\n                    lockHouse: false,\\n        };\\n            ]]>\\n          </pre>\\n            </mat-card-content>\\n        </mat-card>\\n        <mat-card>\\n            <mat-card-title class=\\\"pad-bottom-sm\\\">Slider</mat-card-title>\\n            <mat-divider></mat-divider>\\n            <mat-card-content>\\n                <h3 class=\\\"mat-title\\\">Horizontal Slider</h3>\\n                <mat-slider min=\\\"1\\\" max=\\\"5\\\" thumbLabel tickInterval=\\\"1\\\" value=\\\"2\\\" color=\\\"primary\\\"></mat-slider>\\n                <mat-slider step=\\\"5\\\" thumbLabel tickInterval=\\\"5\\\" value=\\\"20\\\" color=\\\"accent\\\"></mat-slider>\\n                <mat-slider thumbLabel tick-interval=\\\"auto\\\" value=\\\"2\\\" color=\\\"warn\\\"></mat-slider>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <mat-slider min=\\\"1\\\" max=\\\"5\\\" thumbLabel tickInterval=\\\"1\\\" value=\\\"2\\\" color=\\\"primary\\\"></mat-slider>\\n        <mat-slider step=\\\"5\\\" thumbLabel tickInterval=\\\"5\\\" value=\\\"20\\\" color=\\\"accent\\\"></mat-slider>\\n        <mat-slider thumbLabel tick-interval=\\\"auto\\\" value=\\\"2\\\" color=\\\"warn\\\"></mat-slider>\\n        ]]>\\n      </pre>\\n                <h3 class=\\\"mat-title\\\">Vertical Slider</h3>\\n                <mat-slider vertical min=\\\"1\\\" max=\\\"100\\\" thumbLabel tickInterval=\\\"10\\\" value=\\\"2\\\"></mat-slider>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <mat-slider vertical min=\\\"1\\\" max=\\\"100\\\" thumbLabel tickInterval=\\\"10\\\" value=\\\"2\\\"></mat-slider>\\n        ]]>\\n      </pre>\\n                <h3 class=\\\"mat-title\\\">Inverted Slider</h3>\\n                <mat-slider invert min=\\\"1\\\" max=\\\"100\\\" thumbLabel tickInterval=\\\"10\\\" value=\\\"2\\\"></mat-slider>\\n                <h3 class=\\\"mat-title\\\">Usage</h3>\\n                <p>HTML:</p>\\n                <pre lang=\\\"html\\\">\\n      <![CDATA[\\n        <mat-slider invert min=\\\"1\\\" max=\\\"100\\\" thumbLabel tickInterval=\\\"10\\\" value=\\\"2\\\"></mat-slider>\\n        ]]>\\n      </pre>\\n            </mat-card-content>\\n        </mat-card>\\n    </div>\\n</mat-sidenav-container>\\n\";"]}
\ No newline at end of file
diff --git a/.cache-loader/1bb6305843bb1f07e0f95116edd7d657.json b/.cache-loader/1bb6305843bb1f07e0f95116edd7d657.json
new file mode 100644
index 0000000..6c11811
--- /dev/null
+++ b/.cache-loader/1bb6305843bb1f07e0f95116edd7d657.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/index.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/index.js","mtime":1562689731044},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FdsDialogsModule, FdsConfirmDialogComponent, FdsDialogActionsDirective, FdsDialogComponent, FdsDialogContentDirective, FdsDialogService, FdsDialogTitleDirective, IConfirmConfig } from './dialogs/fds-dialogs.module';\nimport { FdsCommonsModule, FdsStorageService } from './common/fds-common.module';\nimport FdsAnimations from './common/fds.animations';\nimport { FdsCoasterComponent, FdsSnackBarActionsDirective, FdsSnackBarComponent, FdsSnackBarContentDirective, FdsSnackBarService, FdsSnackBarsModule, FdsSnackBarTitleDirective, ICoasterConfig } from './snackbars/fds-snackbars.module';\nimport FlowDesignSystemModule from './flow-design-system.module';\nexport { FdsDialogsModule, FdsConfirmDialogComponent, FdsDialogActionsDirective, FdsDialogComponent, FdsDialogContentDirective, FdsDialogService, FdsDialogTitleDirective, IConfirmConfig, FdsCommonsModule, FdsStorageService, FdsAnimations, FdsCoasterComponent, FdsSnackBarActionsDirective, FdsSnackBarComponent, FdsSnackBarContentDirective, FdsSnackBarService, FdsSnackBarsModule, FdsSnackBarTitleDirective, ICoasterConfig, FlowDesignSystemModule as FdsCoreModule };"]}
\ No newline at end of file
diff --git a/.cache-loader/203f3dc20bb6edc9c9e017c4592a8b19.json b/.cache-loader/203f3dc20bb6edc9c9e017c4592a8b19.json
new file mode 100644
index 0000000..5e3ac75
--- /dev/null
+++ b/.cache-loader/203f3dc20bb6edc9c9e017c4592a8b19.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/webapp/services/fds.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/services/fds.service.js","mtime":1562689731054},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the 'License'); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TdDataTableService } from '@covalent/core/bundles/covalent-core.umd.min.js';\nimport { FdsDialogService, FdsSnackBarService } from '@nifi-fds/core';\nimport { version } from '../../package.json';\n/**\n * FdsService constructor.\n *\n * @param tdDataTableService    The covalent data table service module.\n * @param fdsDialogService      The FDS dialog service.\n * @param fdsSnackBarService    The FDS snack bar service module.\n * @constructor\n */\n\nfunction FdsService(tdDataTableService, fdsDialogService, fdsSnackBarService) {\n  // Services\n  this.dialogService = fdsDialogService;\n  this.snackBarService = fdsSnackBarService;\n  this.dataTableService = tdDataTableService; // General\n\n  this.title = 'Apache NiFi Flow Design System Demo v' + version;\n  this.inProgress = true;\n  this.perspective = '';\n}\n\nFdsService.prototype = {\n  constructor: FdsService\n};\nFdsService.parameters = [TdDataTableService, FdsDialogService, FdsSnackBarService];\nexport default FdsService;"]}
\ No newline at end of file
diff --git a/.cache-loader/22026470421ebb0ad385756c4cd8ade4.json b/.cache-loader/22026470421ebb0ad385756c4cd8ade4.json
new file mode 100644
index 0000000..baea8b9
--- /dev/null
+++ b/.cache-loader/22026470421ebb0ad385756c4cd8ade4.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js","mtime":1562689731045},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Directive, ContentChildren } from '@angular/core';\nexport function FdsSnackBarTitleDirective() {}\nFdsSnackBarTitleDirective.prototype = {\n  contstructor: FdsSnackBarTitleDirective\n};\nFdsSnackBarTitleDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-snackbar-title'\n  }]\n}];\nexport function FdsSnackBarContentDirective() {}\nFdsSnackBarContentDirective.prototype = {\n  contstructor: FdsSnackBarContentDirective\n};\nFdsSnackBarContentDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-snackbar-content'\n  }]\n}];\nexport function FdsSnackBarActionsDirective() {}\nFdsSnackBarActionsDirective.prototype = {\n  contstructor: FdsSnackBarActionsDirective\n};\nFdsSnackBarActionsDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-snackbar-actions'\n  }]\n}];\n/**\n * FdsSnackBarComponent constructor\n *\n * @constructor\n */\n\nfunction FdsSnackBarComponent() {\n  this.snackBarTitle = '';\n  this.snackBarContent = '';\n  this.snackBarActions = '';\n}\n\nFdsSnackBarComponent.prototype = {\n  constructor: FdsSnackBarComponent,\n\n  /**\n   * Respond after Angular projects external content into the component's view.\n   */\n  ngAfterContentInit: function ngAfterContentInit() {\n    if (this.snackBarTitle.length > 1) {\n      throw new Error('Duplicate fds-snackbar-title component at in fds-snackbar.');\n    }\n\n    if (this.snackBarContent.length > 1) {\n      throw new Error('Duplicate fds-snackbar-content component at in fds-snackbar.');\n    }\n\n    if (this.snackBarActions.length > 1) {\n      throw new Error('Duplicate fds-snackbar-actions component at in fds-snackbar.');\n    }\n  }\n};\nFdsSnackBarComponent.annotations = [new Component({\n  selector: 'fds-snackbar',\n  template: require('./fds-snackbar.component.html'),\n  queries: {\n    snackBarTitle: new ContentChildren(FdsSnackBarTitleDirective),\n    snackBarContent: new ContentChildren(FdsSnackBarContentDirective),\n    snackBarActions: new ContentChildren(FdsSnackBarActionsDirective)\n  }\n})];\nFdsSnackBarComponent.parameters = [];\nexport { FdsSnackBarComponent };"]}
\ No newline at end of file
diff --git a/.cache-loader/270a00349c066def68aa6d3d73410ab4.json b/.cache-loader/270a00349c066def68aa6d3d73410ab4.json
new file mode 100644
index 0000000..ddab1c5
--- /dev/null
+++ b/.cache-loader/270a00349c066def68aa6d3d73410ab4.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js","mtime":1562689731046},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { MatSnackBarConfig, MatSnackBar } from '@angular/material';\nimport $ from 'jquery';\nimport { FdsCoasterComponent } from '../coaster/coaster.component';\nexport function ISnackBarConfig() {\n  this.title = '';\n  this.message = '';\n  this.snackBarRef = undefined;\n  this.viewContainerRef = undefined;\n}\nISnackBarConfig.prototype = {\n  contstructor: ISnackBarConfig\n};\n$.extend(ISnackBarConfig, MatSnackBarConfig);\nexport function ICoasterConfig() {\n  this.icon = '';\n  this.color = '';\n}\nICoasterConfig.prototype = {\n  contstructor: ICoasterConfig\n};\n$.extend(ICoasterConfig, ISnackBarConfig);\n/**\n * FdsSnackBarService constructor.\n *\n * @param MatSnackBar      The angular material MatSnackBar.\n * @constructor\n */\n\nexport function FdsSnackBarService(MatSnackBar) {\n  this.snackBarService = MatSnackBar;\n}\nFdsSnackBarService.prototype = {\n  contstructor: FdsSnackBarService,\n\n  /**\n   * Wrapper function over the open() method in MatSnackBar.\n   *\n   * @param message               The message to show in the snackbar.\n   * @param action                The label for the snackbar action.\n   * @param config                Additional configuration options for the snackbar.\n   *\n   * @returns {MatSnackBarRef}    The reference to the snackbar.\n   */\n  open: function open(message, action, config) {\n    return this.snackBarService.open(message, action, config);\n  },\n\n  /**\n   * Wrapper function over the openFromComponent() method in MatSnackBar.\n   * Opens a snackbar containing the given component.\n   *\n   * @param component     The angular ComponentType<T>.\n   * @param config        The angular material MatSnackBarConfig.\n   *\n   * @returns {MatSnackBarRef}    The reference to the snackbar.\n   */\n  openFromComponent: function openFromComponent(component, config) {\n    return this.snackBarService.openFromComponent(component, config);\n  },\n\n  /**\n   * Wrapper function over the dismiss() method in MatSnackBar.\n   * Dismisses the currently-open snackbar.\n   */\n  dismiss: function dismiss() {\n    this.snackBarService.dismiss();\n  },\n\n  /**\n   * Opens a coaster snackbar with the provided config.\n   *\n   * @param config     ICoasterConfig {\n   *                                      message?: string;\n   *                                      title?: string;\n   *                                      snackBarRef?: MatSnackBarRef;\n   *                                      viewContainerRef?: ViewContainerRef;\n   *                                      icon?: string;\n   *                                      color?: string;\n   *                                   }\n   *\n   * @returns {MatSnackBarRef}    The reference to the snackbar.\n   */\n  openCoaster: function openCoaster(config) {\n    var snackBarConfig = new ICoasterConfig();\n    snackBarConfig.verticalPosition = config.verticalPosition;\n    snackBarConfig.horizontalPosition = config.horizontalPosition;\n    snackBarConfig.duration = config.duration;\n    var snackBarRef = this.snackBarService.openFromComponent(FdsCoasterComponent, snackBarConfig);\n    var coasterComponent = snackBarRef.instance;\n    coasterComponent.snackBarRef = snackBarRef;\n\n    if (config.title) {\n      coasterComponent.title = config.title;\n    }\n\n    if (config.message) {\n      coasterComponent.message = config.message;\n    }\n\n    if (config.icon) {\n      coasterComponent.icon = config.icon;\n    }\n\n    if (config.color) {\n      coasterComponent.color = config.color;\n    }\n\n    return snackBarRef;\n  }\n};\nFdsSnackBarService.parameters = [MatSnackBar];"]}
\ No newline at end of file
diff --git a/.cache-loader/3a28edf88b3c9c5c5a0de14c3feb10e5.json b/.cache-loader/3a28edf88b3c9c5c5a0de14c3feb10e5.json
new file mode 100644
index 0000000..9b1955f
--- /dev/null
+++ b/.cache-loader/3a28edf88b3c9c5c5a0de14c3feb10e5.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.js","mtime":1562689731044},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component } from '@angular/core';\nimport $ from 'jquery';\n/**\n * FdsCoasterComponent constructor.\n *\n * @constructor\n */\n\nfunction FdsCoasterComponent() {\n  this.title = '';\n  this.message = '';\n  this.icon = '';\n  this.color = '';\n  this.snackBarRef = undefined;\n  this.viewContainerRef = undefined;\n}\n\nFdsCoasterComponent.prototype = {\n  constructor: FdsCoasterComponent,\n\n  /**\n   * Initialize the component.\n   */\n  ngAfterViewChecked: function ngAfterViewChecked() {\n    $('.fds-snackbar-wrapper').css('border-color', this.color);\n    $('.fds-snackbar-title').css('color', this.color);\n    $('.fds-coaster-icon').css('color', this.color);\n\n    if (this.icon) {\n      $('.fds-snackbar-wrapper').css('padding', '15px 15px 15px 45px');\n    } else {\n      $('.fds-snackbar-wrapper').css('padding', '15px 15px 15px 15px');\n    }\n  },\n\n  /**\n   * Close the snackbar and send a cancel response to any subscribers.\n   */\n  cancel: function cancel() {\n    this.snackBarRef.dismiss(false);\n  }\n};\nFdsCoasterComponent.annotations = [new Component({\n  selector: 'fds-coaster',\n  template: require('./coaster.component.html')})];\nFdsCoasterComponent.parameters = [];\nexport { FdsCoasterComponent };"]}
\ No newline at end of file
diff --git a/.cache-loader/3f4b71c1a0da9ccd39a13ccd0cfe1ad8.json b/.cache-loader/3f4b71c1a0da9ccd39a13ccd0cfe1ad8.json
new file mode 100644
index 0000000..983491f
--- /dev/null
+++ b/.cache-loader/3f4b71c1a0da9ccd39a13ccd0cfe1ad8.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.html","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.html","mtime":1562603705042},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js","mtime":1516207864000}],"contextDependencies":[],"result":["module.exports = \"<!--\\nLicensed to the Apache Software Foundation (ASF) under one or more\\ncontributor license agreements.  See the NOTICE file distributed with\\nthis work for additional information regarding copyright ownership.\\nThe ASF licenses this file to You under the Apache License, Version 2.0\\n(the \\\"License\\\"); you may not use this file except in compliance with\\nthe License.  You may obtain a copy of the License at\\n\\nhttp://www.apache.org/licenses/LICENSE-2.0\\n\\nUnless required by applicable law or agreed to in writing, software\\ndistributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\nSee the License for the specific language governing permissions and\\nlimitations under the License.\\n-->\\n\\n<div class=\\\"fds-snackbar-wrapper\\\">\\n    <div class=\\\"fds-snackbar-title md-title\\\" *ngIf=\\\"snackBarTitle.length > 0\\\">\\n        <ng-content select=\\\"fds-snackbar-title\\\"></ng-content>\\n    </div>\\n    <div class=\\\"fds-snackbar-content\\\" *ngIf=\\\"snackBarContent.length > 0\\\">\\n        <ng-content select=\\\"fds-snackbar-content\\\"></ng-content>\\n    </div>\\n    <div class=\\\"fds-snackbar-actions\\\" *ngIf=\\\"snackBarActions.length > 0\\\" layout=\\\"row\\\">\\n        <span flex></span>\\n        <ng-content select=\\\"fds-snackbar-actions\\\"></ng-content>\\n    </div>\\n</div>\\n\";"]}
\ No newline at end of file
diff --git a/.cache-loader/44f7d913b3804a1133a65ea7f148facf.json b/.cache-loader/44f7d913b3804a1133a65ea7f148facf.json
new file mode 100644
index 0000000..38f1674
--- /dev/null
+++ b/.cache-loader/44f7d913b3804a1133a65ea7f148facf.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/common/fds.animations.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/common/fds.animations.js","mtime":1562689731032},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n/**\n * FdsAnimations constructor.\n *\n * @constructor\n */\n\nfunction FdsAnimations() {}\n\nFdsAnimations.prototype = {\n  constructor: FdsAnimations,\n\n  /**\n   * Fade animation\n   */\n  fadeAnimation: trigger('routeAnimation', [state('*', style({\n    opacity: 1\n  })), transition(':enter', [style({\n    opacity: 0\n  }), animate('0.5s ease-in')]), transition(':leave', [animate('0.5s ease-out', style({\n    opacity: 0\n  }))])]),\n\n  /**\n   * Slide in from the left animation\n   */\n  slideInLeftAnimation: trigger('routeAnimation', [state('*', style({\n    opacity: 1,\n    transform: 'translateX(0)'\n  })), transition(':enter', [style({\n    opacity: 0,\n    transform: 'translateX(-100%)'\n  }), animate('0.5s ease-in')]), transition(':leave', [animate('0.5s ease-out', style({\n    opacity: 0,\n    transform: 'translateX(100%)'\n  }))])]),\n\n  /**\n   * Slide in from the top animation\n   */\n  slideInDownAnimation: trigger('routeAnimation', [state('*', style({\n    opacity: 1,\n    transform: 'translateY(0)'\n  })), transition(':enter', [style({\n    opacity: 0,\n    transform: 'translateY(-100%)'\n  }), animate('0.5s ease-in')]), transition(':leave', [animate('0.5s ease-out', style({\n    opacity: 0,\n    transform: 'translateY(100%)'\n  }))])]),\n\n  /**\n   * Fly in/out animation\n   */\n  flyInOutAnimation: trigger('flyInOut', [state('in', style({\n    transform: 'translateX(0)'\n  })), transition('void => *', [style({\n    transform: 'translateX(100%)'\n  }), animate('0.4s 0.1s ease-in')]), transition('* => void', animate('0.2s ease-out', style({\n    transform: 'translateX(-100%)'\n  })))]),\n\n  /**\n   * Fly in/out animation\n   */\n  fadeInOutAnimation: trigger('fadeInOut', [state('in', style({\n    opacity: 1\n  })), transition('void => *', [style({\n    opacity: 0\n  }), animate('0.5s 0.1s ease-in')]), transition('* => void', animate('0.5s ease-out', style({\n    opacity: 0\n  })))])\n};\nexport default new FdsAnimations();"]}
\ No newline at end of file
diff --git a/.cache-loader/4b0f4387c94eba37033de798fc379e27.json b/.cache-loader/4b0f4387c94eba37033de798fc379e27.json
new file mode 100644
index 0000000..a64a0a0
--- /dev/null
+++ b/.cache-loader/4b0f4387c94eba37033de798fc379e27.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.html","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/coaster/coaster.component.html","mtime":1562603705042},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js","mtime":1516207864000}],"contextDependencies":[],"result":["module.exports = \"<!--\\nLicensed to the Apache Software Foundation (ASF) under one or more\\ncontributor license agreements.  See the NOTICE file distributed with\\nthis work for additional information regarding copyright ownership.\\nThe ASF licenses this file to You under the Apache License, Version 2.0\\n(the \\\"License\\\"); you may not use this file except in compliance with\\nthe License.  You may obtain a copy of the License at\\n\\nhttp://www.apache.org/licenses/LICENSE-2.0\\n\\nUnless required by applicable law or agreed to in writing, software\\ndistributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\nSee the License for the specific language governing permissions and\\nlimitations under the License.\\n-->\\n\\n<fds-snackbar>\\n    <fds-snackbar-title *ngIf=\\\"title\\\">\\n        <button class=\\\"coaster-close-icon\\\" mat-icon-button (click)=\\\"cancel()\\\">\\n            <mat-icon color=\\\"primary\\\">close</mat-icon>\\n        </button>\\n        <i *ngIf=\\\"icon\\\" class=\\\"{{icon}} fds-coaster-icon\\\" aria-hidden=\\\"true\\\"></i>\\n        <div class=\\\"ellipsis\\\" fxLayout=\\\"row\\\" title=\\\"{{title}}\\\" fxLayoutAlign=\\\"space-between center\\\">\\n            {{title}}\\n        </div>\\n    </fds-snackbar-title>\\n    <fds-snackbar-content title=\\\"{{message}}\\\" class=\\\"fds-coaster-message ellipsis tc-grey-700\\\">\\n        {{message}}\\n    </fds-snackbar-content>\\n    <fds-snackbar-actions>\\n    </fds-snackbar-actions>\\n</fds-snackbar>\";"]}
\ No newline at end of file
diff --git a/.cache-loader/4b8706e513aa089573cff1c1c4ff7d93.json b/.cache-loader/4b8706e513aa089573cff1c1c4ff7d93.json
new file mode 100644
index 0000000..18d907d
--- /dev/null
+++ b/.cache-loader/4b8706e513aa089573cff1c1c4ff7d93.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js","mtime":1562689731042},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule, MatIconModule, MatInputModule, MatDialogModule } from '@angular/material';\nimport { FormsModule } from '@angular/forms';\nimport { FdsDialogTitleDirective, FdsDialogContentDirective, FdsDialogActionsDirective, FdsDialogComponent } from './fds-dialog.component';\nimport { IConfirmConfig, FdsDialogService } from './services/dialog.service';\nimport { FdsConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\nvar FDS_DIALOGS = [FdsDialogComponent, FdsDialogTitleDirective, FdsDialogActionsDirective, FdsDialogContentDirective, FdsConfirmDialogComponent];\nvar FDS_DIALOGS_ENTRY_COMPONENTS = [FdsConfirmDialogComponent];\n/**\n * FdsDialogsModule constructor.\n *\n * @constructor\n */\n\nfunction FdsDialogsModule() {}\n\nFdsDialogsModule.prototype = {\n  constructor: FdsDialogsModule\n};\nFdsDialogsModule.annotations = [new NgModule({\n  imports: [FlexLayoutModule, FormsModule, CommonModule, MatDialogModule, MatInputModule, MatButtonModule, MatIconModule],\n  declarations: [FDS_DIALOGS],\n  exports: [FDS_DIALOGS],\n  providers: [FdsDialogService],\n  entryComponents: [FDS_DIALOGS_ENTRY_COMPONENTS]\n})];\nexport { FdsDialogsModule, IConfirmConfig, FdsDialogService, FdsDialogComponent, FdsDialogTitleDirective, FdsDialogContentDirective, FdsDialogActionsDirective, FdsConfirmDialogComponent };"]}
\ No newline at end of file
diff --git a/.cache-loader/6cbfc9fe77a609faae94be4842e61440.json b/.cache-loader/6cbfc9fe77a609faae94be4842e61440.json
new file mode 100644
index 0000000..895720e
--- /dev/null
+++ b/.cache-loader/6cbfc9fe77a609faae94be4842e61440.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js??ref--5-1!/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-3!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js","mtime":1562689731045},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js","mtime":1522257694000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["var cov_297ebhfabs=function(){var path='/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js',hash='9ce28f70bf06c1894c920eeb24d500161414b121',Function=function(){}.constructor,global=new Function('return this')(),gcv='__coverage__',coverageData={path:'/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js',statementMap:{'0':{start:{line:19,column:0},end:{line:21,column:2}},'1':{start:{line:22,column:0},end:{line:27,column:3}},'2':{start:{line:29,column:0},end:{line:31,column:2}},'3':{start:{line:32,column:0},end:{line:37,column:3}},'4':{start:{line:39,column:0},end:{line:41,column:2}},'5':{start:{line:42,column:0},end:{line:47,column:3}},'6':{start:{line:55,column:2},end:{line:55,column:26}},'7':{start:{line:56,column:2},end:{line:56,column:28}},'8':{start:{line:57,column:2},end:{line:57,column:28}},'9':{start:{line:60,column:0},end:{line:79,column:2}},'10':{start:{line:67,column:4},end:{line:69,column:5}},'11':{start:{line:68,column:6},end:{line:68,column:84}},'12':{start:{line:71,column:4},end:{line:73,column:5}},'13':{start:{line:72,column:6},end:{line:72,column:86}},'14':{start:{line:75,column:4},end:{line:77,column:5}},'15':{start:{line:76,column:6},end:{line:76,column:86}},'16':{start:{line:80,column:0},end:{line:88,column:4}},'17':{start:{line:89,column:0},end:{line:89,column:37}}},fnMap:{'0':{name:'FdsSnackBarTitleDirective',decl:{start:{line:18,column:16},end:{line:18,column:41}},loc:{start:{line:18,column:44},end:{line:18,column:46}},line:18},'1':{name:'FdsSnackBarContentDirective',decl:{start:{line:28,column:16},end:{line:28,column:43}},loc:{start:{line:28,column:46},end:{line:28,column:48}},line:28},'2':{name:'FdsSnackBarActionsDirective',decl:{start:{line:38,column:16},end:{line:38,column:43}},loc:{start:{line:38,column:46},end:{line:38,column:48}},line:38},'3':{name:'FdsSnackBarComponent',decl:{start:{line:54,column:9},end:{line:54,column:29}},loc:{start:{line:54,column:32},end:{line:58,column:1}},line:54},'4':{name:'ngAfterContentInit',decl:{start:{line:66,column:31},end:{line:66,column:49}},loc:{start:{line:66,column:52},end:{line:78,column:3}},line:66}},branchMap:{'0':{loc:{start:{line:67,column:4},end:{line:69,column:5}},type:'if',locations:[{start:{line:67,column:4},end:{line:69,column:5}},{start:{line:67,column:4},end:{line:69,column:5}}],line:67},'1':{loc:{start:{line:71,column:4},end:{line:73,column:5}},type:'if',locations:[{start:{line:71,column:4},end:{line:73,column:5}},{start:{line:71,column:4},end:{line:73,column:5}}],line:71},'2':{loc:{start:{line:75,column:4},end:{line:77,column:5}},type:'if',locations:[{start:{line:75,column:4},end:{line:77,column:5}},{start:{line:75,column:4},end:{line:77,column:5}}],line:75}},s:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0,'7':0,'8':0,'9':0,'10':0,'11':0,'12':0,'13':0,'14':0,'15':0,'16':0,'17':0},f:{'0':0,'1':0,'2':0,'3':0,'4':0},b:{'0':[0,0],'1':[0,0],'2':[0,0]},_coverageSchema:'332fd63041d2c1bcb487cc26dd0d5f7d97098a6c'},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();import{Component,Directive,ContentChildren}from'@angular/core';export function FdsSnackBarTitleDirective(){cov_297ebhfabs.f[0]++;}cov_297ebhfabs.s[0]++;FdsSnackBarTitleDirective.prototype={contstructor:FdsSnackBarTitleDirective};cov_297ebhfabs.s[1]++;FdsSnackBarTitleDirective.decorators=[{type:Directive,args:[{selector:'fds-snackbar-title'}]}];export function FdsSnackBarContentDirective(){cov_297ebhfabs.f[1]++;}cov_297ebhfabs.s[2]++;FdsSnackBarContentDirective.prototype={contstructor:FdsSnackBarContentDirective};cov_297ebhfabs.s[3]++;FdsSnackBarContentDirective.decorators=[{type:Directive,args:[{selector:'fds-snackbar-content'}]}];export function FdsSnackBarActionsDirective(){cov_297ebhfabs.f[2]++;}cov_297ebhfabs.s[4]++;FdsSnackBarActionsDirective.prototype={contstructor:FdsSnackBarActionsDirective};cov_297ebhfabs.s[5]++;FdsSnackBarActionsDirective.decorators=[{type:Directive,args:[{selector:'fds-snackbar-actions'}]}];function FdsSnackBarComponent(){cov_297ebhfabs.f[3]++;cov_297ebhfabs.s[6]++;this.snackBarTitle='';cov_297ebhfabs.s[7]++;this.snackBarContent='';cov_297ebhfabs.s[8]++;this.snackBarActions='';}cov_297ebhfabs.s[9]++;FdsSnackBarComponent.prototype={constructor:FdsSnackBarComponent,ngAfterContentInit:function ngAfterContentInit(){cov_297ebhfabs.f[4]++;cov_297ebhfabs.s[10]++;if(this.snackBarTitle.length>1){cov_297ebhfabs.b[0][0]++;cov_297ebhfabs.s[11]++;throw new Error('Duplicate fds-snackbar-title component at in fds-snackbar.');}else{cov_297ebhfabs.b[0][1]++;}cov_297ebhfabs.s[12]++;if(this.snackBarContent.length>1){cov_297ebhfabs.b[1][0]++;cov_297ebhfabs.s[13]++;throw new Error('Duplicate fds-snackbar-content component at in fds-snackbar.');}else{cov_297ebhfabs.b[1][1]++;}cov_297ebhfabs.s[14]++;if(this.snackBarActions.length>1){cov_297ebhfabs.b[2][0]++;cov_297ebhfabs.s[15]++;throw new Error('Duplicate fds-snackbar-actions component at in fds-snackbar.');}else{cov_297ebhfabs.b[2][1]++;}}};cov_297ebhfabs.s[16]++;FdsSnackBarComponent.annotations=[new Component({selector:'fds-snackbar',template:require('./fds-snackbar.component.html'),queries:{snackBarTitle:new ContentChildren(FdsSnackBarTitleDirective),snackBarContent:new ContentChildren(FdsSnackBarContentDirective),snackBarActions:new ContentChildren(FdsSnackBarActionsDirective)}})];cov_297ebhfabs.s[17]++;FdsSnackBarComponent.parameters=[];export{FdsSnackBarComponent};",{"version":3,"sources":["/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbar.component.js"],"names":["Component","Directive","ContentChildren","FdsSnackBarTitleDirective","prototype","contstructor","decorators","type","args","selector","FdsSnackBarContentDirective","FdsSnackBarActionsDirective","FdsSnackBarComponent","snackBarTitle","snackBarContent","snackBarActions","constructor","ngAfterContentInit","length","Error","annotations","template","require","queries","parameters"],"mappings":"kmGAgBA,OAASA,SAAT,CAAoBC,SAApB,CAA+BC,eAA/B,KAAsD,eAAtD,CACA,MAAO,SAASC,0BAAT,EAAqC,uBAAE,C,sBAC9CA,0BAA0BC,SAA1B,CAAsC,CACpCC,aAAcF,yBADsB,CAAtC,C,sBAGAA,0BAA0BG,UAA1B,CAAuC,CAAC,CACtCC,KAAMN,SADgC,CAEtCO,KAAM,CAAC,CACLC,SAAU,oBADL,CAAD,CAFgC,CAAD,CAAvC,CAMA,MAAO,SAASC,4BAAT,EAAuC,uBAAE,C,sBAChDA,4BAA4BN,SAA5B,CAAwC,CACtCC,aAAcK,2BADwB,CAAxC,C,sBAGAA,4BAA4BJ,UAA5B,CAAyC,CAAC,CACxCC,KAAMN,SADkC,CAExCO,KAAM,CAAC,CACLC,SAAU,sBADL,CAAD,CAFkC,CAAD,CAAzC,CAMA,MAAO,SAASE,4BAAT,EAAuC,uBAAE,C,sBAChDA,4BAA4BP,SAA5B,CAAwC,CACtCC,aAAcM,2BADwB,CAAxC,C,sBAGAA,4BAA4BL,UAA5B,CAAyC,CAAC,CACxCC,KAAMN,SADkC,CAExCO,KAAM,CAAC,CACLC,SAAU,sBADL,CAAD,CAFkC,CAAD,CAAzC,CAYA,QAASG,qBAAT,EAAgC,6CAC9B,KAAKC,aAAL,CAAqB,EAArB,CAD8B,sBAE9B,KAAKC,eAAL,CAAuB,EAAvB,CAF8B,sBAG9B,KAAKC,eAAL,CAAuB,EAAvB,CACD,C,sBAEDH,qBAAqBR,SAArB,CAAiC,CAC/BY,YAAaJ,oBADkB,CAM/BK,mBAAoB,QAASA,mBAAT,EAA8B,8CAChD,GAAI,KAAKJ,aAAL,CAAmBK,MAAnB,CAA4B,CAAhC,CAAmC,iDACjC,KAAM,IAAIC,MAAJ,CAAU,4DAAV,CAAN,CACD,CAFD,+BADgD,uBAKhD,GAAI,KAAKL,eAAL,CAAqBI,MAArB,CAA8B,CAAlC,CAAqC,iDACnC,KAAM,IAAIC,MAAJ,CAAU,8DAAV,CAAN,CACD,CAFD,+BALgD,uBAShD,GAAI,KAAKJ,eAAL,CAAqBG,MAArB,CAA8B,CAAlC,CAAqC,iDACnC,KAAM,IAAIC,MAAJ,CAAU,8DAAV,CAAN,CACD,CAFD,+BAGD,CAlB8B,CAAjC,C,uBAoBAP,qBAAqBQ,WAArB,CAAmC,CAAC,GAAIpB,UAAJ,CAAc,CAChDS,SAAU,cADsC,CAEhDY,SAAUC,QAAQ,+BAAR,CAFsC,CAGhDC,QAAS,CACPV,cAAe,GAAIX,gBAAJ,CAAoBC,yBAApB,CADR,CAEPW,gBAAiB,GAAIZ,gBAAJ,CAAoBQ,2BAApB,CAFV,CAGPK,gBAAiB,GAAIb,gBAAJ,CAAoBS,2BAApB,CAHV,CAHuC,CAAd,CAAD,CAAnC,C,uBASAC,qBAAqBY,UAArB,CAAkC,EAAlC,CACA,OAASZ,oBAAT","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Directive, ContentChildren } from '@angular/core';\nexport function FdsSnackBarTitleDirective() {}\nFdsSnackBarTitleDirective.prototype = {\n  contstructor: FdsSnackBarTitleDirective\n};\nFdsSnackBarTitleDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-snackbar-title'\n  }]\n}];\nexport function FdsSnackBarContentDirective() {}\nFdsSnackBarContentDirective.prototype = {\n  contstructor: FdsSnackBarContentDirective\n};\nFdsSnackBarContentDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-snackbar-content'\n  }]\n}];\nexport function FdsSnackBarActionsDirective() {}\nFdsSnackBarActionsDirective.prototype = {\n  contstructor: FdsSnackBarActionsDirective\n};\nFdsSnackBarActionsDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-snackbar-actions'\n  }]\n}];\n/**\n * FdsSnackBarComponent constructor\n *\n * @constructor\n */\n\nfunction FdsSnackBarComponent() {\n  this.snackBarTitle = '';\n  this.snackBarContent = '';\n  this.snackBarActions = '';\n}\n\nFdsSnackBarComponent.prototype = {\n  constructor: FdsSnackBarComponent,\n\n  /**\n   * Respond after Angular projects external content into the component's view.\n   */\n  ngAfterContentInit: function ngAfterContentInit() {\n    if (this.snackBarTitle.length > 1) {\n      throw new Error('Duplicate fds-snackbar-title component at in fds-snackbar.');\n    }\n\n    if (this.snackBarContent.length > 1) {\n      throw new Error('Duplicate fds-snackbar-content component at in fds-snackbar.');\n    }\n\n    if (this.snackBarActions.length > 1) {\n      throw new Error('Duplicate fds-snackbar-actions component at in fds-snackbar.');\n    }\n  }\n};\nFdsSnackBarComponent.annotations = [new Component({\n  selector: 'fds-snackbar',\n  template: require('./fds-snackbar.component.html'),\n  queries: {\n    snackBarTitle: new ContentChildren(FdsSnackBarTitleDirective),\n    snackBarContent: new ContentChildren(FdsSnackBarContentDirective),\n    snackBarActions: new ContentChildren(FdsSnackBarActionsDirective)\n  }\n})];\nFdsSnackBarComponent.parameters = [];\nexport { FdsSnackBarComponent };"]}]}
\ No newline at end of file
diff --git a/.cache-loader/718804a4e560d19ef8f1c17d7e80d7e5.json b/.cache-loader/718804a4e560d19ef8f1c17d7e80d7e5.json
new file mode 100644
index 0000000..a54478b
--- /dev/null
+++ b/.cache-loader/718804a4e560d19ef8f1c17d7e80d7e5.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js??ref--5-1!/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-3!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js","mtime":1562689731042},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js","mtime":1522257694000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["var cov_2oezpq342o=function(){var path='/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js',hash='ca3c23463f79dc4b7ec5d9028880abb077c76958',Function=function(){}.constructor,global=new Function('return this')(),gcv='__coverage__',coverageData={path:'/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js',statementMap:{'0':{start:{line:25,column:18},end:{line:25,column:144}},'1':{start:{line:26,column:35},end:{line:26,column:62}},'2':{start:{line:35,column:0},end:{line:37,column:2}},'3':{start:{line:38,column:0},end:{line:44,column:4}}},fnMap:{'0':{name:'FdsDialogsModule',decl:{start:{line:33,column:9},end:{line:33,column:25}},loc:{start:{line:33,column:28},end:{line:33,column:30}},line:33}},branchMap:{},s:{'0':0,'1':0,'2':0,'3':0},f:{'0':0},b:{},_coverageSchema:'332fd63041d2c1bcb487cc26dd0d5f7d97098a6c'},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();import{NgModule}from'@angular/core';import{FlexLayoutModule}from'@angular/flex-layout';import{CommonModule}from'@angular/common';import{MatButtonModule,MatIconModule,MatInputModule,MatDialogModule}from'@angular/material';import{FormsModule}from'@angular/forms';import{FdsDialogTitleDirective,FdsDialogContentDirective,FdsDialogActionsDirective,FdsDialogComponent}from'./fds-dialog.component';import{IConfirmConfig,FdsDialogService}from'./services/dialog.service';import{FdsConfirmDialogComponent}from'./confirm-dialog/confirm-dialog.component';var FDS_DIALOGS=(cov_2oezpq342o.s[0]++,[FdsDialogComponent,FdsDialogTitleDirective,FdsDialogActionsDirective,FdsDialogContentDirective,FdsConfirmDialogComponent]);var FDS_DIALOGS_ENTRY_COMPONENTS=(cov_2oezpq342o.s[1]++,[FdsConfirmDialogComponent]);function FdsDialogsModule(){cov_2oezpq342o.f[0]++;}cov_2oezpq342o.s[2]++;FdsDialogsModule.prototype={constructor:FdsDialogsModule};cov_2oezpq342o.s[3]++;FdsDialogsModule.annotations=[new NgModule({imports:[FlexLayoutModule,FormsModule,CommonModule,MatDialogModule,MatInputModule,MatButtonModule,MatIconModule],declarations:[FDS_DIALOGS],exports:[FDS_DIALOGS],providers:[FdsDialogService],entryComponents:[FDS_DIALOGS_ENTRY_COMPONENTS]})];export{FdsDialogsModule,IConfirmConfig,FdsDialogService,FdsDialogComponent,FdsDialogTitleDirective,FdsDialogContentDirective,FdsDialogActionsDirective,FdsConfirmDialogComponent};",{"version":3,"sources":["/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialogs.module.js"],"names":["NgModule","FlexLayoutModule","CommonModule","MatButtonModule","MatIconModule","MatInputModule","MatDialogModule","FormsModule","FdsDialogTitleDirective","FdsDialogContentDirective","FdsDialogActionsDirective","FdsDialogComponent","IConfirmConfig","FdsDialogService","FdsConfirmDialogComponent","FDS_DIALOGS","FDS_DIALOGS_ENTRY_COMPONENTS","FdsDialogsModule","prototype","constructor","annotations","imports","declarations","exports","providers","entryComponents"],"mappings":"+gCAgBA,OAASA,QAAT,KAAyB,eAAzB,CACA,OAASC,gBAAT,KAAiC,sBAAjC,CACA,OAASC,YAAT,KAA6B,iBAA7B,CACA,OAASC,eAAT,CAA0BC,aAA1B,CAAyCC,cAAzC,CAAyDC,eAAzD,KAAgF,mBAAhF,CACA,OAASC,WAAT,KAA4B,gBAA5B,CACA,OAASC,uBAAT,CAAkCC,yBAAlC,CAA6DC,yBAA7D,CAAwFC,kBAAxF,KAAkH,wBAAlH,CACA,OAASC,cAAT,CAAyBC,gBAAzB,KAAiD,2BAAjD,CACA,OAASC,yBAAT,KAA0C,2CAA1C,CACA,GAAIC,oCAAc,CAACJ,kBAAD,CAAqBH,uBAArB,CAA8CE,yBAA9C,CAAyED,yBAAzE,CAAoGK,yBAApG,CAAd,CAAJ,CACA,GAAIE,qDAA+B,CAACF,yBAAD,CAA/B,CAAJ,CAOA,QAASG,iBAAT,EAA4B,uBAAE,C,sBAE9BA,iBAAiBC,SAAjB,CAA6B,CAC3BC,YAAaF,gBADc,CAA7B,C,sBAGAA,iBAAiBG,WAAjB,CAA+B,CAAC,GAAIpB,SAAJ,CAAa,CAC3CqB,QAAS,CAACpB,gBAAD,CAAmBM,WAAnB,CAAgCL,YAAhC,CAA8CI,eAA9C,CAA+DD,cAA/D,CAA+EF,eAA/E,CAAgGC,aAAhG,CADkC,CAE3CkB,aAAc,CAACP,WAAD,CAF6B,CAG3CQ,QAAS,CAACR,WAAD,CAHkC,CAI3CS,UAAW,CAACX,gBAAD,CAJgC,CAK3CY,gBAAiB,CAACT,4BAAD,CAL0B,CAAb,CAAD,CAA/B,CAOA,OAASC,gBAAT,CAA2BL,cAA3B,CAA2CC,gBAA3C,CAA6DF,kBAA7D,CAAiFH,uBAAjF,CAA0GC,yBAA1G,CAAqIC,yBAArI,CAAgKI,yBAAhK","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule, MatIconModule, MatInputModule, MatDialogModule } from '@angular/material';\nimport { FormsModule } from '@angular/forms';\nimport { FdsDialogTitleDirective, FdsDialogContentDirective, FdsDialogActionsDirective, FdsDialogComponent } from './fds-dialog.component';\nimport { IConfirmConfig, FdsDialogService } from './services/dialog.service';\nimport { FdsConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\nvar FDS_DIALOGS = [FdsDialogComponent, FdsDialogTitleDirective, FdsDialogActionsDirective, FdsDialogContentDirective, FdsConfirmDialogComponent];\nvar FDS_DIALOGS_ENTRY_COMPONENTS = [FdsConfirmDialogComponent];\n/**\n * FdsDialogsModule constructor.\n *\n * @constructor\n */\n\nfunction FdsDialogsModule() {}\n\nFdsDialogsModule.prototype = {\n  constructor: FdsDialogsModule\n};\nFdsDialogsModule.annotations = [new NgModule({\n  imports: [FlexLayoutModule, FormsModule, CommonModule, MatDialogModule, MatInputModule, MatButtonModule, MatIconModule],\n  declarations: [FDS_DIALOGS],\n  exports: [FDS_DIALOGS],\n  providers: [FdsDialogService],\n  entryComponents: [FDS_DIALOGS_ENTRY_COMPONENTS]\n})];\nexport { FdsDialogsModule, IConfirmConfig, FdsDialogService, FdsDialogComponent, FdsDialogTitleDirective, FdsDialogContentDirective, FdsDialogActionsDirective, FdsConfirmDialogComponent };"]}]}
\ No newline at end of file
diff --git a/.cache-loader/7620fe8c48a6c79c400b358f6422260c.json b/.cache-loader/7620fe8c48a6c79c400b358f6422260c.json
new file mode 100644
index 0000000..d203b50
--- /dev/null
+++ b/.cache-loader/7620fe8c48a6c79c400b358f6422260c.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js","mtime":1562689731041},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component } from '@angular/core';\n/**\n * FdsConfirmDialogComponent constructor.\n *\n * @constructor\n */\n\nfunction FdsConfirmDialogComponent() {\n  this.title = '';\n  this.message = '';\n  this.acceptButton = '';\n  this.acceptButtonColor = 'fds-primary';\n  this.cancelButton = '';\n  this.cancelButtonColor = 'fds-regular';\n  this.dialogRef = undefined;\n  this.viewContainerRef = undefined;\n  this.disableClose = true;\n}\n\nFdsConfirmDialogComponent.prototype = {\n  constructor: FdsConfirmDialogComponent,\n\n  /**\n   * Close the dialog and send a cancel response to any subscribers.\n   */\n  cancel: function cancel() {\n    this.dialogRef.close(false);\n  },\n\n  /**\n   * Close the dialog and send an accept response to any subscribers.\n   */\n  accept: function accept() {\n    this.dialogRef.close(true);\n  }\n};\nFdsConfirmDialogComponent.annotations = [new Component({\n  selector: 'fds-confirm-dialog',\n  template: require('./confirm-dialog.component.html')})];\nFdsConfirmDialogComponent.parameters = [];\nexport { FdsConfirmDialogComponent };"]}
\ No newline at end of file
diff --git a/.cache-loader/818b18764bf08b4e79e815db6c19b3e2.json b/.cache-loader/818b18764bf08b4e79e815db6c19b3e2.json
new file mode 100644
index 0000000..1d463d5
--- /dev/null
+++ b/.cache-loader/818b18764bf08b4e79e815db6c19b3e2.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/webapp/fds.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/fds.js","mtime":1562689731053},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport FdsService from 'webapp/services/fds.service.js';\nimport { FdsAnimations } from '@nifi-fds/core';\n/**\n * Fds constructor.\n *\n * @param fdsService            The fds service.\n * @param changeDetectorRef     The change detector ref.\n * @constructor\n */\n\nfunction Fds(fdsService, changeDetectorRef) {\n  this.fdsService = fdsService;\n  this.cd = changeDetectorRef;\n}\n\nFds.prototype = {\n  constructor: Fds,\n\n  /**\n   * Initialize the component\n   */\n  ngOnInit: function ngOnInit() {\n    this.fdsService.sidenav = this.sidenav; //ngCore.ViewChild\n  },\n\n  /**\n   * Since the child views are updating the fdsService values that are used to display\n   * the breadcrumbs in this component's view we need to manually detect changes at the correct\n   * point in the lifecycle.\n   */\n  ngAfterViewChecked: function ngAfterViewChecked() {\n    this.cd.detectChanges();\n  }\n};\nFds.annotations = [new Component({\n  selector: 'fds-app',\n  template: require('./fds.html'),\n  queries: {\n    sidenav: new ViewChild('sidenav')\n  },\n  animations: [FdsAnimations.flyInOutAnimation]\n})];\nFds.parameters = [FdsService, ChangeDetectorRef];\nexport default Fds;"]}
\ No newline at end of file
diff --git a/.cache-loader/83ca0fa24d0d3690206ab53f8d58b304.json b/.cache-loader/83ca0fa24d0d3690206ab53f8d58b304.json
new file mode 100644
index 0000000..c33e058
--- /dev/null
+++ b/.cache-loader/83ca0fa24d0d3690206ab53f8d58b304.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js??ref--5-1!/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-3!/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js","mtime":1562689731033},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js","mtime":1522257694000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["var cov_cgdalbfrm=function(){var path='/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js',hash='5f61c6b8eeb6e1a83fd25d01117ae3a78398ea60',Function=function(){}.constructor,global=new Function('return this')(),gcv='__coverage__',coverageData={path:'/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js',statementMap:{'0':{start:{line:18,column:21},end:{line:18,column:29}},'1':{start:{line:19,column:15},end:{line:19,column:33}},'2':{start:{line:21,column:18},end:{line:23,column:1}},'3':{start:{line:22,column:2},end:{line:22,column:36}},'4':{start:{line:25,column:13},end:{line:27,column:1}},'5':{start:{line:26,column:2},end:{line:26,column:22}},'6':{start:{line:29,column:26},end:{line:31,column:1}},'7':{start:{line:30,column:2},end:{line:30,column:43}},'8':{start:{line:40,column:22},end:{line:50,column:1}},'9':{start:{line:41,column:2},end:{line:47,column:3}},'10':{start:{line:43,column:18},end:{line:43,column:41}},'11':{start:{line:44,column:14},end:{line:44,column:24}},'12':{start:{line:46,column:4},end:{line:46,column:45}},'13':{start:{line:49,column:2},end:{line:49,column:15}},'14':{start:{line:58,column:15},end:{line:71,column:1}},'15':{start:{line:59,column:2},end:{line:70,column:3}},'16':{start:{line:61,column:16},end:{line:61,column:53}},'17':{start:{line:63,column:4},end:{line:65,column:5}},'18':{start:{line:64,column:6},end:{line:64,column:19}},'19':{start:{line:67,column:4},end:{line:67,column:16}},'20':{start:{line:69,column:4},end:{line:69,column:16}},'21':{start:{line:80,column:0},end:{line:215,column:2}},'22':{start:{line:88,column:4},end:{line:96,column:5}},'23':{start:{line:89,column:6},end:{line:95,column:7}},'24':{start:{line:91,column:18},end:{line:91,column:37}},'25':{start:{line:93,column:8},end:{line:93,column:26}},'26':{start:{line:108,column:4},end:{line:108,column:87}},'27':{start:{line:110,column:16},end:{line:113,column:5}},'28':{start:{line:115,column:4},end:{line:115,column:53}},'29':{start:{line:126,column:4},end:{line:126,column:34}},'30':{start:{line:137,column:16},end:{line:137,column:29}},'31':{start:{line:139,column:4},end:{line:141,column:5}},'32':{start:{line:140,column:6},end:{line:140,column:18}},'33':{start:{line:144,column:4},end:{line:147,column:5}},'34':{start:{line:145,column:6},end:{line:145,column:27}},'35':{start:{line:146,column:6},end:{line:146,column:18}},'36':{start:{line:150,column:4},end:{line:152,column:5}},'37':{start:{line:151,column:6},end:{line:151,column:27}},'38':{start:{line:154,column:4},end:{line:154,column:16}},'39':{start:{line:165,column:16},end:{line:165,column:29}},'40':{start:{line:167,column:4},end:{line:169,column:5}},'41':{start:{line:168,column:6},end:{line:168,column:18}},'42':{start:{line:172,column:4},end:{line:174,column:5}},'43':{start:{line:173,column:6},end:{line:173,column:30}},'44':{start:{line:176,column:4},end:{line:176,column:16}},'45':{start:{line:187,column:4},end:{line:202,column:5}},'46':{start:{line:188,column:21},end:{line:188,column:36}},'47':{start:{line:190,column:6},end:{line:192,column:7}},'48':{start:{line:191,column:8},end:{line:191,column:18}},'49':{start:{line:194,column:23},end:{line:194,column:47}},'50':{start:{line:195,column:20},end:{line:195,column:42}},'51':{start:{line:197,column:6},end:{line:199,column:7}},'52':{start:{line:198,column:8},end:{line:198,column:23}},'53':{start:{line:201,column:6},end:{line:201,column:18}},'54':{start:{line:204,column:4},end:{line:204,column:16}},'55':{start:{line:213,column:4},end:{line:213,column:33}},'56':{start:{line:216,column:0},end:{line:216,column:34}}},fnMap:{'0':{name:'isUndefined',decl:{start:{line:21,column:27},end:{line:21,column:38}},loc:{start:{line:21,column:44},end:{line:23,column:1}},line:21},'1':{name:'isNull',decl:{start:{line:25,column:22},end:{line:25,column:28}},loc:{start:{line:25,column:34},end:{line:27,column:1}},line:25},'2':{name:'isDefinedAndNotNull',decl:{start:{line:29,column:35},end:{line:29,column:54}},loc:{start:{line:29,column:60},end:{line:31,column:1}},line:29},'3':{name:'checkExpiration',decl:{start:{line:40,column:31},end:{line:40,column:46}},loc:{start:{line:40,column:54},end:{line:50,column:1}},line:40},'4':{name:'getEntry',decl:{start:{line:58,column:24},end:{line:58,column:32}},loc:{start:{line:58,column:38},end:{line:71,column:1}},line:58},'5':{name:'FdsStorageService',decl:{start:{line:78,column:9},end:{line:78,column:26}},loc:{start:{line:78,column:29},end:{line:78,column:31}},line:78},'6':{name:'init',decl:{start:{line:87,column:17},end:{line:87,column:21}},loc:{start:{line:87,column:24},end:{line:97,column:3}},line:87},'7':{name:'setItem',decl:{start:{line:106,column:20},end:{line:106,column:27}},loc:{start:{line:106,column:48},end:{line:116,column:3}},line:106},'8':{name:'hasItem',decl:{start:{line:125,column:20},end:{line:125,column:27}},loc:{start:{line:125,column:33},end:{line:127,column:3}},line:125},'9':{name:'getItem',decl:{start:{line:136,column:20},end:{line:136,column:27}},loc:{start:{line:136,column:33},end:{line:155,column:3}},line:136},'10':{name:'getItemExpiration',decl:{start:{line:164,column:30},end:{line:164,column:47}},loc:{start:{line:164,column:53},end:{line:177,column:3}},line:164},'11':{name:'getJwtPayload',decl:{start:{line:186,column:26},end:{line:186,column:39}},loc:{start:{line:186,column:45},end:{line:205,column:3}},line:186},'12':{name:'removeItem',decl:{start:{line:212,column:23},end:{line:212,column:33}},loc:{start:{line:212,column:39},end:{line:214,column:3}},line:212}},branchMap:{'0':{loc:{start:{line:30,column:9},end:{line:30,column:42}},type:'binary-expr',locations:[{start:{line:30,column:9},end:{line:30,column:26}},{start:{line:30,column:30},end:{line:30,column:42}}],line:30},'1':{loc:{start:{line:41,column:2},end:{line:47,column:3}},type:'if',locations:[{start:{line:41,column:2},end:{line:47,column:3}},{start:{line:41,column:2},end:{line:47,column:3}}],line:41},'2':{loc:{start:{line:63,column:4},end:{line:65,column:5}},type:'if',locations:[{start:{line:63,column:4},end:{line:65,column:5}},{start:{line:63,column:4},end:{line:65,column:5}}],line:63},'3':{loc:{start:{line:108,column:14},end:{line:108,column:86}},type:'cond-expr',locations:[{start:{line:108,column:45},end:{line:108,column:52}},{start:{line:108,column:55},end:{line:108,column:86}}],line:108},'4':{loc:{start:{line:139,column:4},end:{line:141,column:5}},type:'if',locations:[{start:{line:139,column:4},end:{line:141,column:5}},{start:{line:139,column:4},end:{line:141,column:5}}],line:139},'5':{loc:{start:{line:144,column:4},end:{line:147,column:5}},type:'if',locations:[{start:{line:144,column:4},end:{line:147,column:5}},{start:{line:144,column:4},end:{line:147,column:5}}],line:144},'6':{loc:{start:{line:150,column:4},end:{line:152,column:5}},type:'if',locations:[{start:{line:150,column:4},end:{line:152,column:5}},{start:{line:150,column:4},end:{line:152,column:5}}],line:150},'7':{loc:{start:{line:167,column:4},end:{line:169,column:5}},type:'if',locations:[{start:{line:167,column:4},end:{line:169,column:5}},{start:{line:167,column:4},end:{line:169,column:5}}],line:167},'8':{loc:{start:{line:172,column:4},end:{line:174,column:5}},type:'if',locations:[{start:{line:172,column:4},end:{line:174,column:5}},{start:{line:172,column:4},end:{line:174,column:5}}],line:172},'9':{loc:{start:{line:187,column:4},end:{line:202,column:5}},type:'if',locations:[{start:{line:187,column:4},end:{line:202,column:5}},{start:{line:187,column:4},end:{line:202,column:5}}],line:187},'10':{loc:{start:{line:190,column:6},end:{line:192,column:7}},type:'if',locations:[{start:{line:190,column:6},end:{line:192,column:7}},{start:{line:190,column:6},end:{line:192,column:7}}],line:190},'11':{loc:{start:{line:197,column:6},end:{line:199,column:7}},type:'if',locations:[{start:{line:197,column:6},end:{line:199,column:7}},{start:{line:197,column:6},end:{line:199,column:7}}],line:197}},s:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0,'7':0,'8':0,'9':0,'10':0,'11':0,'12':0,'13':0,'14':0,'15':0,'16':0,'17':0,'18':0,'19':0,'20':0,'21':0,'22':0,'23':0,'24':0,'25':0,'26':0,'27':0,'28':0,'29':0,'30':0,'31':0,'32':0,'33':0,'34':0,'35':0,'36':0,'37':0,'38':0,'39':0,'40':0,'41':0,'42':0,'43':0,'44':0,'45':0,'46':0,'47':0,'48':0,'49':0,'50':0,'51':0,'52':0,'53':0,'54':0,'55':0,'56':0},f:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0,'7':0,'8':0,'9':0,'10':0,'11':0,'12':0},b:{'0':[0,0],'1':[0,0],'2':[0,0],'3':[0,0],'4':[0,0],'5':[0,0],'6':[0,0],'7':[0,0],'8':[0,0],'9':[0,0],'10':[0,0],'11':[0,0]},_coverageSchema:'332fd63041d2c1bcb487cc26dd0d5f7d97098a6c'},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();var MILLIS_PER_DAY=(cov_cgdalbfrm.s[0]++,86400000);var TWO_DAYS=(cov_cgdalbfrm.s[1]++,MILLIS_PER_DAY*2);cov_cgdalbfrm.s[2]++;var isUndefined=function isUndefined(obj){cov_cgdalbfrm.f[0]++;cov_cgdalbfrm.s[3]++;return typeof obj==='undefined';};cov_cgdalbfrm.s[4]++;var isNull=function isNull(obj){cov_cgdalbfrm.f[1]++;cov_cgdalbfrm.s[5]++;return obj===null;};cov_cgdalbfrm.s[6]++;var isDefinedAndNotNull=function isDefinedAndNotNull(obj){cov_cgdalbfrm.f[2]++;cov_cgdalbfrm.s[7]++;return(cov_cgdalbfrm.b[0][0]++,!isUndefined(obj))&&(cov_cgdalbfrm.b[0][1]++,!isNull(obj));};cov_cgdalbfrm.s[8]++;var checkExpiration=function checkExpiration(entry){cov_cgdalbfrm.f[3]++;cov_cgdalbfrm.s[9]++;if(isDefinedAndNotNull(entry.expires)){cov_cgdalbfrm.b[1][0]++;var expires=(cov_cgdalbfrm.s[10]++,new Date(entry.expires));var now=(cov_cgdalbfrm.s[11]++,new Date());cov_cgdalbfrm.s[12]++;return expires.valueOf()<now.valueOf();}else{cov_cgdalbfrm.b[1][1]++;}cov_cgdalbfrm.s[13]++;return false;};cov_cgdalbfrm.s[14]++;var getEntry=function getEntry(key){cov_cgdalbfrm.f[4]++;cov_cgdalbfrm.s[15]++;try{var entry=(cov_cgdalbfrm.s[16]++,JSON.parse(localStorage.getItem(key)));cov_cgdalbfrm.s[17]++;if(isDefinedAndNotNull(entry)){cov_cgdalbfrm.b[2][0]++;cov_cgdalbfrm.s[18]++;return entry;}else{cov_cgdalbfrm.b[2][1]++;}cov_cgdalbfrm.s[19]++;return null;}catch(e){cov_cgdalbfrm.s[20]++;return null;}};function FdsStorageService(){cov_cgdalbfrm.f[5]++;}cov_cgdalbfrm.s[21]++;FdsStorageService.prototype={constructor:FdsStorageService,init:function init(){cov_cgdalbfrm.f[6]++;cov_cgdalbfrm.s[22]++;for(var i=0;i<localStorage.length;i++){cov_cgdalbfrm.s[23]++;try{var key=(cov_cgdalbfrm.s[24]++,localStorage.key(i));cov_cgdalbfrm.s[25]++;this.getItem(key);}catch(e){}}},setItem:function setItem(key,item,expires){cov_cgdalbfrm.f[7]++;cov_cgdalbfrm.s[26]++;expires=isDefinedAndNotNull(expires)?(cov_cgdalbfrm.b[3][0]++,expires):(cov_cgdalbfrm.b[3][1]++,new Date().valueOf()+TWO_DAYS);var entry=(cov_cgdalbfrm.s[27]++,{expires:expires,item:item});cov_cgdalbfrm.s[28]++;localStorage.setItem(key,JSON.stringify(entry));},hasItem:function hasItem(key){cov_cgdalbfrm.f[8]++;cov_cgdalbfrm.s[29]++;return getEntry(key)!==null;},getItem:function getItem(key){cov_cgdalbfrm.f[9]++;var entry=(cov_cgdalbfrm.s[30]++,getEntry(key));cov_cgdalbfrm.s[31]++;if(entry===null){cov_cgdalbfrm.b[4][0]++;cov_cgdalbfrm.s[32]++;return null;}else{cov_cgdalbfrm.b[4][1]++;}cov_cgdalbfrm.s[33]++;if(checkExpiration(entry)){cov_cgdalbfrm.b[5][0]++;cov_cgdalbfrm.s[34]++;this.removeItem(key);cov_cgdalbfrm.s[35]++;return null;}else{cov_cgdalbfrm.b[5][1]++;}cov_cgdalbfrm.s[36]++;if(isDefinedAndNotNull(entry['item'])){cov_cgdalbfrm.b[6][0]++;cov_cgdalbfrm.s[37]++;return entry['item'];}else{cov_cgdalbfrm.b[6][1]++;}cov_cgdalbfrm.s[38]++;return null;},getItemExpiration:function getItemExpiration(key){cov_cgdalbfrm.f[10]++;var entry=(cov_cgdalbfrm.s[39]++,getEntry(key));cov_cgdalbfrm.s[40]++;if(entry===null){cov_cgdalbfrm.b[7][0]++;cov_cgdalbfrm.s[41]++;return null;}else{cov_cgdalbfrm.b[7][1]++;}cov_cgdalbfrm.s[42]++;if(isDefinedAndNotNull(entry['expires'])){cov_cgdalbfrm.b[8][0]++;cov_cgdalbfrm.s[43]++;return entry['expires'];}else{cov_cgdalbfrm.b[8][1]++;}cov_cgdalbfrm.s[44]++;return null;},getJwtPayload:function getJwtPayload(jwt){cov_cgdalbfrm.f[11]++;cov_cgdalbfrm.s[45]++;if(isDefinedAndNotNull(jwt)){cov_cgdalbfrm.b[9][0]++;var segments=(cov_cgdalbfrm.s[46]++,jwt.split(/\\./));cov_cgdalbfrm.s[47]++;if(segments.length!==3){cov_cgdalbfrm.b[10][0]++;cov_cgdalbfrm.s[48]++;return'';}else{cov_cgdalbfrm.b[10][1]++;}var rawPayload=(cov_cgdalbfrm.s[49]++,window.atob(segments[1]));var payload=(cov_cgdalbfrm.s[50]++,JSON.parse(rawPayload));cov_cgdalbfrm.s[51]++;if(isDefinedAndNotNull(payload)){cov_cgdalbfrm.b[11][0]++;cov_cgdalbfrm.s[52]++;return payload;}else{cov_cgdalbfrm.b[11][1]++;}cov_cgdalbfrm.s[53]++;return null;}else{cov_cgdalbfrm.b[9][1]++;}cov_cgdalbfrm.s[54]++;return null;},removeItem:function removeItem(key){cov_cgdalbfrm.f[12]++;cov_cgdalbfrm.s[55]++;localStorage.removeItem(key);}};cov_cgdalbfrm.s[56]++;FdsStorageService.parameters=[];export default FdsStorageService;",{"version":3,"sources":["/Users/jaslan/Development/nifi-fds/platform/core/common/services/fds-storage.service.js"],"names":["MILLIS_PER_DAY","TWO_DAYS","isUndefined","obj","isNull","isDefinedAndNotNull","checkExpiration","entry","expires","Date","now","valueOf","getEntry","key","JSON","parse","localStorage","getItem","e","FdsStorageService","prototype","constructor","init","i","length","setItem","item","stringify","hasItem","removeItem","getItemExpiration","getJwtPayload","jwt","segments","split","rawPayload","window","atob","payload","parameters"],"mappings":"skRAiBA,GAAIA,sCAAiB,QAAjB,CAAJ,CACA,GAAIC,gCAAWD,eAAiB,CAA5B,CAAJ,C,qBAEA,GAAIE,aAAc,QAASA,YAAT,CAAqBC,GAArB,CAA0B,2CAC1C,MAAO,OAAOA,IAAP,GAAe,WAAtB,CACD,CAFD,C,qBAIA,GAAIC,QAAS,QAASA,OAAT,CAAgBD,GAAhB,CAAqB,2CAChC,MAAOA,OAAQ,IAAf,CACD,CAFD,C,qBAIA,GAAIE,qBAAsB,QAASA,oBAAT,CAA6BF,GAA7B,CAAkC,2CAC1D,MAAO,0BAACD,YAAYC,GAAZ,CAAD,4BAAqB,CAACC,OAAOD,GAAP,CAAtB,CAAP,CACD,CAFD,C,qBAWA,GAAIG,iBAAkB,QAASA,gBAAT,CAAyBC,KAAzB,CAAgC,2CACpD,GAAIF,oBAAoBE,MAAMC,OAA1B,CAAJ,CAAwC,yBAEtC,GAAIA,gCAAU,GAAIC,KAAJ,CAASF,MAAMC,OAAf,CAAV,CAAJ,CACA,GAAIE,4BAAM,GAAID,KAAJ,EAAN,CAAJ,CAHsC,sBAKtC,MAAOD,SAAQG,OAAR,GAAoBD,IAAIC,OAAJ,EAA3B,CACD,CAND,8BADoD,sBASpD,MAAO,MAAP,CACD,CAVD,C,sBAkBA,GAAIC,UAAW,QAASA,SAAT,CAAkBC,GAAlB,CAAuB,4CACpC,GAAI,CAEF,GAAIN,8BAAQO,KAAKC,KAAL,CAAWC,aAAaC,OAAb,CAAqBJ,GAArB,CAAX,CAAR,CAAJ,CAFE,sBAIF,GAAIR,oBAAoBE,KAApB,CAAJ,CAAgC,+CAC9B,MAAOA,MAAP,CACD,CAFD,8BAJE,sBAQF,MAAO,KAAP,CACD,CAAC,MAAOW,CAAP,CAAU,uBACV,MAAO,KAAP,CACD,CACF,CAbD,CAoBA,QAASC,kBAAT,EAA6B,sBAAE,C,sBAE/BA,kBAAkBC,SAAlB,CAA8B,CAC5BC,YAAaF,iBADe,CAO5BG,KAAM,QAASA,KAAT,EAAgB,4CACpB,IAAK,GAAIC,GAAI,CAAb,CAAgBA,EAAIP,aAAaQ,MAAjC,CAAyCD,GAAzC,CAA8C,uBAC5C,GAAI,CAEF,GAAIV,4BAAMG,aAAaH,GAAb,CAAiBU,CAAjB,CAAN,CAAJ,CAFE,sBAIF,KAAKN,OAAL,CAAaJ,GAAb,EACD,CAAC,MAAOK,CAAP,CAAU,CACX,CACF,CACF,CAjB2B,CA0B5BO,QAAS,QAASA,QAAT,CAAiBZ,GAAjB,CAAsBa,IAAtB,CAA4BlB,OAA5B,CAAqC,4CAE5CA,QAAUH,oBAAoBG,OAApB,2BAA+BA,OAA/B,2BAAyC,GAAIC,KAAJ,GAAWE,OAAX,GAAuBV,QAAhE,CAAV,CAEA,GAAIM,8BAAQ,CACVC,QAASA,OADC,CAEVkB,KAAMA,IAFI,CAAR,CAAJ,CAJ4C,sBAS5CV,aAAaS,OAAb,CAAqBZ,GAArB,CAA0BC,KAAKa,SAAL,CAAepB,KAAf,CAA1B,EACD,CApC2B,CA6C5BqB,QAAS,QAASA,QAAT,CAAiBf,GAAjB,CAAsB,4CAC7B,MAAOD,UAASC,GAAT,IAAkB,IAAzB,CACD,CA/C2B,CAwD5BI,QAAS,QAASA,QAAT,CAAiBJ,GAAjB,CAAsB,sBAC7B,GAAIN,8BAAQK,SAASC,GAAT,CAAR,CAAJ,CAD6B,sBAG7B,GAAIN,QAAU,IAAd,CAAoB,+CAClB,MAAO,KAAP,CACD,CAFD,8BAH6B,sBAQ7B,GAAID,gBAAgBC,KAAhB,CAAJ,CAA4B,+CAC1B,KAAKsB,UAAL,CAAgBhB,GAAhB,EAD0B,sBAE1B,MAAO,KAAP,CACD,CAHD,8BAR6B,sBAc7B,GAAIR,oBAAoBE,MAAM,MAAN,CAApB,CAAJ,CAAwC,+CACtC,MAAOA,OAAM,MAAN,CAAP,CACD,CAFD,8BAd6B,sBAkB7B,MAAO,KAAP,CACD,CA3E2B,CAoF5BuB,kBAAmB,QAASA,kBAAT,CAA2BjB,GAA3B,CAAgC,uBACjD,GAAIN,8BAAQK,SAASC,GAAT,CAAR,CAAJ,CADiD,sBAGjD,GAAIN,QAAU,IAAd,CAAoB,+CAClB,MAAO,KAAP,CACD,CAFD,8BAHiD,sBAQjD,GAAIF,oBAAoBE,MAAM,SAAN,CAApB,CAAJ,CAA2C,+CACzC,MAAOA,OAAM,SAAN,CAAP,CACD,CAFD,8BARiD,sBAYjD,MAAO,KAAP,CACD,CAjG2B,CA0G5BwB,cAAe,QAASA,cAAT,CAAuBC,GAAvB,CAA4B,6CACzC,GAAI3B,oBAAoB2B,GAApB,CAAJ,CAA8B,yBAC5B,GAAIC,iCAAWD,IAAIE,KAAJ,CAAU,IAAV,CAAX,CAAJ,CAD4B,sBAG5B,GAAID,SAAST,MAAT,GAAoB,CAAxB,CAA2B,gDACzB,MAAO,EAAP,CACD,CAFD,+BAIA,GAAIW,mCAAaC,OAAOC,IAAP,CAAYJ,SAAS,CAAT,CAAZ,CAAb,CAAJ,CACA,GAAIK,gCAAUxB,KAAKC,KAAL,CAAWoB,UAAX,CAAV,CAAJ,CAR4B,sBAU5B,GAAI9B,oBAAoBiC,OAApB,CAAJ,CAAkC,gDAChC,MAAOA,QAAP,CACD,CAFD,+BAV4B,sBAc5B,MAAO,KAAP,CACD,CAfD,8BADyC,sBAkBzC,MAAO,KAAP,CACD,CA7H2B,CAoI5BT,WAAY,QAASA,WAAT,CAAoBhB,GAApB,CAAyB,6CACnCG,aAAaa,UAAb,CAAwBhB,GAAxB,EACD,CAtI2B,CAA9B,C,sBAwIAM,kBAAkBoB,UAAlB,CAA+B,EAA/B,CACA,cAAepB,kBAAf","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Store items for two days before being eligible for removal.\nvar MILLIS_PER_DAY = 86400000;\nvar TWO_DAYS = MILLIS_PER_DAY * 2;\n\nvar isUndefined = function isUndefined(obj) {\n  return typeof obj === 'undefined';\n};\n\nvar isNull = function isNull(obj) {\n  return obj === null;\n};\n\nvar isDefinedAndNotNull = function isDefinedAndNotNull(obj) {\n  return !isUndefined(obj) && !isNull(obj);\n};\n/**\n * Checks the expiration for the specified entry.\n *\n * @param {object} entry\n * @returns {boolean}\n */\n\n\nvar checkExpiration = function checkExpiration(entry) {\n  if (isDefinedAndNotNull(entry.expires)) {\n    // get the expiration\n    var expires = new Date(entry.expires);\n    var now = new Date(); // return whether the expiration date has passed\n\n    return expires.valueOf() < now.valueOf();\n  }\n\n  return false;\n};\n/**\n * Gets an enty for the key. The entry expiration is not checked.\n *\n * @param {string} key\n */\n\n\nvar getEntry = function getEntry(key) {\n  try {\n    // parse the entry\n    var entry = JSON.parse(localStorage.getItem(key)); // ensure the entry and item are present\n\n    if (isDefinedAndNotNull(entry)) {\n      return entry;\n    }\n\n    return null;\n  } catch (e) {\n    return null;\n  }\n};\n/**\n * FdsStorageService constructor.\n * @constructor\n */\n\n\nfunction FdsStorageService() {}\n\nFdsStorageService.prototype = {\n  constructor: FdsStorageService,\n\n  /**\n   * Initializes the storage. Items will be persisted for two days. Once the scripts runs\n   * thereafter, all eligible items will be removed. This strategy does not support persistence.\n   */\n  init: function init() {\n    for (var i = 0; i < localStorage.length; i++) {\n      try {\n        // get the next item\n        var key = localStorage.key(i); // attempt to get the item which will expire if necessary\n\n        this.getItem(key);\n      } catch (e) {// Do nothing\n      }\n    }\n  },\n\n  /**\n   * Stores the specified item.\n   *\n   * @param {string} key\n   * @param {object} item\n   * @param {integer} expires\n   */\n  setItem: function setItem(key, item, expires) {\n    // calculate the expiration\n    expires = isDefinedAndNotNull(expires) ? expires : new Date().valueOf() + TWO_DAYS; // create the entry\n\n    var entry = {\n      expires: expires,\n      item: item\n    }; // store the item\n\n    localStorage.setItem(key, JSON.stringify(entry));\n  },\n\n  /**\n   * Returns whether there is an entry for this key. This will not check the expiration. If\n   * the entry is expired, it will return null on a subsequent getItem invocation.\n   *\n   * @param {string} key\n   * @returns {boolean}\n   */\n  hasItem: function hasItem(key) {\n    return getEntry(key) !== null;\n  },\n\n  /**\n   * Gets the item with the specified key. If an item with this key does\n   * not exist, null is returned. If an item exists but cannot be parsed\n   * or is malformed/unrecognized, null is returned.\n   *\n   * @param {type} key\n   */\n  getItem: function getItem(key) {\n    var entry = getEntry(key);\n\n    if (entry === null) {\n      return null;\n    } // if the entry is expired, drop it and return null\n\n\n    if (checkExpiration(entry)) {\n      this.removeItem(key);\n      return null;\n    } // if the entry has the specified field return its value\n\n\n    if (isDefinedAndNotNull(entry['item'])) {\n      return entry['item'];\n    }\n\n    return null;\n  },\n\n  /**\n   * Gets the expiration for the specified item. This will not check the expiration. If\n   * the entry is expired, it will return null on a subsequent getItem invocation.\n   *\n   * @param {string} key\n   * @returns {integer}\n   */\n  getItemExpiration: function getItemExpiration(key) {\n    var entry = getEntry(key);\n\n    if (entry === null) {\n      return null;\n    } // if the entry has the specified field return its value\n\n\n    if (isDefinedAndNotNull(entry['expires'])) {\n      return entry['expires'];\n    }\n\n    return null;\n  },\n\n  /**\n   * Extracts the subject from the specified jwt. If the jwt is not as expected\n   * an empty string is returned.\n   *\n   * @param {string} jwt\n   * @returns {string}\n   */\n  getJwtPayload: function getJwtPayload(jwt) {\n    if (isDefinedAndNotNull(jwt)) {\n      var segments = jwt.split(/\\./);\n\n      if (segments.length !== 3) {\n        return '';\n      }\n\n      var rawPayload = window.atob(segments[1]);\n      var payload = JSON.parse(rawPayload);\n\n      if (isDefinedAndNotNull(payload)) {\n        return payload;\n      }\n\n      return null;\n    }\n\n    return null;\n  },\n\n  /**\n   * Removes the item with the specified key.\n   *\n   * @param {type} key\n   */\n  removeItem: function removeItem(key) {\n    localStorage.removeItem(key);\n  }\n};\nFdsStorageService.parameters = [];\nexport default FdsStorageService;"]}]}
\ No newline at end of file
diff --git a/.cache-loader/8f7da7f6fa8c5e91d94c4ff70a21c654.json b/.cache-loader/8f7da7f6fa8c5e91d94c4ff70a21c654.json
new file mode 100644
index 0000000..8c415de
--- /dev/null
+++ b/.cache-loader/8f7da7f6fa8c5e91d94c4ff70a21c654.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.html","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.html","mtime":1562603705038},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js","mtime":1516207864000}],"contextDependencies":[],"result":["module.exports = \"<!--\\nLicensed to the Apache Software Foundation (ASF) under one or more\\ncontributor license agreements.  See the NOTICE file distributed with\\nthis work for additional information regarding copyright ownership.\\nThe ASF licenses this file to You under the Apache License, Version 2.0\\n(the \\\"License\\\"); you may not use this file except in compliance with\\nthe License.  You may obtain a copy of the License at\\n\\nhttp://www.apache.org/licenses/LICENSE-2.0\\n\\nUnless required by applicable law or agreed to in writing, software\\ndistributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\nSee the License for the specific language governing permissions and\\nlimitations under the License.\\n-->\\n\\n<fds-dialog>\\n    <fds-dialog-title *ngIf=\\\"title\\\">\\n        <div fxLayout=\\\"row\\\" fxLayoutAlign=\\\"space-between center\\\">\\n            {{title}}\\n            <button mat-icon-button (click)=\\\"cancel()\\\">\\n                <mat-icon color=\\\"primary\\\">close</mat-icon>\\n            </button>\\n        </div>\\n    </fds-dialog-title>\\n    <fds-dialog-content class=\\\"md-subhead tc-grey-700\\\">\\n        {{message}}\\n    </fds-dialog-content>\\n    <fds-dialog-actions>\\n        <button *ngIf=\\\"cancelButton\\\" mat-raised-button\\n                color=\\\"{{cancelButtonColor}}\\\"\\n                #closeBtn\\n                (keydown.arrowright)=\\\"acceptBtn.focus()\\\"\\n                (click)=\\\"cancel()\\\">{{cancelButton}}\\n        </button>\\n        <button *ngIf=\\\"acceptButton\\\" mat-raised-button\\n                color=\\\"{{acceptButtonColor}}\\\"\\n                #acceptBtn\\n                (keydown.arrowleft)=\\\"closeBtn.focus()\\\"\\n                (click)=\\\"accept()\\\"\\n                class=\\\"push-left-sm\\\">{{acceptButton}}\\n        </button>\\n    </fds-dialog-actions>\\n</fds-dialog>\";"]}
\ No newline at end of file
diff --git a/.cache-loader/ab1a5fc7d9ab6d9c0b5af446e57d82f1.json b/.cache-loader/ab1a5fc7d9ab6d9c0b5af446e57d82f1.json
new file mode 100644
index 0000000..d772367
--- /dev/null
+++ b/.cache-loader/ab1a5fc7d9ab6d9c0b5af446e57d82f1.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js??ref--5-1!/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-3!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js","mtime":1562689731041},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js","mtime":1522257694000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["var cov_27bp0wnl5k=function(){var path='/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js',hash='55819ababe3d7d696bd331bff3c2437795114e30',Function=function(){}.constructor,global=new Function('return this')(),gcv='__coverage__',coverageData={path:'/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js',statementMap:{'0':{start:{line:19,column:0},end:{line:21,column:2}},'1':{start:{line:22,column:0},end:{line:27,column:3}},'2':{start:{line:29,column:0},end:{line:31,column:2}},'3':{start:{line:32,column:0},end:{line:37,column:3}},'4':{start:{line:39,column:0},end:{line:41,column:2}},'5':{start:{line:42,column:0},end:{line:47,column:3}},'6':{start:{line:55,column:2},end:{line:55,column:24}},'7':{start:{line:56,column:2},end:{line:56,column:26}},'8':{start:{line:57,column:2},end:{line:57,column:26}},'9':{start:{line:60,column:0},end:{line:79,column:2}},'10':{start:{line:67,column:4},end:{line:69,column:5}},'11':{start:{line:68,column:6},end:{line:68,column:80}},'12':{start:{line:71,column:4},end:{line:73,column:5}},'13':{start:{line:72,column:6},end:{line:72,column:82}},'14':{start:{line:75,column:4},end:{line:77,column:5}},'15':{start:{line:76,column:6},end:{line:76,column:82}},'16':{start:{line:80,column:0},end:{line:88,column:4}},'17':{start:{line:89,column:0},end:{line:89,column:35}}},fnMap:{'0':{name:'FdsDialogTitleDirective',decl:{start:{line:18,column:16},end:{line:18,column:39}},loc:{start:{line:18,column:42},end:{line:18,column:44}},line:18},'1':{name:'FdsDialogContentDirective',decl:{start:{line:28,column:16},end:{line:28,column:41}},loc:{start:{line:28,column:44},end:{line:28,column:46}},line:28},'2':{name:'FdsDialogActionsDirective',decl:{start:{line:38,column:16},end:{line:38,column:41}},loc:{start:{line:38,column:44},end:{line:38,column:46}},line:38},'3':{name:'FdsDialogComponent',decl:{start:{line:54,column:9},end:{line:54,column:27}},loc:{start:{line:54,column:30},end:{line:58,column:1}},line:54},'4':{name:'ngAfterContentInit',decl:{start:{line:66,column:31},end:{line:66,column:49}},loc:{start:{line:66,column:52},end:{line:78,column:3}},line:66}},branchMap:{'0':{loc:{start:{line:67,column:4},end:{line:69,column:5}},type:'if',locations:[{start:{line:67,column:4},end:{line:69,column:5}},{start:{line:67,column:4},end:{line:69,column:5}}],line:67},'1':{loc:{start:{line:71,column:4},end:{line:73,column:5}},type:'if',locations:[{start:{line:71,column:4},end:{line:73,column:5}},{start:{line:71,column:4},end:{line:73,column:5}}],line:71},'2':{loc:{start:{line:75,column:4},end:{line:77,column:5}},type:'if',locations:[{start:{line:75,column:4},end:{line:77,column:5}},{start:{line:75,column:4},end:{line:77,column:5}}],line:75}},s:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0,'7':0,'8':0,'9':0,'10':0,'11':0,'12':0,'13':0,'14':0,'15':0,'16':0,'17':0},f:{'0':0,'1':0,'2':0,'3':0,'4':0},b:{'0':[0,0],'1':[0,0],'2':[0,0]},_coverageSchema:'332fd63041d2c1bcb487cc26dd0d5f7d97098a6c'},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();import{Component,ContentChildren,Directive}from'@angular/core';export function FdsDialogTitleDirective(){cov_27bp0wnl5k.f[0]++;}cov_27bp0wnl5k.s[0]++;FdsDialogTitleDirective.prototype={contstructor:FdsDialogTitleDirective};cov_27bp0wnl5k.s[1]++;FdsDialogTitleDirective.decorators=[{type:Directive,args:[{selector:'fds-dialog-title'}]}];export function FdsDialogContentDirective(){cov_27bp0wnl5k.f[1]++;}cov_27bp0wnl5k.s[2]++;FdsDialogContentDirective.prototype={contstructor:FdsDialogContentDirective};cov_27bp0wnl5k.s[3]++;FdsDialogContentDirective.decorators=[{type:Directive,args:[{selector:'fds-dialog-content'}]}];export function FdsDialogActionsDirective(){cov_27bp0wnl5k.f[2]++;}cov_27bp0wnl5k.s[4]++;FdsDialogActionsDirective.prototype={contstructor:FdsDialogActionsDirective};cov_27bp0wnl5k.s[5]++;FdsDialogActionsDirective.decorators=[{type:Directive,args:[{selector:'fds-dialog-actions'}]}];function FdsDialogComponent(){cov_27bp0wnl5k.f[3]++;cov_27bp0wnl5k.s[6]++;this.dialogTitle='';cov_27bp0wnl5k.s[7]++;this.dialogContent='';cov_27bp0wnl5k.s[8]++;this.dialogActions='';}cov_27bp0wnl5k.s[9]++;FdsDialogComponent.prototype={constructor:FdsDialogComponent,ngAfterContentInit:function ngAfterContentInit(){cov_27bp0wnl5k.f[4]++;cov_27bp0wnl5k.s[10]++;if(this.dialogTitle.length>1){cov_27bp0wnl5k.b[0][0]++;cov_27bp0wnl5k.s[11]++;throw new Error('Duplicate fds-dialog-title component at in fds-dialog.');}else{cov_27bp0wnl5k.b[0][1]++;}cov_27bp0wnl5k.s[12]++;if(this.dialogContent.length>1){cov_27bp0wnl5k.b[1][0]++;cov_27bp0wnl5k.s[13]++;throw new Error('Duplicate fds-dialog-content component at in fds-dialog.');}else{cov_27bp0wnl5k.b[1][1]++;}cov_27bp0wnl5k.s[14]++;if(this.dialogActions.length>1){cov_27bp0wnl5k.b[2][0]++;cov_27bp0wnl5k.s[15]++;throw new Error('Duplicate fds-dialog-actions component at in fds-dialog.');}else{cov_27bp0wnl5k.b[2][1]++;}}};cov_27bp0wnl5k.s[16]++;FdsDialogComponent.annotations=[new Component({selector:'fds-dialog',template:require('./fds-dialog.component.html'),queries:{dialogTitle:new ContentChildren(FdsDialogTitleDirective),dialogContent:new ContentChildren(FdsDialogContentDirective),dialogActions:new ContentChildren(FdsDialogActionsDirective)}})];cov_27bp0wnl5k.s[17]++;FdsDialogComponent.parameters=[];export{FdsDialogComponent};",{"version":3,"sources":["/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js"],"names":["Component","ContentChildren","Directive","FdsDialogTitleDirective","prototype","contstructor","decorators","type","args","selector","FdsDialogContentDirective","FdsDialogActionsDirective","FdsDialogComponent","dialogTitle","dialogContent","dialogActions","constructor","ngAfterContentInit","length","Error","annotations","template","require","queries","parameters"],"mappings":"klGAgBA,OAASA,SAAT,CAAoBC,eAApB,CAAqCC,SAArC,KAAsD,eAAtD,CACA,MAAO,SAASC,wBAAT,EAAmC,uBAAE,C,sBAC5CA,wBAAwBC,SAAxB,CAAoC,CAClCC,aAAcF,uBADoB,CAApC,C,sBAGAA,wBAAwBG,UAAxB,CAAqC,CAAC,CACpCC,KAAML,SAD8B,CAEpCM,KAAM,CAAC,CACLC,SAAU,kBADL,CAAD,CAF8B,CAAD,CAArC,CAMA,MAAO,SAASC,0BAAT,EAAqC,uBAAE,C,sBAC9CA,0BAA0BN,SAA1B,CAAsC,CACpCC,aAAcK,yBADsB,CAAtC,C,sBAGAA,0BAA0BJ,UAA1B,CAAuC,CAAC,CACtCC,KAAML,SADgC,CAEtCM,KAAM,CAAC,CACLC,SAAU,oBADL,CAAD,CAFgC,CAAD,CAAvC,CAMA,MAAO,SAASE,0BAAT,EAAqC,uBAAE,C,sBAC9CA,0BAA0BP,SAA1B,CAAsC,CACpCC,aAAcM,yBADsB,CAAtC,C,sBAGAA,0BAA0BL,UAA1B,CAAuC,CAAC,CACtCC,KAAML,SADgC,CAEtCM,KAAM,CAAC,CACLC,SAAU,oBADL,CAAD,CAFgC,CAAD,CAAvC,CAYA,QAASG,mBAAT,EAA8B,6CAC5B,KAAKC,WAAL,CAAmB,EAAnB,CAD4B,sBAE5B,KAAKC,aAAL,CAAqB,EAArB,CAF4B,sBAG5B,KAAKC,aAAL,CAAqB,EAArB,CACD,C,sBAEDH,mBAAmBR,SAAnB,CAA+B,CAC7BY,YAAaJ,kBADgB,CAM7BK,mBAAoB,QAASA,mBAAT,EAA8B,8CAChD,GAAI,KAAKJ,WAAL,CAAiBK,MAAjB,CAA0B,CAA9B,CAAiC,iDAC/B,KAAM,IAAIC,MAAJ,CAAU,wDAAV,CAAN,CACD,CAFD,+BADgD,uBAKhD,GAAI,KAAKL,aAAL,CAAmBI,MAAnB,CAA4B,CAAhC,CAAmC,iDACjC,KAAM,IAAIC,MAAJ,CAAU,0DAAV,CAAN,CACD,CAFD,+BALgD,uBAShD,GAAI,KAAKJ,aAAL,CAAmBG,MAAnB,CAA4B,CAAhC,CAAmC,iDACjC,KAAM,IAAIC,MAAJ,CAAU,0DAAV,CAAN,CACD,CAFD,+BAGD,CAlB4B,CAA/B,C,uBAoBAP,mBAAmBQ,WAAnB,CAAiC,CAAC,GAAIpB,UAAJ,CAAc,CAC9CS,SAAU,YADoC,CAE9CY,SAAUC,QAAQ,6BAAR,CAFoC,CAG9CC,QAAS,CACPV,YAAa,GAAIZ,gBAAJ,CAAoBE,uBAApB,CADN,CAEPW,cAAe,GAAIb,gBAAJ,CAAoBS,yBAApB,CAFR,CAGPK,cAAe,GAAId,gBAAJ,CAAoBU,yBAApB,CAHR,CAHqC,CAAd,CAAD,CAAjC,C,uBASAC,mBAAmBY,UAAnB,CAAgC,EAAhC,CACA,OAASZ,kBAAT","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, ContentChildren, Directive } from '@angular/core';\nexport function FdsDialogTitleDirective() {}\nFdsDialogTitleDirective.prototype = {\n  contstructor: FdsDialogTitleDirective\n};\nFdsDialogTitleDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-dialog-title'\n  }]\n}];\nexport function FdsDialogContentDirective() {}\nFdsDialogContentDirective.prototype = {\n  contstructor: FdsDialogContentDirective\n};\nFdsDialogContentDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-dialog-content'\n  }]\n}];\nexport function FdsDialogActionsDirective() {}\nFdsDialogActionsDirective.prototype = {\n  contstructor: FdsDialogActionsDirective\n};\nFdsDialogActionsDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-dialog-actions'\n  }]\n}];\n/**\n * FdsDialogComponent constructor\n *\n * @constructor\n */\n\nfunction FdsDialogComponent() {\n  this.dialogTitle = '';\n  this.dialogContent = '';\n  this.dialogActions = '';\n}\n\nFdsDialogComponent.prototype = {\n  constructor: FdsDialogComponent,\n\n  /**\n   * Respond after Angular projects external content into the component's view.\n   */\n  ngAfterContentInit: function ngAfterContentInit() {\n    if (this.dialogTitle.length > 1) {\n      throw new Error('Duplicate fds-dialog-title component at in fds-dialog.');\n    }\n\n    if (this.dialogContent.length > 1) {\n      throw new Error('Duplicate fds-dialog-content component at in fds-dialog.');\n    }\n\n    if (this.dialogActions.length > 1) {\n      throw new Error('Duplicate fds-dialog-actions component at in fds-dialog.');\n    }\n  }\n};\nFdsDialogComponent.annotations = [new Component({\n  selector: 'fds-dialog',\n  template: require('./fds-dialog.component.html'),\n  queries: {\n    dialogTitle: new ContentChildren(FdsDialogTitleDirective),\n    dialogContent: new ContentChildren(FdsDialogContentDirective),\n    dialogActions: new ContentChildren(FdsDialogActionsDirective)\n  }\n})];\nFdsDialogComponent.parameters = [];\nexport { FdsDialogComponent };"]}]}
\ No newline at end of file
diff --git a/.cache-loader/ae3694b6e74a2b738b3d2543901831ca.json b/.cache-loader/ae3694b6e74a2b738b3d2543901831ca.json
new file mode 100644
index 0000000..8ef3d2e
--- /dev/null
+++ b/.cache-loader/ae3694b6e74a2b738b3d2543901831ca.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js!/Users/jaslan/Development/nifi-fds/webapp/template.html","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/template.html","mtime":1562689731054},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/html-webpack-plugin/lib/loader.js","mtime":1522745975000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js","mtime":1516207864000}],"contextDependencies":[],"result":["module.exports = \"<!--\\n Licensed to the Apache Software Foundation (ASF) under one or more\\n  contributor license agreements.  See the NOTICE file distributed with\\n  this work for additional information regarding copyright ownership.\\n  The ASF licenses this file to You under the Apache License, Version 2.0\\n  (the 'License'); you may not use this file except in compliance with\\n  the License.  You may obtain a copy of the License at\\n      http://www.apache.org/licenses/LICENSE-2.0\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an 'AS IS' BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n-->\\n<!DOCTYPE html>\\n<html>\\n<head>\\n    <title>Apache NiFi Flow Design System Demo</title>\\n    <base href=\\\"/\\\">\\n    <meta charset='UTF-8'>\\n    <meta name='viewport' content='width=device-width, initial-scale=1'>\\n    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>\\n    <!-- Styles will be injected here by webpack -->\\n</head>\\n<body>\\n    <fds-app></fds-app>\\n    <!-- Scripts will be injected here by webpack -->\\n</body>\\n</html>\\n\";"]}
\ No newline at end of file
diff --git a/.cache-loader/b08d75a94d683560e054c9869546949b.json b/.cache-loader/b08d75a94d683560e054c9869546949b.json
new file mode 100644
index 0000000..be061ca
--- /dev/null
+++ b/.cache-loader/b08d75a94d683560e054c9869546949b.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js","mtime":1562689731043},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport $ from 'jquery';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { CommonModule } from '@angular/common';\nimport { MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatSliderModule, MatSidenavModule, MatSnackBarModule, MatStepperModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatPaginatorModule, MatSortModule, MatTableModule } from '@angular/material';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { CovalentCommonModule, CovalentChipsModule, CovalentDataTableModule, CovalentDialogsModule, CovalentExpansionPanelModule, CovalentPagingModule } from '@covalent/core/bundles/covalent-core.umd.min.js';\nimport { FdsDialogsModule } from './dialogs/fds-dialogs.module';\nimport { FdsSnackBarsModule } from './snackbars/fds-snackbars.module';\n/**\n * FlowDesignSystemModule constructor.\n *\n * @constructor\n */\n\nfunction FlowDesignSystemModule() {\n  $(document).ready(function () {\n    //add fds attr to body tag to allow fine grain style overrides\n    document.body.setAttribute('fds', ''); //override the hover styles for checkbox borders\n\n    $(document.body).on('mouseenter', '.mat-checkbox-inner-container', function () {\n      $(this).find('.mat-checkbox-frame').css('border-color', '#1491C1');\n    });\n    $(document.body).on('mouseleave', '.mat-checkbox-inner-container', function () {\n      $(this).find('.mat-checkbox-frame').css('border-color', '#DDDDDD');\n    });\n  });\n}\n\nFlowDesignSystemModule.prototype = {\n  constructor: FlowDesignSystemModule\n};\nFlowDesignSystemModule.annotations = [new NgModule({\n  imports: [FlexLayoutModule, BrowserAnimationsModule, CommonModule, BrowserModule, MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatSliderModule, MatSidenavModule, MatSnackBarModule, MatStepperModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatPaginatorModule, MatSortModule, MatTableModule, CovalentCommonModule, CovalentChipsModule, CovalentDataTableModule, CovalentDialogsModule, CovalentExpansionPanelModule, CovalentPagingModule, FdsDialogsModule, FdsSnackBarsModule],\n  exports: [FlexLayoutModule, BrowserAnimationsModule, CommonModule, BrowserModule, MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatSliderModule, MatSidenavModule, MatSnackBarModule, MatStepperModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatPaginatorModule, MatSortModule, MatTableModule, CovalentCommonModule, CovalentChipsModule, CovalentDataTableModule, CovalentDialogsModule, CovalentExpansionPanelModule, CovalentPagingModule, FdsDialogsModule, FdsSnackBarsModule]\n})];\nexport default FlowDesignSystemModule;"]}
\ No newline at end of file
diff --git a/.cache-loader/bb601b2f5b0a6539ba0afc6a0853e4ec.json b/.cache-loader/bb601b2f5b0a6539ba0afc6a0853e4ec.json
new file mode 100644
index 0000000..c028c83
--- /dev/null
+++ b/.cache-loader/bb601b2f5b0a6539ba0afc6a0853e4ec.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js","mtime":1562689731051},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';\nimport { Component } from '@angular/core';\n/**\n * NfRegistryEditBucketPolicy constructor.\n *\n * @param nfRegistryApi         The api service.\n * @param nfRegistryService     The nf-registry.service module.\n * @param activatedRoute        The angular route module.\n * @param matDialogRef          The angular material dialog ref.\n * @param data                  The data passed into this component.\n * @constructor\n */\n\nfunction FdsDemoDialog(matDialogRef, data) {\n  // Services\n  this.dialogRef = matDialogRef;\n  this.data = data;\n}\n\nFdsDemoDialog.prototype = {\n  constructor: FdsDemoDialog,\n\n  /**\n   * Cancel creation of a new policy and close dialog.\n   */\n  cancel: function cancel() {\n    this.dialogRef.close();\n  }\n};\nFdsDemoDialog.annotations = [new Component({\n  template: require('./fds-demo-dialog.html')})];\nFdsDemoDialog.parameters = [MatDialogRef, MAT_DIALOG_DATA];\nexport default FdsDemoDialog;"]}
\ No newline at end of file
diff --git a/.cache-loader/bdc6e195f1831b396b84afb80a83e574.json b/.cache-loader/bdc6e195f1831b396b84afb80a83e574.json
new file mode 100644
index 0000000..d25afdf
--- /dev/null
+++ b/.cache-loader/bdc6e195f1831b396b84afb80a83e574.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/fds-snackbars.module.js","mtime":1562689731046},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule, MatIconModule, MatInputModule, MatSnackBarModule } from '@angular/material';\nimport { FormsModule } from '@angular/forms';\nimport { FdsSnackBarComponent, FdsSnackBarTitleDirective, FdsSnackBarActionsDirective, FdsSnackBarContentDirective } from './fds-snackbar.component';\nimport { ICoasterConfig, FdsSnackBarService } from './services/snackbar.service';\nimport { FdsCoasterComponent } from './coaster/coaster.component';\nvar FDS_SNACKBARS = [FdsSnackBarComponent, FdsSnackBarTitleDirective, FdsSnackBarActionsDirective, FdsSnackBarContentDirective, FdsCoasterComponent];\nvar FDS_SNACKBARS_ENTRY_COMPONENTS = [FdsCoasterComponent];\n/**\n * FdsSnackBarsModule constructor.\n *\n * @constructor\n */\n\nfunction FdsSnackBarsModule() {}\n\nFdsSnackBarsModule.prototype = {\n  constructor: FdsSnackBarsModule\n};\nFdsSnackBarsModule.annotations = [new NgModule({\n  imports: [FlexLayoutModule, FormsModule, CommonModule, MatSnackBarModule, MatInputModule, MatButtonModule, MatIconModule],\n  declarations: [FDS_SNACKBARS],\n  exports: [FDS_SNACKBARS],\n  providers: [FdsSnackBarService],\n  entryComponents: [FDS_SNACKBARS_ENTRY_COMPONENTS]\n})];\nexport { FdsSnackBarsModule, ICoasterConfig, FdsSnackBarService, FdsSnackBarComponent, FdsSnackBarTitleDirective, FdsSnackBarContentDirective, FdsSnackBarActionsDirective, FdsCoasterComponent };"]}
\ No newline at end of file
diff --git a/.cache-loader/bebebdf69c152dde675baa1e7b155d19.json b/.cache-loader/bebebdf69c152dde675baa1e7b155d19.json
new file mode 100644
index 0000000..c5d7d20
--- /dev/null
+++ b/.cache-loader/bebebdf69c152dde675baa1e7b155d19.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js??ref--5-1!/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-3!/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js","mtime":1562689731046},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js","mtime":1522257694000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["var cov_2o0wpqzfqf=function(){var path='/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js',hash='55fea6746b0130826d6929bbd7ce68e04d1856a8',Function=function(){}.constructor,global=new Function('return this')(),gcv='__coverage__',coverageData={path:'/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js',statementMap:{'0':{start:{line:21,column:2},end:{line:21,column:18}},'1':{start:{line:22,column:2},end:{line:22,column:20}},'2':{start:{line:23,column:2},end:{line:23,column:31}},'3':{start:{line:24,column:2},end:{line:24,column:36}},'4':{start:{line:26,column:0},end:{line:28,column:2}},'5':{start:{line:29,column:0},end:{line:29,column:45}},'6':{start:{line:31,column:2},end:{line:31,column:17}},'7':{start:{line:32,column:2},end:{line:32,column:18}},'8':{start:{line:34,column:0},end:{line:36,column:2}},'9':{start:{line:37,column:0},end:{line:37,column:42}},'10':{start:{line:46,column:2},end:{line:46,column:37}},'11':{start:{line:48,column:0},end:{line:126,column:2}},'12':{start:{line:61,column:4},end:{line:61,column:62}},'13':{start:{line:74,column:4},end:{line:74,column:69}},'14':{start:{line:82,column:4},end:{line:82,column:35}},'15':{start:{line:100,column:25},end:{line:100,column:45}},'16':{start:{line:101,column:4},end:{line:101,column:62}},'17':{start:{line:102,column:4},end:{line:102,column:66}},'18':{start:{line:103,column:4},end:{line:103,column:46}},'19':{start:{line:104,column:22},end:{line:104,column:97}},'20':{start:{line:105,column:27},end:{line:105,column:47}},'21':{start:{line:106,column:4},end:{line:106,column:47}},'22':{start:{line:108,column:4},end:{line:110,column:5}},'23':{start:{line:109,column:6},end:{line:109,column:44}},'24':{start:{line:112,column:4},end:{line:114,column:5}},'25':{start:{line:113,column:6},end:{line:113,column:48}},'26':{start:{line:116,column:4},end:{line:118,column:5}},'27':{start:{line:117,column:6},end:{line:117,column:42}},'28':{start:{line:120,column:4},end:{line:122,column:5}},'29':{start:{line:121,column:6},end:{line:121,column:44}},'30':{start:{line:124,column:4},end:{line:124,column:23}},'31':{start:{line:127,column:0},end:{line:127,column:46}}},fnMap:{'0':{name:'ISnackBarConfig',decl:{start:{line:20,column:16},end:{line:20,column:31}},loc:{start:{line:20,column:34},end:{line:25,column:1}},line:20},'1':{name:'ICoasterConfig',decl:{start:{line:30,column:16},end:{line:30,column:30}},loc:{start:{line:30,column:33},end:{line:33,column:1}},line:30},'2':{name:'FdsSnackBarService',decl:{start:{line:45,column:16},end:{line:45,column:34}},loc:{start:{line:45,column:48},end:{line:47,column:1}},line:45},'3':{name:'open',decl:{start:{line:60,column:17},end:{line:60,column:21}},loc:{start:{line:60,column:47},end:{line:62,column:3}},line:60},'4':{name:'openFromComponent',decl:{start:{line:73,column:30},end:{line:73,column:47}},loc:{start:{line:73,column:67},end:{line:75,column:3}},line:73},'5':{name:'dismiss',decl:{start:{line:81,column:20},end:{line:81,column:27}},loc:{start:{line:81,column:30},end:{line:83,column:3}},line:81},'6':{name:'openCoaster',decl:{start:{line:99,column:24},end:{line:99,column:35}},loc:{start:{line:99,column:44},end:{line:125,column:3}},line:99}},branchMap:{'0':{loc:{start:{line:108,column:4},end:{line:110,column:5}},type:'if',locations:[{start:{line:108,column:4},end:{line:110,column:5}},{start:{line:108,column:4},end:{line:110,column:5}}],line:108},'1':{loc:{start:{line:112,column:4},end:{line:114,column:5}},type:'if',locations:[{start:{line:112,column:4},end:{line:114,column:5}},{start:{line:112,column:4},end:{line:114,column:5}}],line:112},'2':{loc:{start:{line:116,column:4},end:{line:118,column:5}},type:'if',locations:[{start:{line:116,column:4},end:{line:118,column:5}},{start:{line:116,column:4},end:{line:118,column:5}}],line:116},'3':{loc:{start:{line:120,column:4},end:{line:122,column:5}},type:'if',locations:[{start:{line:120,column:4},end:{line:122,column:5}},{start:{line:120,column:4},end:{line:122,column:5}}],line:120}},s:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0,'7':0,'8':0,'9':0,'10':0,'11':0,'12':0,'13':0,'14':0,'15':0,'16':0,'17':0,'18':0,'19':0,'20':0,'21':0,'22':0,'23':0,'24':0,'25':0,'26':0,'27':0,'28':0,'29':0,'30':0,'31':0},f:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0},b:{'0':[0,0],'1':[0,0],'2':[0,0],'3':[0,0]},_coverageSchema:'332fd63041d2c1bcb487cc26dd0d5f7d97098a6c'},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();import{MatSnackBarConfig,MatSnackBar}from'@angular/material';import $ from'jquery';import{FdsCoasterComponent}from'../coaster/coaster.component';export function ISnackBarConfig(){cov_2o0wpqzfqf.f[0]++;cov_2o0wpqzfqf.s[0]++;this.title='';cov_2o0wpqzfqf.s[1]++;this.message='';cov_2o0wpqzfqf.s[2]++;this.snackBarRef=undefined;cov_2o0wpqzfqf.s[3]++;this.viewContainerRef=undefined;}cov_2o0wpqzfqf.s[4]++;ISnackBarConfig.prototype={contstructor:ISnackBarConfig};cov_2o0wpqzfqf.s[5]++;$.extend(ISnackBarConfig,MatSnackBarConfig);export function ICoasterConfig(){cov_2o0wpqzfqf.f[1]++;cov_2o0wpqzfqf.s[6]++;this.icon='';cov_2o0wpqzfqf.s[7]++;this.color='';}cov_2o0wpqzfqf.s[8]++;ICoasterConfig.prototype={contstructor:ICoasterConfig};cov_2o0wpqzfqf.s[9]++;$.extend(ICoasterConfig,ISnackBarConfig);export function FdsSnackBarService(MatSnackBar){cov_2o0wpqzfqf.f[2]++;cov_2o0wpqzfqf.s[10]++;this.snackBarService=MatSnackBar;}cov_2o0wpqzfqf.s[11]++;FdsSnackBarService.prototype={contstructor:FdsSnackBarService,open:function open(message,action,config){cov_2o0wpqzfqf.f[3]++;cov_2o0wpqzfqf.s[12]++;return this.snackBarService.open(message,action,config);},openFromComponent:function openFromComponent(component,config){cov_2o0wpqzfqf.f[4]++;cov_2o0wpqzfqf.s[13]++;return this.snackBarService.openFromComponent(component,config);},dismiss:function dismiss(){cov_2o0wpqzfqf.f[5]++;cov_2o0wpqzfqf.s[14]++;this.snackBarService.dismiss();},openCoaster:function openCoaster(config){cov_2o0wpqzfqf.f[6]++;var snackBarConfig=(cov_2o0wpqzfqf.s[15]++,new ICoasterConfig());cov_2o0wpqzfqf.s[16]++;snackBarConfig.verticalPosition=config.verticalPosition;cov_2o0wpqzfqf.s[17]++;snackBarConfig.horizontalPosition=config.horizontalPosition;cov_2o0wpqzfqf.s[18]++;snackBarConfig.duration=config.duration;var snackBarRef=(cov_2o0wpqzfqf.s[19]++,this.snackBarService.openFromComponent(FdsCoasterComponent,snackBarConfig));var coasterComponent=(cov_2o0wpqzfqf.s[20]++,snackBarRef.instance);cov_2o0wpqzfqf.s[21]++;coasterComponent.snackBarRef=snackBarRef;cov_2o0wpqzfqf.s[22]++;if(config.title){cov_2o0wpqzfqf.b[0][0]++;cov_2o0wpqzfqf.s[23]++;coasterComponent.title=config.title;}else{cov_2o0wpqzfqf.b[0][1]++;}cov_2o0wpqzfqf.s[24]++;if(config.message){cov_2o0wpqzfqf.b[1][0]++;cov_2o0wpqzfqf.s[25]++;coasterComponent.message=config.message;}else{cov_2o0wpqzfqf.b[1][1]++;}cov_2o0wpqzfqf.s[26]++;if(config.icon){cov_2o0wpqzfqf.b[2][0]++;cov_2o0wpqzfqf.s[27]++;coasterComponent.icon=config.icon;}else{cov_2o0wpqzfqf.b[2][1]++;}cov_2o0wpqzfqf.s[28]++;if(config.color){cov_2o0wpqzfqf.b[3][0]++;cov_2o0wpqzfqf.s[29]++;coasterComponent.color=config.color;}else{cov_2o0wpqzfqf.b[3][1]++;}cov_2o0wpqzfqf.s[30]++;return snackBarRef;}};cov_2o0wpqzfqf.s[31]++;FdsSnackBarService.parameters=[MatSnackBar];",{"version":3,"sources":["/Users/jaslan/Development/nifi-fds/platform/core/snackbars/services/snackbar.service.js"],"names":["MatSnackBarConfig","MatSnackBar","$","FdsCoasterComponent","ISnackBarConfig","title","message","snackBarRef","undefined","viewContainerRef","prototype","contstructor","extend","ICoasterConfig","icon","color","FdsSnackBarService","snackBarService","open","action","config","openFromComponent","component","dismiss","openCoaster","snackBarConfig","verticalPosition","horizontalPosition","duration","coasterComponent","instance","parameters"],"mappings":"g+IAgBA,OAASA,iBAAT,CAA4BC,WAA5B,KAA+C,mBAA/C,CACA,MAAOC,EAAP,KAAc,QAAd,CACA,OAASC,mBAAT,KAAoC,8BAApC,CACA,MAAO,SAASC,gBAAT,EAA2B,6CAChC,KAAKC,KAAL,CAAa,EAAb,CADgC,sBAEhC,KAAKC,OAAL,CAAe,EAAf,CAFgC,sBAGhC,KAAKC,WAAL,CAAmBC,SAAnB,CAHgC,sBAIhC,KAAKC,gBAAL,CAAwBD,SAAxB,CACD,C,sBACDJ,gBAAgBM,SAAhB,CAA4B,CAC1BC,aAAcP,eADY,CAA5B,C,sBAGAF,EAAEU,MAAF,CAASR,eAAT,CAA0BJ,iBAA1B,EACA,MAAO,SAASa,eAAT,EAA0B,6CAC/B,KAAKC,IAAL,CAAY,EAAZ,CAD+B,sBAE/B,KAAKC,KAAL,CAAa,EAAb,CACD,C,sBACDF,eAAeH,SAAf,CAA2B,CACzBC,aAAcE,cADW,CAA3B,C,sBAGAX,EAAEU,MAAF,CAASC,cAAT,CAAyBT,eAAzB,EAQA,MAAO,SAASY,mBAAT,CAA4Bf,WAA5B,CAAyC,8CAC9C,KAAKgB,eAAL,CAAuBhB,WAAvB,CACD,C,uBACDe,mBAAmBN,SAAnB,CAA+B,CAC7BC,aAAcK,kBADe,CAY7BE,KAAM,QAASA,KAAT,CAAcZ,OAAd,CAAuBa,MAAvB,CAA+BC,MAA/B,CAAuC,8CAC3C,MAAO,MAAKH,eAAL,CAAqBC,IAArB,CAA0BZ,OAA1B,CAAmCa,MAAnC,CAA2CC,MAA3C,CAAP,CACD,CAd4B,CAyB7BC,kBAAmB,QAASA,kBAAT,CAA2BC,SAA3B,CAAsCF,MAAtC,CAA8C,8CAC/D,MAAO,MAAKH,eAAL,CAAqBI,iBAArB,CAAuCC,SAAvC,CAAkDF,MAAlD,CAAP,CACD,CA3B4B,CAiC7BG,QAAS,QAASA,QAAT,EAAmB,8CAC1B,KAAKN,eAAL,CAAqBM,OAArB,GACD,CAnC4B,CAmD7BC,YAAa,QAASA,YAAT,CAAqBJ,MAArB,CAA6B,uBACxC,GAAIK,wCAAiB,GAAIZ,eAAJ,EAAjB,CAAJ,CADwC,uBAExCY,eAAeC,gBAAf,CAAkCN,OAAOM,gBAAzC,CAFwC,uBAGxCD,eAAeE,kBAAf,CAAoCP,OAAOO,kBAA3C,CAHwC,uBAIxCF,eAAeG,QAAf,CAA0BR,OAAOQ,QAAjC,CACA,GAAIrB,qCAAc,KAAKU,eAAL,CAAqBI,iBAArB,CAAuClB,mBAAvC,CAA4DsB,cAA5D,CAAd,CAAJ,CACA,GAAII,0CAAmBtB,YAAYuB,QAA/B,CAAJ,CANwC,uBAOxCD,iBAAiBtB,WAAjB,CAA+BA,WAA/B,CAPwC,uBASxC,GAAIa,OAAOf,KAAX,CAAkB,iDAChBwB,iBAAiBxB,KAAjB,CAAyBe,OAAOf,KAAhC,CACD,CAFD,+BATwC,uBAaxC,GAAIe,OAAOd,OAAX,CAAoB,iDAClBuB,iBAAiBvB,OAAjB,CAA2Bc,OAAOd,OAAlC,CACD,CAFD,+BAbwC,uBAiBxC,GAAIc,OAAON,IAAX,CAAiB,iDACfe,iBAAiBf,IAAjB,CAAwBM,OAAON,IAA/B,CACD,CAFD,+BAjBwC,uBAqBxC,GAAIM,OAAOL,KAAX,CAAkB,iDAChBc,iBAAiBd,KAAjB,CAAyBK,OAAOL,KAAhC,CACD,CAFD,+BArBwC,uBAyBxC,MAAOR,YAAP,CACD,CA7E4B,CAA/B,C,uBA+EAS,mBAAmBe,UAAnB,CAAgC,CAAC9B,WAAD,CAAhC","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { MatSnackBarConfig, MatSnackBar } from '@angular/material';\nimport $ from 'jquery';\nimport { FdsCoasterComponent } from '../coaster/coaster.component';\nexport function ISnackBarConfig() {\n  this.title = '';\n  this.message = '';\n  this.snackBarRef = undefined;\n  this.viewContainerRef = undefined;\n}\nISnackBarConfig.prototype = {\n  contstructor: ISnackBarConfig\n};\n$.extend(ISnackBarConfig, MatSnackBarConfig);\nexport function ICoasterConfig() {\n  this.icon = '';\n  this.color = '';\n}\nICoasterConfig.prototype = {\n  contstructor: ICoasterConfig\n};\n$.extend(ICoasterConfig, ISnackBarConfig);\n/**\n * FdsSnackBarService constructor.\n *\n * @param MatSnackBar      The angular material MatSnackBar.\n * @constructor\n */\n\nexport function FdsSnackBarService(MatSnackBar) {\n  this.snackBarService = MatSnackBar;\n}\nFdsSnackBarService.prototype = {\n  contstructor: FdsSnackBarService,\n\n  /**\n   * Wrapper function over the open() method in MatSnackBar.\n   *\n   * @param message               The message to show in the snackbar.\n   * @param action                The label for the snackbar action.\n   * @param config                Additional configuration options for the snackbar.\n   *\n   * @returns {MatSnackBarRef}    The reference to the snackbar.\n   */\n  open: function open(message, action, config) {\n    return this.snackBarService.open(message, action, config);\n  },\n\n  /**\n   * Wrapper function over the openFromComponent() method in MatSnackBar.\n   * Opens a snackbar containing the given component.\n   *\n   * @param component     The angular ComponentType<T>.\n   * @param config        The angular material MatSnackBarConfig.\n   *\n   * @returns {MatSnackBarRef}    The reference to the snackbar.\n   */\n  openFromComponent: function openFromComponent(component, config) {\n    return this.snackBarService.openFromComponent(component, config);\n  },\n\n  /**\n   * Wrapper function over the dismiss() method in MatSnackBar.\n   * Dismisses the currently-open snackbar.\n   */\n  dismiss: function dismiss() {\n    this.snackBarService.dismiss();\n  },\n\n  /**\n   * Opens a coaster snackbar with the provided config.\n   *\n   * @param config     ICoasterConfig {\n   *                                      message?: string;\n   *                                      title?: string;\n   *                                      snackBarRef?: MatSnackBarRef;\n   *                                      viewContainerRef?: ViewContainerRef;\n   *                                      icon?: string;\n   *                                      color?: string;\n   *                                   }\n   *\n   * @returns {MatSnackBarRef}    The reference to the snackbar.\n   */\n  openCoaster: function openCoaster(config) {\n    var snackBarConfig = new ICoasterConfig();\n    snackBarConfig.verticalPosition = config.verticalPosition;\n    snackBarConfig.horizontalPosition = config.horizontalPosition;\n    snackBarConfig.duration = config.duration;\n    var snackBarRef = this.snackBarService.openFromComponent(FdsCoasterComponent, snackBarConfig);\n    var coasterComponent = snackBarRef.instance;\n    coasterComponent.snackBarRef = snackBarRef;\n\n    if (config.title) {\n      coasterComponent.title = config.title;\n    }\n\n    if (config.message) {\n      coasterComponent.message = config.message;\n    }\n\n    if (config.icon) {\n      coasterComponent.icon = config.icon;\n    }\n\n    if (config.color) {\n      coasterComponent.color = config.color;\n    }\n\n    return snackBarRef;\n  }\n};\nFdsSnackBarService.parameters = [MatSnackBar];"]}]}
\ No newline at end of file
diff --git a/.cache-loader/c1c7b557219254c1ad04c6e2b5a29251.json b/.cache-loader/c1c7b557219254c1ad04c6e2b5a29251.json
new file mode 100644
index 0000000..356cc46
--- /dev/null
+++ b/.cache-loader/c1c7b557219254c1ad04c6e2b5a29251.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.js","mtime":1562689731041},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, ContentChildren, Directive } from '@angular/core';\nexport function FdsDialogTitleDirective() {}\nFdsDialogTitleDirective.prototype = {\n  contstructor: FdsDialogTitleDirective\n};\nFdsDialogTitleDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-dialog-title'\n  }]\n}];\nexport function FdsDialogContentDirective() {}\nFdsDialogContentDirective.prototype = {\n  contstructor: FdsDialogContentDirective\n};\nFdsDialogContentDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-dialog-content'\n  }]\n}];\nexport function FdsDialogActionsDirective() {}\nFdsDialogActionsDirective.prototype = {\n  contstructor: FdsDialogActionsDirective\n};\nFdsDialogActionsDirective.decorators = [{\n  type: Directive,\n  args: [{\n    selector: 'fds-dialog-actions'\n  }]\n}];\n/**\n * FdsDialogComponent constructor\n *\n * @constructor\n */\n\nfunction FdsDialogComponent() {\n  this.dialogTitle = '';\n  this.dialogContent = '';\n  this.dialogActions = '';\n}\n\nFdsDialogComponent.prototype = {\n  constructor: FdsDialogComponent,\n\n  /**\n   * Respond after Angular projects external content into the component's view.\n   */\n  ngAfterContentInit: function ngAfterContentInit() {\n    if (this.dialogTitle.length > 1) {\n      throw new Error('Duplicate fds-dialog-title component at in fds-dialog.');\n    }\n\n    if (this.dialogContent.length > 1) {\n      throw new Error('Duplicate fds-dialog-content component at in fds-dialog.');\n    }\n\n    if (this.dialogActions.length > 1) {\n      throw new Error('Duplicate fds-dialog-actions component at in fds-dialog.');\n    }\n  }\n};\nFdsDialogComponent.annotations = [new Component({\n  selector: 'fds-dialog',\n  template: require('./fds-dialog.component.html'),\n  queries: {\n    dialogTitle: new ContentChildren(FdsDialogTitleDirective),\n    dialogContent: new ContentChildren(FdsDialogContentDirective),\n    dialogActions: new ContentChildren(FdsDialogActionsDirective)\n  }\n})];\nFdsDialogComponent.parameters = [];\nexport { FdsDialogComponent };"]}
\ No newline at end of file
diff --git a/.cache-loader/c3910f5113e427a1b72687e78549b4ac.json b/.cache-loader/c3910f5113e427a1b72687e78549b4ac.json
new file mode 100644
index 0000000..dd04c1e
--- /dev/null
+++ b/.cache-loader/c3910f5113e427a1b72687e78549b4ac.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/fds-demo.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/fds-demo.js","mtime":1562689731053},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the 'License'); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component } from '@angular/core';\nimport { TdDataTableService } from '@covalent/core/bundles/covalent-core.umd.min.js';\nimport { MatDialog } from '@angular/material';\nimport { FdsDialogService, FdsSnackBarService, FdsAnimations } from '@nifi-fds/core';\nimport FdsService from 'webapp/services/fds.service.js';\nimport FdsDemoDialog from 'webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js';\n\nvar NUMBER_FORMAT = function NUMBER_FORMAT(v) {\n  return v;\n};\n\nvar DECIMAL_FORMAT = function DECIMAL_FORMAT(v) {\n  return v.toFixed(2);\n};\n\nvar date = new Date();\n/**\n * FdsDemo constructor.\n *\n * @param FdsSnackBarService    The FDS snack bar service module.\n * @param FdsService            The FDS service module.\n * @param dialog                The angular material dialog module.\n * @param TdDialogService       The covalent dialog service module.\n * @param TdDataTableService    The covalent data table service module.\n * @constructor\n */\n\nfunction FdsDemo(FdsSnackBarService, FdsService, dialog, TdDataTableService, FdsDialogService) {\n  this.fdsService = FdsService; //<editor-fold desc='Snack Bars'>\n\n  this.snackBarService = FdsSnackBarService; //</editor-fold>\n  //<editor-fold desc='Dialog'>\n\n  this.dialog = dialog; //</editor-fold>\n  //<editor-fold desc='Simple Dialogs'>\n\n  this.dialogService = FdsDialogService; //</editor-fold>\n  //<editor-fold desc='Expansion Panel'>\n\n  this.expandCollapseExpansion1Msg = 'No expanded/collapsed detected yet';\n  this.expansion1 = false;\n  this.disabled = false; //</editor-fold>\n  //<editor-fold desc='Autocomplete'>\n\n  this.currentState = '';\n  this.reactiveStates = '';\n  this.tdStates = [];\n  this.tdDisabled = false;\n  this.states = [{\n    code: 'AL',\n    name: 'Alabama'\n  }, {\n    code: 'AK',\n    name: 'Alaska'\n  }, {\n    code: 'AZ',\n    name: 'Arizona'\n  }, {\n    code: 'AR',\n    name: 'Arkansas'\n  }, {\n    code: 'CA',\n    name: 'California'\n  }, {\n    code: 'CO',\n    name: 'Colorado'\n  }, {\n    code: 'CT',\n    name: 'Connecticut'\n  }, {\n    code: 'DE',\n    name: 'Delaware'\n  }, {\n    code: 'FL',\n    name: 'Florida'\n  }, {\n    code: 'GA',\n    name: 'Georgia'\n  }, {\n    code: 'HI',\n    name: 'Hawaii'\n  }, {\n    code: 'ID',\n    name: 'Idaho'\n  }, {\n    code: 'IL',\n    name: 'Illinois'\n  }, {\n    code: 'IN',\n    name: 'Indiana'\n  }, {\n    code: 'IA',\n    name: 'Iowa'\n  }, {\n    code: 'KS',\n    name: 'Kansas'\n  }, {\n    code: 'KY',\n    name: 'Kentucky'\n  }, {\n    code: 'LA',\n    name: 'Louisiana'\n  }, {\n    code: 'ME',\n    name: 'Maine'\n  }, {\n    code: 'MD',\n    name: 'Maryland'\n  }, {\n    code: 'MA',\n    name: 'Massachusetts'\n  }, {\n    code: 'MI',\n    name: 'Michigan'\n  }, {\n    code: 'MN',\n    name: 'Minnesota'\n  }, {\n    code: 'MS',\n    name: 'Mississippi'\n  }, {\n    code: 'MO',\n    name: 'Missouri'\n  }, {\n    code: 'MT',\n    name: 'Montana'\n  }, {\n    code: 'NE',\n    name: 'Nebraska'\n  }, {\n    code: 'NV',\n    name: 'Nevada'\n  }, {\n    code: 'NH',\n    name: 'New Hampshire'\n  }, {\n    code: 'NJ',\n    name: 'New Jersey'\n  }, {\n    code: 'NM',\n    name: 'New Mexico'\n  }, {\n    code: 'NY',\n    name: 'New York'\n  }, {\n    code: 'NC',\n    name: 'North Carolina'\n  }, {\n    code: 'ND',\n    name: 'North Dakota'\n  }, {\n    code: 'OH',\n    name: 'Ohio'\n  }, {\n    code: 'OK',\n    name: 'Oklahoma'\n  }, {\n    code: 'OR',\n    name: 'Oregon'\n  }, {\n    code: 'PA',\n    name: 'Pennsylvania'\n  }, {\n    code: 'RI',\n    name: 'Rhode Island'\n  }, {\n    code: 'SC',\n    name: 'South Carolina'\n  }, {\n    code: 'SD',\n    name: 'South Dakota'\n  }, {\n    code: 'TN',\n    name: 'Tennessee'\n  }, {\n    code: 'TX',\n    name: 'Texas'\n  }, {\n    code: 'UT',\n    name: 'Utah'\n  }, {\n    code: 'VT',\n    name: 'Vermont'\n  }, {\n    code: 'VA',\n    name: 'Virginia'\n  }, {\n    code: 'WA',\n    name: 'Washington'\n  }, {\n    code: 'WV',\n    name: 'West Virginia'\n  }, {\n    code: 'WI',\n    name: 'Wisconsin'\n  }, {\n    code: 'WY',\n    name: 'Wyoming'\n  }]; //</editor-fold>\n  //<editor-fold desc='Searchable Expansion Panels'>\n\n  this.dataTableService = TdDataTableService;\n  this.droplets = [{\n    id: '23f6cc59-0156-1000-09b4-2b0610089090',\n    name: 'Decompression_Circular_Flow',\n    displayName: 'Decompressed Circular flow',\n    type: 'flow',\n    sublabel: 'A sublabel',\n    compliant: {\n      id: '25fd6vv87-3549-0001-05g6-4d4567890765',\n      label: 'Compliant',\n      type: 'certification'\n    },\n    fleet: {\n      id: '23f6cc59-3549-0001-05g6-4d4567890765',\n      label: 'Fleet',\n      type: 'certification'\n    },\n    prod: {\n      id: '52fd6vv87-3549-0001-05g6-4d4567890765',\n      label: 'Production Ready',\n      type: 'certification'\n    },\n    secure: {\n      id: '32f6cc59-3549-0001-05g6-4d4567890765',\n      label: 'Secure',\n      type: 'certification'\n    },\n    versions: [{\n      id: '23f6cc59-0156-1000-06b4-2b0810089090',\n      revision: '1',\n      dependentFlows: [{\n        id: '25fd6vv87-3549-0001-05g6-4d4567890765'\n      }],\n      created: date.setDate(date.getDate() - 1),\n      updated: new Date()\n    }, {\n      id: '25fd6vv87-3549-0001-05g6-4d4567890765',\n      revision: '2',\n      dependentFlows: [{\n        id: '23f6cc59-0156-1000-06b4-2b0810089090'\n      }],\n      created: new Date(),\n      updated: new Date()\n    }],\n    flows: [],\n    extensions: [],\n    assets: [],\n    actions: [{\n      'name': 'Delete',\n      'icon': 'fa fa-close',\n      'tooltip': 'Delete User'\n    }, {\n      'name': 'Manage',\n      'icon': 'fa fa-user',\n      'tooltip': 'Manage User'\n    }, {\n      'name': 'Action 3',\n      'icon': 'fa fa-question',\n      'tooltip': 'Whatever else we want to do...'\n    }]\n  }, {\n    id: '25fd6vv87-3249-0001-05g6-4d4767890765',\n    name: 'DateConversion',\n    displayName: 'Date conversion',\n    type: 'asset',\n    sublabel: 'A sublabel',\n    compliant: {\n      id: '25fd6vv34-3549-0001-05g6-4d4567890765',\n      label: 'Compliant',\n      type: 'certification'\n    },\n    prod: {\n      id: '52vn6vv87-3549-0001-05g6-4d4567890765',\n      label: 'Production Ready',\n      type: 'certification'\n    },\n    versions: [{\n      id: '23f6ic59-0156-1000-06b4-2b0810089090',\n      revision: '1',\n      dependentFlows: [{\n        id: '23f6cc19-0156-1000-06b4-2b0810089090'\n      }],\n      created: new Date(),\n      updated: new Date()\n    }],\n    flows: [],\n    extensions: [],\n    assets: [],\n    actions: [{\n      'name': 'Delete',\n      'icon': 'fa fa-close',\n      'tooltip': 'Delete User'\n    }]\n  }, {\n    id: '52fd6vv87-3294-0001-05g6-4d4767890765',\n    name: 'nifi-email-bundle',\n    displayName: 'nifi-email-bundle',\n    type: 'extension',\n    sublabel: 'A sublabel',\n    compliant: {\n      id: '33fd6vv87-3549-0001-05g6-4d4567890765',\n      label: 'Compliant',\n      test: {\n        label: 'test'\n      },\n      type: 'certification'\n    },\n    versions: [{\n      id: '23d3cc59-0156-1000-06b4-2b0810089090',\n      revision: '1',\n      dependentFlows: [{\n        id: '23f6cc89-0156-1000-06b4-2b0810089090'\n      }],\n      created: new Date(),\n      updated: new Date()\n    }],\n    flows: [],\n    extensions: [],\n    assets: [],\n    actions: [{\n      'name': 'Delete',\n      'icon': 'fa fa-close',\n      'tooltip': 'Delete User'\n    }, {\n      'name': 'Manage',\n      'icon': 'fa fa-user',\n      'tooltip': 'Manage User'\n    }]\n  }];\n  this.filteredDroplets = [];\n  this.dropletColumns = [{\n    name: 'id',\n    label: 'ID',\n    sortable: true\n  }, {\n    name: 'name',\n    label: 'Name',\n    sortable: true\n  }, {\n    name: 'displayName',\n    label: 'Display Name',\n    sortable: true\n  }, {\n    name: 'sublabel',\n    label: 'Label',\n    sortable: true\n  }, {\n    name: 'type',\n    label: 'Type',\n    sortable: true\n  }];\n  this.activeDropletColumn = this.dropletColumns[0];\n  this.autoCompleteDroplets = [];\n  this.dropletsSearchTerms = []; //</editor-fold>\n  //<editor-fold desc='Data Tables'>\n\n  this.data = [{\n    'id': 1,\n    'name': 'Frozen yogurt',\n    'type': 'Ice cream',\n    'calories': 159.0,\n    'fat': 6.0,\n    'carbs': 24.0,\n    'protein': 4.0,\n    'sodium': 87.0,\n    'calcium': 14.0,\n    'iron': 1.0,\n    'comments': 'I love froyo!',\n    'actions': [{\n      'name': 'Action 1',\n      'icon': 'fa fa-user',\n      'tooltip': 'Manage Users'\n    }, {\n      'name': 'Action 2',\n      'icon': 'fa fa-key',\n      'tooltip': 'Manage Permissions'\n    }]\n  }, {\n    'id': 2,\n    'name': 'Ice cream sandwich',\n    'type': 'Ice cream',\n    'calories': 237.0,\n    'fat': 9.0,\n    'carbs': 37.0,\n    'protein': 4.3,\n    'sodium': 129.0,\n    'calcium': 8.0,\n    'iron': 1.0,\n    'actions': [{\n      'name': 'Action 1',\n      'icon': 'fa fa-user',\n      'tooltip': 'Manage Users'\n    }, {\n      'name': 'Action 2',\n      'icon': 'fa fa-key',\n      'tooltip': 'Manage Permissions'\n    }, {\n      'name': 'Action 3',\n      'tooltip': 'Action 3'\n    }, {\n      'name': 'Action 4',\n      'disabled': true,\n      'tooltip': 'Action 4'\n    }, {\n      'name': 'Action 5',\n      'tooltip': 'Action 5'\n    }]\n  }, {\n    'id': 3,\n    'name': 'Eclair',\n    'type': 'Pastry',\n    'calories': 262.0,\n    'fat': 16.0,\n    'carbs': 24.0,\n    'protein': 6.0,\n    'sodium': 337.0,\n    'calcium': 6.0,\n    'iron': 7.0,\n    'actions': [{\n      'name': 'Action 1',\n      'icon': 'fa fa-user',\n      'tooltip': 'Manage Users'\n    }, {\n      'name': 'Action 2',\n      'icon': 'fa fa-key',\n      'tooltip': 'Manage Permissions'\n    }, {\n      'name': 'Action 3',\n      'tooltip': 'Action 3'\n    }, {\n      'name': 'Action 4',\n      'disabled': true,\n      'tooltip': 'Action 4'\n    }, {\n      'name': 'Action 5',\n      'tooltip': 'Action 5'\n    }]\n  }, {\n    'id': 4,\n    'name': 'Cupcake',\n    'type': 'Pastry',\n    'calories': 305.0,\n    'fat': 3.7,\n    'carbs': 67.0,\n    'protein': 4.3,\n    'sodium': 413.0,\n    'calcium': 3.0,\n    'iron': 8.0,\n    'actions': [{\n      'name': 'Action 1',\n      'icon': 'fa fa-user',\n      'tooltip': 'Manage Users'\n    }, {\n      'name': 'Action 2',\n      'icon': 'fa fa-key',\n      'tooltip': 'Manage Permissions'\n    }, {\n      'name': 'Action 3',\n      'tooltip': 'Action 3'\n    }, {\n      'name': 'Action 4',\n      'disabled': true,\n      'tooltip': 'Action 4'\n    }, {\n      'name': 'Action 5',\n      'tooltip': 'Action 5'\n    }]\n  }, {\n    'id': 5,\n    'name': 'Jelly bean',\n    'type': 'Candy',\n    'calories': 375.0,\n    'fat': 0.0,\n    'carbs': 94.0,\n    'protein': 0.0,\n    'sodium': 50.0,\n    'calcium': 0.0,\n    'iron': 0.0\n  }, {\n    'id': 6,\n    'name': 'Lollipop',\n    'type': 'Candy',\n    'calories': 392.0,\n    'fat': 0.2,\n    'carbs': 98.0,\n    'protein': 0.0,\n    'sodium': 38.0,\n    'calcium': 0.0,\n    'iron': 2.0\n  }, {\n    'id': 7,\n    'name': 'Honeycomb',\n    'type': 'Other',\n    'calories': 408.0,\n    'fat': 3.2,\n    'carbs': 87.0,\n    'protein': 6.5,\n    'sodium': 562.0,\n    'calcium': 0.0,\n    'iron': 45.0\n  }, {\n    'id': 8,\n    'name': 'Donut',\n    'type': 'Pastry',\n    'calories': 452.0,\n    'fat': 25.0,\n    'carbs': 51.0,\n    'protein': 4.9,\n    'sodium': 326.0,\n    'calcium': 2.0,\n    'iron': 22.0\n  }, {\n    'id': 9,\n    'name': 'KitKat',\n    'type': 'Candy',\n    'calories': 518.0,\n    'fat': 26.0,\n    'carbs': 65.0,\n    'protein': 7.0,\n    'sodium': 54.0,\n    'calcium': 12.0,\n    'iron': 6.0\n  }, {\n    'id': 10,\n    'name': 'Chocolate',\n    'type': 'Candy',\n    'calories': 518.0,\n    'fat': 26.0,\n    'carbs': 65.0,\n    'protein': 7.0,\n    'sodium': 54.0,\n    'calcium': 12.0,\n    'iron': 6.0\n  }, {\n    'id': 11,\n    'name': 'Chamoy',\n    'type': 'Candy',\n    'calories': 518.0,\n    'fat': 26.0,\n    'carbs': 65.0,\n    'protein': 7.0,\n    'sodium': 54.0,\n    'calcium': 12.0,\n    'iron': 6.0\n  }];\n  this.filteredData = this.data;\n  this.filteredTotal = this.data.length;\n  this.columns = [{\n    name: 'comments',\n    label: 'Comments',\n    width: 10\n  }, {\n    name: 'name',\n    label: 'Dessert (100g serving)',\n    sortable: true,\n    width: 10\n  }, {\n    name: 'type',\n    label: 'Type',\n    sortable: true,\n    width: 10\n  }, {\n    name: 'calories',\n    label: 'Calories',\n    numeric: true,\n    format: NUMBER_FORMAT,\n    sortable: true,\n    width: 10\n  }, {\n    name: 'fat',\n    label: 'Fat (g)',\n    numeric: true,\n    format: DECIMAL_FORMAT,\n    sortable: true,\n    width: 10\n  }, {\n    name: 'carbs',\n    label: 'Carbs (g)',\n    numeric: true,\n    format: NUMBER_FORMAT,\n    sortable: true,\n    width: 10\n  }, {\n    name: 'protein',\n    label: 'Protein (g)',\n    numeric: true,\n    format: DECIMAL_FORMAT,\n    sortable: true,\n    width: 10\n  }, {\n    name: 'sodium',\n    label: 'Sodium (mg)',\n    numeric: true,\n    format: NUMBER_FORMAT,\n    sortable: true,\n    width: 10\n  }, {\n    name: 'calcium',\n    label: 'Calcium (%)',\n    numeric: true,\n    format: NUMBER_FORMAT,\n    sortable: true,\n    width: 10\n  }, {\n    name: 'iron',\n    label: 'Iron (%)',\n    numeric: true,\n    format: NUMBER_FORMAT,\n    width: 10\n  }];\n  this.allRowsSelected = false;\n  this.autoCompleteData = [];\n  this.selectedRows = [];\n  this.searchTerm = [];\n  this.fromRow = 1;\n  this.currentPage = 1;\n  this.pageSize = 5;\n  this.pageCount = 0; //</editor-fold>\n  //<editor-fold desc='Chips $ Autocomplete'>\n\n  this.readOnly = false;\n  this.items = ['stepper', 'expansion-panel', 'markdown', 'highlight', 'loading', 'media', 'chips', 'http', 'json-formatter', 'pipes', 'need more?'];\n  this.itemsRequireMatch = this.items.slice(0, 6); //</editor-fold>\n  //<editor-fold desc='Radios'>\n\n  this.favoriteSeason = 'Autumn';\n  this.seasonOptions = ['Winter', 'Spring', 'Summer', 'Autumn']; //</editor-fold>\n  //<editor-fold desc='Select'>\n\n  this.selectedValue = '';\n  this.foods = [{\n    value: 'steak-0',\n    viewValue: 'Steak'\n  }, {\n    value: 'pizza-1',\n    viewValue: 'Pizza'\n  }, {\n    value: 'tacos-2',\n    viewValue: 'Tacos'\n  }]; //</editor-fold>\n  //<editor-fold desc='Checkbox'>\n\n  this.user = {\n    agreesToTOS: false\n  };\n  this.groceries = [{\n    bought: true,\n    name: 'Seitan'\n  }, {\n    bought: false,\n    name: 'Almond Meal Flour'\n  }, {\n    bought: false,\n    name: 'Organic Eggs'\n  }]; //</editor-fold>\n  //<editor-fold desc='Slide Toggle'>\n\n  this.systems = [{\n    name: 'Lights',\n    on: false,\n    color: 'primary'\n  }, {\n    name: 'Surround Sound',\n    on: true,\n    color: 'accent'\n  }, {\n    name: 'T.V.',\n    on: true,\n    color: 'warn'\n  }];\n  this.house = {\n    lockHouse: false\n  }; //</editor-fold>\n}\n\nFdsDemo.prototype = {\n  constructor: FdsDemo,\n  //<editor-fold desc='Autocomplete'>\n  displayFn: function displayFn(value) {\n    return value && _typeof(value) === 'object' ? value.name : value;\n  },\n  filterStates: function filterStates(val) {\n    return val ? this.states.filter(function (s) {\n      return s.name.match(new RegExp(val, 'gi'));\n    }) : this.states;\n  },\n  //</editor-fold>\n  //<editor-fold desc='Snack Bars'>\n  showSuccessSnackBar: function showSuccessSnackBar() {\n    this.snackBarService.openCoaster({\n      title: 'Success',\n      message: 'Some help text regarding the successful event.',\n      verticalPosition: 'top',\n      horizontalPosition: 'right',\n      icon: 'fa fa-check-circle-o',\n      color: '#1EB475',\n      duration: 3000\n    });\n  },\n  showWarnSnackBar: function showWarnSnackBar() {\n    this.snackBarService.openCoaster({\n      title: 'Warning',\n      message: 'Some help text regarding the warning.',\n      verticalPosition: 'top',\n      horizontalPosition: 'left',\n      icon: 'fa fa-exclamation-triangle',\n      color: '#E98A40',\n      duration: 3000\n    });\n  },\n  showErrorSnackBar: function showErrorSnackBar() {\n    this.snackBarService.openCoaster({\n      title: 'Error',\n      message: 'Some help text regarding the critical error. This coaster will stay open until closed with the `x` or if another coaster is created.',\n      verticalPosition: 'bottom',\n      horizontalPosition: 'right',\n      icon: 'fa fa-times-circle-o',\n      color: '#EF6162'\n    });\n  },\n  showRegularSnackBar: function showRegularSnackBar() {\n    this.snackBarService.openCoaster({\n      title: 'Regular',\n      message: 'Something interesting.',\n      verticalPosition: 'bottom',\n      horizontalPosition: 'left',\n      color: '#808793',\n      duration: 3000\n    });\n  },\n  //</editor-fold>\n  //<editor-fold desc='Dialog'>\n  openDialog: function openDialog() {\n    this.dialog.open(FdsDemoDialog);\n  },\n  //</editor-fold>\n  //<editor-fold desc='Expansion Panel'>\n  toggleExpansion1: function toggleExpansion1() {\n    if (!this.disabled) {\n      this.expansion1 = !this.expansion1;\n    }\n  },\n  toggleDisabled: function toggleDisabled() {\n    this.disabled = !this.disabled;\n  },\n  expandExpansion1Event: function expandExpansion1Event() {\n    this.expandCollapseExpansion1Msg = 'Expand event emitted.';\n  },\n  collapseExpansion1Event: function collapseExpansion1Event() {\n    this.expandCollapseExpansion1Msg = 'Collapse event emitted.';\n  },\n  //</editor-fold>\n  //<editor-fold desc='Simple Dialogs'>\n  openAlert: function openAlert() {\n    this.dialogService.openAlert({\n      title: 'Alert',\n      disableClose: true,\n      message: 'This is how simple it is to create an alert with this wrapper service.'\n    });\n  },\n  openConfirm: function openConfirm() {\n    this.dialogService.openConfirm({\n      title: 'Confirm',\n      message: 'This is how simple it is to create a confirm with this wrapper service. Do you agree?',\n      cancelButton: 'Disagree',\n      acceptButton: 'Agree'\n    });\n  },\n  openPrompt: function openPrompt() {\n    this.dialogService.openPrompt({\n      title: 'Prompt',\n      message: 'This is how simple it is to create a prompt with this wrapper service. Prompt something.',\n      value: 'Populated value',\n      cancelButton: 'Cancel',\n      acceptButton: 'Ok'\n    });\n  },\n  //</editor-fold>\n  //<editor-fold desc='Searchable Expansion Panels'>\n  isDropletFilterChecked: function isDropletFilterChecked(term) {\n    return this.dropletsSearchTerms.indexOf(term) > -1;\n  },\n  getDropletTypeCount: function getDropletTypeCount(type) {\n    return this.filteredDroplets.filter(function (droplet) {\n      return droplet.type === type;\n    }).length;\n  },\n  getDropletCertificationCount: function getDropletCertificationCount(certification) {\n    return this.filteredDroplets.filter(function (droplet) {\n      return Object.keys(droplet).find(function (key) {\n        if (key === certification && droplet[certification].type === 'certification') {\n          return droplet;\n        }\n\n        return null;\n      });\n    }).length;\n  },\n  getSortBy: function getSortBy() {\n    var sortByColumnLabel;\n    var arrayLength = this.dropletColumns.length;\n\n    for (var i = 0; i < arrayLength; i++) {\n      if (this.dropletColumns[i].active === true) {\n        sortByColumnLabel = this.dropletColumns[i].label;\n        break;\n      }\n    }\n\n    return sortByColumnLabel;\n  },\n  sortDroplets: function sortDroplets(column) {\n    if (column.sortable === true) {\n      // toggle column sort order\n      column.sortOrder = column.sortOrder === 'ASC' ? 'DESC' : 'ASC';\n      var sortOrder = column.sortOrder;\n      this.filterDroplets(column.name, sortOrder); //only one column can be actively sorted so we reset all to inactive\n\n      this.dropletColumns.forEach(function (c) {\n        c.active = false;\n      }); //and set this column as the actively sorted column\n\n      column.active = true;\n      this.activeDropletColumn = column;\n    }\n  },\n  toggleDropletsFilter: function toggleDropletsFilter(searchTerm) {\n    var applySearchTerm = true; // check if the search term is already applied and remove it if true\n\n    if (this.dropletsSearchTerms.length > 0) {\n      var arrayLength = this.dropletsSearchTerms.length;\n\n      for (var i = 0; i < arrayLength; i++) {\n        var index = this.dropletsSearchTerms.indexOf(searchTerm);\n\n        if (index > -1) {\n          this.dropletsSearchTerms.splice(index, 1);\n          applySearchTerm = false;\n        }\n      }\n    } // if we just removed the search term do NOT apply it again\n\n\n    if (applySearchTerm) {\n      this.dropletsSearchTerms.push(searchTerm);\n    }\n\n    this.filterDroplets(this.activeDropletColumn.name, this.activeDropletColumn.sortOrder);\n  },\n  filterDroplets: function filterDroplets(sortBy, sortOrder) {\n    // if `sortOrder` is `undefined` then use 'ASC'\n    if (sortOrder === undefined) {\n      sortOrder = 'ASC';\n    } // if `sortBy` is `undefined` then find the first sortable column in this.dropletColumns\n\n\n    if (sortBy === undefined) {\n      var arrayLength = this.dropletColumns.length;\n\n      for (var i = 0; i < arrayLength; i++) {\n        if (this.dropletColumns[i].sortable === true) {\n          sortBy = this.dropletColumns[i].name;\n          this.activeDropletColumn = this.dropletColumns[i]; //only one column can be actively sorted so we reset all to inactive\n\n          this.dropletColumns.forEach(function (c) {\n            c.active = false;\n          }); //and set this column as the actively sorted column\n\n          this.dropletColumns[i].active = true;\n          this.dropletColumns[i].sortOrder = sortOrder;\n          break;\n        }\n      }\n    }\n\n    var newData = this.droplets;\n\n    for (var _i = 0; _i < this.dropletsSearchTerms.length; _i++) {\n      newData = this.filterData(newData, this.dropletsSearchTerms[_i], true, this.activeDropletColumn.name);\n    }\n\n    newData = this.dataTableService.sortData(newData, sortBy, sortOrder);\n    this.filteredDroplets = newData;\n    this.getAutoCompleteDroplets();\n  },\n  getAutoCompleteDroplets: function getAutoCompleteDroplets() {\n    var self = this;\n    this.autoCompleteDroplets = [];\n    this.dropletColumns.forEach(function (c) {\n      self.filteredDroplets.forEach(function (r) {\n        return r[c.name.toLowerCase()] ? self.autoCompleteDroplets.push(r[c.name.toLowerCase()].toString()) : '';\n      });\n    });\n  },\n  //</editor-fold>\n  filterData: function filterData(data, searchTerm, ignoreCase) {\n    var field = '';\n\n    if (searchTerm.indexOf(':') > -1) {\n      field = searchTerm.split(':')[0].trim();\n      searchTerm = searchTerm.split(':')[1].trim();\n    }\n\n    var filter = searchTerm ? ignoreCase ? searchTerm.toLowerCase() : searchTerm : '';\n\n    if (filter) {\n      data = data.filter(function (item) {\n        var res = Object.keys(item).find(function (key) {\n          if (field.indexOf('.') > -1) {\n            var objArray = field.split('.');\n            var obj = item;\n            var arrayLength = objArray.length;\n\n            for (var i = 0; i < arrayLength; i++) {\n              try {\n                obj = obj[objArray[i]];\n              } catch (e) {\n                return false;\n              }\n            }\n\n            var _preItemValue = '' + obj;\n\n            var _itemValue = ignoreCase ? _preItemValue.toLowerCase() : _preItemValue;\n\n            return _itemValue.indexOf(filter) > -1;\n          }\n\n          if (key !== field && field !== '') {\n            return false;\n          }\n\n          var preItemValue = '' + item[key];\n          var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue;\n          return itemValue.indexOf(filter) > -1;\n        });\n        return !(typeof res === 'undefined');\n      });\n    }\n\n    return data;\n  },\n  //<editor-fold desc='Data Tables'>\n  sort: function sort(sortEvent, column) {\n    if (column.sortable) {\n      var sortBy = column.name;\n      column.sortOrder = column.sortOrder === 'ASC' ? 'DESC' : 'ASC';\n      var sortOrder = column.sortOrder;\n      this.filter(sortBy, sortOrder); //only one column can be actively sorted so we reset all to inactive\n\n      this.columns.forEach(function (c) {\n        c.active = false;\n      }); //and set this column as the actively sorted column\n\n      column.active = true;\n    }\n  },\n  searchRemove: function searchRemove(searchTerm) {\n    //only remove the first occurrence of the search term\n    var index = this.searchTerm.indexOf(searchTerm);\n\n    if (index !== -1) {\n      this.searchTerm.splice(index, 1);\n    }\n\n    this.fromRow = 1;\n    this.currentPage = 1;\n    this.filter();\n  },\n  searchAdd: function searchAdd(searchTerm) {\n    this.searchTerm.push(searchTerm);\n    this.fromRow = 1;\n    this.currentPage = 1;\n    this.filter();\n  },\n  page: function page(pagingEvent) {\n    this.fromRow = pagingEvent.fromRow;\n    this.currentPage = pagingEvent.page;\n    this.pageSize = pagingEvent.pageSize;\n    this.allRowsSelected = false;\n    this.filter();\n  },\n  filter: function filter(sortBy, sortOrder) {\n    if (this.allRowsSelected) {\n      this.toggleSelectAll();\n    }\n\n    this.deselectAll();\n    var newData = this.data;\n\n    for (var i = 0; i < this.searchTerm.length; i++) {\n      newData = this.filterData(newData, this.searchTerm[i], true);\n    }\n\n    this.filteredTotal = newData.length;\n    newData = this.dataTableService.sortData(newData, sortBy, sortOrder);\n    this.pageCount = newData.length;\n    newData = this.dataTableService.pageData(newData, this.fromRow, this.currentPage * this.pageSize);\n    this.filteredData = newData;\n    this.getAutoCompleteData();\n  },\n  toggleSelect: function toggleSelect(row) {\n    if (this.allFilteredRowsSelected()) {\n      this.allRowsSelected = true;\n    } else {\n      this.allRowsSelected = false;\n    }\n  },\n  toggleSelectAll: function toggleSelectAll() {\n    if (this.allRowsSelected) {\n      this.selectAll();\n    } else {\n      this.deselectAll();\n    }\n  },\n  selectAll: function selectAll() {\n    this.filteredData.forEach(function (c) {\n      c.checked = true;\n    });\n  },\n  deselectAll: function deselectAll() {\n    this.filteredData.forEach(function (c) {\n      c.checked = false;\n    });\n  },\n  allFilteredRowsSelected: function allFilteredRowsSelected() {\n    var allFilteredRowsSelected = true;\n    this.filteredData.forEach(function (c) {\n      if (c.checked === undefined || c.checked === false) {\n        allFilteredRowsSelected = false;\n      }\n    });\n    return allFilteredRowsSelected;\n  },\n  areTooltipsOn: function areTooltipsOn() {\n    return this.columns[0].hasOwnProperty('tooltip');\n  },\n  toggleTooltips: function toggleTooltips() {\n    if (this.columns[0].tooltip) {\n      this.columns.forEach(function (c) {\n        delete c.tooltip;\n      });\n    } else {\n      this.columns.forEach(function (c) {\n        c.tooltip = 'This is ' + c.label + '!';\n      });\n    }\n  },\n  openDataTablePrompt: function openDataTablePrompt(row, name) {\n    this.dialogService.openPrompt({\n      message: 'Enter comment?',\n      value: row[name]\n    }).afterClosed().subscribe(function (value) {\n      if (value !== undefined) {\n        row[name] = value;\n      }\n    });\n  },\n  getAutoCompleteData: function getAutoCompleteData() {\n    var self = this;\n    this.autoCompleteData = [];\n    this.columns.forEach(function (c) {\n      self.filteredData.forEach(function (r) {\n        return r[c.name.toLowerCase()] ? self.autoCompleteData.push(r[c.name.toLowerCase()].toString()) : '';\n      });\n    });\n  },\n  //</editor-fold>\n  //<editor-fold desc='Chips $ Autocomplete'>\n  toggleReadOnly: function toggleReadOnly() {\n    this.readOnly = !this.readOnly;\n  },\n  //</editor-fold>\n  //<editor-fold desc='Life Cycle Listeners'>\n\n  /**\n   * Initialize the component\n   */\n  ngOnInit: function ngOnInit() {\n    this.filter();\n    this.filterDroplets();\n  },\n\n  /**\n   * Respond after Angular checks the component's views and child views\n   */\n  ngAfterViewChecked: function ngAfterViewChecked() {\n    this.fdsService.inProgress = false;\n  } //</editor-fold>\n\n};\nFdsDemo.annotations = [new Component({\n  template: require('./fds-demo.html'),\n  animations: [FdsAnimations.slideInLeftAnimation],\n  host: {\n    '[@routeAnimation]': 'routeAnimation'\n  }\n})];\nFdsDemo.parameters = [FdsSnackBarService, FdsService, MatDialog, TdDataTableService, FdsDialogService];\nexport default FdsDemo;"]}
\ No newline at end of file
diff --git a/.cache-loader/d194a9d9f9297e3a8c2546cb3cceb55b.json b/.cache-loader/d194a9d9f9297e3a8c2546cb3cceb55b.json
new file mode 100644
index 0000000..d0273a7
--- /dev/null
+++ b/.cache-loader/d194a9d9f9297e3a8c2546cb3cceb55b.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/services/dialog.service.js","mtime":1562689731043},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport $ from 'jquery';\nimport { MatDialogConfig, MatDialog } from '@angular/material';\nimport { FdsConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\n\nfunction IDialogConfig() {\n  this.title = '';\n  this.message = '';\n  this.dialogRef = undefined;\n  this.viewContainerRef = undefined;\n  this.disableClose = true;\n}\n\nIDialogConfig.prototype = {\n  contstructor: IDialogConfig\n};\n$.extend(IDialogConfig, MatDialogConfig);\n\nfunction IConfirmConfig() {\n  this.acceptButton = 'ACCEPT';\n  this.acceptButtonColor = 'fds-primary';\n  this.cancelButton = 'CANCEL';\n  this.cancelButtonColor = 'fds-secondary';\n}\n\nIConfirmConfig.prototype = {\n  contstructor: IConfirmConfig\n};\n$.extend(IConfirmConfig, IDialogConfig);\n\nfunction createConfig(config) {\n  var dialogConfig = new IConfirmConfig();\n  dialogConfig.viewContainerRef = config.viewContainerRef;\n  dialogConfig.disableClose = config.disableClose;\n  return dialogConfig;\n}\n/**\n * FdsDialogService constructor.\n *\n * @param MatDialog      The angular material MatDialog.\n * @constructor\n */\n\n\nfunction FdsDialogService(MatDialog) {\n  this.dialogService = MatDialog;\n}\n\nFdsDialogService.prototype = {\n  contstructor: FdsDialogService,\n\n  /**\n   * Wrapper function over the open() method in MatDialog.\n   * Opens a modal dialog containing the given component.\n   *\n   * @param component     The angular ComponentType<T>.\n   * @param config        The angular material MatDialogConfig.\n   *\n   * @returns {MatDialoRef}    The reference to the dialog.\n   */\n  open: function open(component, config) {\n    return this.dialogService.open(component, config);\n  },\n\n  /**\n   * Wrapper function over the closeAll() method in MatDialog.\n   * Closes all of the currently-open dialogs.\n   */\n  closeAll: function closeAll() {\n    this.dialogService.closeAll();\n  },\n\n  /**\n   * Opens a confirm dialog with the provided config.\n   *\n   * @param config     IConfirmConfig {\n   *                                      message?: string;\n   *                                      title?: string;\n   *                                      dialogRef?: MatDialoRef;\n   *                                      viewContainerRef?: ViewContainerRef;\n   *                                      disableClose?: boolean;\n   *                                      acceptButton?: string;\n   *                                      acceptButtonColor?: string;\n   *                                      cancelButton?: string;\n   *                                      cancelButtonColor?: string;\n   *                                   }\n   *\n   * @returns {MatDialoRef}    The reference to the dialog.\n   */\n  openConfirm: function openConfirm(config) {\n    var dialogConfig = createConfig(config);\n    var dialogRef = this.dialogService.open(FdsConfirmDialogComponent, dialogConfig);\n    var confirmDialogComponent = dialogRef.componentInstance;\n    confirmDialogComponent.dialogRef = dialogRef;\n\n    if (config.title) {\n      confirmDialogComponent.title = config.title;\n    }\n\n    if (config.message) {\n      confirmDialogComponent.message = config.message;\n    }\n\n    if (config.acceptButton) {\n      confirmDialogComponent.acceptButton = config.acceptButton;\n    }\n\n    if (config.acceptButtonColor) {\n      confirmDialogComponent.acceptButtonColor = config.acceptButtonColor;\n    }\n\n    if (config.cancelButton) {\n      confirmDialogComponent.cancelButton = config.cancelButton;\n    }\n\n    if (config.cancelButtonColor) {\n      confirmDialogComponent.cancelButtonColor = config.cancelButtonColor;\n    }\n\n    return dialogRef;\n  }\n};\nFdsDialogService.parameters = [MatDialog];\nexport { IDialogConfig, IConfirmConfig, FdsDialogService };"]}
\ No newline at end of file
diff --git a/.cache-loader/d2f9a7b6f7fdd43a3ef6779e37b943e1.json b/.cache-loader/d2f9a7b6f7fdd43a3ef6779e37b943e1.json
new file mode 100644
index 0000000..9966555
--- /dev/null
+++ b/.cache-loader/d2f9a7b6f7fdd43a3ef6779e37b943e1.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js!/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.html","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/dialogs/fds-dialog.component.html","mtime":1562603705039},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/html-loader/index.js","mtime":1516207864000}],"contextDependencies":[],"result":["module.exports = \"<!--\\nLicensed to the Apache Software Foundation (ASF) under one or more\\ncontributor license agreements.  See the NOTICE file distributed with\\nthis work for additional information regarding copyright ownership.\\nThe ASF licenses this file to You under the Apache License, Version 2.0\\n(the \\\"License\\\"); you may not use this file except in compliance with\\nthe License.  You may obtain a copy of the License at\\n\\nhttp://www.apache.org/licenses/LICENSE-2.0\\n\\nUnless required by applicable law or agreed to in writing, software\\ndistributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\nSee the License for the specific language governing permissions and\\nlimitations under the License.\\n-->\\n\\n<div class=\\\"fds-dialog-wrapper\\\">\\n    <h3 class=\\\"fds-dialog-title mat-title\\\" *ngIf=\\\"dialogTitle.length > 0\\\">\\n        <ng-content select=\\\"fds-dialog-title\\\"></ng-content>\\n    </h3>\\n    <div class=\\\"fds-dialog-content pad-bottom-md\\\" *ngIf=\\\"dialogContent.length > 0\\\">\\n        <ng-content select=\\\"fds-dialog-content\\\"></ng-content>\\n    </div>\\n    <div class=\\\"fds-dialog-actions\\\" *ngIf=\\\"dialogActions.length > 0\\\" layout=\\\"row\\\">\\n        <span flex></span>\\n        <ng-content select=\\\"fds-dialog-actions\\\"></ng-content>\\n    </div>\\n</div>\\n\";"]}
\ No newline at end of file
diff --git a/.cache-loader/dc26b5d28bddd049ebb72edb28738f83.json b/.cache-loader/dc26b5d28bddd049ebb72edb28738f83.json
new file mode 100644
index 0000000..c98890d
--- /dev/null
+++ b/.cache-loader/dc26b5d28bddd049ebb72edb28738f83.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/webapp/fds.routes.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/fds.routes.js","mtime":1562689731054},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { RouterModule } from '@angular/router';\nimport FdsDemo from 'webapp/components/flow-design-system/fds-demo.js';\nvar FdsRoutes = RouterModule.forRoot([{\n  path: '',\n  component: FdsDemo\n}]);\nexport default FdsRoutes;"]}
\ No newline at end of file
diff --git a/.cache-loader/e5203996111f07dfca28bf72735c9511.json b/.cache-loader/e5203996111f07dfca28bf72735c9511.json
new file mode 100644
index 0000000..8e6f1c9
--- /dev/null
+++ b/.cache-loader/e5203996111f07dfca28bf72735c9511.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/platform/core/common/fds-common.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/common/fds-common.module.js","mtime":1562689731032},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport FdsStorageService from './services/fds-storage.service';\n/**\n * FdsCommonsModule constructor.\n *\n * @constructor\n */\n\nfunction FdsCommonsModule() {}\n\nFdsCommonsModule.prototype = {\n  constructor: FdsCommonsModule\n};\nFdsCommonsModule.annotations = [new NgModule({\n  imports: [],\n  declarations: [],\n  exports: [],\n  providers: [FdsStorageService]\n})];\nexport { FdsCommonsModule, FdsStorageService };"]}
\ No newline at end of file
diff --git a/.cache-loader/f505664ff5fa1a9f4541da230522f1fe.json b/.cache-loader/f505664ff5fa1a9f4541da230522f1fe.json
new file mode 100644
index 0000000..4984429
--- /dev/null
+++ b/.cache-loader/f505664ff5fa1a9f4541da230522f1fe.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/webapp/fds-bootstrap.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/fds-bootstrap.js","mtime":1562689731053},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport 'core-js';\nimport 'zone.js';\nimport 'hammerjs';\nimport $ from 'jquery';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { enableProdMode, TRANSLATIONS, TRANSLATIONS_FORMAT, LOCALE_ID } from '@angular/core';\nimport FdsModule from 'webapp/fds.module.js'; // Comment out this line when developing to assert for unidirectional data flow\n\nenableProdMode(); // Get the locale id from the global\n\nvar locale = navigator.language;\nvar providers = []; // No locale or U.S. English: no translation providers so go ahead and bootstrap the app\n\nif (!locale || locale === 'en-US') {\n  platformBrowserDynamic().bootstrapModule(FdsModule, {\n    providers: providers\n  });\n} else {\n  //load the translation providers and bootstrap the module\n  var translationFile = '/locale/messages.' + locale + '.xlf';\n  $.ajax({\n    url: translationFile\n  }).done(function (translations) {\n    // add providers if translation file for locale is loaded\n    if (translations) {\n      providers.push({\n        provide: TRANSLATIONS,\n        useValue: translations\n      });\n      providers.push({\n        provide: TRANSLATIONS_FORMAT,\n        useValue: 'xlf'\n      });\n      providers.push({\n        provide: LOCALE_ID,\n        useValue: locale\n      });\n    }\n\n    platformBrowserDynamic().bootstrapModule(FdsModule, {\n      providers: providers\n    });\n  }).fail(function () {\n    platformBrowserDynamic().bootstrapModule(FdsModule, {\n      providers: providers\n    });\n  });\n}"]}
\ No newline at end of file
diff --git a/.cache-loader/f742324340fc25285d3b9a8e4319da02.json b/.cache-loader/f742324340fc25285d3b9a8e4319da02.json
new file mode 100644
index 0000000..4923ce0
--- /dev/null
+++ b/.cache-loader/f742324340fc25285d3b9a8e4319da02.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js??ref--5-1!/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-3!/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js","mtime":1562689731043},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/istanbul-instrumenter-loader/dist/cjs.js","mtime":1522257694000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["var cov_11nl5j2j13=function(){var path='/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js',hash='82a0e60cbed4dea734924677771846c4e1a845f8',Function=function(){}.constructor,global=new Function('return this')(),gcv='__coverage__',coverageData={path:'/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js',statementMap:{'0':{start:{line:34,column:2},end:{line:44,column:5}},'1':{start:{line:36,column:4},end:{line:36,column:42}},'2':{start:{line:38,column:4},end:{line:40,column:7}},'3':{start:{line:39,column:6},end:{line:39,column:73}},'4':{start:{line:41,column:4},end:{line:43,column:7}},'5':{start:{line:42,column:6},end:{line:42,column:73}},'6':{start:{line:47,column:0},end:{line:49,column:2}},'7':{start:{line:50,column:0},end:{line:53,column:4}}},fnMap:{'0':{name:'FlowDesignSystemModule',decl:{start:{line:33,column:9},end:{line:33,column:31}},loc:{start:{line:33,column:34},end:{line:45,column:1}},line:33},'1':{name:'(anonymous_1)',decl:{start:{line:34,column:20},end:{line:34,column:21}},loc:{start:{line:34,column:32},end:{line:44,column:3}},line:34},'2':{name:'(anonymous_2)',decl:{start:{line:38,column:71},end:{line:38,column:72}},loc:{start:{line:38,column:83},end:{line:40,column:5}},line:38},'3':{name:'(anonymous_3)',decl:{start:{line:41,column:71},end:{line:41,column:72}},loc:{start:{line:41,column:83},end:{line:43,column:5}},line:41}},branchMap:{},s:{'0':0,'1':0,'2':0,'3':0,'4':0,'5':0,'6':0,'7':0},f:{'0':0,'1':0,'2':0,'3':0},b:{},_coverageSchema:'332fd63041d2c1bcb487cc26dd0d5f7d97098a6c'},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();import $ from'jquery';import{NgModule}from'@angular/core';import{FlexLayoutModule}from'@angular/flex-layout';import{CommonModule}from'@angular/common';import{MatAutocompleteModule,MatButtonModule,MatButtonToggleModule,MatCardModule,MatCheckboxModule,MatChipsModule,MatDatepickerModule,MatDialogModule,MatExpansionModule,MatFormFieldModule,MatGridListModule,MatIconModule,MatInputModule,MatListModule,MatMenuModule,MatProgressBarModule,MatProgressSpinnerModule,MatRadioModule,MatSelectModule,MatSlideToggleModule,MatSliderModule,MatSidenavModule,MatSnackBarModule,MatStepperModule,MatTabsModule,MatToolbarModule,MatTooltipModule,MatPaginatorModule,MatSortModule,MatTableModule}from'@angular/material';import{BrowserModule}from'@angular/platform-browser';import{BrowserAnimationsModule}from'@angular/platform-browser/animations';import{CovalentCommonModule,CovalentChipsModule,CovalentDataTableModule,CovalentDialogsModule,CovalentExpansionPanelModule,CovalentPagingModule}from'@covalent/core/bundles/covalent-core.umd.min.js';import{FdsDialogsModule}from'./dialogs/fds-dialogs.module';import{FdsSnackBarsModule}from'./snackbars/fds-snackbars.module';function FlowDesignSystemModule(){cov_11nl5j2j13.f[0]++;cov_11nl5j2j13.s[0]++;$(document).ready(function(){cov_11nl5j2j13.f[1]++;cov_11nl5j2j13.s[1]++;document.body.setAttribute('fds','');cov_11nl5j2j13.s[2]++;$(document.body).on('mouseenter','.mat-checkbox-inner-container',function(){cov_11nl5j2j13.f[2]++;cov_11nl5j2j13.s[3]++;$(this).find('.mat-checkbox-frame').css('border-color','#1491C1');});cov_11nl5j2j13.s[4]++;$(document.body).on('mouseleave','.mat-checkbox-inner-container',function(){cov_11nl5j2j13.f[3]++;cov_11nl5j2j13.s[5]++;$(this).find('.mat-checkbox-frame').css('border-color','#DDDDDD');});});}cov_11nl5j2j13.s[6]++;FlowDesignSystemModule.prototype={constructor:FlowDesignSystemModule};cov_11nl5j2j13.s[7]++;FlowDesignSystemModule.annotations=[new NgModule({imports:[FlexLayoutModule,BrowserAnimationsModule,CommonModule,BrowserModule,MatAutocompleteModule,MatButtonModule,MatButtonToggleModule,MatCardModule,MatCheckboxModule,MatChipsModule,MatDatepickerModule,MatDialogModule,MatExpansionModule,MatFormFieldModule,MatGridListModule,MatIconModule,MatInputModule,MatListModule,MatMenuModule,MatProgressBarModule,MatProgressSpinnerModule,MatRadioModule,MatSelectModule,MatSlideToggleModule,MatSliderModule,MatSidenavModule,MatSnackBarModule,MatStepperModule,MatTabsModule,MatToolbarModule,MatTooltipModule,MatPaginatorModule,MatSortModule,MatTableModule,CovalentCommonModule,CovalentChipsModule,CovalentDataTableModule,CovalentDialogsModule,CovalentExpansionPanelModule,CovalentPagingModule,FdsDialogsModule,FdsSnackBarsModule],exports:[FlexLayoutModule,BrowserAnimationsModule,CommonModule,BrowserModule,MatAutocompleteModule,MatButtonModule,MatButtonToggleModule,MatCardModule,MatCheckboxModule,MatChipsModule,MatDatepickerModule,MatDialogModule,MatExpansionModule,MatFormFieldModule,MatGridListModule,MatIconModule,MatInputModule,MatListModule,MatMenuModule,MatProgressBarModule,MatProgressSpinnerModule,MatRadioModule,MatSelectModule,MatSlideToggleModule,MatSliderModule,MatSidenavModule,MatSnackBarModule,MatStepperModule,MatTabsModule,MatToolbarModule,MatTooltipModule,MatPaginatorModule,MatSortModule,MatTableModule,CovalentCommonModule,CovalentChipsModule,CovalentDataTableModule,CovalentDialogsModule,CovalentExpansionPanelModule,CovalentPagingModule,FdsDialogsModule,FdsSnackBarsModule]})];export default FlowDesignSystemModule;",{"version":3,"sources":["/Users/jaslan/Development/nifi-fds/platform/core/flow-design-system.module.js"],"names":["$","NgModule","FlexLayoutModule","CommonModule","MatAutocompleteModule","MatButtonModule","MatButtonToggleModule","MatCardModule","MatCheckboxModule","MatChipsModule","MatDatepickerModule","MatDialogModule","MatExpansionModule","MatFormFieldModule","MatGridListModule","MatIconModule","MatInputModule","MatListModule","MatMenuModule","MatProgressBarModule","MatProgressSpinnerModule","MatRadioModule","MatSelectModule","MatSlideToggleModule","MatSliderModule","MatSidenavModule","MatSnackBarModule","MatStepperModule","MatTabsModule","MatToolbarModule","MatTooltipModule","MatPaginatorModule","MatSortModule","MatTableModule","BrowserModule","BrowserAnimationsModule","CovalentCommonModule","CovalentChipsModule","CovalentDataTableModule","CovalentDialogsModule","CovalentExpansionPanelModule","CovalentPagingModule","FdsDialogsModule","FdsSnackBarsModule","FlowDesignSystemModule","document","ready","body","setAttribute","on","find","css","prototype","constructor","annotations","imports","exports"],"mappings":"2sDAgBA,MAAOA,EAAP,KAAc,QAAd,CACA,OAASC,QAAT,KAAyB,eAAzB,CACA,OAASC,gBAAT,KAAiC,sBAAjC,CACA,OAASC,YAAT,KAA6B,iBAA7B,CACA,OAASC,qBAAT,CAAgCC,eAAhC,CAAiDC,qBAAjD,CAAwEC,aAAxE,CAAuFC,iBAAvF,CAA0GC,cAA1G,CAA0HC,mBAA1H,CAA+IC,eAA/I,CAAgKC,kBAAhK,CAAoLC,kBAApL,CAAwMC,iBAAxM,CAA2NC,aAA3N,CAA0OC,cAA1O,CAA0PC,aAA1P,CAAyQC,aAAzQ,CAAwRC,oBAAxR,CAA8SC,wBAA9S,CAAwUC,cAAxU,CAAwVC,eAAxV,CAAyWC,oBAAzW,CAA+XC,eAA/X,CAAgZC,gBAAhZ,CAAkaC,iBAAla,CAAqbC,gBAArb,CAAucC,aAAvc,CAAsdC,gBAAtd,CAAweC,gBAAxe,CAA0fC,kBAA1f,CAA8gBC,aAA9gB,CAA6hBC,cAA7hB,KAAmjB,mBAAnjB,CACA,OAASC,aAAT,KAA8B,2BAA9B,CACA,OAASC,uBAAT,KAAwC,sCAAxC,CACA,OAASC,oBAAT,CAA+BC,mBAA/B,CAAoDC,uBAApD,CAA6EC,qBAA7E,CAAoGC,4BAApG,CAAkIC,oBAAlI,KAA8J,iDAA9J,CACA,OAASC,gBAAT,KAAiC,8BAAjC,CACA,OAASC,kBAAT,KAAmC,kCAAnC,CAOA,QAASC,uBAAT,EAAkC,6CAChC5C,EAAE6C,QAAF,EAAYC,KAAZ,CAAkB,UAAY,6CAE5BD,SAASE,IAAT,CAAcC,YAAd,CAA2B,KAA3B,CAAkC,EAAlC,EAF4B,sBAI5BhD,EAAE6C,SAASE,IAAX,EAAiBE,EAAjB,CAAoB,YAApB,CAAkC,+BAAlC,CAAmE,UAAY,6CAC7EjD,EAAE,IAAF,EAAQkD,IAAR,CAAa,qBAAb,EAAoCC,GAApC,CAAwC,cAAxC,CAAwD,SAAxD,EACD,CAFD,EAJ4B,sBAO5BnD,EAAE6C,SAASE,IAAX,EAAiBE,EAAjB,CAAoB,YAApB,CAAkC,+BAAlC,CAAmE,UAAY,6CAC7EjD,EAAE,IAAF,EAAQkD,IAAR,CAAa,qBAAb,EAAoCC,GAApC,CAAwC,cAAxC,CAAwD,SAAxD,EACD,CAFD,EAGD,CAVD,EAWD,C,sBAEDP,uBAAuBQ,SAAvB,CAAmC,CACjCC,YAAaT,sBADoB,CAAnC,C,sBAGAA,uBAAuBU,WAAvB,CAAqC,CAAC,GAAIrD,SAAJ,CAAa,CACjDsD,QAAS,CAACrD,gBAAD,CAAmBiC,uBAAnB,CAA4ChC,YAA5C,CAA0D+B,aAA1D,CAAyE9B,qBAAzE,CAAgGC,eAAhG,CAAiHC,qBAAjH,CAAwIC,aAAxI,CAAuJC,iBAAvJ,CAA0KC,cAA1K,CAA0LC,mBAA1L,CAA+MC,eAA/M,CAAgOC,kBAAhO,CAAoPC,kBAApP,CAAwQC,iBAAxQ,CAA2RC,aAA3R,CAA0SC,cAA1S,CAA0TC,aAA1T,CAAyUC,aAAzU,CAAwVC,oBAAxV,CAA8WC,wBAA9W,CAAwYC,cAAxY,CAAwZC,eAAxZ,CAAyaC,oBAAza,CAA+bC,eAA/b,CAAgdC,gBAAhd,CAAkeC,iBAAle,CAAqfC,gBAArf,CAAugBC,aAAvgB,CAAshBC,gBAAthB,CAAwiBC,gBAAxiB,CAA0jBC,kBAA1jB,CAA8kBC,aAA9kB,CAA6lBC,cAA7lB,CAA6mBG,oBAA7mB,CAAmoBC,mBAAnoB,CAAwpBC,uBAAxpB,CAAirBC,qBAAjrB,CAAwsBC,4BAAxsB,CAAsuBC,oBAAtuB,CAA4vBC,gBAA5vB,CAA8wBC,kBAA9wB,CADwC,CAEjDa,QAAS,CAACtD,gBAAD,CAAmBiC,uBAAnB,CAA4ChC,YAA5C,CAA0D+B,aAA1D,CAAyE9B,qBAAzE,CAAgGC,eAAhG,CAAiHC,qBAAjH,CAAwIC,aAAxI,CAAuJC,iBAAvJ,CAA0KC,cAA1K,CAA0LC,mBAA1L,CAA+MC,eAA/M,CAAgOC,kBAAhO,CAAoPC,kBAApP,CAAwQC,iBAAxQ,CAA2RC,aAA3R,CAA0SC,cAA1S,CAA0TC,aAA1T,CAAyUC,aAAzU,CAAwVC,oBAAxV,CAA8WC,wBAA9W,CAAwYC,cAAxY,CAAwZC,eAAxZ,CAAyaC,oBAAza,CAA+bC,eAA/b,CAAgdC,gBAAhd,CAAkeC,iBAAle,CAAqfC,gBAArf,CAAugBC,aAAvgB,CAAshBC,gBAAthB,CAAwiBC,gBAAxiB,CAA0jBC,kBAA1jB,CAA8kBC,aAA9kB,CAA6lBC,cAA7lB,CAA6mBG,oBAA7mB,CAAmoBC,mBAAnoB,CAAwpBC,uBAAxpB,CAAirBC,qBAAjrB,CAAwsBC,4BAAxsB,CAAsuBC,oBAAtuB,CAA4vBC,gBAA5vB,CAA8wBC,kBAA9wB,CAFwC,CAAb,CAAD,CAArC,CAIA,cAAeC,uBAAf","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport $ from 'jquery';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { CommonModule } from '@angular/common';\nimport { MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatSliderModule, MatSidenavModule, MatSnackBarModule, MatStepperModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatPaginatorModule, MatSortModule, MatTableModule } from '@angular/material';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { CovalentCommonModule, CovalentChipsModule, CovalentDataTableModule, CovalentDialogsModule, CovalentExpansionPanelModule, CovalentPagingModule } from '@covalent/core/bundles/covalent-core.umd.min.js';\nimport { FdsDialogsModule } from './dialogs/fds-dialogs.module';\nimport { FdsSnackBarsModule } from './snackbars/fds-snackbars.module';\n/**\n * FlowDesignSystemModule constructor.\n *\n * @constructor\n */\n\nfunction FlowDesignSystemModule() {\n  $(document).ready(function () {\n    //add fds attr to body tag to allow fine grain style overrides\n    document.body.setAttribute('fds', ''); //override the hover styles for checkbox borders\n\n    $(document.body).on('mouseenter', '.mat-checkbox-inner-container', function () {\n      $(this).find('.mat-checkbox-frame').css('border-color', '#1491C1');\n    });\n    $(document.body).on('mouseleave', '.mat-checkbox-inner-container', function () {\n      $(this).find('.mat-checkbox-frame').css('border-color', '#DDDDDD');\n    });\n  });\n}\n\nFlowDesignSystemModule.prototype = {\n  constructor: FlowDesignSystemModule\n};\nFlowDesignSystemModule.annotations = [new NgModule({\n  imports: [FlexLayoutModule, BrowserAnimationsModule, CommonModule, BrowserModule, MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatSliderModule, MatSidenavModule, MatSnackBarModule, MatStepperModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatPaginatorModule, MatSortModule, MatTableModule, CovalentCommonModule, CovalentChipsModule, CovalentDataTableModule, CovalentDialogsModule, CovalentExpansionPanelModule, CovalentPagingModule, FdsDialogsModule, FdsSnackBarsModule],\n  exports: [FlexLayoutModule, BrowserAnimationsModule, CommonModule, BrowserModule, MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatSliderModule, MatSidenavModule, MatSnackBarModule, MatStepperModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatPaginatorModule, MatSortModule, MatTableModule, CovalentCommonModule, CovalentChipsModule, CovalentDataTableModule, CovalentDialogsModule, CovalentExpansionPanelModule, CovalentPagingModule, FdsDialogsModule, FdsSnackBarsModule]\n})];\nexport default FlowDesignSystemModule;"]}]}
\ No newline at end of file
diff --git a/.cache-loader/fb54567ff841b877db90134b2ca6ffbd.json b/.cache-loader/fb54567ff841b877db90134b2ca6ffbd.json
new file mode 100644
index 0000000..87da84a
--- /dev/null
+++ b/.cache-loader/fb54567ff841b877db90134b2ca6ffbd.json
@@ -0,0 +1 @@
+{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--5-2!/Users/jaslan/Development/nifi-fds/webapp/fds.module.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/fds.module.js","mtime":1562689731054},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport { FdsCoreModule } from '@nifi-fds/core';\nimport FdsRoutes from 'webapp/fds.routes.js';\nimport Fds from 'webapp/fds.js';\nimport FdsDemo from 'webapp/components/flow-design-system/fds-demo.js';\nimport FdsDemoDialog from 'webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js';\nimport FdsService from 'webapp/services/fds.service.js';\n\nfunction FdsModule() {}\n\nFdsModule.prototype = {\n  constructor: FdsModule\n};\nFdsModule.annotations = [new NgModule({\n  imports: [FdsCoreModule, FdsRoutes],\n  declarations: [Fds, FdsDemo, FdsDemoDialog],\n  entryComponents: [FdsDemoDialog],\n  providers: [FdsService],\n  bootstrap: [Fds]\n})];\nexport default FdsModule;"]}
\ No newline at end of file
diff --git a/README.md b/README.md
index 4451993..e2951e3 100644
--- a/README.md
+++ b/README.md
@@ -1,52 +1,36 @@
 # Apache NiFi Flow Design System
 
-The Apache NiFi Flow Design System is an atomic reusable platform for providing a consistent set of UI/UX components for open source friendly web applications to consume. Users can interact with this design system by running the demo-app locally or by visiting: [https://apache.github.io/nifi-fds/](https://apache.github.io/nifi-fds/).
+The Apache NiFi Flow Design System is an atomic reusable platform for providing a consistent set of UI/UX components for open source friendly web applications to consume. Users can interact with this design system by running the demo application locally or by visiting: [https://apache.github.io/nifi-fds/](https://apache.github.io/nifi-fds/).
 
 The demo application serves 2 main purposes
-* As a way for code reviewers to validate code changes as well as each `@nifi-fds/core` release 
-* Provides a working example of how an Angular application should leverage the `@nifi-fds/core`.
+* As a way for code reviewers to validate code changes and `@nifi-fds/core` releases. 
+* Provides a working example of how an Angular application should leverage `@nifi-fds/core`.
+
+## Requirements
+This project requires npm version 5.6.0.
 
 ## Quick Start
 For developers not interested in building the FDS NgModule you can use **npm** to install the distribution files.
 
 ```bash
-npm install @nifi-fds/core
+npm install @nifi-fds/core --save
 ```
 
-#### SystemJS
-If your project is using the SystemJS module loader, you will need to add `@nifi-fds/core` to the configuration:
-
+#### ES6
 ```javascript
-System.config({
-  // existing configuration options
-  map: {
-    ...,
-    '@flow-design-system/core': 'node_modules/@nifi-fds/core/flow-design-system.module.js',
-    '@flow-design-system/dialogs': 'node_modules/@nifi-fds/core/dialogs/fds-dialogs.module.js',
-    '@flow-design-system/dialog-component': 'node_modules/@nifi-fds/core/dialogs/fds-dialog.component.js',
-    '@flow-design-system/dialog-service': 'node_modules/@nifi-fds/core/dialogs/services/dialog.service.js',
-    '@flow-design-system/confirm-dialog-component': 'node_modules/@nifi-fds/core/dialogs/confirm-dialog/confirm-dialog.component.js',
-    '@flow-design-system/snackbars': 'node_modules/@nifi-fds/core/snackbars/fds-snackbars.module.js',
-    '@flow-design-system/snackbar-component': 'node_modules/@nifi-fds/core/snackbars/fds-snackbar.component.js',
-    '@flow-design-system/snackbar-service': 'node_modules/@nifi-fds/core/snackbars/services/snackbar.service.js',
-    '@flow-design-system/coaster-component': 'node_modules/@nifi-fds/core/snackbars/coaster/coaster.component.js',
-    '@flow-design-system/common/storage-service': 'node_modules/@nifi-fds/core/common/services/fds-storage.service.js'
-  }
-});
-```
+import { NgModule } from '@angular/core';
+import { FdsCoreModule } from '@nifi-fds/core';
 
-Next, import the **Apache NiFi Flow Design System** NgModule into your angular application. 
+function AppModule() {}
 
-```javascript
-var fdsCore = require('flow-design-system/core');
 AppModule.prototype = {
     constructor: AppModule
 };
 
 AppModule.annotations = [
-    new ngCore.NgModule({
+    new NgModule({
         imports: [
-            fdsCore,
+            FdsCoreModule,
             ...
         ],
         ...
@@ -55,20 +39,17 @@
 ```
 
 #### Style and Theming
-The Apache NiFi Flow Design System comes with a base CSS file `node_modules/@nifi-fds/core/common/styles/css/flow-design-system.min.css` (includes icons). This file must be included in the head of the HTML document before the theme file.
-
-
-NiFi FDS is also a themeable UI/UX component platform. To customize the core FDS components create a simple Sass file that defines your palettes and passes them to mixins that output the corresponding styles. A typical theme file will look something like this:
+NiFi FDS is a themeable UI/UX component platform. To customize the core FDS components create a simple Sass file that defines your primary, accent, and warn palettes and passes them to mixins that output the corresponding styles. A typical theme file will look something like this:
 
 ```sass
-@import '../../node_modules/@nifi-fds/core/common/styles/globalVars';
-@import '../../node_modules/@nifi-fds/core/theming/all-theme';
+// Include the base styles and mixins for Nifi FDS core
+@import 'platform/core/common/styles/flow-design-system';
 
 //Change these
 $primaryColor: $rose1;
 $primaryColorHover: $rose2;
-$accentColor: $blue7;
-$accentColorHover: $grey4;
+$accentColor: $blue-grey1;
+$accentColorHover: $blue4;
 
 // Include the base styles for Angular Material core. We include this here so that you only
 // have to load a single css file for Angular Material in your app.
@@ -89,17 +70,32 @@
 @include fds-theme($fds-theme);
 ```
 
-You don't have to use Sass to style the rest of your application but you will need to compile this one. Angular CLI, grunt-sass, gulp-sass, and node-sass are all great options; the output of which will be a CSS file that must be included in the head of the HTML document after the base NiFi FDS CSS styles:
+You don't have to use Sass to style the rest of your application but you will need to compile this file and include the corresponding style sheet in the head of the HTML document:
 
 ```html
 <link rel="stylesheet" href='node_modules/@nifi-fds/core/common/styles/css/flow-design-system.min.css'/>
-<link rel="stylesheet" href='demo-app/css/fds-demo.min.css'/>
 ```
 
-NOTE: The theme file may be concatenated and minified with the rest of the application's CSS.
+_NOTE: The theme file may be concatenated and minified with the rest of the application's CSS._
+
+#### Overriding font files path
+Optionally you can override the font file paths if you want your font files to be served from a different location.
+
+```sass
+$fdsFontPath: '/path/to/font/files';
+```
+
+#### Developing
+Developers can perform code changes and automatically build this project using **npm** and **webpack** from the root directory via:
+
+```bash
+npm run watch 
+```
 
 #### Building
-Developers can perform code changes and easily build this project using **npm** from the root nifi-fds directory via:
+_NOTE: Building depends on `bash` scripts found in the `scripts` folder. Therefore, building on Windows is not supported at this time._
+
+Full builds are also available using **npm** from the root directory via:
 
 ```bash
 npm run clean:install
@@ -111,30 +107,20 @@
 npm run clean:install:skipTests
 ```
 
-Developers can speed up development time by skipping the re-installation of all node_modules:
+_NOTE: Full builds for this project assume a 2 stage build but it only completes the first stage for you. In the first stage all of the assets for the project are copied into the `target/frontend-working-directory`, tested, and bundled/minified/obfuscated. It is up to the consumer of this project to integrate the second stage to include the produced index.html and optimized assets files into any deployable archive of their choosing._
+
+#### Running full builds locally
+Once built you can start the application from the `target/frontend-working-directory` directory via:
 
 ```bash
-npm run dev:install
-```
-
-or to skip re-installation of node_modules as well as building without running unit tests:
-
-```bash
-npm run dev:install:skipTests
-```
-
-#### Running locally
-Once built you can start the application from the target directory via:
-
-```bash
-cd target
+cd target/frontend-working-directory
 npm start
 ```
 
-The demo application should now be available at: [http://127.0.0.1:8080/](http://127.0.0.1:8080/). The port may differ if there is a conflict on 8080. See the output of the start command for the available URLs.
+The demo application should now be available at: [http://127.0.0.1:28080/](http://127.0.0.1:28080/). The port may differ if there is a conflict on 28080. See the output of the start command for the available URLs.
 
 ## Contact us!
 The developer mailing list (dev@nifi.apache.org) is monitored pretty closely, and we tend to respond quickly.  If you have a question, don't hesitate to shoot us an e-mail - we're here to help! Unfortunately, though, e-mails can get lost in the shuffle, so if you do send an e-mail and don't get a response within a day or two, it's our fault - don't worry about bothering us. Just ping the mailing list again.
 
 ## Documentation
-* [Contributing Guidelines](docs/CONTRIBUTING.md)
\ No newline at end of file
+* [Contributing Guidelines](docs/CONTRIBUTING.md)
diff --git a/coverage/.DS_Store b/coverage/.DS_Store
new file mode 100644
index 0000000..12ab3f9
--- /dev/null
+++ b/coverage/.DS_Store
Binary files differ
diff --git a/coverage/html/base.css b/coverage/html/base.css
new file mode 100644
index 0000000..7090209
--- /dev/null
+++ b/coverage/html/base.css
@@ -0,0 +1,223 @@
+body, html {
+  margin:0; padding: 0;
+  height: 100%;
+}
+body {
+    font-family: Helvetica Neue, Helvetica, Arial;
+    font-size: 14px;
+    color:#333;
+}
+.small { font-size: 12px; }
+*, *:after, *:before {
+  -webkit-box-sizing:border-box;
+     -moz-box-sizing:border-box;
+          box-sizing:border-box;
+  }
+h1 { font-size: 20px; margin: 0;}
+h2 { font-size: 14px; }
+pre {
+    font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
+    margin: 0;
+    padding: 0;
+    -moz-tab-size: 2;
+    -o-tab-size:  2;
+    tab-size: 2;
+}
+a { color:#0074D9; text-decoration:none; }
+a:hover { text-decoration:underline; }
+.strong { font-weight: bold; }
+.space-top1 { padding: 10px 0 0 0; }
+.pad2y { padding: 20px 0; }
+.pad1y { padding: 10px 0; }
+.pad2x { padding: 0 20px; }
+.pad2 { padding: 20px; }
+.pad1 { padding: 10px; }
+.space-left2 { padding-left:55px; }
+.space-right2 { padding-right:20px; }
+.center { text-align:center; }
+.clearfix { display:block; }
+.clearfix:after {
+  content:'';
+  display:block;
+  height:0;
+  clear:both;
+  visibility:hidden;
+  }
+.fl { float: left; }
+@media only screen and (max-width:640px) {
+  .col3 { width:100%; max-width:100%; }
+  .hide-mobile { display:none!important; }
+}
+
+.quiet {
+  color: #7f7f7f;
+  color: rgba(0,0,0,0.5);
+}
+.quiet a { opacity: 0.7; }
+
+.fraction {
+  font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
+  font-size: 10px;
+  color: #555;
+  background: #E8E8E8;
+  padding: 4px 5px;
+  border-radius: 3px;
+  vertical-align: middle;
+}
+
+div.path a:link, div.path a:visited { color: #333; }
+table.coverage {
+  border-collapse: collapse;
+  margin: 10px 0 0 0;
+  padding: 0;
+}
+
+table.coverage td {
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+}
+table.coverage td.line-count {
+    text-align: right;
+    padding: 0 5px 0 20px;
+}
+table.coverage td.line-coverage {
+    text-align: right;
+    padding-right: 10px;
+    min-width:20px;
+}
+
+table.coverage td span.cline-any {
+    display: inline-block;
+    padding: 0 5px;
+    width: 100%;
+}
+.missing-if-branch {
+    display: inline-block;
+    margin-right: 5px;
+    border-radius: 3px;
+    position: relative;
+    padding: 0 4px;
+    background: #333;
+    color: yellow;
+}
+
+.skip-if-branch {
+    display: none;
+    margin-right: 10px;
+    position: relative;
+    padding: 0 4px;
+    background: #ccc;
+    color: white;
+}
+.missing-if-branch .typ, .skip-if-branch .typ {
+    color: inherit !important;
+}
+.coverage-summary {
+  border-collapse: collapse;
+  width: 100%;
+}
+.coverage-summary tr { border-bottom: 1px solid #bbb; }
+.keyline-all { border: 1px solid #ddd; }
+.coverage-summary td, .coverage-summary th { padding: 10px; }
+.coverage-summary tbody { border: 1px solid #bbb; }
+.coverage-summary td { border-right: 1px solid #bbb; }
+.coverage-summary td:last-child { border-right: none; }
+.coverage-summary th {
+  text-align: left;
+  font-weight: normal;
+  white-space: nowrap;
+}
+.coverage-summary th.file { border-right: none !important; }
+.coverage-summary th.pct { }
+.coverage-summary th.pic,
+.coverage-summary th.abs,
+.coverage-summary td.pct,
+.coverage-summary td.abs { text-align: right; }
+.coverage-summary td.file { white-space: nowrap;  }
+.coverage-summary td.pic { min-width: 120px !important;  }
+.coverage-summary tfoot td { }
+
+.coverage-summary .sorter {
+    height: 10px;
+    width: 7px;
+    display: inline-block;
+    margin-left: 0.5em;
+    background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
+}
+.coverage-summary .sorted .sorter {
+    background-position: 0 -20px;
+}
+.coverage-summary .sorted-desc .sorter {
+    background-position: 0 -10px;
+}
+.status-line {  height: 10px; }
+/* yellow */
+.cbranch-no { background: yellow !important; color: #111; }
+/* dark red */
+.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
+.low .chart { border:1px solid #C21F39 }
+.highlighted,
+.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{
+  background: #C21F39 !important;
+}
+/* medium red */
+.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
+/* light red */
+.low, .cline-no { background:#FCE1E5 }
+/* light green */
+.high, .cline-yes { background:rgb(230,245,208) }
+/* medium green */
+.cstat-yes { background:rgb(161,215,106) }
+/* dark green */
+.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
+.high .chart { border:1px solid rgb(77,146,33) }
+
+.medium .chart { border:1px solid #666; }
+.medium .cover-fill { background: #666; }
+
+.cstat-skip { background: #ddd; color: #111; }
+.fstat-skip { background: #ddd; color: #111 !important; }
+.cbranch-skip { background: #ddd !important; color: #111; }
+
+span.cline-neutral { background: #eaeaea; }
+.medium { background: #eaeaea; }
+
+.coverage-summary td.empty {
+    opacity: .5;
+    padding-top: 4px;
+    padding-bottom: 4px;
+    line-height: 1;
+    color: #888;
+}
+
+.cover-fill, .cover-empty {
+  display:inline-block;
+  height: 12px;
+}
+.chart {
+  line-height: 0;
+}
+.cover-empty {
+    background: white;
+}
+.cover-full {
+    border-right: none !important;
+}
+pre.prettyprint {
+    border: none !important;
+    padding: 0 !important;
+    margin: 0 !important;
+}
+.com { color: #999 !important; }
+.ignore-none { color: #999; font-weight: normal; }
+
+.wrapper {
+  min-height: 100%;
+  height: auto !important;
+  height: 100%;
+  margin: 0 auto -48px;
+}
+.footer, .push {
+  height: 48px;
+}
diff --git a/coverage/html/block-navigation.js b/coverage/html/block-navigation.js
new file mode 100644
index 0000000..c7ff5a5
--- /dev/null
+++ b/coverage/html/block-navigation.js
@@ -0,0 +1,79 @@
+/* eslint-disable */
+var jumpToCode = (function init() {
+    // Classes of code we would like to highlight in the file view
+    var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no'];
+
+    // Elements to highlight in the file listing view
+    var fileListingElements = ['td.pct.low'];
+
+    // We don't want to select elements that are direct descendants of another match
+    var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
+
+    // Selecter that finds elements on the page to which we can jump
+    var selector =
+        fileListingElements.join(', ') +
+        ', ' +
+        notSelector +
+        missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
+
+    // The NodeList of matching elements
+    var missingCoverageElements = document.querySelectorAll(selector);
+
+    var currentIndex;
+
+    function toggleClass(index) {
+        missingCoverageElements
+            .item(currentIndex)
+            .classList.remove('highlighted');
+        missingCoverageElements.item(index).classList.add('highlighted');
+    }
+
+    function makeCurrent(index) {
+        toggleClass(index);
+        currentIndex = index;
+        missingCoverageElements.item(index).scrollIntoView({
+            behavior: 'smooth',
+            block: 'center',
+            inline: 'center'
+        });
+    }
+
+    function goToPrevious() {
+        var nextIndex = 0;
+        if (typeof currentIndex !== 'number' || currentIndex === 0) {
+            nextIndex = missingCoverageElements.length - 1;
+        } else if (missingCoverageElements.length > 1) {
+            nextIndex = currentIndex - 1;
+        }
+
+        makeCurrent(nextIndex);
+    }
+
+    function goToNext() {
+        var nextIndex = 0;
+
+        if (
+            typeof currentIndex === 'number' &&
+            currentIndex < missingCoverageElements.length - 1
+        ) {
+            nextIndex = currentIndex + 1;
+        }
+
+        makeCurrent(nextIndex);
+    }
+
+    return function jump(event) {
+        switch (event.which) {
+            case 78: // n
+            case 74: // j
+                goToNext();
+                break;
+            case 66: // b
+            case 75: // k
+            case 80: // p
+                goToPrevious();
+                break;
+        }
+    };
+})();
+window.addEventListener('keydown', jumpToCode);
diff --git a/coverage/html/core/common/services/fds-storage.service.js.html b/coverage/html/core/common/services/fds-storage.service.js.html
new file mode 100644
index 0000000..72f554d
--- /dev/null
+++ b/coverage/html/core/common/services/fds-storage.service.js.html
@@ -0,0 +1,723 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for core/common/services/fds-storage.service.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">All files</a> / <a href="index.html">core/common/services</a> fds-storage.service.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">77.59% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>45/58</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">62.5% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>15/24</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>13/13</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">77.19% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>44/57</span>
+      </div>
+    </div>
+    <p class="quiet">
+      Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+    </p>
+  </div>
+  <div class='status-line medium'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a>
+<a name='L145'></a><a href='#L145'>145</a>
+<a name='L146'></a><a href='#L146'>146</a>
+<a name='L147'></a><a href='#L147'>147</a>
+<a name='L148'></a><a href='#L148'>148</a>
+<a name='L149'></a><a href='#L149'>149</a>
+<a name='L150'></a><a href='#L150'>150</a>
+<a name='L151'></a><a href='#L151'>151</a>
+<a name='L152'></a><a href='#L152'>152</a>
+<a name='L153'></a><a href='#L153'>153</a>
+<a name='L154'></a><a href='#L154'>154</a>
+<a name='L155'></a><a href='#L155'>155</a>
+<a name='L156'></a><a href='#L156'>156</a>
+<a name='L157'></a><a href='#L157'>157</a>
+<a name='L158'></a><a href='#L158'>158</a>
+<a name='L159'></a><a href='#L159'>159</a>
+<a name='L160'></a><a href='#L160'>160</a>
+<a name='L161'></a><a href='#L161'>161</a>
+<a name='L162'></a><a href='#L162'>162</a>
+<a name='L163'></a><a href='#L163'>163</a>
+<a name='L164'></a><a href='#L164'>164</a>
+<a name='L165'></a><a href='#L165'>165</a>
+<a name='L166'></a><a href='#L166'>166</a>
+<a name='L167'></a><a href='#L167'>167</a>
+<a name='L168'></a><a href='#L168'>168</a>
+<a name='L169'></a><a href='#L169'>169</a>
+<a name='L170'></a><a href='#L170'>170</a>
+<a name='L171'></a><a href='#L171'>171</a>
+<a name='L172'></a><a href='#L172'>172</a>
+<a name='L173'></a><a href='#L173'>173</a>
+<a name='L174'></a><a href='#L174'>174</a>
+<a name='L175'></a><a href='#L175'>175</a>
+<a name='L176'></a><a href='#L176'>176</a>
+<a name='L177'></a><a href='#L177'>177</a>
+<a name='L178'></a><a href='#L178'>178</a>
+<a name='L179'></a><a href='#L179'>179</a>
+<a name='L180'></a><a href='#L180'>180</a>
+<a name='L181'></a><a href='#L181'>181</a>
+<a name='L182'></a><a href='#L182'>182</a>
+<a name='L183'></a><a href='#L183'>183</a>
+<a name='L184'></a><a href='#L184'>184</a>
+<a name='L185'></a><a href='#L185'>185</a>
+<a name='L186'></a><a href='#L186'>186</a>
+<a name='L187'></a><a href='#L187'>187</a>
+<a name='L188'></a><a href='#L188'>188</a>
+<a name='L189'></a><a href='#L189'>189</a>
+<a name='L190'></a><a href='#L190'>190</a>
+<a name='L191'></a><a href='#L191'>191</a>
+<a name='L192'></a><a href='#L192'>192</a>
+<a name='L193'></a><a href='#L193'>193</a>
+<a name='L194'></a><a href='#L194'>194</a>
+<a name='L195'></a><a href='#L195'>195</a>
+<a name='L196'></a><a href='#L196'>196</a>
+<a name='L197'></a><a href='#L197'>197</a>
+<a name='L198'></a><a href='#L198'>198</a>
+<a name='L199'></a><a href='#L199'>199</a>
+<a name='L200'></a><a href='#L200'>200</a>
+<a name='L201'></a><a href='#L201'>201</a>
+<a name='L202'></a><a href='#L202'>202</a>
+<a name='L203'></a><a href='#L203'>203</a>
+<a name='L204'></a><a href='#L204'>204</a>
+<a name='L205'></a><a href='#L205'>205</a>
+<a name='L206'></a><a href='#L206'>206</a>
+<a name='L207'></a><a href='#L207'>207</a>
+<a name='L208'></a><a href='#L208'>208</a>
+<a name='L209'></a><a href='#L209'>209</a>
+<a name='L210'></a><a href='#L210'>210</a>
+<a name='L211'></a><a href='#L211'>211</a>
+<a name='L212'></a><a href='#L212'>212</a>
+<a name='L213'></a><a href='#L213'>213</a>
+<a name='L214'></a><a href='#L214'>214</a>
+<a name='L215'></a><a href='#L215'>215</a>
+<a name='L216'></a><a href='#L216'>216</a>
+<a name='L217'></a><a href='#L217'>217</a>
+<a name='L218'></a><a href='#L218'>218</a>
+<a name='L219'></a><a href='#L219'>219</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">10x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">9x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">10x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">4x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">4x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">4x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+&nbsp;
+// Store items for two days before being eligible for removal.
+const MILLIS_PER_DAY = 86400000;
+const TWO_DAYS = MILLIS_PER_DAY * 2;
+&nbsp;
+const isUndefined = function (obj) {
+    return typeof obj === 'undefined';
+};
+&nbsp;
+const isNull = function (obj) {
+    return obj === null;
+};
+&nbsp;
+const isDefinedAndNotNull = function (obj) {
+    return !isUndefined(obj) &amp;&amp; !isNull(obj);
+};
+&nbsp;
+/**
+ * Checks the expiration for the specified entry.
+ *
+ * @param {object} entry
+ * @returns {boolean}
+ */
+const checkExpiration = function (entry) {
+    <span class="missing-if-branch" title="else path not taken" >E</span>if (isDefinedAndNotNull(entry.expires)) {
+        // get the expiration
+        const expires = new Date(entry.expires);
+        const now = new Date();
+&nbsp;
+        // return whether the expiration date has passed
+        return expires.valueOf() &lt; now.valueOf();
+    }
+<span class="cstat-no" title="statement not covered" >    return false;</span>
+};
+&nbsp;
+/**
+ * Gets an enty for the key. The entry expiration is not checked.
+ *
+ * @param {string} key
+ */
+const getEntry = function (key) {
+    try {
+        // parse the entry
+        const entry = JSON.parse(localStorage.getItem(key));
+&nbsp;
+        // ensure the entry and item are present
+        if (isDefinedAndNotNull(entry)) {
+            return entry;
+        }
+        return null;
+    } catch (e) {
+<span class="cstat-no" title="statement not covered" >        return null;</span>
+    }
+};
+&nbsp;
+/**
+ * FdsStorageService constructor.
+ * @constructor
+ */
+function FdsStorageService() {
+}
+&nbsp;
+FdsStorageService.prototype = {
+    constructor: FdsStorageService,
+    /**
+     * Initializes the storage. Items will be persisted for two days. Once the scripts runs
+     * thereafter, all eligible items will be removed. This strategy does not support persistence.
+     */
+    init: function () {
+        for (let i = 0; i &lt; localStorage.length; i++) {
+<span class="cstat-no" title="statement not covered" >            try {</span>
+                // get the next item
+                const key = <span class="cstat-no" title="statement not covered" >localStorage.key(i);</span>
+&nbsp;
+                // attempt to get the item which will expire if necessary
+<span class="cstat-no" title="statement not covered" >                this.getItem(key);</span>
+            } catch (e) {
+                // Do nothing
+            }
+        }
+    },
+&nbsp;
+    /**
+     * Stores the specified item.
+     *
+     * @param {string} key
+     * @param {object} item
+     * @param {integer} expires
+     */
+    setItem: function (key, item, expires) {
+        // calculate the expiration
+        expires = isDefinedAndNotNull(expires) ? <span class="branch-0 cbranch-no" title="branch not covered" >expires </span>: new Date().valueOf() + TWO_DAYS;
+&nbsp;
+        // create the entry
+        const entry = {
+            expires: expires,
+            item: item
+        };
+&nbsp;
+        // store the item
+        localStorage.setItem(key, JSON.stringify(entry));
+    },
+&nbsp;
+    /**
+     * Returns whether there is an entry for this key. This will not check the expiration. If
+     * the entry is expired, it will return null on a subsequent getItem invocation.
+     *
+     * @param {string} key
+     * @returns {boolean}
+     */
+    hasItem: function (key) {
+        return getEntry(key) !== null;
+    },
+&nbsp;
+    /**
+     * Gets the item with the specified key. If an item with this key does
+     * not exist, null is returned. If an item exists but cannot be parsed
+     * or is malformed/unrecognized, null is returned.
+     *
+     * @param {type} key
+     */
+    getItem: function (key) {
+        const entry = getEntry(key);
+        if (entry === null) {
+            return null;
+        }
+&nbsp;
+        // if the entry is expired, drop it and return null
+        <span class="missing-if-branch" title="if path not taken" >I</span>if (checkExpiration(entry)) {
+<span class="cstat-no" title="statement not covered" >            this.removeItem(key);</span>
+<span class="cstat-no" title="statement not covered" >            return null;</span>
+        }
+&nbsp;
+        // if the entry has the specified field return its value
+        <span class="missing-if-branch" title="else path not taken" >E</span>if (isDefinedAndNotNull(entry['item'])) {
+            return entry['item'];
+        }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >        return null;</span>
+    },
+&nbsp;
+    /**
+     * Gets the expiration for the specified item. This will not check the expiration. If
+     * the entry is expired, it will return null on a subsequent getItem invocation.
+     *
+     * @param {string} key
+     * @returns {integer}
+     */
+    getItemExpiration: function (key) {
+        const entry = getEntry(key);
+        <span class="missing-if-branch" title="if path not taken" >I</span>if (entry === null) {
+<span class="cstat-no" title="statement not covered" >            return null;</span>
+        }
+&nbsp;
+        // if the entry has the specified field return its value
+        <span class="missing-if-branch" title="else path not taken" >E</span>if (isDefinedAndNotNull(entry['expires'])) {
+            return entry['expires'];
+        }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >        return null;</span>
+    },
+&nbsp;
+    /**
+     * Extracts the subject from the specified jwt. If the jwt is not as expected
+     * an empty string is returned.
+     *
+     * @param {string} jwt
+     * @returns {string}
+     */
+    getJwtPayload: function (jwt) {
+        <span class="missing-if-branch" title="else path not taken" >E</span>if (isDefinedAndNotNull(jwt)) {
+            const segments = jwt.split(/\./);
+            <span class="missing-if-branch" title="if path not taken" >I</span>if (segments.length !== 3) {
+<span class="cstat-no" title="statement not covered" >                return '';</span>
+            }
+&nbsp;
+            const rawPayload = window.atob(segments[1]);
+            const payload = JSON.parse(rawPayload);
+&nbsp;
+            <span class="missing-if-branch" title="else path not taken" >E</span>if (isDefinedAndNotNull(payload)) {
+                return payload;
+            }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >            return null;</span>
+        }
+&nbsp;
+<span class="cstat-no" title="statement not covered" >        return null;</span>
+    },
+&nbsp;
+    /**
+     * Removes the item with the specified key.
+     *
+     * @param {type} key
+     */
+    removeItem: function (key) {
+        localStorage.removeItem(key);
+    }
+};
+&nbsp;
+FdsStorageService.parameters = [];
+&nbsp;
+export default FdsStorageService;
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Fri Jul 19 2019 13:54:56 GMT-0400 (EDT)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+<script src="../../../block-navigation.js"></script>
+</body>
+</html>
diff --git a/coverage/html/core/common/services/index.html b/coverage/html/core/common/services/index.html
new file mode 100644
index 0000000..c4691a2
--- /dev/null
+++ b/coverage/html/core/common/services/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for core/common/services</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">All files</a> core/common/services
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">77.59% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>45/58</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">62.5% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>15/24</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>13/13</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">77.19% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>44/57</span>
+      </div>
+    </div>
+    <p class="quiet">
+      Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+    </p>
+  </div>
+  <div class='status-line medium'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file medium" data-value="fds-storage.service.js"><a href="fds-storage.service.js.html">fds-storage.service.js</a></td>
+	<td data-value="77.59" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 77%;"></div><div class="cover-empty" style="width:23%;"></div></div></td>
+	<td data-value="77.59" class="pct medium">77.59%</td>
+	<td data-value="58" class="abs medium">45/58</td>
+	<td data-value="62.5" class="pct medium">62.5%</td>
+	<td data-value="24" class="abs medium">15/24</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="13" class="abs high">13/13</td>
+	<td data-value="77.19" class="pct medium">77.19%</td>
+	<td data-value="57" class="abs medium">44/57</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Fri Jul 19 2019 13:54:56 GMT-0400 (EDT)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+<script src="../../../block-navigation.js"></script>
+</body>
+</html>
diff --git a/coverage/html/core/dialogs/confirm-dialog/confirm-dialog.component.js.html b/coverage/html/core/dialogs/confirm-dialog/confirm-dialog.component.js.html
new file mode 100644
index 0000000..8b9759e
--- /dev/null
+++ b/coverage/html/core/dialogs/confirm-dialog/confirm-dialog.component.js.html
@@ -0,0 +1,267 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for core/dialogs/confirm-dialog/confirm-dialog.component.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">All files</a> / <a href="index.html">core/dialogs/confirm-dialog</a> confirm-dialog.component.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>14/14</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>3/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>14/14</span>
+      </div>
+    </div>
+    <p class="quiet">
+      Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+    </p>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+&nbsp;
+import { Component } from '@angular/core';
+&nbsp;
+/**
+ * FdsConfirmDialogComponent constructor.
+ *
+ * @constructor
+ */
+function FdsConfirmDialogComponent() {
+    this.title = '';
+    this.message = '';
+    this.acceptButton = '';
+    this.acceptButtonColor = 'fds-primary';
+    this.cancelButton = '';
+    this.cancelButtonColor = 'fds-regular';
+    this.dialogRef = undefined;
+    this.viewContainerRef = undefined;
+    this.disableClose = true;
+}
+&nbsp;
+FdsConfirmDialogComponent.prototype = {
+    constructor: FdsConfirmDialogComponent,
+&nbsp;
+    /**
+     * Close the dialog and send a cancel response to any subscribers.
+     */
+    cancel: function () {
+        this.dialogRef.close(false);
+    },
+&nbsp;
+    /**
+     * Close the dialog and send an accept response to any subscribers.
+     */
+    accept: function () {
+        this.dialogRef.close(true);
+    }
+};
+&nbsp;
+FdsConfirmDialogComponent.annotations = [
+    new Component({
+        selector: 'fds-confirm-dialog',
+        templateUrl: './confirm-dialog.component.html'
+    })
+];
+&nbsp;
+FdsConfirmDialogComponent.parameters = [];
+&nbsp;
+export {
+    FdsConfirmDialogComponent
+};
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Fri Jul 19 2019 13:54:56 GMT-0400 (EDT)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+<script src="../../../block-navigation.js"></script>
+</body>
+</html>
diff --git a/coverage/html/core/dialogs/confirm-dialog/index.html b/coverage/html/core/dialogs/confirm-dialog/index.html
new file mode 100644
index 0000000..c246d14
--- /dev/null
+++ b/coverage/html/core/dialogs/confirm-dialog/index.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for core/dialogs/confirm-dialog</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">All files</a> core/dialogs/confirm-dialog
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>14/14</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>3/3</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>14/14</span>
+      </div>
+    </div>
+    <p class="quiet">
+      Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+    </p>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="confirm-dialog.component.js"><a href="confirm-dialog.component.js.html">confirm-dialog.component.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="14" class="abs high">14/14</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="3" class="abs high">3/3</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="14" class="abs high">14/14</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Fri Jul 19 2019 13:54:56 GMT-0400 (EDT)
+</div>
+</div>
+<script src="../../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../../sorter.js"></script>
+<script src="../../../block-navigation.js"></script>
+</body>
+</html>
diff --git a/coverage/html/core/dialogs/fds-dialog.component.js.html b/coverage/html/core/dialogs/fds-dialog.component.js.html
new file mode 100644
index 0000000..ab66de1
--- /dev/null
+++ b/coverage/html/core/dialogs/fds-dialog.component.js.html
@@ -0,0 +1,372 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for core/dialogs/fds-dialog.component.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">All files</a> / <a href="index.html">core/dialogs</a> fds-dialog.component.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">83.33% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>15/18</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>3/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">80% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>4/5</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">83.33% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>15/18</span>
+      </div>
+    </div>
+    <p class="quiet">
+      Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+    </p>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">4x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">4x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">4x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+&nbsp;
+import {
+    Component,
+    ContentChildren,
+    Directive
+} from '@angular/core';
+&nbsp;
+export function <span class="fstat-no" title="function not covered" >FdsDialogTitleDirective(</span>) {
+}
+&nbsp;
+FdsDialogTitleDirective.prototype = {
+    contstructor: FdsDialogTitleDirective
+};
+&nbsp;
+FdsDialogTitleDirective.decorators = [
+    { type: Directive, args: [{ selector: 'fds-dialog-title' }] },
+];
+&nbsp;
+export function FdsDialogContentDirective() {
+}
+&nbsp;
+FdsDialogContentDirective.prototype = {
+    contstructor: FdsDialogContentDirective
+};
+&nbsp;
+FdsDialogContentDirective.decorators = [
+    { type: Directive, args: [{ selector: 'fds-dialog-content' }] },
+];
+&nbsp;
+export function FdsDialogActionsDirective() {
+}
+&nbsp;
+FdsDialogActionsDirective.prototype = {
+    contstructor: FdsDialogActionsDirective
+};
+&nbsp;
+FdsDialogActionsDirective.decorators = [
+    { type: Directive, args: [{ selector: 'fds-dialog-actions' }] },
+];
+&nbsp;
+/**
+ * FdsDialogComponent constructor
+ *
+ * @constructor
+ */
+function FdsDialogComponent() {
+    this.dialogTitle = '';
+    this.dialogContent = '';
+    this.dialogActions = '';
+}
+&nbsp;
+FdsDialogComponent.prototype = {
+    constructor: FdsDialogComponent,
+&nbsp;
+    /**
+     * Respond after Angular projects external content into the component's view.
+     */
+    ngAfterContentInit: function () {
+        <span class="missing-if-branch" title="if path not taken" >I</span>if (this.dialogTitle.length &gt; 1) {
+<span class="cstat-no" title="statement not covered" >            throw new Error('Duplicate fds-dialog-title component at in fds-dialog.');</span>
+        }
+        <span class="missing-if-branch" title="if path not taken" >I</span>if (this.dialogContent.length &gt; 1) {
+<span class="cstat-no" title="statement not covered" >            throw new Error('Duplicate fds-dialog-content component at in fds-dialog.');</span>
+        }
+        <span class="missing-if-branch" title="if path not taken" >I</span>if (this.dialogActions.length &gt; 1) {
+<span class="cstat-no" title="statement not covered" >            throw new Error('Duplicate fds-dialog-actions component at in fds-dialog.');</span>
+        }
+    }
+};
+&nbsp;
+FdsDialogComponent.annotations = [
+    new Component({
+        selector: 'fds-dialog',
+        templateUrl: './fds-dialog.component.html',
+        queries: {
+            dialogTitle: new ContentChildren(FdsDialogTitleDirective),
+            dialogContent: new ContentChildren(FdsDialogContentDirective),
+            dialogActions: new ContentChildren(FdsDialogActionsDirective)
+        }
+    })
+];
+&nbsp;
+FdsDialogComponent.parameters = [];
+&nbsp;
+export { FdsDialogComponent };
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Fri Jul 19 2019 13:54:56 GMT-0400 (EDT)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+<script src="../../block-navigation.js"></script>
+</body>
+</html>
diff --git a/coverage/html/core/dialogs/fds-dialogs.module.js.html b/coverage/html/core/dialogs/fds-dialogs.module.js.html
new file mode 100644
index 0000000..00f765c
--- /dev/null
+++ b/coverage/html/core/dialogs/fds-dialogs.module.js.html
@@ -0,0 +1,369 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for core/dialogs/fds-dialogs.module.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">All files</a> / <a href="index.html">core/dialogs</a> fds-dialogs.module.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>4/4</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/0</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>1/1</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">100% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>4/4</span>
+      </div>
+    </div>
+    <p class="quiet">
+      Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+    </p>
+  </div>
+  <div class='status-line high'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+&nbsp;
+import { NgModule } from '@angular/core';
+import { FlexLayoutModule } from '@angular/flex-layout';
+import { CommonModule } from '@angular/common';
+import {
+    MatButtonModule,
+    MatIconModule,
+    MatInputModule,
+    MatDialogModule
+} from '@angular/material';
+import { FormsModule } from '@angular/forms';
+import {
+    FdsDialogTitleDirective,
+    FdsDialogContentDirective,
+    FdsDialogActionsDirective,
+    FdsDialogComponent
+} from './fds-dialog.component';
+import {
+    IConfirmConfig,
+    FdsDialogService
+} from './services/dialog.service';
+import { FdsConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';
+&nbsp;
+const FDS_DIALOGS = [
+    FdsDialogComponent,
+    FdsDialogTitleDirective,
+    FdsDialogActionsDirective,
+    FdsDialogContentDirective,
+    FdsConfirmDialogComponent
+];
+&nbsp;
+const FDS_DIALOGS_ENTRY_COMPONENTS = [
+    FdsConfirmDialogComponent
+];
+&nbsp;
+/**
+ * FdsDialogsModule constructor.
+ *
+ * @constructor
+ */
+function FdsDialogsModule() {
+&nbsp;
+}
+&nbsp;
+FdsDialogsModule.prototype = {
+    constructor: FdsDialogsModule
+};
+&nbsp;
+FdsDialogsModule.annotations = [
+    new NgModule({
+        imports: [
+            FlexLayoutModule,
+            FormsModule,
+            CommonModule,
+            MatDialogModule,
+            MatInputModule,
+            MatButtonModule,
+            MatIconModule
+        ],
+        declarations: [
+            FDS_DIALOGS
+        ],
+        exports: [
+            FDS_DIALOGS
+        ],
+        providers: [
+            FdsDialogService
+        ],
+        entryComponents: [
+            FDS_DIALOGS_ENTRY_COMPONENTS
+        ]
+    })
+];
+&nbsp;
+export {
+    FdsDialogsModule,
+    IConfirmConfig,
+    FdsDialogService,
+    FdsDialogComponent,
+    FdsDialogTitleDirective,
+    FdsDialogContentDirective,
+    FdsDialogActionsDirective,
+    FdsConfirmDialogComponent
+};
+&nbsp;</pre></td></tr>
+</table></pre>
+<div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Fri Jul 19 2019 13:54:56 GMT-0400 (EDT)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+<script src="../../block-navigation.js"></script>
+</body>
+</html>
diff --git a/coverage/html/core/dialogs/index.html b/coverage/html/core/dialogs/index.html
new file mode 100644
index 0000000..9b9f859
--- /dev/null
+++ b/coverage/html/core/dialogs/index.html
@@ -0,0 +1,110 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for core/dialogs</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../prettify.css" />
+    <link rel="stylesheet" href="../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../index.html">All files</a> core/dialogs
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">86.36% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>19/22</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">50% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>3/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">83.33% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>5/6</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">86.36% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>19/22</span>
+      </div>
+    </div>
+    <p class="quiet">
+      Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+    </p>
+  </div>
+  <div class='status-line high'></div>
+<div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="fds-dialog.component.js"><a href="fds-dialog.component.js.html">fds-dialog.component.js</a></td>
+	<td data-value="83.33" class="pic high"><div class="chart"><div class="cover-fill" style="width: 83%;"></div><div class="cover-empty" style="width:17%;"></div></div></td>
+	<td data-value="83.33" class="pct high">83.33%</td>
+	<td data-value="18" class="abs high">15/18</td>
+	<td data-value="50" class="pct medium">50%</td>
+	<td data-value="6" class="abs medium">3/6</td>
+	<td data-value="80" class="pct high">80%</td>
+	<td data-value="5" class="abs high">4/5</td>
+	<td data-value="83.33" class="pct high">83.33%</td>
+	<td data-value="18" class="abs high">15/18</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="fds-dialogs.module.js"><a href="fds-dialogs.module.js.html">fds-dialogs.module.js</a></td>
+	<td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="4" class="abs high">4/4</td>
+	</tr>
+
+</tbody>
+</table>
+</div><div class='push'></div><!-- for sticky footer -->
+</div><!-- /wrapper -->
+<div class='footer quiet pad2 space-top1 center small'>
+  Code coverage
+  generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Fri Jul 19 2019 13:54:56 GMT-0400 (EDT)
+</div>
+</div>
+<script src="../../prettify.js"></script>
+<script>
+window.onload = function () {
+        if (typeof prettyPrint === 'function') {
+            prettyPrint();
+        }
+};
+</script>
+<script src="../../sorter.js"></script>
+<script src="../../block-navigation.js"></script>
+</body>
+</html>
diff --git a/coverage/html/core/dialogs/services/dialog.service.js.html b/coverage/html/core/dialogs/services/dialog.service.js.html
new file mode 100644
index 0000000..4f21a9d
--- /dev/null
+++ b/coverage/html/core/dialogs/services/dialog.service.js.html
@@ -0,0 +1,498 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <title>Code coverage report for core/dialogs/services/dialog.service.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+<body>
+<div class='wrapper'>
+  <div class='pad1'>
+    <h1>
+      <a href="../../../index.html">All files</a> / <a href="index.html">core/dialogs/services</a> dialog.service.js
+    </h1>
+    <div class='clearfix'>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">15.38% </span>
+        <span class="quiet">Statements</span>
+        <span class='fraction'>6/39</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Branches</span>
+        <span class='fraction'>0/12</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">0% </span>
+        <span class="quiet">Functions</span>
+        <span class='fraction'>0/7</span>
+      </div>
+      <div class='fl pad1y space-right2'>
+        <span class="strong">15.38% </span>
+        <span class="quiet">Lines</span>
+        <span class='fraction'>6/39</span>
+      </div>
+    </div>
+    <p class="quiet">
+      Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+    </p>
+  </div>
+  <div class='status-line low'></div>
+<pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
<