kwikid-forms 0.6.32 → 0.6.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,10 +8,12 @@ export var ELogEventType;
8
8
  ELogEventType["FORM__API_BUTTON_CLICK"] = "FORM__API_BUTTON_CLICK";
9
9
  ELogEventType["FORM__API_REQUEST"] = "FORM__API_REQUEST";
10
10
  ELogEventType["FORM__API_REQUEST_INVALID"] = "FORM__API_REQUEST_INVALID";
11
+ ELogEventType["FORM__API_REQUEST_REVERSE_LAT_LONG"] = "FORM__API_REQUEST_REVERSE_LAT_LONG";
11
12
  ELogEventType["FORM__API_REQUEST_UPLOAD_FILE"] = "FORM__API_REQUEST_UPLOAD_FILE";
12
13
  ELogEventType["FORM__API_REQUEST_UPLOAD_IMAGE"] = "FORM__API_REQUEST_UPLOAD_IMAGE";
13
14
  ELogEventType["FORM__API_REQUEST_UPLOAD_VIDEO"] = "FORM__API_REQUEST_UPLOAD_VIDEO";
14
15
  ELogEventType["FORM__API_RESPONSE"] = "FORM__API_RESPONSE";
16
+ ELogEventType["FORM__API_RESPONSE_REVERSE_LAT_LONG"] = "FORM__API_RESPONSE_REVERSE_LAT_LONG";
15
17
  ELogEventType["FORM__API_RESPONSE_UPLOAD_FILE"] = "FORM__API_RESPONSE_UPLOAD_FILE";
16
18
  ELogEventType["FORM__API_RESPONSE_UPLOAD_IMAGE"] = "FORM__API_RESPONSE_UPLOAD_IMAGE";
17
19
  ELogEventType["FORM__API_RESPONSE_UPLOAD_VIDEO"] = "FORM__API_RESPONSE_UPLOAD_VIDEO";
@@ -22,8 +24,8 @@ export var ELogEventType;
22
24
  ELogEventType["FORM__DIALOG_ERROR"] = "FORM__DIALOG_ERROR";
23
25
  ELogEventType["FORM__DIALOG_HIDE"] = "FORM__DIALOG_HIDE";
24
26
  ELogEventType["FORM__DIALOG_SHOW"] = "FORM__DIALOG_SHOW";
25
- ELogEventType["FORM__FIELD_API_TIMER_MESSAGE_SHOW"] = "FORM__FIELD_API_TIMER_MESSAGE_SHOW";
26
27
  ELogEventType["FORM__FIELD_API_TIMER_MESSAGE_HIDE"] = "FORM__FIELD_API_TIMER_MESSAGE_HIDE";
28
+ ELogEventType["FORM__FIELD_API_TIMER_MESSAGE_SHOW"] = "FORM__FIELD_API_TIMER_MESSAGE_SHOW";
27
29
  ELogEventType["FORM__FIELD_BUTTON_CLICK"] = "FORM__FIELD_BUTTON_CLICK";
28
30
  ELogEventType["FORM__FIELD_CAMERA_BUTTON_CLICK"] = "FORM__FIELD_CAMERA_BUTTON_CLICK";
29
31
  ELogEventType["FORM__FIELD_DISABLE"] = "FORM__FIELD_DISABLE";
@@ -39,6 +41,9 @@ export var ELogEventType;
39
41
  ELogEventType["FORM__FIELD_RESET"] = "FORM__FIELD_RESET";
40
42
  ELogEventType["FORM__FIELD_RESET_BUTTON_CLICK"] = "FORM__FIELD_RESET_BUTTON_CLICK";
41
43
  ELogEventType["FORM__FIELD_SHOW"] = "FORM__FIELD_SHOW";
44
+ ELogEventType["FORM__LIVE_LOCATION_BUTTON_CLICK"] = "FORM__LIVE_LOCATION_BUTTON_CLICK";
45
+ ELogEventType["FORM__LIVE_LOCATION_PERMISSION_ERROR"] = "FORM__LIVE_LOCATION_PERMISSION_ERROR";
46
+ ELogEventType["FORM__LIVE_LOCATION_PERMISSION_SUCCESS"] = "FORM__LIVE_LOCATION_PERMISSION_SUCCESS";
42
47
  ELogEventType["FORM__PREVIEW_ERROR"] = "FORM__PREVIEW_ERROR";
43
48
  ELogEventType["FORM__PREVIEW_HIDE"] = "FORM__PREVIEW_HIDE";
44
49
  ELogEventType["FORM__PREVIEW_SHOW"] = "FORM__PREVIEW_SHOW";
@@ -49,4 +54,4 @@ export var ELogEventType;
49
54
  ELogEventType["FORM__TASK_PRE"] = "FORM__TASK_PRE";
50
55
  ELogEventType["FORM__VIEW_BUTTON_CLICK"] = "FORM__VIEW_BUTTON_CLICK";
51
56
  })(ELogEventType || (ELogEventType = {}));
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmxvZ3MuZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9kZWZpbml0aW9ucy9mb3JtLXZpZXcubG9ncy5kZWZpbml0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGFBaURYO0FBakRELFdBQVksYUFBYTtJQUN2Qiw4REFBNkMsQ0FBQTtJQUM3QywwRUFBeUQsQ0FBQTtJQUN6RCx3REFBdUMsQ0FBQTtJQUN2QyxzREFBcUMsQ0FBQTtJQUNyQyxzREFBcUMsQ0FBQTtJQUNyQyxrRUFBaUQsQ0FBQTtJQUNqRCx3REFBdUMsQ0FBQTtJQUN2Qyx3RUFBdUQsQ0FBQTtJQUN2RCxnRkFBK0QsQ0FBQTtJQUMvRCxrRkFBaUUsQ0FBQTtJQUNqRSxrRkFBaUUsQ0FBQTtJQUNqRSwwREFBeUMsQ0FBQTtJQUN6QyxrRkFBaUUsQ0FBQTtJQUNqRSxvRkFBbUUsQ0FBQTtJQUNuRSxvRkFBbUUsQ0FBQTtJQUNuRSxrRkFBaUUsQ0FBQTtJQUNqRSxvRkFBbUUsQ0FBQTtJQUNuRSxrRkFBaUUsQ0FBQTtJQUNqRSx3RUFBdUQsQ0FBQTtJQUN2RCwwREFBeUMsQ0FBQTtJQUN6Qyx3REFBdUMsQ0FBQTtJQUN2Qyx3REFBdUMsQ0FBQTtJQUN2QywwRkFBeUUsQ0FBQTtJQUN6RSwwRkFBeUUsQ0FBQTtJQUN6RSxzRUFBcUQsQ0FBQTtJQUNyRCxvRkFBbUUsQ0FBQTtJQUNuRSw0REFBMkMsQ0FBQTtJQUMzQywwREFBeUMsQ0FBQTtJQUN6QyxrRUFBaUQsQ0FBQTtJQUNqRCxrRUFBaUQsQ0FBQTtJQUNqRCw4REFBNkMsQ0FBQTtJQUM3QyxvRUFBbUQsQ0FBQTtJQUNuRCxzREFBcUMsQ0FBQTtJQUNyQyxnRkFBK0QsQ0FBQTtJQUMvRCxzRUFBcUQsQ0FBQTtJQUNyRCxzRUFBcUQsQ0FBQTtJQUNyRCx3REFBdUMsQ0FBQTtJQUN2QyxrRkFBaUUsQ0FBQTtJQUNqRSxzREFBcUMsQ0FBQTtJQUNyQyw0REFBMkMsQ0FBQTtJQUMzQywwREFBeUMsQ0FBQTtJQUN6QywwREFBeUMsQ0FBQTtJQUN6QywwREFBeUMsQ0FBQTtJQUN6QyxvREFBbUMsQ0FBQTtJQUNuQyxvRUFBbUQsQ0FBQTtJQUNuRCxvREFBbUMsQ0FBQTtJQUNuQyxrREFBaUMsQ0FBQTtJQUNqQyxvRUFBbUQsQ0FBQTtBQUNyRCxDQUFDLEVBakRXLGFBQWEsS0FBYixhQUFhLFFBaUR4QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEVMb2dFdmVudFR5cGUge1xuICBGT1JNX19BQ1RJT05fRVhFQ1VURSA9IFwiRk9STV9fQUNUSU9OX0VYRUNVVEVcIixcbiAgRk9STV9fQUNUSU9OX0VYRUNVVEVfR1JPVVAgPSBcIkZPUk1fX0FDVElPTl9FWEVDVVRFX0dST1VQXCIsXG4gIEZPUk1fX0FMRVJUX0VSUk9SID0gXCJGT1JNX19BTEVSVF9FUlJPUlwiLFxuICBGT1JNX19BTEVSVF9ISURFID0gXCJGT1JNX19BTEVSVF9ISURFXCIsXG4gIEZPUk1fX0FMRVJUX1NIT1cgPSBcIkZPUk1fX0FMRVJUX1NIT1dcIixcbiAgRk9STV9fQVBJX0JVVFRPTl9DTElDSyA9IFwiRk9STV9fQVBJX0JVVFRPTl9DTElDS1wiLFxuICBGT1JNX19BUElfUkVRVUVTVCA9IFwiRk9STV9fQVBJX1JFUVVFU1RcIixcbiAgRk9STV9fQVBJX1JFUVVFU1RfSU5WQUxJRCA9IFwiRk9STV9fQVBJX1JFUVVFU1RfSU5WQUxJRFwiLFxuICBGT1JNX19BUElfUkVRVUVTVF9VUExPQURfRklMRSA9IFwiRk9STV9fQVBJX1JFUVVFU1RfVVBMT0FEX0ZJTEVcIixcbiAgRk9STV9fQVBJX1JFUVVFU1RfVVBMT0FEX0lNQUdFID0gXCJGT1JNX19BUElfUkVRVUVTVF9VUExPQURfSU1BR0VcIixcbiAgRk9STV9fQVBJX1JFUVVFU1RfVVBMT0FEX1ZJREVPID0gXCJGT1JNX19BUElfUkVRVUVTVF9VUExPQURfVklERU9cIixcbiAgRk9STV9fQVBJX1JFU1BPTlNFID0gXCJGT1JNX19BUElfUkVTUE9OU0VcIixcbiAgRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9GSUxFID0gXCJGT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX0ZJTEVcIixcbiAgRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9JTUFHRSA9IFwiRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9JTUFHRVwiLFxuICBGT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX1ZJREVPID0gXCJGT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX1ZJREVPXCIsXG4gIEZPUk1fX0NBTUVSQV9CQUNLX0JVVFRPTl9DTElDSyA9IFwiRk9STV9fQ0FNRVJBX0JBQ0tfQlVUVE9OX0NMSUNLXCIsXG4gIEZPUk1fX0NBTUVSQV9DTE9TRV9CVVRUT05fQ0xJQ0sgPSBcIkZPUk1fX0NBTUVSQV9DTE9TRV9CVVRUT05fQ0xJQ0tcIixcbiAgRk9STV9fQ0FNRVJBX1NBVkVfQlVUVE9OX0NMSUNLID0gXCJGT1JNX19DQU1FUkFfU0FWRV9CVVRUT05fQ0xJQ0tcIixcbiAgRk9STV9fQ09ORklHX0xPQURfU1VDQ0VTUyA9IFwiRk9STV9fQ09ORklHX0xPQURfU1VDQ0VTU1wiLFxuICBGT1JNX19ESUFMT0dfRVJST1IgPSBcIkZPUk1fX0RJQUxPR19FUlJPUlwiLFxuICBGT1JNX19ESUFMT0dfSElERSA9IFwiRk9STV9fRElBTE9HX0hJREVcIixcbiAgRk9STV9fRElBTE9HX1NIT1cgPSBcIkZPUk1fX0RJQUxPR19TSE9XXCIsXG4gIEZPUk1fX0ZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX1NIT1cgPSBcIkZPUk1fX0ZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX1NIT1dcIixcbiAgRk9STV9fRklFTERfQVBJX1RJTUVSX01FU1NBR0VfSElERSA9IFwiRk9STV9fRklFTERfQVBJX1RJTUVSX01FU1NBR0VfSElERVwiLFxuICBGT1JNX19GSUVMRF9CVVRUT05fQ0xJQ0sgPSBcIkZPUk1fX0ZJRUxEX0JVVFRPTl9DTElDS1wiLFxuICBGT1JNX19GSUVMRF9DQU1FUkFfQlVUVE9OX0NMSUNLID0gXCJGT1JNX19GSUVMRF9DQU1FUkFfQlVUVE9OX0NMSUNLXCIsXG4gIEZPUk1fX0ZJRUxEX0RJU0FCTEUgPSBcIkZPUk1fX0ZJRUxEX0RJU0FCTEVcIixcbiAgRk9STV9fRklFTERfRU5BQkxFID0gXCJGT1JNX19GSUVMRF9FTkFCTEVcIixcbiAgRk9STV9fRklFTERfRVJST1JfSElERSA9IFwiRk9STV9fRklFTERfRVJST1JfSElERVwiLFxuICBGT1JNX19GSUVMRF9FUlJPUl9TSE9XID0gXCJGT1JNX19GSUVMRF9FUlJPUl9TSE9XXCIsXG4gIEZPUk1fX0ZJRUxEX0ZJTEVfQUREID0gXCJGT1JNX19GSUVMRF9GSUxFX0FERFwiLFxuICBGT1JNX19GSUVMRF9GSUxFX1JFTU9WRSA9IFwiRk9STV9fRklFTERfRklMRV9SRU1PVkVcIixcbiAgRk9STV9fRklFTERfSElERSA9IFwiRk9STV9fRklFTERfSElERVwiLFxuICBGT1JNX19GSUVMRF9NRURJQV9GSUxFX1JFTU9WRSA9IFwiRk9STV9fRklFTERfTUVESUFfRklMRV9SRU1PVkVcIixcbiAgRk9STV9fRklFTERfTUVTU0FHRV9ISURFID0gXCJGT1JNX19GSUVMRF9NRVNTQUdFX0hJREVcIixcbiAgRk9STV9fRklFTERfTUVTU0FHRV9TSE9XID0gXCJGT1JNX19GSUVMRF9NRVNTQUdFX1NIT1dcIixcbiAgRk9STV9fRklFTERfUkVTRVQgPSBcIkZPUk1fX0ZJRUxEX1JFU0VUXCIsXG4gIEZPUk1fX0ZJRUxEX1JFU0VUX0JVVFRPTl9DTElDSyA9IFwiRk9STV9fRklFTERfUkVTRVRfQlVUVE9OX0NMSUNLXCIsXG4gIEZPUk1fX0ZJRUxEX1NIT1cgPSBcIkZPUk1fX0ZJRUxEX1NIT1dcIixcbiAgRk9STV9fUFJFVklFV19FUlJPUiA9IFwiRk9STV9fUFJFVklFV19FUlJPUlwiLFxuICBGT1JNX19QUkVWSUVXX0hJREUgPSBcIkZPUk1fX1BSRVZJRVdfSElERVwiLFxuICBGT1JNX19QUkVWSUVXX1NIT1cgPSBcIkZPUk1fX1BSRVZJRVdfU0hPV1wiLFxuICBGT1JNX19SRURJUkVDVF9VUkwgPSBcIkZPUk1fX1JFRElSRUNUX1VSTFwiLFxuICBGT1JNX19TQVZFX0FVVE8gPSBcIkZPUk1fX1NBVkVfQVVUT1wiLFxuICBGT1JNX19TQVZFX0JVVFRPTl9DTElDSyA9IFwiRk9STV9fU0FWRV9CVVRUT05fQ0xJQ0tcIixcbiAgRk9STV9fVEFTS19QT1NUID0gXCJGT1JNX19UQVNLX1BPU1RcIixcbiAgRk9STV9fVEFTS19QUkUgPSBcIkZPUk1fX1RBU0tfUFJFXCIsXG4gIEZPUk1fX1ZJRVdfQlVUVE9OX0NMSUNLID0gXCJGT1JNX19WSUVXX0JVVFRPTl9DTElDS1wiXG59XG4iXX0=
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmxvZ3MuZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9kZWZpbml0aW9ucy9mb3JtLXZpZXcubG9ncy5kZWZpbml0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGFBc0RYO0FBdERELFdBQVksYUFBYTtJQUN2Qiw4REFBNkMsQ0FBQTtJQUM3QywwRUFBeUQsQ0FBQTtJQUN6RCx3REFBdUMsQ0FBQTtJQUN2QyxzREFBcUMsQ0FBQTtJQUNyQyxzREFBcUMsQ0FBQTtJQUNyQyxrRUFBaUQsQ0FBQTtJQUNqRCx3REFBdUMsQ0FBQTtJQUN2Qyx3RUFBdUQsQ0FBQTtJQUN2RCwwRkFBeUUsQ0FBQTtJQUN6RSxnRkFBK0QsQ0FBQTtJQUMvRCxrRkFBaUUsQ0FBQTtJQUNqRSxrRkFBaUUsQ0FBQTtJQUNqRSwwREFBeUMsQ0FBQTtJQUN6Qyw0RkFBMkUsQ0FBQTtJQUMzRSxrRkFBaUUsQ0FBQTtJQUNqRSxvRkFBbUUsQ0FBQTtJQUNuRSxvRkFBbUUsQ0FBQTtJQUNuRSxrRkFBaUUsQ0FBQTtJQUNqRSxvRkFBbUUsQ0FBQTtJQUNuRSxrRkFBaUUsQ0FBQTtJQUNqRSx3RUFBdUQsQ0FBQTtJQUN2RCwwREFBeUMsQ0FBQTtJQUN6Qyx3REFBdUMsQ0FBQTtJQUN2Qyx3REFBdUMsQ0FBQTtJQUN2QywwRkFBeUUsQ0FBQTtJQUN6RSwwRkFBeUUsQ0FBQTtJQUN6RSxzRUFBcUQsQ0FBQTtJQUNyRCxvRkFBbUUsQ0FBQTtJQUNuRSw0REFBMkMsQ0FBQTtJQUMzQywwREFBeUMsQ0FBQTtJQUN6QyxrRUFBaUQsQ0FBQTtJQUNqRCxrRUFBaUQsQ0FBQTtJQUNqRCw4REFBNkMsQ0FBQTtJQUM3QyxvRUFBbUQsQ0FBQTtJQUNuRCxzREFBcUMsQ0FBQTtJQUNyQyxnRkFBK0QsQ0FBQTtJQUMvRCxzRUFBcUQsQ0FBQTtJQUNyRCxzRUFBcUQsQ0FBQTtJQUNyRCx3REFBdUMsQ0FBQTtJQUN2QyxrRkFBaUUsQ0FBQTtJQUNqRSxzREFBcUMsQ0FBQTtJQUNyQyxzRkFBcUUsQ0FBQTtJQUNyRSw4RkFBNkUsQ0FBQTtJQUM3RSxrR0FBaUYsQ0FBQTtJQUNqRiw0REFBMkMsQ0FBQTtJQUMzQywwREFBeUMsQ0FBQTtJQUN6QywwREFBeUMsQ0FBQTtJQUN6QywwREFBeUMsQ0FBQTtJQUN6QyxvREFBbUMsQ0FBQTtJQUNuQyxvRUFBbUQsQ0FBQTtJQUNuRCxvREFBbUMsQ0FBQTtJQUNuQyxrREFBaUMsQ0FBQTtJQUNqQyxvRUFBbUQsQ0FBQTtBQUNyRCxDQUFDLEVBdERXLGFBQWEsS0FBYixhQUFhLFFBc0R4QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEVMb2dFdmVudFR5cGUge1xuICBGT1JNX19BQ1RJT05fRVhFQ1VURSA9IFwiRk9STV9fQUNUSU9OX0VYRUNVVEVcIixcbiAgRk9STV9fQUNUSU9OX0VYRUNVVEVfR1JPVVAgPSBcIkZPUk1fX0FDVElPTl9FWEVDVVRFX0dST1VQXCIsXG4gIEZPUk1fX0FMRVJUX0VSUk9SID0gXCJGT1JNX19BTEVSVF9FUlJPUlwiLFxuICBGT1JNX19BTEVSVF9ISURFID0gXCJGT1JNX19BTEVSVF9ISURFXCIsXG4gIEZPUk1fX0FMRVJUX1NIT1cgPSBcIkZPUk1fX0FMRVJUX1NIT1dcIixcbiAgRk9STV9fQVBJX0JVVFRPTl9DTElDSyA9IFwiRk9STV9fQVBJX0JVVFRPTl9DTElDS1wiLFxuICBGT1JNX19BUElfUkVRVUVTVCA9IFwiRk9STV9fQVBJX1JFUVVFU1RcIixcbiAgRk9STV9fQVBJX1JFUVVFU1RfSU5WQUxJRCA9IFwiRk9STV9fQVBJX1JFUVVFU1RfSU5WQUxJRFwiLFxuICBGT1JNX19BUElfUkVRVUVTVF9SRVZFUlNFX0xBVF9MT05HID0gXCJGT1JNX19BUElfUkVRVUVTVF9SRVZFUlNFX0xBVF9MT05HXCIsXG4gIEZPUk1fX0FQSV9SRVFVRVNUX1VQTE9BRF9GSUxFID0gXCJGT1JNX19BUElfUkVRVUVTVF9VUExPQURfRklMRVwiLFxuICBGT1JNX19BUElfUkVRVUVTVF9VUExPQURfSU1BR0UgPSBcIkZPUk1fX0FQSV9SRVFVRVNUX1VQTE9BRF9JTUFHRVwiLFxuICBGT1JNX19BUElfUkVRVUVTVF9VUExPQURfVklERU8gPSBcIkZPUk1fX0FQSV9SRVFVRVNUX1VQTE9BRF9WSURFT1wiLFxuICBGT1JNX19BUElfUkVTUE9OU0UgPSBcIkZPUk1fX0FQSV9SRVNQT05TRVwiLFxuICBGT1JNX19BUElfUkVTUE9OU0VfUkVWRVJTRV9MQVRfTE9ORyA9IFwiRk9STV9fQVBJX1JFU1BPTlNFX1JFVkVSU0VfTEFUX0xPTkdcIixcbiAgRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9GSUxFID0gXCJGT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX0ZJTEVcIixcbiAgRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9JTUFHRSA9IFwiRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9JTUFHRVwiLFxuICBGT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX1ZJREVPID0gXCJGT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX1ZJREVPXCIsXG4gIEZPUk1fX0NBTUVSQV9CQUNLX0JVVFRPTl9DTElDSyA9IFwiRk9STV9fQ0FNRVJBX0JBQ0tfQlVUVE9OX0NMSUNLXCIsXG4gIEZPUk1fX0NBTUVSQV9DTE9TRV9CVVRUT05fQ0xJQ0sgPSBcIkZPUk1fX0NBTUVSQV9DTE9TRV9CVVRUT05fQ0xJQ0tcIixcbiAgRk9STV9fQ0FNRVJBX1NBVkVfQlVUVE9OX0NMSUNLID0gXCJGT1JNX19DQU1FUkFfU0FWRV9CVVRUT05fQ0xJQ0tcIixcbiAgRk9STV9fQ09ORklHX0xPQURfU1VDQ0VTUyA9IFwiRk9STV9fQ09ORklHX0xPQURfU1VDQ0VTU1wiLFxuICBGT1JNX19ESUFMT0dfRVJST1IgPSBcIkZPUk1fX0RJQUxPR19FUlJPUlwiLFxuICBGT1JNX19ESUFMT0dfSElERSA9IFwiRk9STV9fRElBTE9HX0hJREVcIixcbiAgRk9STV9fRElBTE9HX1NIT1cgPSBcIkZPUk1fX0RJQUxPR19TSE9XXCIsXG4gIEZPUk1fX0ZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX0hJREUgPSBcIkZPUk1fX0ZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX0hJREVcIixcbiAgRk9STV9fRklFTERfQVBJX1RJTUVSX01FU1NBR0VfU0hPVyA9IFwiRk9STV9fRklFTERfQVBJX1RJTUVSX01FU1NBR0VfU0hPV1wiLFxuICBGT1JNX19GSUVMRF9CVVRUT05fQ0xJQ0sgPSBcIkZPUk1fX0ZJRUxEX0JVVFRPTl9DTElDS1wiLFxuICBGT1JNX19GSUVMRF9DQU1FUkFfQlVUVE9OX0NMSUNLID0gXCJGT1JNX19GSUVMRF9DQU1FUkFfQlVUVE9OX0NMSUNLXCIsXG4gIEZPUk1fX0ZJRUxEX0RJU0FCTEUgPSBcIkZPUk1fX0ZJRUxEX0RJU0FCTEVcIixcbiAgRk9STV9fRklFTERfRU5BQkxFID0gXCJGT1JNX19GSUVMRF9FTkFCTEVcIixcbiAgRk9STV9fRklFTERfRVJST1JfSElERSA9IFwiRk9STV9fRklFTERfRVJST1JfSElERVwiLFxuICBGT1JNX19GSUVMRF9FUlJPUl9TSE9XID0gXCJGT1JNX19GSUVMRF9FUlJPUl9TSE9XXCIsXG4gIEZPUk1fX0ZJRUxEX0ZJTEVfQUREID0gXCJGT1JNX19GSUVMRF9GSUxFX0FERFwiLFxuICBGT1JNX19GSUVMRF9GSUxFX1JFTU9WRSA9IFwiRk9STV9fRklFTERfRklMRV9SRU1PVkVcIixcbiAgRk9STV9fRklFTERfSElERSA9IFwiRk9STV9fRklFTERfSElERVwiLFxuICBGT1JNX19GSUVMRF9NRURJQV9GSUxFX1JFTU9WRSA9IFwiRk9STV9fRklFTERfTUVESUFfRklMRV9SRU1PVkVcIixcbiAgRk9STV9fRklFTERfTUVTU0FHRV9ISURFID0gXCJGT1JNX19GSUVMRF9NRVNTQUdFX0hJREVcIixcbiAgRk9STV9fRklFTERfTUVTU0FHRV9TSE9XID0gXCJGT1JNX19GSUVMRF9NRVNTQUdFX1NIT1dcIixcbiAgRk9STV9fRklFTERfUkVTRVQgPSBcIkZPUk1fX0ZJRUxEX1JFU0VUXCIsXG4gIEZPUk1fX0ZJRUxEX1JFU0VUX0JVVFRPTl9DTElDSyA9IFwiRk9STV9fRklFTERfUkVTRVRfQlVUVE9OX0NMSUNLXCIsXG4gIEZPUk1fX0ZJRUxEX1NIT1cgPSBcIkZPUk1fX0ZJRUxEX1NIT1dcIixcbiAgRk9STV9fTElWRV9MT0NBVElPTl9CVVRUT05fQ0xJQ0sgPSBcIkZPUk1fX0xJVkVfTE9DQVRJT05fQlVUVE9OX0NMSUNLXCIsXG4gIEZPUk1fX0xJVkVfTE9DQVRJT05fUEVSTUlTU0lPTl9FUlJPUiA9IFwiRk9STV9fTElWRV9MT0NBVElPTl9QRVJNSVNTSU9OX0VSUk9SXCIsXG4gIEZPUk1fX0xJVkVfTE9DQVRJT05fUEVSTUlTU0lPTl9TVUNDRVNTID0gXCJGT1JNX19MSVZFX0xPQ0FUSU9OX1BFUk1JU1NJT05fU1VDQ0VTU1wiLFxuICBGT1JNX19QUkVWSUVXX0VSUk9SID0gXCJGT1JNX19QUkVWSUVXX0VSUk9SXCIsXG4gIEZPUk1fX1BSRVZJRVdfSElERSA9IFwiRk9STV9fUFJFVklFV19ISURFXCIsXG4gIEZPUk1fX1BSRVZJRVdfU0hPVyA9IFwiRk9STV9fUFJFVklFV19TSE9XXCIsXG4gIEZPUk1fX1JFRElSRUNUX1VSTCA9IFwiRk9STV9fUkVESVJFQ1RfVVJMXCIsXG4gIEZPUk1fX1NBVkVfQVVUTyA9IFwiRk9STV9fU0FWRV9BVVRPXCIsXG4gIEZPUk1fX1NBVkVfQlVUVE9OX0NMSUNLID0gXCJGT1JNX19TQVZFX0JVVFRPTl9DTElDS1wiLFxuICBGT1JNX19UQVNLX1BPU1QgPSBcIkZPUk1fX1RBU0tfUE9TVFwiLFxuICBGT1JNX19UQVNLX1BSRSA9IFwiRk9STV9fVEFTS19QUkVcIixcbiAgRk9STV9fVklFV19CVVRUT05fQ0xJQ0sgPSBcIkZPUk1fX1ZJRVdfQlVUVE9OX0NMSUNLXCJcbn1cbiJdfQ==
@@ -0,0 +1,256 @@
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import axios from "axios";
3
+ import { decryptWithAES, encryptWithAES, isNotEmptyValue, logMethod } from "kwikid-toolkit";
4
+ import { Observable } from "rxjs";
5
+ import { v4 as uuidv4 } from "uuid";
6
+ export class KwikIDFormViewApiService {
7
+ constructor() {
8
+ this.bytecode = [0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38];
9
+ }
10
+ // Function to derive logic from data
11
+ dataDerivativeLogic(data) {
12
+ if (isNotEmptyValue(data)) {
13
+ const dataString = JSON.stringify(data);
14
+ const charCounts = {};
15
+ const targetCharacters = ["a", "i", "p", "t"];
16
+ // Count occurrences of target characters in the data string
17
+ for (const char of dataString) {
18
+ if (targetCharacters.includes(char)) {
19
+ charCounts[char] = (charCounts[char] || 0) + 1;
20
+ }
21
+ }
22
+ // Construct the output string based on the character counts
23
+ const outputString = targetCharacters
24
+ .map((char) => char + (charCounts[char] || 0))
25
+ .join("");
26
+ return outputString;
27
+ }
28
+ else {
29
+ return undefined;
30
+ }
31
+ }
32
+ // Function to preprocess header data
33
+ preProcessHeader(headerData, isVerifySignature) {
34
+ if (!headerData)
35
+ headerData = {};
36
+ if (!headerData.headers)
37
+ headerData["headers"] = {};
38
+ // Generate a unique identifier if signature verification is required
39
+ if (isVerifySignature) {
40
+ headerData["headers"]["xrid"] = uuidv4();
41
+ }
42
+ // Retrieve session ID from local storage and add it to headers
43
+ let session_id = localStorage.getItem("session_id");
44
+ if (session_id)
45
+ headerData["headers"]["ses"] = session_id;
46
+ return headerData;
47
+ }
48
+ // Function to verify the signature
49
+ verifySignature(data, header, url, isVerifySignature) {
50
+ return new Promise((resolve, reject) => {
51
+ // Log the function call for verification
52
+ console.log("Verify Signature: Function Called For", url, header);
53
+ // Check if the signature is disabled
54
+ if (!isVerifySignature) {
55
+ console.log("Verify Signature: Authentication Disabled");
56
+ resolve(true);
57
+ }
58
+ // Check if data is invalid
59
+ else if (!data) {
60
+ console.log("Verify Signature: Data Not Available");
61
+ resolve(true);
62
+ }
63
+ // Check if the signature is missing in headers when authentication is not skipped
64
+ else if (isVerifySignature && header && !(header === null || header === void 0 ? void 0 : header.sig)) {
65
+ console.log("Verify Signature Failure: Signature Not Present in Headers");
66
+ reject(false);
67
+ }
68
+ // Verify the signature when public key and header with signature are present and authentication is not skipped
69
+ else if (isVerifySignature && header && (header === null || header === void 0 ? void 0 : header.sig)) {
70
+ console.log("Verify Signature: Signature Present in Headers");
71
+ // Extract the signature and decode it
72
+ let signature = header.sig.split(".")[0];
73
+ let rawSignature = atob(signature);
74
+ // Split the decoded signature to get the parts
75
+ signature = rawSignature.split(".")[0];
76
+ let exp = rawSignature.split(".")[1] + "000"; // Expiration time in milliseconds
77
+ let iat = rawSignature.split(".")[2] + "000"; // Issued at time in milliseconds
78
+ // Check if the signature is valid
79
+ if (signature) {
80
+ // Check if the current time is before the expiration time
81
+ const dateValue = new Date().valueOf();
82
+ let dateCheck = dateValue < parseInt(exp);
83
+ // Check if the signature matches the data
84
+ let res = signature === data;
85
+ console.log("Verify Signature: Matching", signature, data);
86
+ console.log("Verify Signature: Time", dateValue, parseInt(exp), parseInt(exp) - dateValue);
87
+ console.log("Verify Signature: Date", new Date(dateValue), new Date(parseInt(exp)));
88
+ console.log("Verify Signature: Signature Converted to Required Format");
89
+ // Resolve the promise if the signature is valid and the date check passes
90
+ if (res && dateCheck) {
91
+ console.log("Verify Signature Success");
92
+ resolve(res);
93
+ }
94
+ else {
95
+ // Reject the promise if the signature is invalid or the date check fails
96
+ console.log("Verify Signature Failure: Signature did not match");
97
+ reject(res);
98
+ }
99
+ }
100
+ else {
101
+ // Reject the promise if the signature is not in the required format
102
+ console.log("Verify Signature Failure: Signature Not Converted to Required Format");
103
+ reject(false);
104
+ }
105
+ }
106
+ else {
107
+ // Resolve the promise if the signature is missing in headers
108
+ console.log("Verify Signature Failure: Signature Not Present in Headers");
109
+ resolve(true);
110
+ }
111
+ });
112
+ }
113
+ // Function to perform POST request
114
+ post(url, body, headerData, isEncrypt = false, isDecrypt = false, isVerifySignature = false, isSkipHeaderAlteration = false) {
115
+ let preProcessedHeader = headerData;
116
+ // Preprocess header data unless instructed to skip
117
+ if (!isSkipHeaderAlteration) {
118
+ preProcessedHeader = this.preProcessHeader(headerData, isVerifySignature);
119
+ }
120
+ else {
121
+ preProcessedHeader["observe"] = "response";
122
+ }
123
+ // Encrypt body if required
124
+ if (isEncrypt) {
125
+ body = encryptWithAES(JSON.stringify(body));
126
+ }
127
+ return new Observable((subscriber) => {
128
+ axios.post(url, body, headerData).then((res) => __awaiter(this, void 0, void 0, function* () {
129
+ let data = res["data"];
130
+ // Decrypt response if required
131
+ if (data && isDecrypt) {
132
+ const encryptedResponse = data;
133
+ const decryptedResponse = yield decryptWithAES(encryptedResponse);
134
+ data = JSON.parse(decryptedResponse);
135
+ console.log("Decrypted Response", data);
136
+ res.data = data;
137
+ }
138
+ // Verify signature and handle response
139
+ this.verifySignature(this.dataDerivativeLogic(data), res === null || res === void 0 ? void 0 : res.headers, url, isVerifySignature)
140
+ .then((verification) => {
141
+ subscriber.next(res);
142
+ subscriber.complete();
143
+ })
144
+ .catch((err) => {
145
+ subscriber.error(err === null || err === void 0 ? void 0 : err.response);
146
+ });
147
+ }), (err) => __awaiter(this, void 0, void 0, function* () {
148
+ var _a, _b;
149
+ let data = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.data;
150
+ // Decrypt error response if required
151
+ if (data && isDecrypt) {
152
+ const encryptedResponse = data;
153
+ const decryptedResponse = yield decryptWithAES(encryptedResponse);
154
+ data = JSON.parse(decryptedResponse);
155
+ console.log("Decrypted Response", data);
156
+ err.response.data = data;
157
+ }
158
+ // Verify signature and handle response
159
+ this.verifySignature(this.dataDerivativeLogic(data), (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.headers, url, isVerifySignature)
160
+ .then((verification) => {
161
+ subscriber.error(err === null || err === void 0 ? void 0 : err.response);
162
+ })
163
+ .catch((err) => {
164
+ subscriber.error(err === null || err === void 0 ? void 0 : err.response);
165
+ });
166
+ }));
167
+ });
168
+ }
169
+ // Function to perform GET request
170
+ get(url, headerData = undefined, isDecrypt = false, isVerifySignature = false, isSkipHeaderAlteration = false) {
171
+ let preProcessedHeader = headerData;
172
+ // Preprocess header data unless instructed to skip
173
+ if (!isSkipHeaderAlteration) {
174
+ preProcessedHeader = this.preProcessHeader(headerData, isVerifySignature);
175
+ }
176
+ else {
177
+ preProcessedHeader["observe"] = "response";
178
+ }
179
+ return new Observable((subscriber) => {
180
+ axios.get(url, preProcessedHeader).then((res) => __awaiter(this, void 0, void 0, function* () {
181
+ let data = res["data"];
182
+ // Decrypt response if required
183
+ if (isDecrypt) {
184
+ const encryptedResponse = data;
185
+ const decryptedResponse = yield decryptWithAES(encryptedResponse);
186
+ data = JSON.parse(decryptedResponse);
187
+ console.log("Decrypted Response", data);
188
+ res.data = data;
189
+ }
190
+ // Verify signature and handle response
191
+ this.verifySignature(this.dataDerivativeLogic(data), res === null || res === void 0 ? void 0 : res.headers, url, isVerifySignature)
192
+ .then((verification) => {
193
+ subscriber.next(res);
194
+ subscriber.complete();
195
+ })
196
+ .catch((err) => {
197
+ subscriber.error(err === null || err === void 0 ? void 0 : err.response);
198
+ });
199
+ }), (err) => __awaiter(this, void 0, void 0, function* () {
200
+ var _a, _b;
201
+ let data = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.data;
202
+ // Decrypt error response if required
203
+ if (data && isDecrypt) {
204
+ const encryptedResponse = data;
205
+ const decryptedResponse = yield decryptWithAES(encryptedResponse);
206
+ data = JSON.parse(decryptedResponse);
207
+ console.log("Decrypted Response", data);
208
+ err.response.data = data;
209
+ }
210
+ // Verify signature and handle response
211
+ this.verifySignature(this.dataDerivativeLogic(data), (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.headers, url, isVerifySignature)
212
+ .then((verification) => {
213
+ subscriber.error(err === null || err === void 0 ? void 0 : err.response);
214
+ })
215
+ .catch((err) => {
216
+ subscriber.error(err === null || err === void 0 ? void 0 : err.response);
217
+ });
218
+ }));
219
+ });
220
+ }
221
+ // Function to execute API call based on method type
222
+ executeApiCall(url, method, body, headers, isEncrypt, isDecrypt, isVerifySignature) {
223
+ return new Promise((resolve) => {
224
+ if (method == "GET") {
225
+ this.get(url, { headers: headers }, isDecrypt, isVerifySignature).subscribe((res) => {
226
+ resolve(res);
227
+ }, (err) => {
228
+ resolve(err);
229
+ });
230
+ }
231
+ else {
232
+ this.post(url, body, { headers: headers }, isEncrypt, isDecrypt, isVerifySignature).subscribe((res) => {
233
+ resolve(res);
234
+ }, (err) => {
235
+ resolve(err);
236
+ });
237
+ }
238
+ });
239
+ }
240
+ }
241
+ __decorate([
242
+ logMethod
243
+ ], KwikIDFormViewApiService.prototype, "dataDerivativeLogic", null);
244
+ __decorate([
245
+ logMethod
246
+ ], KwikIDFormViewApiService.prototype, "preProcessHeader", null);
247
+ __decorate([
248
+ logMethod
249
+ ], KwikIDFormViewApiService.prototype, "verifySignature", null);
250
+ __decorate([
251
+ logMethod
252
+ ], KwikIDFormViewApiService.prototype, "post", null);
253
+ __decorate([
254
+ logMethod
255
+ ], KwikIDFormViewApiService.prototype, "get", null);
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsY0FBYyxFQUNkLGVBQWUsRUFDZixTQUFTLEVBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE1BQU0sT0FBTyx3QkFBd0I7SUFHbkM7UUFGUSxhQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFckQsQ0FBQztJQUVoQixxQ0FBcUM7SUFFckMsbUJBQW1CLENBQUMsSUFBSTtRQUN0QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUN0QixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFOUMsNERBQTREO1lBQzVELEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFO2dCQUM3QixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbkMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMs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dCB7XG4gIGRlY3J5cHRXaXRoQUVTLFxuICBlbmNyeXB0V2l0aEFFUyxcbiAgaXNOb3RFbXB0eVZhbHVlLFxuICBsb2dNZXRob2Rcbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5cbmV4cG9ydCBjbGFzcyBLd2lrSURGb3JtVmlld0FwaVNlcnZpY2Uge1xuICBwcml2YXRlIGJ5dGVjb2RlID0gWzB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzhdO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvLyBGdW5jdGlvbiB0byBkZXJpdmUgbG9naWMgZnJvbSBkYXRhXG4gIEBsb2dNZXRob2RcbiAgZGF0YURlcml2YXRpdmVMb2dpYyhkYXRhKSB7XG4gICAgaWYgKGlzTm90RW1wdHlWYWx1ZShkYXRhKSkge1xuICAgICAgY29uc3QgZGF0YVN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgY29uc3QgY2hhckNvdW50cyA9IHt9O1xuICAgICAgY29uc3QgdGFyZ2V0Q2hhcmFjdGVycyA9IFtcImFcIiwgXCJpXCIsIFwicFwiLCBcInRcIl07XG5cbiAgICAgIC8vIENvdW50IG9jY3VycmVuY2VzIG9mIHRhcmdldCBjaGFyYWN0ZXJzIGluIHRoZSBkYXRhIHN0cmluZ1xuICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGRhdGFTdHJpbmcpIHtcbiAgICAgICAgaWYgKHRhcmdldENoYXJhY3RlcnMuaW5jbHVkZXMoY2hhcikpIHtcbiAgICAgICAgICBjaGFyQ291bnRzW2NoYXJdID0gKGNoYXJDb3VudHNbY2hhcl0gfHwgMCkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnN0cnVjdCB0aGUgb3V0cHV0IHN0cmluZyBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyIGNvdW50c1xuICAgICAgY29uc3Qgb3V0cHV0U3RyaW5nID0gdGFyZ2V0Q2hhcmFjdGVyc1xuICAgICAgICAubWFwKChjaGFyKSA9PiBjaGFyICsgKGNoYXJDb3VudHNbY2hhcl0gfHwgMCkpXG4gICAgICAgIC5qb2luKFwiXCIpO1xuICAgICAgcmV0dXJuIG91dHB1dFN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBwcmVwcm9jZXNzIGhlYWRlciBkYXRhXG4gIEBsb2dNZXRob2RcbiAgcHJlUHJvY2Vzc0hlYWRlcihoZWFkZXJEYXRhOiBhbnksIGlzVmVyaWZ5U2lnbmF0dXJlOiBib29sZWFuKTogYW55IHtcbiAgICBpZiAoIWhlYWRlckRhdGEpIGhlYWRlckRhdGEgPSB7fTtcbiAgICBpZiAoIWhlYWRlckRhdGEuaGVhZGVycykgaGVhZGVyRGF0YVtcImhlYWRlcnNcIl0gPSB7fTtcblxuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGlkZW50aWZpZXIgaWYgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZFxuICAgIGlmIChpc1ZlcmlmeVNpZ25hdHVyZSkge1xuICAgICAgaGVhZGVyRGF0YVtcImhlYWRlcnNcIl1bXCJ4cmlkXCJdID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgLy8gUmV0cmlldmUgc2Vzc2lvbiBJRCBmcm9tIGxvY2FsIHN0b3JhZ2UgYW5kIGFkZCBpdCB0byBoZWFkZXJzXG4gICAgbGV0IHNlc3Npb25faWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNlc3Npb25faWRcIik7XG4gICAgaWYgKHNlc3Npb25faWQpIGhlYWRlckRhdGFbXCJoZWFkZXJzXCJdW1wic2VzXCJdID0gc2Vzc2lvbl9pZDtcblxuICAgIHJldHVybiBoZWFkZXJEYXRhO1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmVcbiAgQGxvZ01ldGhvZFxuICB2ZXJpZnlTaWduYXR1cmUoZGF0YSwgaGVhZGVyLCB1cmwsIGlzVmVyaWZ5U2lnbmF0dXJlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIExvZyB0aGUgZnVuY3Rpb24gY2FsbCBmb3IgdmVyaWZpY2F0aW9uXG4gICAgICBjb25zb2xlLmxvZyhcIlZlcmlmeSBTaWduYXR1cmU6IEZ1bmN0aW9uIENhbGxlZCBGb3JcIiwgdXJsLCBoZWFkZXIpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgc2lnbmF0dXJlIGlzIGRpc2FibGVkXG4gICAgICBpZiAoIWlzVmVyaWZ5U2lnbmF0dXJlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiVmVyaWZ5IFNpZ25hdHVyZTogQXV0aGVudGljYXRpb24gRGlzYWJsZWRcIik7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIGRhdGEgaXMgaW52YWxpZFxuICAgICAgZWxzZSBpZiAoIWRhdGEpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJWZXJpZnkgU2lnbmF0dXJlOiBEYXRhIE5vdCBBdmFpbGFibGVcIik7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBzaWduYXR1cmUgaXMgbWlzc2luZyBpbiBoZWFkZXJzIHdoZW4gYXV0aGVudGljYXRpb24gaXMgbm90IHNraXBwZWRcbiAgICAgIGVsc2UgaWYgKGlzVmVyaWZ5U2lnbmF0dXJlICYmIGhlYWRlciAmJiAhaGVhZGVyPy5zaWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgXCJWZXJpZnkgU2lnbmF0dXJlIEZhaWx1cmU6IFNpZ25hdHVyZSBOb3QgUHJlc2VudCBpbiBIZWFkZXJzXCJcbiAgICAgICAgKTtcbiAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZ5IHRoZSBzaWduYXR1cmUgd2hlbiBwdWJsaWMga2V5IGFuZCBoZWFkZXIgd2l0aCBzaWduYXR1cmUgYXJlIHByZXNlbnQgYW5kIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBza2lwcGVkXG4gICAgICBlbHNlIGlmIChpc1ZlcmlmeVNpZ25hdHVyZSAmJiBoZWFkZXIgJiYgaGVhZGVyPy5zaWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJWZXJpZnkgU2lnbmF0dXJlOiBTaWduYXR1cmUgUHJlc2VudCBpbiBIZWFkZXJzXCIpO1xuXG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIHNpZ25hdHVyZSBhbmQgZGVjb2RlIGl0XG4gICAgICAgIGxldCBzaWduYXR1cmUgPSBoZWFkZXIuc2lnLnNwbGl0KFwiLlwiKVswXTtcbiAgICAgICAgbGV0IHJhd1NpZ25hdHVyZSA9IGF0b2Ioc2lnbmF0dXJlKTtcblxuICAgICAgICAvLyBTcGxpdCB0aGUgZGVjb2RlZCBzaWduYXR1cmUgdG8gZ2V0IHRoZSBwYXJ0c1xuICAgICAgICBzaWduYXR1cmUgPSByYXdTaWduYXR1cmUuc3BsaXQoXCIuXCIpWzBdO1xuICAgICAgICBsZXQgZXhwID0gcmF3U2lnbmF0dXJlLnNwbGl0KFwiLlwiKVsxXSArIFwiMDAwXCI7IC8vIEV4cGlyYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICAgICAgbGV0IGlhdCA9IHJhd1NpZ25hdHVyZS5zcGxpdChcIi5cIilbMl0gKyBcIjAwMFwiOyAvLyBJc3N1ZWQgYXQgdGltZSBpbiBtaWxsaXNlY29uZHNcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkXG4gICAgICAgIGlmIChzaWduYXR1cmUpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCB0aW1lIGlzIGJlZm9yZSB0aGUgZXhwaXJhdGlvbiB0aW1lXG4gICAgICAgICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgICAgICAgbGV0IGRhdGVDaGVjayA9IGRhdGVWYWx1ZSA8IHBhcnNlSW50KGV4cCk7XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIGRhdGFcbiAgICAgICAgICBsZXQgcmVzID0gc2lnbmF0dXJlID09PSBkYXRhO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiVmVyaWZ5IFNpZ25hdHVyZTogTWF0Y2hpbmdcIiwgc2lnbmF0dXJlLCBkYXRhKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIFwiVmVyaWZ5IFNpZ25hdHVyZTogVGltZVwiLFxuICAgICAgICAgICAgZGF0ZVZhbHVlLFxuICAgICAgICAgICAgcGFyc2VJbnQoZXhwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGV4cCkgLSBkYXRlVmFsdWVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBcIlZlcmlmeSBTaWduYXR1cmU6IERhdGVcIixcbiAgICAgICAgICAgIG5ldyBEYXRlKGRhdGVWYWx1ZSksXG4gICAgICAgICAgICBuZXcgRGF0ZShwYXJzZUludChleHApKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIFwiVmVyaWZ5IFNpZ25hdHVyZTogU2lnbmF0dXJlIENvbnZlcnRlZCB0byBSZXF1aXJlZCBGb3JtYXRcIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGlmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQgYW5kIHRoZSBkYXRlIGNoZWNrIHBhc3Nlc1xuICAgICAgICAgIGlmIChyZXMgJiYgZGF0ZUNoZWNrKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlZlcmlmeSBTaWduYXR1cmUgU3VjY2Vzc1wiKTtcbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVqZWN0IHRoZSBwcm9taXNlIGlmIHRoZSBzaWduYXR1cmUgaXMgaW52YWxpZCBvciB0aGUgZGF0ZSBjaGVjayBmYWlsc1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJWZXJpZnkgU2lnbmF0dXJlIEZhaWx1cmU6IFNpZ25hdHVyZSBkaWQgbm90IG1hdGNoXCIpO1xuICAgICAgICAgICAgcmVqZWN0KHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlamVjdCB0aGUgcHJvbWlzZSBpZiB0aGUgc2lnbmF0dXJlIGlzIG5vdCBpbiB0aGUgcmVxdWlyZWQgZm9ybWF0XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBcIlZlcmlmeSBTaWduYXR1cmUgRmFpbHVyZTogU2lnbmF0dXJlIE5vdCBDb252ZXJ0ZWQgdG8gUmVxdWlyZWQgRm9ybWF0XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2UgaWYgdGhlIHNpZ25hdHVyZSBpcyBtaXNzaW5nIGluIGhlYWRlcnNcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgXCJWZXJpZnkgU2lnbmF0dXJlIEZhaWx1cmU6IFNpZ25hdHVyZSBOb3QgUHJlc2VudCBpbiBIZWFkZXJzXCJcbiAgICAgICAgKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIHBlcmZvcm0gUE9TVCByZXF1ZXN0XG4gIEBsb2dNZXRob2RcbiAgcG9zdChcbiAgICB1cmwsXG4gICAgYm9keSxcbiAgICBoZWFkZXJEYXRhLFxuICAgIGlzRW5jcnlwdCA9IGZhbHNlLFxuICAgIGlzRGVjcnlwdCA9IGZhbHNlLFxuICAgIGlzVmVyaWZ5U2lnbmF0dXJlID0gZmFsc2UsXG4gICAgaXNTa2lwSGVhZGVyQWx0ZXJhdGlvbiA9IGZhbHNlXG4gICkge1xuICAgIGxldCBwcmVQcm9jZXNzZWRIZWFkZXIgPSBoZWFkZXJEYXRhO1xuXG4gICAgLy8gUHJlcHJvY2VzcyBoZWFkZXIgZGF0YSB1bmxlc3MgaW5zdHJ1Y3RlZCB0byBza2lwXG4gICAgaWYgKCFpc1NraXBIZWFkZXJBbHRlcmF0aW9uKSB7XG4gICAgICBwcmVQcm9jZXNzZWRIZWFkZXIgPSB0aGlzLnByZVByb2Nlc3NIZWFkZXIoaGVhZGVyRGF0YSwgaXNWZXJpZnlTaWduYXR1cmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVQcm9jZXNzZWRIZWFkZXJbXCJvYnNlcnZlXCJdID0gXCJyZXNwb25zZVwiO1xuICAgIH1cblxuICAgIC8vIEVuY3J5cHQgYm9keSBpZiByZXF1aXJlZFxuICAgIGlmIChpc0VuY3J5cHQpIHtcbiAgICAgIGJvZHkgPSBlbmNyeXB0V2l0aEFFUyhKU09OLnN0cmluZ2lmeShib2R5KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBheGlvcy5wb3N0KHVybCwgYm9keSwgaGVhZGVyRGF0YSkudGhlbihcbiAgICAgICAgYXN5bmMgKHJlcykgPT4ge1xuICAgICAgICAgIGxldCBkYXRhID0gcmVzW1wiZGF0YVwiXTtcblxuICAgICAgICAgIC8vIERlY3J5cHQgcmVzcG9uc2UgaWYgcmVxdWlyZWRcbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc0RlY3J5cHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuY3J5cHRlZFJlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZFJlc3BvbnNlID0gYXdhaXQgZGVjcnlwdFdpdGhBRVMoZW5jcnlwdGVkUmVzcG9uc2UpO1xuICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGVjcnlwdGVkUmVzcG9uc2UpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJEZWNyeXB0ZWQgUmVzcG9uc2VcIiwgZGF0YSk7XG4gICAgICAgICAgICByZXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmVyaWZ5IHNpZ25hdHVyZSBhbmQgaGFuZGxlIHJlc3BvbnNlXG4gICAgICAgICAgdGhpcy52ZXJpZnlTaWduYXR1cmUoXG4gICAgICAgICAgICB0aGlzLmRhdGFEZXJpdmF0aXZlTG9naWMoZGF0YSksXG4gICAgICAgICAgICByZXM/LmhlYWRlcnMsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCh2ZXJpZmljYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycj8ucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgICBsZXQgZGF0YSA9IGVycj8ucmVzcG9uc2U/LmRhdGE7XG5cbiAgICAgICAgICAvLyBEZWNyeXB0IGVycm9yIHJlc3BvbnNlIGlmIHJlcXVpcmVkXG4gICAgICAgICAgaWYgKGRhdGEgJiYgaXNEZWNyeXB0KSB7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWRSZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWRSZXNwb25zZSA9IGF3YWl0IGRlY3J5cHRXaXRoQUVTKGVuY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRlY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGVjcnlwdGVkIFJlc3BvbnNlXCIsIGRhdGEpO1xuICAgICAgICAgICAgZXJyLnJlc3BvbnNlLmRhdGEgPSBkYXRhO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFZlcmlmeSBzaWduYXR1cmUgYW5kIGhhbmRsZSByZXNwb25zZVxuICAgICAgICAgIHRoaXMudmVyaWZ5U2lnbmF0dXJlKFxuICAgICAgICAgICAgdGhpcy5kYXRhRGVyaXZhdGl2ZUxvZ2ljKGRhdGEpLFxuICAgICAgICAgICAgZXJyPy5yZXNwb25zZT8uaGVhZGVycyxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIGlzVmVyaWZ5U2lnbmF0dXJlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4oKHZlcmlmaWNhdGlvbikgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycj8ucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyPy5yZXNwb25zZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIHBlcmZvcm0gR0VUIHJlcXVlc3RcbiAgQGxvZ01ldGhvZFxuICBnZXQoXG4gICAgdXJsLFxuICAgIGhlYWRlckRhdGEgPSB1bmRlZmluZWQsXG4gICAgaXNEZWNyeXB0ID0gZmFsc2UsXG4gICAgaXNWZXJpZnlTaWduYXR1cmUgPSBmYWxzZSxcbiAgICBpc1NraXBIZWFkZXJBbHRlcmF0aW9uID0gZmFsc2VcbiAgKSB7XG4gICAgbGV0IHByZVByb2Nlc3NlZEhlYWRlciA9IGhlYWRlckRhdGE7XG5cbiAgICAvLyBQcmVwcm9jZXNzIGhlYWRlciBkYXRhIHVubGVzcyBpbnN0cnVjdGVkIHRvIHNraXBcbiAgICBpZiAoIWlzU2tpcEhlYWRlckFsdGVyYXRpb24pIHtcbiAgICAgIHByZVByb2Nlc3NlZEhlYWRlciA9IHRoaXMucHJlUHJvY2Vzc0hlYWRlcihoZWFkZXJEYXRhLCBpc1ZlcmlmeVNpZ25hdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZVByb2Nlc3NlZEhlYWRlcltcIm9ic2VydmVcIl0gPSBcInJlc3BvbnNlXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBheGlvcy5nZXQodXJsLCBwcmVQcm9jZXNzZWRIZWFkZXIpLnRoZW4oXG4gICAgICAgIGFzeW5jIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGxldCBkYXRhID0gcmVzW1wiZGF0YVwiXTtcblxuICAgICAgICAgIC8vIERlY3J5cHQgcmVzcG9uc2UgaWYgcmVxdWlyZWRcbiAgICAgICAgICBpZiAoaXNEZWNyeXB0KSB7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWRSZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWRSZXNwb25zZSA9IGF3YWl0IGRlY3J5cHRXaXRoQUVTKGVuY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRlY3J5cHRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGVjcnlwdGVkIFJlc3BvbnNlXCIsIGRhdGEpO1xuICAgICAgICAgICAgcmVzLmRhdGEgPSBkYXRhO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFZlcmlmeSBzaWduYXR1cmUgYW5kIGhhbmRsZSByZXNwb25zZVxuICAgICAgICAgIHRoaXMudmVyaWZ5U2lnbmF0dXJlKFxuICAgICAgICAgICAgdGhpcy5kYXRhRGVyaXZhdGl2ZUxvZ2ljKGRhdGEpLFxuICAgICAgICAgICAgcmVzPy5oZWFkZXJzLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgaXNWZXJpZnlTaWduYXR1cmVcbiAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbigodmVyaWZpY2F0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXMpO1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnI/LnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyAoZXJyKSA9PiB7XG4gICAgICAgICAgbGV0IGRhdGEgPSBlcnI/LnJlc3BvbnNlPy5kYXRhO1xuXG4gICAgICAgICAgLy8gRGVjcnlwdCBlcnJvciByZXNwb25zZSBpZiByZXF1aXJlZFxuICAgICAgICAgIGlmIChkYXRhICYmIGlzRGVjcnlwdCkge1xuICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkUmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgY29uc3QgZGVjcnlwdGVkUmVzcG9uc2UgPSBhd2FpdCBkZWNyeXB0V2l0aEFFUyhlbmNyeXB0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkZWNyeXB0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRlY3J5cHRlZCBSZXNwb25zZVwiLCBkYXRhKTtcbiAgICAgICAgICAgIGVyci5yZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBWZXJpZnkgc2lnbmF0dXJlIGFuZCBoYW5kbGUgcmVzcG9uc2VcbiAgICAgICAgICB0aGlzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgICAgIHRoaXMuZGF0YURlcml2YXRpdmVMb2dpYyhkYXRhKSxcbiAgICAgICAgICAgIGVycj8ucmVzcG9uc2U/LmhlYWRlcnMsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCh2ZXJpZmljYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnI/LnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycj8ucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBleGVjdXRlIEFQSSBjYWxsIGJhc2VkIG9uIG1ldGhvZCB0eXBlXG4gIGV4ZWN1dGVBcGlDYWxsKFxuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIGlzRW5jcnlwdCxcbiAgICBpc0RlY3J5cHQsXG4gICAgaXNWZXJpZnlTaWduYXR1cmVcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAobWV0aG9kID09IFwiR0VUXCIpIHtcbiAgICAgICAgdGhpcy5nZXQoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9LFxuICAgICAgICAgIGlzRGVjcnlwdCxcbiAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICApLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc3QoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH0sXG4gICAgICAgICAgaXNFbmNyeXB0LFxuICAgICAgICAgIGlzRGVjcnlwdCxcbiAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICApLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==