@nlabs/metropolisjs 0.2.0 → 0.3.1
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,6 +8,11 @@ export interface UserActionsOptions {
|
|
|
8
8
|
readonly userAdapter?: (input: unknown, options?: UserAdapterOptions) => any;
|
|
9
9
|
readonly userAdapterOptions?: UserAdapterOptions;
|
|
10
10
|
}
|
|
11
|
+
export interface VerificationEmailOptions {
|
|
12
|
+
readonly subject?: string;
|
|
13
|
+
readonly template?: string;
|
|
14
|
+
readonly text?: string;
|
|
15
|
+
}
|
|
11
16
|
export interface UserApiResultsType {
|
|
12
17
|
readonly users: {
|
|
13
18
|
readonly activeCount?: number;
|
|
@@ -31,6 +36,7 @@ export interface UserApiResultsType {
|
|
|
31
36
|
readonly remove?: Partial<User>;
|
|
32
37
|
readonly resetPassword?: boolean;
|
|
33
38
|
readonly saveBillingCard?: Partial<User>;
|
|
39
|
+
readonly sendVerificationEmail?: boolean;
|
|
34
40
|
readonly session?: Partial<User>;
|
|
35
41
|
readonly signIn?: Partial<User>;
|
|
36
42
|
readonly signUp?: Partial<User>;
|
|
@@ -63,6 +69,7 @@ export interface userActions {
|
|
|
63
69
|
remove: (userId: string, requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
64
70
|
resetPassword: (username: string, password: string, code: string, type: 'email' | 'phone', requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
65
71
|
search: (query: string, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
72
|
+
sendVerificationEmail: (email: string, emailOptions?: VerificationEmailOptions, requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
66
73
|
session: (userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
67
74
|
saveBillingCard: (card: Record<string, unknown>, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
68
75
|
signIn: (user: Partial<User>, expires?: number, requestOptions?: ActionRequestOptions) => Promise<SessionType>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userActions.d.ts","sourceRoot":"","sources":["../../../src/actions/userActions/userActions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"userActions.d.ts","sourceRoot":"","sources":["../../../src/actions/userActions/userActions.ts"],"names":[],"mappings":"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"}
|
|
@@ -773,6 +773,40 @@ export const createUserActions = (flux, options)=>{
|
|
|
773
773
|
return true;
|
|
774
774
|
});
|
|
775
775
|
};
|
|
776
|
+
const sendVerificationEmail = async (email, emailOptions = {}, requestOptions = {})=>{
|
|
777
|
+
const queryVariables = {
|
|
778
|
+
user: {
|
|
779
|
+
type: 'UserInput!',
|
|
780
|
+
value: {
|
|
781
|
+
email,
|
|
782
|
+
...emailOptions.subject ? {
|
|
783
|
+
verificationEmailSubject: emailOptions.subject
|
|
784
|
+
} : {},
|
|
785
|
+
...emailOptions.template ? {
|
|
786
|
+
verificationEmailTemplate: emailOptions.template
|
|
787
|
+
} : {},
|
|
788
|
+
...emailOptions.text ? {
|
|
789
|
+
verificationEmailText: emailOptions.text
|
|
790
|
+
} : {}
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
};
|
|
794
|
+
const onSuccess = (data)=>{
|
|
795
|
+
const success = !!data?.users?.sendVerificationEmail;
|
|
796
|
+
return flux.dispatch({
|
|
797
|
+
type: success ? USER_CONSTANTS.CONFIRM_SIGN_UP_SUCCESS : USER_CONSTANTS.CONFIRM_SIGN_UP_ERROR
|
|
798
|
+
});
|
|
799
|
+
};
|
|
800
|
+
return publicMutation(flux, 'sendVerificationEmail', DATA_TYPE, queryVariables, [], {
|
|
801
|
+
onSuccess
|
|
802
|
+
}).then((data)=>{
|
|
803
|
+
const success = !!data?.users?.sendVerificationEmail;
|
|
804
|
+
if (!success) {
|
|
805
|
+
throw new Error('send_verification_email_failed');
|
|
806
|
+
}
|
|
807
|
+
return true;
|
|
808
|
+
});
|
|
809
|
+
};
|
|
776
810
|
const resetPassword = async (username, password, code, type, requestOptions = {})=>{
|
|
777
811
|
const queryVariables = {
|
|
778
812
|
code: {
|
|
@@ -829,6 +863,7 @@ export const createUserActions = (flux, options)=>{
|
|
|
829
863
|
resetPassword,
|
|
830
864
|
saveBillingCard,
|
|
831
865
|
search,
|
|
866
|
+
sendVerificationEmail,
|
|
832
867
|
session,
|
|
833
868
|
signIn,
|
|
834
869
|
signOut,
|
|
@@ -841,4 +876,4 @@ export const createUserActions = (flux, options)=>{
|
|
|
841
876
|
};
|
|
842
877
|
};
|
|
843
878
|
|
|
844
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy91c2VyQWN0aW9ucy91c2VyQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt2YWxpZGF0ZVVzZXJJbnB1dH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHtVU0VSX0NPTlNUQU5UU30gZnJvbSAnLi4vLi4vc3RvcmVzL3VzZXJTdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeSwgcHVibGljTXV0YXRpb24sIHJlZnJlc2hTZXNzaW9ufSBmcm9tICcuLi8uLi91dGlscy9hcGkuanMnO1xuaW1wb3J0IHtjcmVhdGVCYXNlQWN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvYmFzZUFjdGlvbkZhY3RvcnkuanMnO1xuaW1wb3J0IHtcbiAgY2xlYXJQZXJzaXN0ZWRTZXNzaW9uLFxuICBoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlLFxuICBpc0xvZ2dlZEluIGFzIGlzTG9nZ2VkSW5XaXRoU3RvcmFnZSxcbiAgbm9ybWFsaXplU2Vzc2lvbixcbiAgc3RvcmVTZXNzaW9uXG59IGZyb20gJy4uLy4uL3V0aWxzL3Nlc3Npb24uanMnO1xuaW1wb3J0IHtnZXRDb25maWdGcm9tRmx1eH0gZnJvbSAnLi4vLi4vdXRpbHMvY29uZmlnVXRpbHMuanMnO1xuaW1wb3J0IHtjbGVhckNhY2hlZFJlcXVlc3QsIGdldENhY2hlZFJlcXVlc3QsIHNldENhY2hlZFJlcXVlc3R9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5pbXBvcnQge3N5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbn0gZnJvbSAnLi4vcGVyc29uYUFjdGlvbnMvcGVyc29uYUFjdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEFjdGlvbiwgRmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtVc2VyfSBmcm9tICcuLi8uLi9hZGFwdGVycy91c2VyQWRhcHRlci91c2VyQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpUmVzdWx0c1R5cGUsIFNlc3Npb25UeXBlfSBmcm9tICcuLi8uLi91dGlscy9hcGkuanMnO1xuaW1wb3J0IHR5cGUge0Jhc2VBZGFwdGVyT3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9yRmFjdG9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uUmVxdWVzdE9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5cbmNvbnN0IERBVEFfVFlQRSA9ICd1c2Vycyc7XG5jb25zdCBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTID0gWyd1c2VySWQnLCAndXNlcm5hbWUnXTtcbmNvbnN0IFNFTlNJVElWRV9VU0VSX0ZJRUxEUyA9IG5ldyBTZXQoW1xuICAncGFzc3dvcmQnLFxuICAnc2FsdCcsXG4gICd0b2tlbicsXG4gICdyZWZyZXNoVG9rZW4nLFxuICAndmVyaWZpZWRFbWFpbENvZGUnLFxuICAndmVyaWZpZWRTbXNDb2RlJ1xuXSk7XG5jb25zdCBJTlZBTElEX0ZJRUxEX1JFR0VYID0gL0Nhbm5vdCBxdWVyeSBmaWVsZCBcIihbXlwiXSspXCIvZztcbmNvbnN0IGhhc1Nlc3Npb25JZGVudGl0eSA9ICh1c2VyPzogUGFydGlhbDxVc2VyPiB8IG51bGwpOiBib29sZWFuID0+XG4gICEhKHVzZXIgJiYgKCh1c2VyIGFzIGFueSkuX2lkIHx8ICh1c2VyIGFzIGFueSkudXNlcklkIHx8ICh1c2VyIGFzIGFueSkudXNlcm5hbWUgfHwgKHVzZXIgYXMgYW55KS5lbWFpbCkpO1xuXG5jb25zdCBzYW5pdGl6ZVVwZGF0ZVVzZXJJbnB1dCA9ICh1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4gPSB7fSwgY3VycmVudFNlc3Npb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBQYXJ0aWFsPFVzZXI+ID0+IHtcbiAgY29uc3QgbmV4dFVzZXIgPSBPYmplY3QuZW50cmllcyh1c2VySW5wdXQpLnJlZHVjZSgodXNlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFtmaWVsZCwgdmFsdWVdKSA9PiB7XG4gICAgaWYodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYoZmllbGQgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKCk7XG5cbiAgICAgIGlmKHBhc3N3b3JkKSB7XG4gICAgICAgIHVzZXIucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYoZmllbGQgPT09ICd1c2VySWQnKSB7XG4gICAgICB1c2VyLnVzZXJJZCA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gY3VycmVudFNlc3Npb25bZmllbGRdO1xuXG4gICAgaWYoU3RyaW5nKHZhbHVlKSAhPT0gU3RyaW5nKGN1cnJlbnRWYWx1ZSA/PyAnJykpIHtcbiAgICAgIHVzZXJbZmllbGRdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gbmV4dFVzZXIgYXMgUGFydGlhbDxVc2VyPjtcbn07XG5cbmNvbnN0IHN5bmNTdG9yZWRTZXNzaW9uID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmssIHNlc3Npb25QYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgY29uc3QgY3VycmVudFNlc3Npb24gPSAoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywge30pIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIHN0b3JlU2Vzc2lvbihmbHV4LCB7Li4uY3VycmVudFNlc3Npb24sIC4uLnNlc3Npb25QYXRjaH0pO1xufTtcblxuY29uc3QgZ2V0U2Vzc2lvblBheWxvYWQgPSAocGF5bG9hZDogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgaWYocGF5bG9hZCAmJiB0eXBlb2YgcGF5bG9hZCA9PT0gJ29iamVjdCcgJiYgJ3Nlc3Npb24nIGluIChwYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIHJldHVybiAoKChwYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5zZXNzaW9uKSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICByZXR1cm4gKHBheWxvYWQgJiYgdHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnID8gcGF5bG9hZCA6IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmNvbnN0IGdldEZpZWxkUm9vdCA9IChmaWVsZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IGZpZWxkLnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSB0cmltbWVkLm1hdGNoKC9eW0EtWmEtel9dW0EtWmEtejAtOV9dKi8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6ICcnO1xufTtcblxuY29uc3Qgc2FuaXRpemVVc2VyUHJvcHMgPSAocHJvcHM6IHN0cmluZ1tdID0gW10sIGZhbGxiYWNrUHJvcHM6IHN0cmluZ1tdID0gREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEUyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBzYW5pdGl6ZWQgPSBwcm9wcy5yZWR1Y2UoKGxpc3Q6IHN0cmluZ1tdLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGdldEZpZWxkUm9vdChmaWVsZCk7XG5cbiAgICBpZighcm9vdCB8fCBTRU5TSVRJVkVfVVNFUl9GSUVMRFMuaGFzKHJvb3QpIHx8IHNlZW4uaGFzKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgc2Vlbi5hZGQoZmllbGQpO1xuICAgIGxpc3QucHVzaChmaWVsZCk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sIFtdKTtcblxuICBpZihzYW5pdGl6ZWQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cblxuICByZXR1cm4gZmFsbGJhY2tQcm9wcy5yZWR1Y2UoKGxpc3Q6IHN0cmluZ1tdLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGdldEZpZWxkUm9vdChmaWVsZCk7XG5cbiAgICBpZighcm9vdCB8fCBTRU5TSVRJVkVfVVNFUl9GSUVMRFMuaGFzKHJvb3QpIHx8IHNlZW4uaGFzKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgc2Vlbi5hZGQoZmllbGQpO1xuICAgIGxpc3QucHVzaChmaWVsZCk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sIFtdKTtcbn07XG5cbmNvbnN0IGdldEludmFsaWRGaWVsZHMgPSAoZXJyb3I6IHVua25vd24pOiBTZXQ8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVycm9ycyA9IChlcnJvciBhcyBhbnkpPy5lcnJvcnMgfHwgKGVycm9yIGFzIGFueSk/LnNvdXJjZT8uZXJyb3JzIHx8IFtdO1xuICBjb25zdCBpbnZhbGlkRmllbGRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZXJyb3JzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgPyBpdGVtIDogaXRlbT8ubWVzc2FnZSB8fCAnJztcbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBJTlZBTElEX0ZJRUxEX1JFR0VYLmV4ZWMobWVzc2FnZSk7XG5cbiAgICB3aGlsZShtYXRjaCkge1xuICAgICAgaW52YWxpZEZpZWxkcy5hZGQobWF0Y2hbMV0pO1xuICAgICAgbWF0Y2ggPSBJTlZBTElEX0ZJRUxEX1JFR0VYLmV4ZWMobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgSU5WQUxJRF9GSUVMRF9SRUdFWC5sYXN0SW5kZXggPSAwO1xuICB9KTtcblxuICByZXR1cm4gaW52YWxpZEZpZWxkcztcbn07XG5cbmNvbnN0IHdpdGhJbnZhbGlkRmllbGRSZXRyeSA9IGFzeW5jIDxUPihcbiAgcmVxdWVzdFdpdGhQcm9wczogKHByb3BzOiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxUPixcbiAgcHJvcHM6IHN0cmluZ1tdLFxuICBmYWxsYmFja1Byb3BzOiBzdHJpbmdbXSA9IERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBzYWZlUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhwcm9wcywgZmFsbGJhY2tQcm9wcyk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmVxdWVzdFdpdGhQcm9wcyhzYWZlUHJvcHMpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgaW52YWxpZEZpZWxkcyA9IGdldEludmFsaWRGaWVsZHMoZXJyb3IpO1xuXG4gICAgaWYoaW52YWxpZEZpZWxkcy5zaXplID09PSAwKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeVByb3BzID0gc2FmZVByb3BzLmZpbHRlcigoZmllbGQpID0+ICFpbnZhbGlkRmllbGRzLmhhcyhnZXRGaWVsZFJvb3QoZmllbGQpKSk7XG5cbiAgICBpZihyZXRyeVByb3BzLmxlbmd0aCA9PT0gMCB8fCByZXRyeVByb3BzLmxlbmd0aCA9PT0gc2FmZVByb3BzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoUHJvcHMocmV0cnlQcm9wcyk7XG4gIH1cbn07XG5cbmV4cG9ydCB0eXBlIFVzZXJBZGFwdGVyT3B0aW9ucyA9IEJhc2VBZGFwdGVyT3B0aW9ucztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uc09wdGlvbnMge1xuICByZWFkb25seSB1c2VyQWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFVzZXJBZGFwdGVyT3B0aW9ucykgPT4gYW55O1xuICByZWFkb25seSB1c2VyQWRhcHRlck9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFwaVJlc3VsdHNUeXBlIHtcbiAgcmVhZG9ubHkgdXNlcnM6IHtcbiAgICByZWFkb25seSBhY3RpdmVDb3VudD86IG51bWJlcjtcbiAgICByZWFkb25seSBhZGRVc2VyPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBjb25maXJtQ29kZT86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgZGVhY3RpdmF0ZT86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgZm9yZ290UGFzc3dvcmQ/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGl0ZW1CeUlkPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBnZXRVc2VyQnlTZXNzaW9uPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBpdGVtQnlTZXNzaW9uPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBpdGVtQnlUb2tlbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgaXRlbUJ5VXNlcm5hbWU/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGdldFVzZXJMaXN0PzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3Q/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5Q29ubmVjdGlvbj86IFVzZXJbXTtcbiAgICByZWFkb25seSBsaXN0QnlMYXRlc3Q/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5UmVhY3Rpb25zPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3RCeVRhZ3M/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgc2VhcmNoPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IHJlZnJlc2hTZXNzaW9uPzogU2Vzc2lvblR5cGU7XG4gICAgcmVhZG9ubHkgcmVtb3ZlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSByZXNldFBhc3N3b3JkPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBzYXZlQmlsbGluZ0NhcmQ/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHNlc3Npb24/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHNpZ25Jbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgc2lnblVwPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBkZWxldGVCaWxsaW5nQ2FyZD86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgdXBkYXRlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSB1cGRhdGVVc2VyPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSB1cGRhdGVQYXNzd29yZD86IFBhcnRpYWw8Ym9vbGVhbj47XG4gICAgcmVhZG9ubHkgdXBkYXRlUGxhbj86IFBhcnRpYWw8VXNlcj47XG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRVc2VyVmFsaWRhdG9yID0gKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogVXNlckFkYXB0ZXJPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlVXNlcklucHV0KGlucHV0KTtcblxuICBpZihvcHRpb25zPy5zdHJpY3QgJiYgIXZhbGlkYXRlZC51c2VybmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlcm5hbWUgaXMgcmVxdWlyZWQgaW4gc3RyaWN0IG1vZGUnKTtcbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIHVzZXJBY3Rpb25zIHtcbiAgYWRkVXNlcjogKHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPiwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGNvbmZpcm1Db2RlOiAoY29kZTogbnVtYmVyLCB7dHlwZSwgdmFsdWV9OiB7dHlwZTogJ2VtYWlsJyB8ICdwaG9uZSc7IHZhbHVlOiBzdHJpbmd9LCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBjb25maXJtU2lnblVwOiAoY29kZTogc3RyaW5nLCB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyOiAocmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgY3VycmVudFVzZXI6IChyZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBsaXN0OiAodXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcltdPjtcbiAgbGlzdEJ5Q29ubmVjdGlvbjogKHVzZXJJZDogc3RyaW5nLCBmcm9tPzogbnVtYmVyLCB0bz86IG51bWJlciwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcltdPjtcbiAgaXRlbUJ5SWQ6ICh1c2VySWQ6IHN0cmluZywgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGRlbGV0ZUJpbGxpbmdDYXJkOiAodXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGxpc3RCeUxhdGVzdDogKHVzZXJuYW1lPzogc3RyaW5nLCBmcm9tPzogbnVtYmVyLCB0bz86IG51bWJlciwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcltdPjtcbiAgbGlzdEJ5UmVhY3Rpb25zOiAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICByZWFjdGlvbk5hbWVzOiBzdHJpbmdbXSxcbiAgICBmcm9tPzogbnVtYmVyLFxuICAgIHRvPzogbnVtYmVyLFxuICAgIHBlcnNvbmFQcm9wcz86IHN0cmluZ1tdLFxuICAgIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnNcbiAgKSA9PiBQcm9taXNlPFVzZXJbXT47XG4gIGxpc3RCeVRhZ3M6IChcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHRhZ05hbWVzOiBzdHJpbmdbXSxcbiAgICBmcm9tPzogbnVtYmVyLFxuICAgIHRvPzogbnVtYmVyLFxuICAgIHBlcnNvbmFQcm9wcz86IHN0cmluZ1tdLFxuICAgIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnNcbiAgKSA9PiBQcm9taXNlPFVzZXJbXT47XG4gIGZvcmdvdFBhc3N3b3JkOiAodXNlcm5hbWU6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgaXNMb2dnZWRJbjogKCkgPT4gYm9vbGVhbjtcbiAgcmVmcmVzaFNlc3Npb246ICh0b2tlbj86IHN0cmluZywgZXhwaXJlcz86IG51bWJlciwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxTZXNzaW9uVHlwZT47XG4gIHJlbW92ZTogKHVzZXJJZDogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICByZXNldFBhc3N3b3JkOiAodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY29kZTogc3RyaW5nLCB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgc2VhcmNoOiAocXVlcnk6IHN0cmluZywgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcltdPjtcbiAgc2Vzc2lvbjogKHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBzYXZlQmlsbGluZ0NhcmQ6IChjYXJkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHNpZ25JbjogKHVzZXI6IFBhcnRpYWw8VXNlcj4sIGV4cGlyZXM/OiBudW1iZXIsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8U2Vzc2lvblR5cGU+O1xuICBzaWduT3V0OiAocmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgc2lnblVwOiAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgdXBkYXRlUGFzc3dvcmQ6IChwYXNzd29yZDogc3RyaW5nLCBuZXdQYXNzd29yZDogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICB1cGRhdGVVc2VyOiAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgdXBkYXRlUGxhbjogKHBsYW5JZDogc3RyaW5nLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgdXBkYXRlVXNlckFkYXB0ZXI6IChhZGFwdGVyOiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IGFueSkgPT4gdm9pZDtcbiAgdXBkYXRlVXNlckFkYXB0ZXJPcHRpb25zOiAob3B0aW9uczogVXNlckFkYXB0ZXJPcHRpb25zKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlVXNlckFjdGlvbnMgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG9wdGlvbnM/OiBVc2VyQWN0aW9uc09wdGlvbnNcbik6IHVzZXJBY3Rpb25zID0+IHtcbiAgY29uc3QgdXNlckJhc2UgPSBjcmVhdGVCYXNlQWN0aW9ucyhmbHV4LCBkZWZhdWx0VXNlclZhbGlkYXRvciwge1xuICAgIGFkYXB0ZXI6IG9wdGlvbnM/LnVzZXJBZGFwdGVyLFxuICAgIGFkYXB0ZXJPcHRpb25zOiBvcHRpb25zPy51c2VyQWRhcHRlck9wdGlvbnNcbiAgfSk7XG4gIGNvbnN0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMgPSBhc3luYyAodXNlcklkID0gJycpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgJ3VzZXIubGlzdCcpO1xuICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndXNlci5saXN0QnlMYXRlc3QnKTtcbiAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgJ3VzZXIubGlzdEJ5VGFncycpO1xuICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndXNlci5zZWFyY2gnKTtcbiAgICBpZih1c2VySWQpIHtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCBgdXNlci5pdGVtQnlJZDoke3VzZXJJZH1gKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYWRkVXNlciA9IGFzeW5jIChcbiAgICB1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IHt1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkfSA9IHVzZXJJbnB1dDtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgIHVzZXJuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFVzZXJBcGlSZXN1bHRzVHlwZSk6IFByb21pc2U8Rmx1eEFjdGlvbj4gPT4ge1xuICAgICAgY29uc3QgdXNlciA9IGRhdGE/LnVzZXJzPy5hZGRVc2VyIHx8IHt9O1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5BRERfSVRFTV9TVUNDRVNTLFxuICAgICAgICB1c2VyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0dXJuUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyh1c2VyUHJvcHMsIFtcbiAgICAgICdhZGRlZCcsXG4gICAgICAnYWRkcmVzcycsXG4gICAgICAnZG9iJyxcbiAgICAgICdjaXR5JyxcbiAgICAgICdjb3VudHJ5JyxcbiAgICAgICdnZW5kZXInLFxuICAgICAgJ2ltYWdlVXJsJyxcbiAgICAgICdsYXRpdHVkZScsXG4gICAgICAnbG9uZ2l0dWRlJyxcbiAgICAgICdtYWlsaW5nTGlzdCcsXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3N0YXRlJyxcbiAgICAgICd0aHVtYlVybCcsXG4gICAgICAndXNlckFjY2VzcycsXG4gICAgICAndXNlcklkJyxcbiAgICAgICd1c2VybmFtZSdcbiAgICBdKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2FkZFVzZXInLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2lnblVwID0gYXN5bmMgKFxuICAgIHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPixcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qge3VzZXJuYW1lLCBlbWFpbCwgcGFzc3dvcmR9ID0gdXNlcklucHV0O1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgZXhwaXJlczoge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IDE1XG4gICAgICB9LFxuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogVXNlckFwaVJlc3VsdHNUeXBlKTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gZGF0YT8udXNlcnM/LnNpZ25VcCB8fCB7fTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9VUF9TVUNDRVNTLFxuICAgICAgICB1c2VyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0dXJuUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhbXG4gICAgICAnYWRkZWQnLFxuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICAgIC4uLnVzZXJQcm9wc1xuICAgIF0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnc2lnblVwJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX1VQX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcygpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGVVc2VyID0gYXN5bmMgKFxuICAgIHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPixcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3QgdXBkYXRlSW5wdXQgPSBzYW5pdGl6ZVVwZGF0ZVVzZXJJbnB1dCh1c2VySW5wdXQsIChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICBjb25zdCB7XG4gICAgICBiaXJ0aGRhdGUsXG4gICAgICBkb2IsXG4gICAgICBlbWFpbCxcbiAgICAgIGZpcnN0TmFtZSxcbiAgICAgIGdlbmRlcixcbiAgICAgIGxhc3ROYW1lLFxuICAgICAgbWFpbGluZ0xpc3QsXG4gICAgICBwYXNzd29yZCxcbiAgICAgIHBob25lLFxuICAgICAgdXNlcklkLFxuICAgICAgdXNlcm5hbWVcbiAgICB9ID0gdXBkYXRlSW5wdXQ7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBiaXJ0aGRhdGU6IGJpcnRoZGF0ZSA/PyBkb2IsXG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgZmlyc3ROYW1lLFxuICAgICAgICAgIGdlbmRlcixcbiAgICAgICAgICBsYXN0TmFtZSxcbiAgICAgICAgICBtYWlsaW5nTGlzdCxcbiAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICBwaG9uZSxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlcnMgPSAoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzO1xuICAgICAgY29uc3QgbGVnYWN5VXNlciA9IHVzZXJzPy51cGRhdGUgfHwge307XG4gICAgICBjb25zdCB1cGRhdGVkVXNlciA9IHVzZXJzPy51cGRhdGVVc2VyIHx8IHt9O1xuICAgICAgY29uc3QgdXNlciA9IGhhc1Nlc3Npb25JZGVudGl0eSh1cGRhdGVkVXNlcikgPyB1cGRhdGVkVXNlciA6IGxlZ2FjeVVzZXI7XG5cbiAgICAgIGlmKCh1c2VyIGFzIGFueSk/LnVzZXJJZCAmJiAodXNlciBhcyBhbnkpLnVzZXJJZCA9PT0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpKSB7XG4gICAgICAgIHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIHVzZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdhZGRlZCcsXG4gICAgICAnYmlydGhkYXRlJyxcbiAgICAgICdjaXR5JyxcbiAgICAgICdjb3VudHJ5JyxcbiAgICAgICdlbWFpbCcsXG4gICAgICAnZmlyc3ROYW1lJyxcbiAgICAgICdnZW5kZXInLFxuICAgICAgJ2ltYWdlQ291bnQnLFxuICAgICAgJ2ltYWdlVXJsJyxcbiAgICAgICdsYXN0TmFtZScsXG4gICAgICAnbGF0aXR1ZGUnLFxuICAgICAgJ2xvbmdpdHVkZScsXG4gICAgICAnbWFpbGluZ0xpc3QnLFxuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICdwaG9uZScsXG4gICAgICAnc3RhdGUnLFxuICAgICAgJ3RodW1iVXJsJyxcbiAgICAgICd1c2VyQWNjZXNzJyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICAgIC4uLnVzZXJQcm9wc1xuICAgIF0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3VwZGF0ZVVzZXInLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoU3RyaW5nKHVzZXJJZCB8fCAnJykpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjb25maXJtQ29kZSA9IGFzeW5jIChcbiAgICBjb2RlOiBudW1iZXIsXG4gICAge3R5cGUsIHZhbHVlfToge3R5cGU6ICdlbWFpbCcgfCAncGhvbmUnOyB2YWx1ZTogc3RyaW5nfSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGNvZGU6IHtcbiAgICAgICAgdHlwZTogJ0ludCEnLFxuICAgICAgICB2YWx1ZTogY29kZVxuICAgICAgfSxcbiAgICAgIHR5cGU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgfSxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgdmFsdWVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHB1YmxpY011dGF0aW9uPFVzZXJBcGlSZXN1bHRzVHlwZT4oZmx1eCwgJ2NvbmZpcm1Db2RlJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgW10pO1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9ICEhZGF0YT8udXNlcnM/LmNvbmZpcm1Db2RlO1xuXG4gICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7Y29uZmlybWVkLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5DT05GSVJNX1NJR05fVVBfU1VDQ0VTU30pO1xuXG4gICAgcmV0dXJuIGNvbmZpcm1lZDtcbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSBhc3luYyAodXNlcklkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICB1c2VySWQ6IHtcbiAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgIHZhbHVlOiB1c2VySWRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSAoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy5yZW1vdmUgfHwge307XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuUkVNT1ZFX0lURU1fU1VDQ0VTUywgdXNlcn0pO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uKGZsdXgsICdyZW1vdmUnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSwge29uU3VjY2Vzc30pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHVzZXJJZCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNlc3Npb24gPSBhc3luYyAodXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcj4gPT4gd2l0aEludmFsaWRGaWVsZFJldHJ5KFxuICAgIGFzeW5jIChzZXNzaW9uUHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBhcHBRdWVyeShcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2dldFVzZXJCeVNlc3Npb24nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHt9LFxuICAgICAgICBzZXNzaW9uUHJvcHNcbiAgICAgICkgYXMgdW5rbm93biBhcyB7XG4gICAgICAgIHVzZXJzPzoge2dldFVzZXJCeVNlc3Npb24/OiBQYXJ0aWFsPFVzZXI+fTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IGRhdGE/LnVzZXJzPy5nZXRVc2VyQnlTZXNzaW9uIHx8IHt9O1xuXG4gICAgICBpZighaGFzU2Vzc2lvbklkZW50aXR5KHNlc3Npb25EYXRhKSkge1xuICAgICAgICBhd2FpdCBjbGVhclBlcnNpc3RlZFNlc3Npb24oZmx1eCk7XG4gICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3R5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9TRVNTSU9OX0VSUk9SfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZF9zZXNzaW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgc2Vzc2lvbkRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7c2Vzc2lvbjogbmV4dFNlc3Npb24sIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9TRVNTSU9OX1NVQ0NFU1N9KTtcbiAgICAgIGF3YWl0IHN5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbihmbHV4LCBTdHJpbmcoKG5leHRTZXNzaW9uIGFzIGFueSk/LnBlcnNvbmFJZCB8fCAnJykpO1xuICAgICAgcmV0dXJuIGF3YWl0IHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCBuZXh0U2Vzc2lvbikgfHwgbmV4dFNlc3Npb24pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSBhcyBVc2VyO1xuICAgIH0sXG4gICAgdXNlclByb3BzLFxuICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgKTtcblxuICBjb25zdCBpdGVtQnlJZCA9IGFzeW5jICh1c2VySWQ6IHN0cmluZywgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8VXNlcj4oZmx1eCwgYHVzZXIuaXRlbUJ5SWQ6JHt1c2VySWR9YCwge3VzZXJJZCwgdXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICB1c2VySWQ6IHtcbiAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgIHZhbHVlOiB1c2VySWRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGdldFVzZXJCeUlkID0gKChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlICYge1xuICAgICAgICB1c2Vycz86IHtnZXRVc2VyQnlJZD86IFBhcnRpYWw8VXNlcj59O1xuICAgICAgfSk/LnVzZXJzPy5nZXRVc2VyQnlJZCkgfHwge307XG5cbiAgICAgIGlmKHVzZXJJZCA9PT0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpKSB7XG4gICAgICAgIHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIGdldFVzZXJCeUlkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3R5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9JVEVNX1NVQ0NFU1MsIHVzZXI6IGdldFVzZXJCeUlkfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnZ2V0VXNlckJ5SWQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICB1c2VyUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXI+KGZsdXgsIGB1c2VyLml0ZW1CeUlkOiR7dXNlcklkfWAsIHt1c2VySWQsIHVzZXJQcm9wc30sIHJlc3VsdCBhcyBVc2VyLCByZXF1ZXN0T3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3Qgc2F2ZUJpbGxpbmdDYXJkID0gYXN5bmMgKFxuICAgIGNhcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGNhcmQ6IHtcbiAgICAgICAgdHlwZTogJ0NyZWRpdENhcmRJbnB1dCEnLFxuICAgICAgICB2YWx1ZTogY2FyZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9ICgoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy5zYXZlQmlsbGluZ0NhcmQpIHx8IHt9O1xuXG4gICAgICBpZigodXNlciBhcyBhbnkpPy51c2VySWQgJiYgKHVzZXIgYXMgYW55KS51c2VySWQgPT09IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi51c2VySWQnKSkge1xuICAgICAgICBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCB1c2VyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5VUERBVEVfSVRFTV9TVUNDRVNTLFxuICAgICAgICB1c2VyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0dXJuUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhbXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3N0cmlwZUNhcmRCcmFuZCcsXG4gICAgICAnc3RyaXBlQ2FyZElkJyxcbiAgICAgICdzdHJpcGVDYXJkTGFzdDQnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG4gICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IFN0cmluZyhmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykgfHwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3NhdmVCaWxsaW5nQ2FyZCcsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyhzZXNzaW9uVXNlcklkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGVsZXRlQmlsbGluZ0NhcmQgPSBhc3luYyAoXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gKChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LmRlbGV0ZUJpbGxpbmdDYXJkKSB8fCB7fTtcblxuICAgICAgaWYoKHVzZXIgYXMgYW55KT8udXNlcklkICYmICh1c2VyIGFzIGFueSkudXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgdXNlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICdzdHJpcGVDYXJkQnJhbmQnLFxuICAgICAgJ3N0cmlwZUNhcmRJZCcsXG4gICAgICAnc3RyaXBlQ2FyZExhc3Q0JyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICAgIC4uLnVzZXJQcm9wc1xuICAgIF0pO1xuICAgIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBTdHJpbmcoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpIHx8ICcnKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb24oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdkZWxldGVCaWxsaW5nQ2FyZCcsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAge30sXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyhzZXNzaW9uVXNlcklkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlUGxhbiA9IGFzeW5jIChcbiAgICBwbGFuSWQ6IHN0cmluZyxcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3QgbmV4dFBsYW5JZCA9IFN0cmluZyhwbGFuSWQgfHwgJycpLnRyaW0oKTtcblxuICAgIGlmKCFuZXh0UGxhbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egc3Vic2NyaXB0aW9uIHBsYW5JZCBpcyByZXF1aXJlZCB0byB1cGRhdGUgYSB1c2VyIHBsYW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHBsYW5JZDoge1xuICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgdmFsdWU6IG5leHRQbGFuSWRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSAoKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8udXBkYXRlUGxhbikgfHwge307XG5cbiAgICAgIGlmKCh1c2VyIGFzIGFueSk/LnVzZXJJZCAmJiAodXNlciBhcyBhbnkpLnVzZXJJZCA9PT0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpKSB7XG4gICAgICAgIHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIHVzZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdtb2RpZmllZCcsXG4gICAgICAncGxhbkV4cGlyZXMnLFxuICAgICAgJ3BsYW5JZCcsXG4gICAgICAncGxhblN0YXR1cycsXG4gICAgICAncGxhblN1YnNjcmlwdGlvbklkJyxcbiAgICAgICdzdHJpcGVDYXJkQnJhbmQnLFxuICAgICAgJ3N0cmlwZUNhcmRJZCcsXG4gICAgICAnc3RyaXBlQ2FyZExhc3Q0JyxcbiAgICAgICd1c2VyQWNjZXNzJyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICAgIC4uLnVzZXJQcm9wc1xuICAgIF0pO1xuICAgIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBTdHJpbmcoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpIHx8ICcnKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb24oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICd1cGRhdGVQbGFuJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHNlc3Npb25Vc2VySWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBsaXN0ID0gYXN5bmMgKHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSwgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFVzZXJbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5saXN0Jywge3VzZXJQcm9wc30sIHJlcXVlc3RPcHRpb25zKTtcblxuICAgIGlmKGNhY2hlZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8uZ2V0VXNlckxpc3QgfHwgW107XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7bGlzdCwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU30pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgICAoc2FmZVVzZXJQcm9wcykgPT4gYXBwUXVlcnkoZmx1eCwgJ2dldFVzZXJMaXN0JywgREFUQV9UWVBFLCB7fSwgc2FmZVVzZXJQcm9wcywge29uU3VjY2Vzc30pLFxuICAgICAgdXNlclByb3BzLFxuICAgICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICAgICk7XG5cbiAgICByZXR1cm4gc2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3QnLCB7dXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXJbXSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IGxpc3RCeUxhdGVzdCA9IGFzeW5jIChcbiAgICB1c2VybmFtZTogc3RyaW5nID0gJycsXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3RCeUxhdGVzdCcsIHt1c2VybmFtZSwgZnJvbSwgdG8sIHVzZXJQcm9wc30sIHJlcXVlc3RPcHRpb25zKTtcblxuICAgIGlmKGNhY2hlZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IGZyb21cbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IHRvXG4gICAgICB9LFxuICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgIHZhbHVlOiB1c2VybmFtZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/Lmxpc3RCeUxhdGVzdCB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnbGlzdEJ5TGF0ZXN0JywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgc2FmZVVzZXJQcm9wcywge29uU3VjY2Vzc30pLFxuICAgICAgdXNlclByb3BzLFxuICAgICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICAgICk7XG5cbiAgICByZXR1cm4gc2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3RCeUxhdGVzdCcsIHt1c2VybmFtZSwgZnJvbSwgdG8sIHVzZXJQcm9wc30sIHJlc3VsdCBhcyBVc2VyW10sIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBsaXN0QnlDb25uZWN0aW9uID0gYXN5bmMgKFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIGZyb206IG51bWJlciA9IDAsXG4gICAgdG86IG51bWJlciA9IDEwLFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXJbXT4gPT5cbiAgICBbXVxuICA7XG5cbiAgY29uc3QgbGlzdEJ5UmVhY3Rpb25zID0gYXN5bmMgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcmVhY3Rpb25OYW1lczogc3RyaW5nW10sXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgcGVyc29uYVByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PlxuICAgIFtdXG4gIDtcblxuICBjb25zdCBsaXN0QnlUYWdzID0gYXN5bmMgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgdGFnTmFtZXM6IHN0cmluZ1tdLFxuICAgIGZyb206IG51bWJlciA9IDAsXG4gICAgdG86IG51bWJlciA9IDEwLFxuICAgIHBlcnNvbmFQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXJbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5saXN0QnlUYWdzJywge3VzZXJuYW1lLCB0YWdOYW1lcywgZnJvbSwgdG8sIHBlcnNvbmFQcm9wc30sIHJlcXVlc3RPcHRpb25zKTtcblxuICAgIGlmKGNhY2hlZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IGZyb21cbiAgICAgIH0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIHR5cGU6ICdbU3RyaW5nIV0nLFxuICAgICAgICB2YWx1ZTogdGFnTmFtZXNcbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IHRvXG4gICAgICB9LFxuICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgIHZhbHVlOiB1c2VybmFtZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/Lmxpc3RCeVRhZ3MgfHwgW107XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7bGlzdCwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU30pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgICAoc2FmZVVzZXJQcm9wcykgPT4gYXBwUXVlcnkoZmx1eCwgJ2xpc3RCeVRhZ3MnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICBwZXJzb25hUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdEJ5VGFncycsIHt1c2VybmFtZSwgdGFnTmFtZXMsIGZyb20sIHRvLCBwZXJzb25hUHJvcHN9LCByZXN1bHQgYXMgVXNlcltdLCByZXF1ZXN0T3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3Qgc2VhcmNoID0gYXN5bmMgKHF1ZXJ5OiBzdHJpbmcsIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSwgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFVzZXJbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5zZWFyY2gnLCB7cXVlcnksIHVzZXJQcm9wc30sIHJlcXVlc3RPcHRpb25zKTtcblxuICAgIGlmKGNhY2hlZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogcXVlcnlcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSAoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy5zZWFyY2ggfHwgW107XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7bGlzdCwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU30pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgICAoc2FmZVVzZXJQcm9wcykgPT4gYXBwUXVlcnkoZmx1eCwgJ3NlYXJjaCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHVzZXJQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5zZWFyY2gnLCB7cXVlcnksIHVzZXJQcm9wc30sIHJlc3VsdCBhcyBVc2VyW10sIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBpc0xvZ2dlZEluID0gKCk6IGJvb2xlYW4gPT4gaXNMb2dnZWRJbldpdGhTdG9yYWdlKGZsdXgpO1xuXG4gIGNvbnN0IGN1cnJlbnRBdXRoZW50aWNhdGVkVXNlciA9IGFzeW5jIChyZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlKGZsdXgpO1xuICAgIHJldHVybiAoc2Vzc2lvbiB8fCB7fSkgYXMgVXNlcjtcbiAgfTtcblxuICBjb25zdCBjdXJyZW50VXNlciA9IGFzeW5jIChyZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcj4gPT4gY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyKHJlcXVlc3RPcHRpb25zKTtcblxuICBjb25zdCByZWZyZXNoU2Vzc2lvbkFjdGlvbiA9IGFzeW5jICh0b2tlbj86IHN0cmluZywgZXhwaXJlcz86IG51bWJlciwgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVmcmVzaFNlc3Npb24oZmx1eCwgdG9rZW4sIGV4cGlyZXMpO1xuICAgIHJldHVybiAocmVzdWx0Py5yZWZyZXNoU2Vzc2lvbiB8fCB7fSkgYXMgU2Vzc2lvblR5cGU7XG4gIH07XG5cbiAgY29uc3Qgc2lnbkluID0gYXN5bmMgKFxuICAgIHVzZXI6IFBhcnRpYWw8VXNlcj4sXG4gICAgZXhwaXJlcz86IG51bWJlcixcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gICAgY29uc3Qge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWUsIHBhc3N3b3JkfSA9IHVzZXI7XG4gICAgbGV0IHVzZXJJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGxlZ2FjeVZhcmlhYmxlczogUmVjb3JkPHN0cmluZywge3R5cGU6IHN0cmluZzsgdmFsdWU6IHVua25vd259PiB8IHVuZGVmaW5lZDtcblxuICAgIGlmKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB1c2VySW5wdXQgPSB7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICB1c2VybmFtZVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYoZW1haWwgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHVzZXJJbnB1dCA9IHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIHBhc3N3b3JkXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZihwaG9uZSAmJiBwYXNzd29yZCkge1xuICAgICAgdXNlcklucHV0ID0ge1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgcGhvbmVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXNlcm5hbWUsIGVtYWlsLCBvciBwaG9uZSBudW1iZXIgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB0byBzaWduIGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gICAgY29uc3QgcmVxdWVzdGVkRXhwaXJlcyA9IE1hdGgubWF4KDEsIE51bWJlcihleHBpcmVzIHx8IGNvbmZpZy5hcHA/LnNlc3Npb24/Lm1heE1pbnV0ZXMgfHwgMTUpKTtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlc1dpdGhVc2VySW5wdXQgPSB7XG4gICAgICBleHBpcmVzOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogcmVxdWVzdGVkRXhwaXJlc1xuICAgICAgfSxcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZTogdXNlcklucHV0XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IGFzeW5jIChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICBjb25zdCB1c2VycyA9IChkYXRhIGFzIGFueSk/LnVzZXJzO1xuICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSBub3JtYWxpemVTZXNzaW9uKHVzZXJzPy5zaWduSW4gfHwge30pO1xuICAgICAgY29uc3Qgc3RvcmVkU2Vzc2lvbiA9IGF3YWl0IHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIHNlc3Npb25EYXRhKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlc3Npb246IHN0b3JlZFNlc3Npb24sXG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fSU5fU1VDQ0VTU1xuICAgICAgfSBhcyBGbHV4QWN0aW9uO1xuICAgIH07XG5cbiAgICBjb25zdCBwZXJmb3JtU2lnbkluID0gYXN5bmMgKHF1ZXJ5VmFyaWFibGVzOiBhbnkpOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uUmVzdWx0ID0gYXdhaXQgcHVibGljTXV0YXRpb248U2Vzc2lvblR5cGUgJiBVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnc2lnbkluJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgWydleHBpcmVzJywgJ2lzc3VlZCcsICd0b2tlbicsICd1c2VySWQnLCAndXNlcm5hbWUnXSxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgICBjb25zdCBiYXNlU2Vzc2lvbiA9IGF3YWl0IHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIGdldFNlc3Npb25QYXlsb2FkKHNlc3Npb25SZXN1bHQpKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaHlkcmF0ZWRTZXNzaW9uID0gYXdhaXQgc2Vzc2lvbihbJ3VzZXJJZCcsICdwZXJzb25hSWQnLCAndXNlckFjY2VzcycsICd1c2VybmFtZSddLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGF3YWl0IHN5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbihmbHV4LCBTdHJpbmcoKGh5ZHJhdGVkU2Vzc2lvbiBhcyBhbnkpPy5wZXJzb25hSWQgfHwgJycpKTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZmFsbGJhY2tTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgYmFzZVNlc3Npb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICBzZXNzaW9uOiBmYWxsYmFja1Nlc3Npb24sXG4gICAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9JTl9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsbGJhY2tTZXNzaW9uO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaW5hbFNlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIGJhc2VTZXNzaW9uKSB8fCBiYXNlU2Vzc2lvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICk7XG4gICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgc2Vzc2lvbjogZmluYWxTZXNzaW9uLFxuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX0lOX1NVQ0NFU1NcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpbmFsU2Vzc2lvbjtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwZXJmb3JtU2lnbkluKHF1ZXJ5VmFyaWFibGVzV2l0aFVzZXJJbnB1dCk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fSU5fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKFN0cmluZygodXNlciBhcyBhbnkpPy51c2VySWQgfHwgJycpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2lnbk91dCA9IGFzeW5jIChyZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGF3YWl0IGNsZWFyUGVyc2lzdGVkU2Vzc2lvbihmbHV4KTtcbiAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiB7fSwgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9PVVRfU1VDQ0VTU30pO1xuICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBjb25maXJtU2lnblVwID0gYXN5bmMgKGNvZGU6IHN0cmluZywgdHlwZTogJ2VtYWlsJyB8ICdwaG9uZScsIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiA9PlxuICAgIHRydWU7XG5cbiAgY29uc3QgZm9yZ290UGFzc3dvcmQgPSBhc3luYyAodXNlcm5hbWU6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGVtYWlsOiB1c2VybmFtZSxcbiAgICAgICAgICBwaG9uZTogdXNlcm5hbWUsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YT86IFVzZXJBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LmZvcmdvdFBhc3N3b3JkO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBzdWNjZXNzID8gVVNFUl9DT05TVEFOVFMuRk9SR09UX1BBU1NXT1JEX1NVQ0NFU1MgOiBVU0VSX0NPTlNUQU5UUy5GT1JHT1RfUEFTU1dPUkRfRVJST1JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAnZm9yZ290UGFzc3dvcmQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSwge29uU3VjY2Vzc30pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5mb3Jnb3RQYXNzd29yZDtcbiAgICAgIGlmKCFzdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZm9yZ290X3Bhc3N3b3JkX2ZhaWxlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcmVzZXRQYXNzd29yZCA9IGFzeW5jIChcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHBhc3N3b3JkOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHR5cGU6ICdlbWFpbCcgfCAncGhvbmUnLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY29kZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiBjb2RlXG4gICAgICB9LFxuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgLi4uKHR5cGUgPT09ICdlbWFpbCcgPyB7ZW1haWw6IHVzZXJuYW1lfSA6IHtwaG9uZTogdXNlcm5hbWV9KSxcbiAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhPzogVXNlckFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8ucmVzZXRQYXNzd29yZDtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogc3VjY2VzcyA/IFVTRVJfQ09OU1RBTlRTLlJFU0VUX1BBU1NXT1JEX1NVQ0NFU1MgOiBVU0VSX0NPTlNUQU5UUy5SRVNFVF9QQVNTV09SRF9FUlJPUlxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KGZsdXgsICdyZXNldFBhc3N3b3JkJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgW10sIHtvblN1Y2Nlc3N9KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8ucmVzZXRQYXNzd29yZDtcbiAgICAgIGlmKCFzdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzZXRfcGFzc3dvcmRfZmFpbGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVQYXNzd29yZCA9IGFzeW5jIChwYXNzd29yZDogc3RyaW5nLCBuZXdQYXNzd29yZDogc3RyaW5nLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4gPT5cbiAgICB0cnVlXG4gIDtcblxuICByZXR1cm4ge1xuICAgIGFkZFVzZXIsXG4gICAgY29uZmlybUNvZGUsXG4gICAgY29uZmlybVNpZ25VcCxcbiAgICBjdXJyZW50QXV0aGVudGljYXRlZFVzZXIsXG4gICAgY3VycmVudFVzZXIsXG4gICAgZGVsZXRlQmlsbGluZ0NhcmQsXG4gICAgbGlzdCxcbiAgICBmb3Jnb3RQYXNzd29yZCxcbiAgICBpc0xvZ2dlZEluLFxuICAgIGl0ZW1CeUlkLFxuICAgIGxpc3RCeUNvbm5lY3Rpb24sXG4gICAgbGlzdEJ5TGF0ZXN0LFxuICAgIGxpc3RCeVJlYWN0aW9ucyxcbiAgICBsaXN0QnlUYWdzLFxuICAgIHJlZnJlc2hTZXNzaW9uOiByZWZyZXNoU2Vzc2lvbkFjdGlvbixcbiAgICByZW1vdmUsXG4gICAgcmVzZXRQYXNzd29yZCxcbiAgICBzYXZlQmlsbGluZ0NhcmQsXG4gICAgc2VhcmNoLFxuICAgIHNlc3Npb24sXG4gICAgc2lnbkluLFxuICAgIHNpZ25PdXQsXG4gICAgc2lnblVwLFxuICAgIHVwZGF0ZVBhc3N3b3JkLFxuICAgIHVwZGF0ZVVzZXIsXG4gICAgdXBkYXRlUGxhbixcbiAgICB1cGRhdGVVc2VyQWRhcHRlcjogdXNlckJhc2UudXBkYXRlQWRhcHRlcixcbiAgICB1cGRhdGVVc2VyQWRhcHRlck9wdGlvbnM6IHVzZXJCYXNlLnVwZGF0ZU9wdGlvbnNcbiAgfTtcbn07XG4iXSwibmFtZXMiOlsidmFsaWRhdGVVc2VySW5wdXQiLCJVU0VSX0NPTlNUQU5UUyIsImFwcE11dGF0aW9uIiwiYXBwUXVlcnkiLCJwdWJsaWNNdXRhdGlvbiIsInJlZnJlc2hTZXNzaW9uIiwiY3JlYXRlQmFzZUFjdGlvbnMiLCJjbGVhclBlcnNpc3RlZFNlc3Npb24iLCJoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlIiwiaXNMb2dnZWRJbiIsImlzTG9nZ2VkSW5XaXRoU3RvcmFnZSIsIm5vcm1hbGl6ZVNlc3Npb24iLCJzdG9yZVNlc3Npb24iLCJnZXRDb25maWdGcm9tRmx1eCIsImNsZWFyQ2FjaGVkUmVxdWVzdCIsImdldENhY2hlZFJlcXVlc3QiLCJzZXRDYWNoZWRSZXF1ZXN0Iiwic3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uIiwiREFUQV9UWVBFIiwiREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEUyIsIlNFTlNJVElWRV9VU0VSX0ZJRUxEUyIsIlNldCIsIklOVkFMSURfRklFTERfUkVHRVgiLCJoYXNTZXNzaW9uSWRlbnRpdHkiLCJ1c2VyIiwiX2lkIiwidXNlcklkIiwidXNlcm5hbWUiLCJlbWFpbCIsInNhbml0aXplVXBkYXRlVXNlcklucHV0IiwidXNlcklucHV0IiwiY3VycmVudFNlc3Npb24iLCJuZXh0VXNlciIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJmaWVsZCIsInZhbHVlIiwidW5kZWZpbmVkIiwicGFzc3dvcmQiLCJTdHJpbmciLCJ0cmltIiwiY3VycmVudFZhbHVlIiwic3luY1N0b3JlZFNlc3Npb24iLCJmbHV4Iiwic2Vzc2lvblBhdGNoIiwiZ2V0U3RhdGUiLCJnZXRTZXNzaW9uUGF5bG9hZCIsInBheWxvYWQiLCJzZXNzaW9uIiwiZ2V0RmllbGRSb290IiwidHJpbW1lZCIsIm1hdGNoIiwic2FuaXRpemVVc2VyUHJvcHMiLCJwcm9wcyIsImZhbGxiYWNrUHJvcHMiLCJzZWVuIiwic2FuaXRpemVkIiwibGlzdCIsInJvb3QiLCJoYXMiLCJhZGQiLCJwdXNoIiwibGVuZ3RoIiwiZ2V0SW52YWxpZEZpZWxkcyIsImVycm9yIiwiZXJyb3JzIiwic291cmNlIiwiaW52YWxpZEZpZWxkcyIsImZvckVhY2giLCJpdGVtIiwibWVzc2FnZSIsImV4ZWMiLCJsYXN0SW5kZXgiLCJ3aXRoSW52YWxpZEZpZWxkUmV0cnkiLCJyZXF1ZXN0V2l0aFByb3BzIiwic2FmZVByb3BzIiwic2l6ZSIsInJldHJ5UHJvcHMiLCJmaWx0ZXIiLCJkZWZhdWx0VXNlclZhbGlkYXRvciIsImlucHV0Iiwib3B0aW9ucyIsInZhbGlkYXRlZCIsInN0cmljdCIsIkVycm9yIiwiY3JlYXRlVXNlckFjdGlvbnMiLCJ1c2VyQmFzZSIsImFkYXB0ZXIiLCJ1c2VyQWRhcHRlciIsImFkYXB0ZXJPcHRpb25zIiwidXNlckFkYXB0ZXJPcHRpb25zIiwiY2xlYXJVc2VyUmVxdWVzdENhY2hlcyIsImFkZFVzZXIiLCJ1c2VyUHJvcHMiLCJyZXF1ZXN0T3B0aW9ucyIsInF1ZXJ5VmFyaWFibGVzIiwidHlwZSIsIm9uU3VjY2VzcyIsImRhdGEiLCJ1c2VycyIsImRpc3BhdGNoIiwiQUREX0lURU1fU1VDQ0VTUyIsInJldHVyblByb3BzIiwic2lnblVwIiwiZXhwaXJlcyIsIlNJR05fVVBfU1VDQ0VTUyIsIlNJR05fVVBfRVJST1IiLCJ1cGRhdGVVc2VyIiwidXBkYXRlSW5wdXQiLCJiaXJ0aGRhdGUiLCJkb2IiLCJmaXJzdE5hbWUiLCJnZW5kZXIiLCJsYXN0TmFtZSIsIm1haWxpbmdMaXN0IiwicGhvbmUiLCJsZWdhY3lVc2VyIiwidXBkYXRlIiwidXBkYXRlZFVzZXIiLCJVUERBVEVfSVRFTV9TVUNDRVNTIiwiY29uZmlybUNvZGUiLCJjb2RlIiwiY29uZmlybWVkIiwiQ09ORklSTV9TSUdOX1VQX1NVQ0NFU1MiLCJyZW1vdmUiLCJSRU1PVkVfSVRFTV9TVUNDRVNTIiwic2Vzc2lvblByb3BzIiwic2Vzc2lvbkRhdGEiLCJnZXRVc2VyQnlTZXNzaW9uIiwiR0VUX1NFU1NJT05fRVJST1IiLCJuZXh0U2Vzc2lvbiIsIkdFVF9TRVNTSU9OX1NVQ0NFU1MiLCJwZXJzb25hSWQiLCJpdGVtQnlJZCIsImNhY2hlZFJlc3VsdCIsImdldFVzZXJCeUlkIiwiR0VUX0lURU1fU1VDQ0VTUyIsInJlc3VsdCIsInNhZmVVc2VyUHJvcHMiLCJzYXZlQmlsbGluZ0NhcmQiLCJjYXJkIiwic2Vzc2lvblVzZXJJZCIsImRlbGV0ZUJpbGxpbmdDYXJkIiwidXBkYXRlUGxhbiIsInBsYW5JZCIsIm5leHRQbGFuSWQiLCJnZXRVc2VyTGlzdCIsIkdFVF9MSVNUX1NVQ0NFU1MiLCJsaXN0QnlMYXRlc3QiLCJmcm9tIiwidG8iLCJsaXN0QnlDb25uZWN0aW9uIiwibGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25OYW1lcyIsInBlcnNvbmFQcm9wcyIsImxpc3RCeVRhZ3MiLCJ0YWdOYW1lcyIsInRhZ3MiLCJzZWFyY2giLCJxdWVyeSIsImN1cnJlbnRBdXRoZW50aWNhdGVkVXNlciIsImN1cnJlbnRVc2VyIiwicmVmcmVzaFNlc3Npb25BY3Rpb24iLCJ0b2tlbiIsInNpZ25JbiIsImxlZ2FjeVZhcmlhYmxlcyIsImNvbmZpZyIsInJlcXVlc3RlZEV4cGlyZXMiLCJNYXRoIiwibWF4IiwiTnVtYmVyIiwiYXBwIiwibWF4TWludXRlcyIsInF1ZXJ5VmFyaWFibGVzV2l0aFVzZXJJbnB1dCIsInN0b3JlZFNlc3Npb24iLCJTSUdOX0lOX1NVQ0NFU1MiLCJwZXJmb3JtU2lnbkluIiwic2Vzc2lvblJlc3VsdCIsImJhc2VTZXNzaW9uIiwiaHlkcmF0ZWRTZXNzaW9uIiwiZmFsbGJhY2tTZXNzaW9uIiwiZmluYWxTZXNzaW9uIiwiU0lHTl9JTl9FUlJPUiIsInNpZ25PdXQiLCJTSUdOX09VVF9TVUNDRVNTIiwiY29uZmlybVNpZ25VcCIsImZvcmdvdFBhc3N3b3JkIiwic3VjY2VzcyIsIkZPUkdPVF9QQVNTV09SRF9TVUNDRVNTIiwiRk9SR09UX1BBU1NXT1JEX0VSUk9SIiwidGhlbiIsInJlc2V0UGFzc3dvcmQiLCJSRVNFVF9QQVNTV09SRF9TVUNDRVNTIiwiUkVTRVRfUEFTU1dPUkRfRVJST1IiLCJ1cGRhdGVQYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwidXBkYXRlVXNlckFkYXB0ZXIiLCJ1cGRhdGVBZGFwdGVyIiwidXBkYXRlVXNlckFkYXB0ZXJPcHRpb25zIiwidXBkYXRlT3B0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsaUJBQWlCLFFBQU8sNENBQTRDO0FBQzVFLFNBQVFDLGNBQWMsUUFBTyw0QkFBNEI7QUFDekQsU0FBUUMsV0FBVyxFQUFFQyxRQUFRLEVBQUVDLGNBQWMsRUFBRUMsY0FBYyxRQUFPLHFCQUFxQjtBQUN6RixTQUFRQyxpQkFBaUIsUUFBTyxtQ0FBbUM7QUFDbkUsU0FDRUMscUJBQXFCLEVBQ3JCQyx5QkFBeUIsRUFDekJDLGNBQWNDLHFCQUFxQixFQUNuQ0MsZ0JBQWdCLEVBQ2hCQyxZQUFZLFFBQ1AseUJBQXlCO0FBQ2hDLFNBQVFDLGlCQUFpQixRQUFPLDZCQUE2QjtBQUM3RCxTQUFRQyxrQkFBa0IsRUFBRUMsZ0JBQWdCLEVBQUVDLGdCQUFnQixRQUFPLDhCQUE4QjtBQUNuRyxTQUFRQyx3QkFBd0IsUUFBTyxzQ0FBc0M7QUFRN0UsTUFBTUMsWUFBWTtBQUNsQixN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
|
|
879
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy91c2VyQWN0aW9ucy91c2VyQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt2YWxpZGF0ZVVzZXJJbnB1dH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHtVU0VSX0NPTlNUQU5UU30gZnJvbSAnLi4vLi4vc3RvcmVzL3VzZXJTdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeSwgcHVibGljTXV0YXRpb24sIHJlZnJlc2hTZXNzaW9ufSBmcm9tICcuLi8uLi91dGlscy9hcGkuanMnO1xuaW1wb3J0IHtjcmVhdGVCYXNlQWN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvYmFzZUFjdGlvbkZhY3RvcnkuanMnO1xuaW1wb3J0IHtcbiAgY2xlYXJQZXJzaXN0ZWRTZXNzaW9uLFxuICBoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlLFxuICBpc0xvZ2dlZEluIGFzIGlzTG9nZ2VkSW5XaXRoU3RvcmFnZSxcbiAgbm9ybWFsaXplU2Vzc2lvbixcbiAgc3RvcmVTZXNzaW9uXG59IGZyb20gJy4uLy4uL3V0aWxzL3Nlc3Npb24uanMnO1xuaW1wb3J0IHtnZXRDb25maWdGcm9tRmx1eH0gZnJvbSAnLi4vLi4vdXRpbHMvY29uZmlnVXRpbHMuanMnO1xuaW1wb3J0IHtjbGVhckNhY2hlZFJlcXVlc3QsIGdldENhY2hlZFJlcXVlc3QsIHNldENhY2hlZFJlcXVlc3R9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5pbXBvcnQge3N5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbn0gZnJvbSAnLi4vcGVyc29uYUFjdGlvbnMvcGVyc29uYUFjdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEFjdGlvbiwgRmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtVc2VyfSBmcm9tICcuLi8uLi9hZGFwdGVycy91c2VyQWRhcHRlci91c2VyQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpUmVzdWx0c1R5cGUsIFNlc3Npb25UeXBlfSBmcm9tICcuLi8uLi91dGlscy9hcGkuanMnO1xuaW1wb3J0IHR5cGUge0Jhc2VBZGFwdGVyT3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9yRmFjdG9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uUmVxdWVzdE9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5cbmNvbnN0IERBVEFfVFlQRSA9ICd1c2Vycyc7XG5jb25zdCBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTID0gWyd1c2VySWQnLCAndXNlcm5hbWUnXTtcbmNvbnN0IFNFTlNJVElWRV9VU0VSX0ZJRUxEUyA9IG5ldyBTZXQoW1xuICAncGFzc3dvcmQnLFxuICAnc2FsdCcsXG4gICd0b2tlbicsXG4gICdyZWZyZXNoVG9rZW4nLFxuICAndmVyaWZpZWRFbWFpbENvZGUnLFxuICAndmVyaWZpZWRTbXNDb2RlJ1xuXSk7XG5jb25zdCBJTlZBTElEX0ZJRUxEX1JFR0VYID0gL0Nhbm5vdCBxdWVyeSBmaWVsZCBcIihbXlwiXSspXCIvZztcbmNvbnN0IGhhc1Nlc3Npb25JZGVudGl0eSA9ICh1c2VyPzogUGFydGlhbDxVc2VyPiB8IG51bGwpOiBib29sZWFuID0+XG4gICEhKHVzZXIgJiYgKCh1c2VyIGFzIGFueSkuX2lkIHx8ICh1c2VyIGFzIGFueSkudXNlcklkIHx8ICh1c2VyIGFzIGFueSkudXNlcm5hbWUgfHwgKHVzZXIgYXMgYW55KS5lbWFpbCkpO1xuXG5jb25zdCBzYW5pdGl6ZVVwZGF0ZVVzZXJJbnB1dCA9ICh1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4gPSB7fSwgY3VycmVudFNlc3Npb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBQYXJ0aWFsPFVzZXI+ID0+IHtcbiAgY29uc3QgbmV4dFVzZXIgPSBPYmplY3QuZW50cmllcyh1c2VySW5wdXQpLnJlZHVjZSgodXNlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFtmaWVsZCwgdmFsdWVdKSA9PiB7XG4gICAgaWYodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYoZmllbGQgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKCk7XG5cbiAgICAgIGlmKHBhc3N3b3JkKSB7XG4gICAgICAgIHVzZXIucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYoZmllbGQgPT09ICd1c2VySWQnKSB7XG4gICAgICB1c2VyLnVzZXJJZCA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gY3VycmVudFNlc3Npb25bZmllbGRdO1xuXG4gICAgaWYoU3RyaW5nKHZhbHVlKSAhPT0gU3RyaW5nKGN1cnJlbnRWYWx1ZSA/PyAnJykpIHtcbiAgICAgIHVzZXJbZmllbGRdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gbmV4dFVzZXIgYXMgUGFydGlhbDxVc2VyPjtcbn07XG5cbmNvbnN0IHN5bmNTdG9yZWRTZXNzaW9uID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmssIHNlc3Npb25QYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgY29uc3QgY3VycmVudFNlc3Npb24gPSAoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywge30pIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIHN0b3JlU2Vzc2lvbihmbHV4LCB7Li4uY3VycmVudFNlc3Npb24sIC4uLnNlc3Npb25QYXRjaH0pO1xufTtcblxuY29uc3QgZ2V0U2Vzc2lvblBheWxvYWQgPSAocGF5bG9hZDogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgaWYocGF5bG9hZCAmJiB0eXBlb2YgcGF5bG9hZCA9PT0gJ29iamVjdCcgJiYgJ3Nlc3Npb24nIGluIChwYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIHJldHVybiAoKChwYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5zZXNzaW9uKSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICByZXR1cm4gKHBheWxvYWQgJiYgdHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnID8gcGF5bG9hZCA6IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmNvbnN0IGdldEZpZWxkUm9vdCA9IChmaWVsZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IGZpZWxkLnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSB0cmltbWVkLm1hdGNoKC9eW0EtWmEtel9dW0EtWmEtejAtOV9dKi8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6ICcnO1xufTtcblxuY29uc3Qgc2FuaXRpemVVc2VyUHJvcHMgPSAocHJvcHM6IHN0cmluZ1tdID0gW10sIGZhbGxiYWNrUHJvcHM6IHN0cmluZ1tdID0gREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEUyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBzYW5pdGl6ZWQgPSBwcm9wcy5yZWR1Y2UoKGxpc3Q6IHN0cmluZ1tdLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGdldEZpZWxkUm9vdChmaWVsZCk7XG5cbiAgICBpZighcm9vdCB8fCBTRU5TSVRJVkVfVVNFUl9GSUVMRFMuaGFzKHJvb3QpIHx8IHNlZW4uaGFzKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgc2Vlbi5hZGQoZmllbGQpO1xuICAgIGxpc3QucHVzaChmaWVsZCk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sIFtdKTtcblxuICBpZihzYW5pdGl6ZWQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cblxuICByZXR1cm4gZmFsbGJhY2tQcm9wcy5yZWR1Y2UoKGxpc3Q6IHN0cmluZ1tdLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGdldEZpZWxkUm9vdChmaWVsZCk7XG5cbiAgICBpZighcm9vdCB8fCBTRU5TSVRJVkVfVVNFUl9GSUVMRFMuaGFzKHJvb3QpIHx8IHNlZW4uaGFzKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgc2Vlbi5hZGQoZmllbGQpO1xuICAgIGxpc3QucHVzaChmaWVsZCk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sIFtdKTtcbn07XG5cbmNvbnN0IGdldEludmFsaWRGaWVsZHMgPSAoZXJyb3I6IHVua25vd24pOiBTZXQ8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVycm9ycyA9IChlcnJvciBhcyBhbnkpPy5lcnJvcnMgfHwgKGVycm9yIGFzIGFueSk/LnNvdXJjZT8uZXJyb3JzIHx8IFtdO1xuICBjb25zdCBpbnZhbGlkRmllbGRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZXJyb3JzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgPyBpdGVtIDogaXRlbT8ubWVzc2FnZSB8fCAnJztcbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBJTlZBTElEX0ZJRUxEX1JFR0VYLmV4ZWMobWVzc2FnZSk7XG5cbiAgICB3aGlsZShtYXRjaCkge1xuICAgICAgaW52YWxpZEZpZWxkcy5hZGQobWF0Y2hbMV0pO1xuICAgICAgbWF0Y2ggPSBJTlZBTElEX0ZJRUxEX1JFR0VYLmV4ZWMobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgSU5WQUxJRF9GSUVMRF9SRUdFWC5sYXN0SW5kZXggPSAwO1xuICB9KTtcblxuICByZXR1cm4gaW52YWxpZEZpZWxkcztcbn07XG5cbmNvbnN0IHdpdGhJbnZhbGlkRmllbGRSZXRyeSA9IGFzeW5jIDxUPihcbiAgcmVxdWVzdFdpdGhQcm9wczogKHByb3BzOiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxUPixcbiAgcHJvcHM6IHN0cmluZ1tdLFxuICBmYWxsYmFja1Byb3BzOiBzdHJpbmdbXSA9IERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBzYWZlUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhwcm9wcywgZmFsbGJhY2tQcm9wcyk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmVxdWVzdFdpdGhQcm9wcyhzYWZlUHJvcHMpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgaW52YWxpZEZpZWxkcyA9IGdldEludmFsaWRGaWVsZHMoZXJyb3IpO1xuXG4gICAgaWYoaW52YWxpZEZpZWxkcy5zaXplID09PSAwKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeVByb3BzID0gc2FmZVByb3BzLmZpbHRlcigoZmllbGQpID0+ICFpbnZhbGlkRmllbGRzLmhhcyhnZXRGaWVsZFJvb3QoZmllbGQpKSk7XG5cbiAgICBpZihyZXRyeVByb3BzLmxlbmd0aCA9PT0gMCB8fCByZXRyeVByb3BzLmxlbmd0aCA9PT0gc2FmZVByb3BzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoUHJvcHMocmV0cnlQcm9wcyk7XG4gIH1cbn07XG5cbmV4cG9ydCB0eXBlIFVzZXJBZGFwdGVyT3B0aW9ucyA9IEJhc2VBZGFwdGVyT3B0aW9ucztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uc09wdGlvbnMge1xuICByZWFkb25seSB1c2VyQWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFVzZXJBZGFwdGVyT3B0aW9ucykgPT4gYW55O1xuICByZWFkb25seSB1c2VyQWRhcHRlck9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZpY2F0aW9uRW1haWxPcHRpb25zIHtcbiAgcmVhZG9ubHkgc3ViamVjdD86IHN0cmluZztcbiAgcmVhZG9ubHkgdGVtcGxhdGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFwaVJlc3VsdHNUeXBlIHtcbiAgcmVhZG9ubHkgdXNlcnM6IHtcbiAgICByZWFkb25seSBhY3RpdmVDb3VudD86IG51bWJlcjtcbiAgICByZWFkb25seSBhZGRVc2VyPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBjb25maXJtQ29kZT86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgZGVhY3RpdmF0ZT86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgZm9yZ290UGFzc3dvcmQ/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGl0ZW1CeUlkPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBnZXRVc2VyQnlTZXNzaW9uPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBpdGVtQnlTZXNzaW9uPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBpdGVtQnlUb2tlbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgaXRlbUJ5VXNlcm5hbWU/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGdldFVzZXJMaXN0PzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3Q/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5Q29ubmVjdGlvbj86IFVzZXJbXTtcbiAgICByZWFkb25seSBsaXN0QnlMYXRlc3Q/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5UmVhY3Rpb25zPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3RCeVRhZ3M/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgc2VhcmNoPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IHJlZnJlc2hTZXNzaW9uPzogU2Vzc2lvblR5cGU7XG4gICAgcmVhZG9ubHkgcmVtb3ZlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSByZXNldFBhc3N3b3JkPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBzYXZlQmlsbGluZ0NhcmQ/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHNlbmRWZXJpZmljYXRpb25FbWFpbD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgc2Vzc2lvbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgc2lnbkluPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBzaWduVXA/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGRlbGV0ZUJpbGxpbmdDYXJkPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSB1cGRhdGU/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZVVzZXI/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZVBhc3N3b3JkPzogUGFydGlhbDxib29sZWFuPjtcbiAgICByZWFkb25seSB1cGRhdGVQbGFuPzogUGFydGlhbDxVc2VyPjtcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFVzZXJWYWxpZGF0b3IgPSAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVVc2VySW5wdXQoaW5wdXQpO1xuXG4gIGlmKG9wdGlvbnM/LnN0cmljdCAmJiAhdmFsaWRhdGVkLnVzZXJuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVc2VybmFtZSBpcyByZXF1aXJlZCBpbiBzdHJpY3QgbW9kZScpO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgdXNlckFjdGlvbnMge1xuICBhZGRVc2VyOiAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgY29uZmlybUNvZGU6IChjb2RlOiBudW1iZXIsIHt0eXBlLCB2YWx1ZX06IHt0eXBlOiAnZW1haWwnIHwgJ3Bob25lJzsgdmFsdWU6IHN0cmluZ30sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIGNvbmZpcm1TaWduVXA6IChjb2RlOiBzdHJpbmcsIHR5cGU6ICdlbWFpbCcgfCAncGhvbmUnLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBjdXJyZW50QXV0aGVudGljYXRlZFVzZXI6IChyZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBjdXJyZW50VXNlcjogKHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGxpc3Q6ICh1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBsaXN0QnlDb25uZWN0aW9uOiAodXNlcklkOiBzdHJpbmcsIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBpdGVtQnlJZDogKHVzZXJJZDogc3RyaW5nLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgZGVsZXRlQmlsbGluZ0NhcmQ6ICh1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgbGlzdEJ5TGF0ZXN0OiAodXNlcm5hbWU/OiBzdHJpbmcsIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBsaXN0QnlSZWFjdGlvbnM6IChcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uTmFtZXM6IHN0cmluZ1tdLFxuICAgIGZyb20/OiBudW1iZXIsXG4gICAgdG8/OiBudW1iZXIsXG4gICAgcGVyc29uYVByb3BzPzogc3RyaW5nW10sXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8VXNlcltdPjtcbiAgbGlzdEJ5VGFnczogKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgdGFnTmFtZXM6IHN0cmluZ1tdLFxuICAgIGZyb20/OiBudW1iZXIsXG4gICAgdG8/OiBudW1iZXIsXG4gICAgcGVyc29uYVByb3BzPzogc3RyaW5nW10sXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8VXNlcltdPjtcbiAgZm9yZ290UGFzc3dvcmQ6ICh1c2VybmFtZTogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBpc0xvZ2dlZEluOiAoKSA9PiBib29sZWFuO1xuICByZWZyZXNoU2Vzc2lvbjogKHRva2VuPzogc3RyaW5nLCBleHBpcmVzPzogbnVtYmVyLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFNlc3Npb25UeXBlPjtcbiAgcmVtb3ZlOiAodXNlcklkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHJlc2V0UGFzc3dvcmQ6ICh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcsIHR5cGU6ICdlbWFpbCcgfCAncGhvbmUnLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBzZWFyY2g6IChxdWVyeTogc3RyaW5nLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBzZW5kVmVyaWZpY2F0aW9uRW1haWw6IChcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIGVtYWlsT3B0aW9ucz86IFZlcmlmaWNhdGlvbkVtYWlsT3B0aW9ucyxcbiAgICByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zXG4gICkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgc2Vzc2lvbjogKHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBzYXZlQmlsbGluZ0NhcmQ6IChjYXJkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgdXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHNpZ25JbjogKHVzZXI6IFBhcnRpYWw8VXNlcj4sIGV4cGlyZXM/OiBudW1iZXIsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8U2Vzc2lvblR5cGU+O1xuICBzaWduT3V0OiAocmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgc2lnblVwOiAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgdXBkYXRlUGFzc3dvcmQ6IChwYXNzd29yZDogc3RyaW5nLCBuZXdQYXNzd29yZDogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICB1cGRhdGVVc2VyOiAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgdXBkYXRlUGxhbjogKHBsYW5JZDogc3RyaW5nLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgdXBkYXRlVXNlckFkYXB0ZXI6IChhZGFwdGVyOiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IGFueSkgPT4gdm9pZDtcbiAgdXBkYXRlVXNlckFkYXB0ZXJPcHRpb25zOiAob3B0aW9uczogVXNlckFkYXB0ZXJPcHRpb25zKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlVXNlckFjdGlvbnMgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG9wdGlvbnM/OiBVc2VyQWN0aW9uc09wdGlvbnNcbik6IHVzZXJBY3Rpb25zID0+IHtcbiAgY29uc3QgdXNlckJhc2UgPSBjcmVhdGVCYXNlQWN0aW9ucyhmbHV4LCBkZWZhdWx0VXNlclZhbGlkYXRvciwge1xuICAgIGFkYXB0ZXI6IG9wdGlvbnM/LnVzZXJBZGFwdGVyLFxuICAgIGFkYXB0ZXJPcHRpb25zOiBvcHRpb25zPy51c2VyQWRhcHRlck9wdGlvbnNcbiAgfSk7XG4gIGNvbnN0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMgPSBhc3luYyAodXNlcklkID0gJycpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgJ3VzZXIubGlzdCcpO1xuICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndXNlci5saXN0QnlMYXRlc3QnKTtcbiAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgJ3VzZXIubGlzdEJ5VGFncycpO1xuICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndXNlci5zZWFyY2gnKTtcbiAgICBpZih1c2VySWQpIHtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCBgdXNlci5pdGVtQnlJZDoke3VzZXJJZH1gKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYWRkVXNlciA9IGFzeW5jIChcbiAgICB1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IHt1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkfSA9IHVzZXJJbnB1dDtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgIHVzZXJuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFVzZXJBcGlSZXN1bHRzVHlwZSk6IFByb21pc2U8Rmx1eEFjdGlvbj4gPT4ge1xuICAgICAgY29uc3QgdXNlciA9IGRhdGE/LnVzZXJzPy5hZGRVc2VyIHx8IHt9O1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5BRERfSVRFTV9TVUNDRVNTLFxuICAgICAgICB1c2VyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0dXJuUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyh1c2VyUHJvcHMsIFtcbiAgICAgICdhZGRlZCcsXG4gICAgICAnYWRkcmVzcycsXG4gICAgICAnZG9iJyxcbiAgICAgICdjaXR5JyxcbiAgICAgICdjb3VudHJ5JyxcbiAgICAgICdnZW5kZXInLFxuICAgICAgJ2ltYWdlVXJsJyxcbiAgICAgICdsYXRpdHVkZScsXG4gICAgICAnbG9uZ2l0dWRlJyxcbiAgICAgICdtYWlsaW5nTGlzdCcsXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3N0YXRlJyxcbiAgICAgICd0aHVtYlVybCcsXG4gICAgICAndXNlckFjY2VzcycsXG4gICAgICAndXNlcklkJyxcbiAgICAgICd1c2VybmFtZSdcbiAgICBdKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2FkZFVzZXInLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2lnblVwID0gYXN5bmMgKFxuICAgIHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPixcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qge3VzZXJuYW1lLCBlbWFpbCwgcGFzc3dvcmR9ID0gdXNlcklucHV0O1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgZXhwaXJlczoge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IDE1XG4gICAgICB9LFxuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogVXNlckFwaVJlc3VsdHNUeXBlKTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gZGF0YT8udXNlcnM/LnNpZ25VcCB8fCB7fTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9VUF9TVUNDRVNTLFxuICAgICAgICB1c2VyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0dXJuUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhbXG4gICAgICAnYWRkZWQnLFxuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICAgIC4uLnVzZXJQcm9wc1xuICAgIF0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnc2lnblVwJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX1VQX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcygpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGVVc2VyID0gYXN5bmMgKFxuICAgIHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPixcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3QgdXBkYXRlSW5wdXQgPSBzYW5pdGl6ZVVwZGF0ZVVzZXJJbnB1dCh1c2VySW5wdXQsIChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICBjb25zdCB7XG4gICAgICBiaXJ0aGRhdGUsXG4gICAgICBkb2IsXG4gICAgICBlbWFpbCxcbiAgICAgIGZpcnN0TmFtZSxcbiAgICAgIGdlbmRlcixcbiAgICAgIGxhc3ROYW1lLFxuICAgICAgbWFpbGluZ0xpc3QsXG4gICAgICBwYXNzd29yZCxcbiAgICAgIHBob25lLFxuICAgICAgdXNlcklkLFxuICAgICAgdXNlcm5hbWVcbiAgICB9ID0gdXBkYXRlSW5wdXQ7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBiaXJ0aGRhdGU6IGJpcnRoZGF0ZSA/PyBkb2IsXG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgZmlyc3ROYW1lLFxuICAgICAgICAgIGdlbmRlcixcbiAgICAgICAgICBsYXN0TmFtZSxcbiAgICAgICAgICBtYWlsaW5nTGlzdCxcbiAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICBwaG9uZSxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlcnMgPSAoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzO1xuICAgICAgY29uc3QgbGVnYWN5VXNlciA9IHVzZXJzPy51cGRhdGUgfHwge307XG4gICAgICBjb25zdCB1cGRhdGVkVXNlciA9IHVzZXJzPy51cGRhdGVVc2VyIHx8IHt9O1xuICAgICAgY29uc3QgdXNlciA9IGhhc1Nlc3Npb25JZGVudGl0eSh1cGRhdGVkVXNlcikgPyB1cGRhdGVkVXNlciA6IGxlZ2FjeVVzZXI7XG5cbiAgICAgIGlmKCh1c2VyIGFzIGFueSk/LnVzZXJJZCAmJiAodXNlciBhcyBhbnkpLnVzZXJJZCA9PT0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpKSB7XG4gICAgICAgIHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIHVzZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdhZGRlZCcsXG4gICAgICAnYmlydGhkYXRlJyxcbiAgICAgICdjaXR5JyxcbiAgICAgICdjb3VudHJ5JyxcbiAgICAgICdlbWFpbCcsXG4gICAgICAnZmlyc3ROYW1lJyxcbiAgICAgICdnZW5kZXInLFxuICAgICAgJ2ltYWdlQ291bnQnLFxuICAgICAgJ2ltYWdlVXJsJyxcbiAgICAgICdsYXN0TmFtZScsXG4gICAgICAnbGF0aXR1ZGUnLFxuICAgICAgJ2xvbmdpdHVkZScsXG4gICAgICAnbWFpbGluZ0xpc3QnLFxuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICdwaG9uZScsXG4gICAgICAnc3RhdGUnLFxuICAgICAgJ3RodW1iVXJsJyxcbiAgICAgICd1c2VyQWNjZXNzJyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICAgIC4uLnVzZXJQcm9wc1xuICAgIF0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3VwZGF0ZVVzZXInLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoU3RyaW5nKHVzZXJJZCB8fCAnJykpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjb25maXJtQ29kZSA9IGFzeW5jIChcbiAgICBjb2RlOiBudW1iZXIsXG4gICAge3R5cGUsIHZhbHVlfToge3R5cGU6ICdlbWFpbCcgfCAncGhvbmUnOyB2YWx1ZTogc3RyaW5nfSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGNvZGU6IHtcbiAgICAgICAgdHlwZTogJ0ludCEnLFxuICAgICAgICB2YWx1ZTogY29kZVxuICAgICAgfSxcbiAgICAgIHR5cGU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgfSxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgdmFsdWVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHB1YmxpY011dGF0aW9uPFVzZXJBcGlSZXN1bHRzVHlwZT4oZmx1eCwgJ2NvbmZpcm1Db2RlJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgW10pO1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9ICEhZGF0YT8udXNlcnM/LmNvbmZpcm1Db2RlO1xuXG4gICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7Y29uZmlybWVkLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5DT05GSVJNX1NJR05fVVBfU1VDQ0VTU30pO1xuXG4gICAgcmV0dXJuIGNvbmZpcm1lZDtcbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSBhc3luYyAodXNlcklkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICB1c2VySWQ6IHtcbiAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgIHZhbHVlOiB1c2VySWRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSAoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy5yZW1vdmUgfHwge307XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuUkVNT1ZFX0lURU1fU1VDQ0VTUywgdXNlcn0pO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uKGZsdXgsICdyZW1vdmUnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSwge29uU3VjY2Vzc30pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHVzZXJJZCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNlc3Npb24gPSBhc3luYyAodXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcj4gPT4gd2l0aEludmFsaWRGaWVsZFJldHJ5KFxuICAgIGFzeW5jIChzZXNzaW9uUHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBhcHBRdWVyeShcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2dldFVzZXJCeVNlc3Npb24nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHt9LFxuICAgICAgICBzZXNzaW9uUHJvcHNcbiAgICAgICkgYXMgdW5rbm93biBhcyB7XG4gICAgICAgIHVzZXJzPzoge2dldFVzZXJCeVNlc3Npb24/OiBQYXJ0aWFsPFVzZXI+fTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IGRhdGE/LnVzZXJzPy5nZXRVc2VyQnlTZXNzaW9uIHx8IHt9O1xuXG4gICAgICBpZighaGFzU2Vzc2lvbklkZW50aXR5KHNlc3Npb25EYXRhKSkge1xuICAgICAgICBhd2FpdCBjbGVhclBlcnNpc3RlZFNlc3Npb24oZmx1eCk7XG4gICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3R5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9TRVNTSU9OX0VSUk9SfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZF9zZXNzaW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgc2Vzc2lvbkRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7c2Vzc2lvbjogbmV4dFNlc3Npb24sIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9TRVNTSU9OX1NVQ0NFU1N9KTtcbiAgICAgIGF3YWl0IHN5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbihmbHV4LCBTdHJpbmcoKG5leHRTZXNzaW9uIGFzIGFueSk/LnBlcnNvbmFJZCB8fCAnJykpO1xuICAgICAgcmV0dXJuIGF3YWl0IHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCBuZXh0U2Vzc2lvbikgfHwgbmV4dFNlc3Npb24pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSBhcyBVc2VyO1xuICAgIH0sXG4gICAgdXNlclByb3BzLFxuICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgKTtcblxuICBjb25zdCBpdGVtQnlJZCA9IGFzeW5jICh1c2VySWQ6IHN0cmluZywgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8VXNlcj4oZmx1eCwgYHVzZXIuaXRlbUJ5SWQ6JHt1c2VySWR9YCwge3VzZXJJZCwgdXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICB1c2VySWQ6IHtcbiAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgIHZhbHVlOiB1c2VySWRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGdldFVzZXJCeUlkID0gKChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlICYge1xuICAgICAgICB1c2Vycz86IHtnZXRVc2VyQnlJZD86IFBhcnRpYWw8VXNlcj59O1xuICAgICAgfSk/LnVzZXJzPy5nZXRVc2VyQnlJZCkgfHwge307XG5cbiAgICAgIGlmKHVzZXJJZCA9PT0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpKSB7XG4gICAgICAgIHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIGdldFVzZXJCeUlkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3R5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9JVEVNX1NVQ0NFU1MsIHVzZXI6IGdldFVzZXJCeUlkfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnZ2V0VXNlckJ5SWQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICB1c2VyUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXI+KGZsdXgsIGB1c2VyLml0ZW1CeUlkOiR7dXNlcklkfWAsIHt1c2VySWQsIHVzZXJQcm9wc30sIHJlc3VsdCBhcyBVc2VyLCByZXF1ZXN0T3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3Qgc2F2ZUJpbGxpbmdDYXJkID0gYXN5bmMgKFxuICAgIGNhcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGNhcmQ6IHtcbiAgICAgICAgdHlwZTogJ0NyZWRpdENhcmRJbnB1dCEnLFxuICAgICAgICB2YWx1ZTogY2FyZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9ICgoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy5zYXZlQmlsbGluZ0NhcmQpIHx8IHt9O1xuXG4gICAgICBpZigodXNlciBhcyBhbnkpPy51c2VySWQgJiYgKHVzZXIgYXMgYW55KS51c2VySWQgPT09IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi51c2VySWQnKSkge1xuICAgICAgICBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCB1c2VyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5VUERBVEVfSVRFTV9TVUNDRVNTLFxuICAgICAgICB1c2VyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0dXJuUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhbXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3N0cmlwZUNhcmRCcmFuZCcsXG4gICAgICAnc3RyaXBlQ2FyZElkJyxcbiAgICAgICdzdHJpcGVDYXJkTGFzdDQnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG4gICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IFN0cmluZyhmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykgfHwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3NhdmVCaWxsaW5nQ2FyZCcsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyhzZXNzaW9uVXNlcklkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGVsZXRlQmlsbGluZ0NhcmQgPSBhc3luYyAoXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gKChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LmRlbGV0ZUJpbGxpbmdDYXJkKSB8fCB7fTtcblxuICAgICAgaWYoKHVzZXIgYXMgYW55KT8udXNlcklkICYmICh1c2VyIGFzIGFueSkudXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgdXNlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICdzdHJpcGVDYXJkQnJhbmQnLFxuICAgICAgJ3N0cmlwZUNhcmRJZCcsXG4gICAgICAnc3RyaXBlQ2FyZExhc3Q0JyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICAgIC4uLnVzZXJQcm9wc1xuICAgIF0pO1xuICAgIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBTdHJpbmcoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpIHx8ICcnKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb24oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdkZWxldGVCaWxsaW5nQ2FyZCcsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAge30sXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyhzZXNzaW9uVXNlcklkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlUGxhbiA9IGFzeW5jIChcbiAgICBwbGFuSWQ6IHN0cmluZyxcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3QgbmV4dFBsYW5JZCA9IFN0cmluZyhwbGFuSWQgfHwgJycpLnRyaW0oKTtcblxuICAgIGlmKCFuZXh0UGxhbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egc3Vic2NyaXB0aW9uIHBsYW5JZCBpcyByZXF1aXJlZCB0byB1cGRhdGUgYSB1c2VyIHBsYW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHBsYW5JZDoge1xuICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgdmFsdWU6IG5leHRQbGFuSWRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSAoKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8udXBkYXRlUGxhbikgfHwge307XG5cbiAgICAgIGlmKCh1c2VyIGFzIGFueSk/LnVzZXJJZCAmJiAodXNlciBhcyBhbnkpLnVzZXJJZCA9PT0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpKSB7XG4gICAgICAgIHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIHVzZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdtb2RpZmllZCcsXG4gICAgICAncGxhbkV4cGlyZXMnLFxuICAgICAgJ3BsYW5JZCcsXG4gICAgICAncGxhblN0YXR1cycsXG4gICAgICAncGxhblN1YnNjcmlwdGlvbklkJyxcbiAgICAgICdzdHJpcGVDYXJkQnJhbmQnLFxuICAgICAgJ3N0cmlwZUNhcmRJZCcsXG4gICAgICAnc3RyaXBlQ2FyZExhc3Q0JyxcbiAgICAgICd1c2VyQWNjZXNzJyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICAgIC4uLnVzZXJQcm9wc1xuICAgIF0pO1xuICAgIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBTdHJpbmcoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpIHx8ICcnKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb24oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICd1cGRhdGVQbGFuJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHNlc3Npb25Vc2VySWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBsaXN0ID0gYXN5bmMgKHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSwgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFVzZXJbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5saXN0Jywge3VzZXJQcm9wc30sIHJlcXVlc3RPcHRpb25zKTtcblxuICAgIGlmKGNhY2hlZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8uZ2V0VXNlckxpc3QgfHwgW107XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7bGlzdCwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU30pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgICAoc2FmZVVzZXJQcm9wcykgPT4gYXBwUXVlcnkoZmx1eCwgJ2dldFVzZXJMaXN0JywgREFUQV9UWVBFLCB7fSwgc2FmZVVzZXJQcm9wcywge29uU3VjY2Vzc30pLFxuICAgICAgdXNlclByb3BzLFxuICAgICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICAgICk7XG5cbiAgICByZXR1cm4gc2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3QnLCB7dXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXJbXSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IGxpc3RCeUxhdGVzdCA9IGFzeW5jIChcbiAgICB1c2VybmFtZTogc3RyaW5nID0gJycsXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3RCeUxhdGVzdCcsIHt1c2VybmFtZSwgZnJvbSwgdG8sIHVzZXJQcm9wc30sIHJlcXVlc3RPcHRpb25zKTtcblxuICAgIGlmKGNhY2hlZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IGZyb21cbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IHRvXG4gICAgICB9LFxuICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgIHZhbHVlOiB1c2VybmFtZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/Lmxpc3RCeUxhdGVzdCB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnbGlzdEJ5TGF0ZXN0JywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgc2FmZVVzZXJQcm9wcywge29uU3VjY2Vzc30pLFxuICAgICAgdXNlclByb3BzLFxuICAgICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICAgICk7XG5cbiAgICByZXR1cm4gc2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3RCeUxhdGVzdCcsIHt1c2VybmFtZSwgZnJvbSwgdG8sIHVzZXJQcm9wc30sIHJlc3VsdCBhcyBVc2VyW10sIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBsaXN0QnlDb25uZWN0aW9uID0gYXN5bmMgKFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIGZyb206IG51bWJlciA9IDAsXG4gICAgdG86IG51bWJlciA9IDEwLFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXJbXT4gPT5cbiAgICBbXVxuICA7XG5cbiAgY29uc3QgbGlzdEJ5UmVhY3Rpb25zID0gYXN5bmMgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcmVhY3Rpb25OYW1lczogc3RyaW5nW10sXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgcGVyc29uYVByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PlxuICAgIFtdXG4gIDtcblxuICBjb25zdCBsaXN0QnlUYWdzID0gYXN5bmMgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgdGFnTmFtZXM6IHN0cmluZ1tdLFxuICAgIGZyb206IG51bWJlciA9IDAsXG4gICAgdG86IG51bWJlciA9IDEwLFxuICAgIHBlcnNvbmFQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXJbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5saXN0QnlUYWdzJywge3VzZXJuYW1lLCB0YWdOYW1lcywgZnJvbSwgdG8sIHBlcnNvbmFQcm9wc30sIHJlcXVlc3RPcHRpb25zKTtcblxuICAgIGlmKGNhY2hlZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IGZyb21cbiAgICAgIH0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIHR5cGU6ICdbU3RyaW5nIV0nLFxuICAgICAgICB2YWx1ZTogdGFnTmFtZXNcbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IHRvXG4gICAgICB9LFxuICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgIHZhbHVlOiB1c2VybmFtZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/Lmxpc3RCeVRhZ3MgfHwgW107XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7bGlzdCwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU30pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgICAoc2FmZVVzZXJQcm9wcykgPT4gYXBwUXVlcnkoZmx1eCwgJ2xpc3RCeVRhZ3MnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICBwZXJzb25hUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdEJ5VGFncycsIHt1c2VybmFtZSwgdGFnTmFtZXMsIGZyb20sIHRvLCBwZXJzb25hUHJvcHN9LCByZXN1bHQgYXMgVXNlcltdLCByZXF1ZXN0T3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3Qgc2VhcmNoID0gYXN5bmMgKHF1ZXJ5OiBzdHJpbmcsIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSwgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFVzZXJbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5zZWFyY2gnLCB7cXVlcnksIHVzZXJQcm9wc30sIHJlcXVlc3RPcHRpb25zKTtcblxuICAgIGlmKGNhY2hlZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogcXVlcnlcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSAoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy5zZWFyY2ggfHwgW107XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7bGlzdCwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU30pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgICAoc2FmZVVzZXJQcm9wcykgPT4gYXBwUXVlcnkoZmx1eCwgJ3NlYXJjaCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHVzZXJQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5zZWFyY2gnLCB7cXVlcnksIHVzZXJQcm9wc30sIHJlc3VsdCBhcyBVc2VyW10sIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBpc0xvZ2dlZEluID0gKCk6IGJvb2xlYW4gPT4gaXNMb2dnZWRJbldpdGhTdG9yYWdlKGZsdXgpO1xuXG4gIGNvbnN0IGN1cnJlbnRBdXRoZW50aWNhdGVkVXNlciA9IGFzeW5jIChyZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlKGZsdXgpO1xuICAgIHJldHVybiAoc2Vzc2lvbiB8fCB7fSkgYXMgVXNlcjtcbiAgfTtcblxuICBjb25zdCBjdXJyZW50VXNlciA9IGFzeW5jIChyZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcj4gPT4gY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyKHJlcXVlc3RPcHRpb25zKTtcblxuICBjb25zdCByZWZyZXNoU2Vzc2lvbkFjdGlvbiA9IGFzeW5jICh0b2tlbj86IHN0cmluZywgZXhwaXJlcz86IG51bWJlciwgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVmcmVzaFNlc3Npb24oZmx1eCwgdG9rZW4sIGV4cGlyZXMpO1xuICAgIHJldHVybiAocmVzdWx0Py5yZWZyZXNoU2Vzc2lvbiB8fCB7fSkgYXMgU2Vzc2lvblR5cGU7XG4gIH07XG5cbiAgY29uc3Qgc2lnbkluID0gYXN5bmMgKFxuICAgIHVzZXI6IFBhcnRpYWw8VXNlcj4sXG4gICAgZXhwaXJlcz86IG51bWJlcixcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gICAgY29uc3Qge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWUsIHBhc3N3b3JkfSA9IHVzZXI7XG4gICAgbGV0IHVzZXJJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGxlZ2FjeVZhcmlhYmxlczogUmVjb3JkPHN0cmluZywge3R5cGU6IHN0cmluZzsgdmFsdWU6IHVua25vd259PiB8IHVuZGVmaW5lZDtcblxuICAgIGlmKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB1c2VySW5wdXQgPSB7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICB1c2VybmFtZVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYoZW1haWwgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHVzZXJJbnB1dCA9IHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIHBhc3N3b3JkXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZihwaG9uZSAmJiBwYXNzd29yZCkge1xuICAgICAgdXNlcklucHV0ID0ge1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgcGhvbmVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXNlcm5hbWUsIGVtYWlsLCBvciBwaG9uZSBudW1iZXIgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB0byBzaWduIGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gICAgY29uc3QgcmVxdWVzdGVkRXhwaXJlcyA9IE1hdGgubWF4KDEsIE51bWJlcihleHBpcmVzIHx8IGNvbmZpZy5hcHA/LnNlc3Npb24/Lm1heE1pbnV0ZXMgfHwgMTUpKTtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlc1dpdGhVc2VySW5wdXQgPSB7XG4gICAgICBleHBpcmVzOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogcmVxdWVzdGVkRXhwaXJlc1xuICAgICAgfSxcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZTogdXNlcklucHV0XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IGFzeW5jIChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICBjb25zdCB1c2VycyA9IChkYXRhIGFzIGFueSk/LnVzZXJzO1xuICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSBub3JtYWxpemVTZXNzaW9uKHVzZXJzPy5zaWduSW4gfHwge30pO1xuICAgICAgY29uc3Qgc3RvcmVkU2Vzc2lvbiA9IGF3YWl0IHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIHNlc3Npb25EYXRhKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlc3Npb246IHN0b3JlZFNlc3Npb24sXG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fSU5fU1VDQ0VTU1xuICAgICAgfSBhcyBGbHV4QWN0aW9uO1xuICAgIH07XG5cbiAgICBjb25zdCBwZXJmb3JtU2lnbkluID0gYXN5bmMgKHF1ZXJ5VmFyaWFibGVzOiBhbnkpOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uUmVzdWx0ID0gYXdhaXQgcHVibGljTXV0YXRpb248U2Vzc2lvblR5cGUgJiBVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnc2lnbkluJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgWydleHBpcmVzJywgJ2lzc3VlZCcsICd0b2tlbicsICd1c2VySWQnLCAndXNlcm5hbWUnXSxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgICBjb25zdCBiYXNlU2Vzc2lvbiA9IGF3YWl0IHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIGdldFNlc3Npb25QYXlsb2FkKHNlc3Npb25SZXN1bHQpKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaHlkcmF0ZWRTZXNzaW9uID0gYXdhaXQgc2Vzc2lvbihbJ3VzZXJJZCcsICdwZXJzb25hSWQnLCAndXNlckFjY2VzcycsICd1c2VybmFtZSddLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGF3YWl0IHN5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbihmbHV4LCBTdHJpbmcoKGh5ZHJhdGVkU2Vzc2lvbiBhcyBhbnkpPy5wZXJzb25hSWQgfHwgJycpKTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZmFsbGJhY2tTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgYmFzZVNlc3Npb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICBzZXNzaW9uOiBmYWxsYmFja1Nlc3Npb24sXG4gICAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9JTl9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsbGJhY2tTZXNzaW9uO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaW5hbFNlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIGJhc2VTZXNzaW9uKSB8fCBiYXNlU2Vzc2lvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICk7XG4gICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgc2Vzc2lvbjogZmluYWxTZXNzaW9uLFxuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX0lOX1NVQ0NFU1NcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZpbmFsU2Vzc2lvbjtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwZXJmb3JtU2lnbkluKHF1ZXJ5VmFyaWFibGVzV2l0aFVzZXJJbnB1dCk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fSU5fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKFN0cmluZygodXNlciBhcyBhbnkpPy51c2VySWQgfHwgJycpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2lnbk91dCA9IGFzeW5jIChyZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGF3YWl0IGNsZWFyUGVyc2lzdGVkU2Vzc2lvbihmbHV4KTtcbiAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiB7fSwgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9PVVRfU1VDQ0VTU30pO1xuICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBjb25maXJtU2lnblVwID0gYXN5bmMgKGNvZGU6IHN0cmluZywgdHlwZTogJ2VtYWlsJyB8ICdwaG9uZScsIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiA9PlxuICAgIHRydWU7XG5cbiAgY29uc3QgZm9yZ290UGFzc3dvcmQgPSBhc3luYyAodXNlcm5hbWU6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGVtYWlsOiB1c2VybmFtZSxcbiAgICAgICAgICBwaG9uZTogdXNlcm5hbWUsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YT86IFVzZXJBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LmZvcmdvdFBhc3N3b3JkO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBzdWNjZXNzID8gVVNFUl9DT05TVEFOVFMuRk9SR09UX1BBU1NXT1JEX1NVQ0NFU1MgOiBVU0VSX0NPTlNUQU5UUy5GT1JHT1RfUEFTU1dPUkRfRVJST1JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAnZm9yZ290UGFzc3dvcmQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSwge29uU3VjY2Vzc30pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5mb3Jnb3RQYXNzd29yZDtcbiAgICAgIGlmKCFzdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZm9yZ290X3Bhc3N3b3JkX2ZhaWxlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3Qgc2VuZFZlcmlmaWNhdGlvbkVtYWlsID0gYXN5bmMgKFxuICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgZW1haWxPcHRpb25zOiBWZXJpZmljYXRpb25FbWFpbE9wdGlvbnMgPSB7fSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgIC4uLihlbWFpbE9wdGlvbnMuc3ViamVjdCA/IHt2ZXJpZmljYXRpb25FbWFpbFN1YmplY3Q6IGVtYWlsT3B0aW9ucy5zdWJqZWN0fSA6IHt9KSxcbiAgICAgICAgICAuLi4oZW1haWxPcHRpb25zLnRlbXBsYXRlID8ge3ZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGU6IGVtYWlsT3B0aW9ucy50ZW1wbGF0ZX0gOiB7fSksXG4gICAgICAgICAgLi4uKGVtYWlsT3B0aW9ucy50ZXh0ID8ge3ZlcmlmaWNhdGlvbkVtYWlsVGV4dDogZW1haWxPcHRpb25zLnRleHR9IDoge30pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE/OiBVc2VyQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5zZW5kVmVyaWZpY2F0aW9uRW1haWw7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IHN1Y2Nlc3MgPyBVU0VSX0NPTlNUQU5UUy5DT05GSVJNX1NJR05fVVBfU1VDQ0VTUyA6IFVTRVJfQ09OU1RBTlRTLkNPTkZJUk1fU0lHTl9VUF9FUlJPUlxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgZmx1eCxcbiAgICAgICdzZW5kVmVyaWZpY2F0aW9uRW1haWwnLFxuICAgICAgREFUQV9UWVBFLFxuICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICBbXSxcbiAgICAgIHtvblN1Y2Nlc3N9XG4gICAgKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8uc2VuZFZlcmlmaWNhdGlvbkVtYWlsO1xuICAgICAgaWYoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZW5kX3ZlcmlmaWNhdGlvbl9lbWFpbF9mYWlsZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0UGFzc3dvcmQgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgIGNvZGU6IHN0cmluZyxcbiAgICB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJyxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGNvZGU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogY29kZVxuICAgICAgfSxcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLih0eXBlID09PSAnZW1haWwnID8ge2VtYWlsOiB1c2VybmFtZX0gOiB7cGhvbmU6IHVzZXJuYW1lfSksXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YT86IFVzZXJBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnJlc2V0UGFzc3dvcmQ7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IHN1Y2Nlc3MgPyBVU0VSX0NPTlNUQU5UUy5SRVNFVF9QQVNTV09SRF9TVUNDRVNTIDogVVNFUl9DT05TVEFOVFMuUkVTRVRfUEFTU1dPUkRfRVJST1JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAncmVzZXRQYXNzd29yZCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtdLCB7b25TdWNjZXNzfSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnJlc2V0UGFzc3dvcmQ7XG4gICAgICBpZighc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc2V0X3Bhc3N3b3JkX2ZhaWxlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlUGFzc3dvcmQgPSBhc3luYyAocGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+XG4gICAgdHJ1ZVxuICA7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRVc2VyLFxuICAgIGNvbmZpcm1Db2RlLFxuICAgIGNvbmZpcm1TaWduVXAsXG4gICAgY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyLFxuICAgIGN1cnJlbnRVc2VyLFxuICAgIGRlbGV0ZUJpbGxpbmdDYXJkLFxuICAgIGxpc3QsXG4gICAgZm9yZ290UGFzc3dvcmQsXG4gICAgaXNMb2dnZWRJbixcbiAgICBpdGVtQnlJZCxcbiAgICBsaXN0QnlDb25uZWN0aW9uLFxuICAgIGxpc3RCeUxhdGVzdCxcbiAgICBsaXN0QnlSZWFjdGlvbnMsXG4gICAgbGlzdEJ5VGFncyxcbiAgICByZWZyZXNoU2Vzc2lvbjogcmVmcmVzaFNlc3Npb25BY3Rpb24sXG4gICAgcmVtb3ZlLFxuICAgIHJlc2V0UGFzc3dvcmQsXG4gICAgc2F2ZUJpbGxpbmdDYXJkLFxuICAgIHNlYXJjaCxcbiAgICBzZW5kVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgc2Vzc2lvbixcbiAgICBzaWduSW4sXG4gICAgc2lnbk91dCxcbiAgICBzaWduVXAsXG4gICAgdXBkYXRlUGFzc3dvcmQsXG4gICAgdXBkYXRlVXNlcixcbiAgICB1cGRhdGVQbGFuLFxuICAgIHVwZGF0ZVVzZXJBZGFwdGVyOiB1c2VyQmFzZS51cGRhdGVBZGFwdGVyLFxuICAgIHVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9uczogdXNlckJhc2UudXBkYXRlT3B0aW9uc1xuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVVzZXJJbnB1dCIsIlVTRVJfQ09OU1RBTlRTIiwiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsInB1YmxpY011dGF0aW9uIiwicmVmcmVzaFNlc3Npb24iLCJjcmVhdGVCYXNlQWN0aW9ucyIsImNsZWFyUGVyc2lzdGVkU2Vzc2lvbiIsImh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UiLCJpc0xvZ2dlZEluIiwiaXNMb2dnZWRJbldpdGhTdG9yYWdlIiwibm9ybWFsaXplU2Vzc2lvbiIsInN0b3JlU2Vzc2lvbiIsImdldENvbmZpZ0Zyb21GbHV4IiwiY2xlYXJDYWNoZWRSZXF1ZXN0IiwiZ2V0Q2FjaGVkUmVxdWVzdCIsInNldENhY2hlZFJlcXVlc3QiLCJzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb24iLCJEQVRBX1RZUEUiLCJERUZBVUxUX1VTRVJfUVVFUllfRklFTERTIiwiU0VOU0lUSVZFX1VTRVJfRklFTERTIiwiU2V0IiwiSU5WQUxJRF9GSUVMRF9SRUdFWCIsImhhc1Nlc3Npb25JZGVudGl0eSIsInVzZXIiLCJfaWQiLCJ1c2VySWQiLCJ1c2VybmFtZSIsImVtYWlsIiwic2FuaXRpemVVcGRhdGVVc2VySW5wdXQiLCJ1c2VySW5wdXQiLCJjdXJyZW50U2Vzc2lvbiIsIm5leHRVc2VyIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsImZpZWxkIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJwYXNzd29yZCIsIlN0cmluZyIsInRyaW0iLCJjdXJyZW50VmFsdWUiLCJzeW5jU3RvcmVkU2Vzc2lvbiIsImZsdXgiLCJzZXNzaW9uUGF0Y2giLCJnZXRTdGF0ZSIsImdldFNlc3Npb25QYXlsb2FkIiwicGF5bG9hZCIsInNlc3Npb24iLCJnZXRGaWVsZFJvb3QiLCJ0cmltbWVkIiwibWF0Y2giLCJzYW5pdGl6ZVVzZXJQcm9wcyIsInByb3BzIiwiZmFsbGJhY2tQcm9wcyIsInNlZW4iLCJzYW5pdGl6ZWQiLCJsaXN0Iiwicm9vdCIsImhhcyIsImFkZCIsInB1c2giLCJsZW5ndGgiLCJnZXRJbnZhbGlkRmllbGRzIiwiZXJyb3IiLCJlcnJvcnMiLCJzb3VyY2UiLCJpbnZhbGlkRmllbGRzIiwiZm9yRWFjaCIsIml0ZW0iLCJtZXNzYWdlIiwiZXhlYyIsImxhc3RJbmRleCIsIndpdGhJbnZhbGlkRmllbGRSZXRyeSIsInJlcXVlc3RXaXRoUHJvcHMiLCJzYWZlUHJvcHMiLCJzaXplIiwicmV0cnlQcm9wcyIsImZpbHRlciIsImRlZmF1bHRVc2VyVmFsaWRhdG9yIiwiaW5wdXQiLCJvcHRpb25zIiwidmFsaWRhdGVkIiwic3RyaWN0IiwiRXJyb3IiLCJjcmVhdGVVc2VyQWN0aW9ucyIsInVzZXJCYXNlIiwiYWRhcHRlciIsInVzZXJBZGFwdGVyIiwiYWRhcHRlck9wdGlvbnMiLCJ1c2VyQWRhcHRlck9wdGlvbnMiLCJjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzIiwiYWRkVXNlciIsInVzZXJQcm9wcyIsInJlcXVlc3RPcHRpb25zIiwicXVlcnlWYXJpYWJsZXMiLCJ0eXBlIiwib25TdWNjZXNzIiwiZGF0YSIsInVzZXJzIiwiZGlzcGF0Y2giLCJBRERfSVRFTV9TVUNDRVNTIiwicmV0dXJuUHJvcHMiLCJzaWduVXAiLCJleHBpcmVzIiwiU0lHTl9VUF9TVUNDRVNTIiwiU0lHTl9VUF9FUlJPUiIsInVwZGF0ZVVzZXIiLCJ1cGRhdGVJbnB1dCIsImJpcnRoZGF0ZSIsImRvYiIsImZpcnN0TmFtZSIsImdlbmRlciIsImxhc3ROYW1lIiwibWFpbGluZ0xpc3QiLCJwaG9uZSIsImxlZ2FjeVVzZXIiLCJ1cGRhdGUiLCJ1cGRhdGVkVXNlciIsIlVQREFURV9JVEVNX1NVQ0NFU1MiLCJjb25maXJtQ29kZSIsImNvZGUiLCJjb25maXJtZWQiLCJDT05GSVJNX1NJR05fVVBfU1VDQ0VTUyIsInJlbW92ZSIsIlJFTU9WRV9JVEVNX1NVQ0NFU1MiLCJzZXNzaW9uUHJvcHMiLCJzZXNzaW9uRGF0YSIsImdldFVzZXJCeVNlc3Npb24iLCJHRVRfU0VTU0lPTl9FUlJPUiIsIm5leHRTZXNzaW9uIiwiR0VUX1NFU1NJT05fU1VDQ0VTUyIsInBlcnNvbmFJZCIsIml0ZW1CeUlkIiwiY2FjaGVkUmVzdWx0IiwiZ2V0VXNlckJ5SWQiLCJHRVRfSVRFTV9TVUNDRVNTIiwicmVzdWx0Iiwic2FmZVVzZXJQcm9wcyIsInNhdmVCaWxsaW5nQ2FyZCIsImNhcmQiLCJzZXNzaW9uVXNlcklkIiwiZGVsZXRlQmlsbGluZ0NhcmQiLCJ1cGRhdGVQbGFuIiwicGxhbklkIiwibmV4dFBsYW5JZCIsImdldFVzZXJMaXN0IiwiR0VUX0xJU1RfU1VDQ0VTUyIsImxpc3RCeUxhdGVzdCIsImZyb20iLCJ0byIsImxpc3RCeUNvbm5lY3Rpb24iLCJsaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbk5hbWVzIiwicGVyc29uYVByb3BzIiwibGlzdEJ5VGFncyIsInRhZ05hbWVzIiwidGFncyIsInNlYXJjaCIsInF1ZXJ5IiwiY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyIiwiY3VycmVudFVzZXIiLCJyZWZyZXNoU2Vzc2lvbkFjdGlvbiIsInRva2VuIiwic2lnbkluIiwibGVnYWN5VmFyaWFibGVzIiwiY29uZmlnIiwicmVxdWVzdGVkRXhwaXJlcyIsIk1hdGgiLCJtYXgiLCJOdW1iZXIiLCJhcHAiLCJtYXhNaW51dGVzIiwicXVlcnlWYXJpYWJsZXNXaXRoVXNlcklucHV0Iiwic3RvcmVkU2Vzc2lvbiIsIlNJR05fSU5fU1VDQ0VTUyIsInBlcmZvcm1TaWduSW4iLCJzZXNzaW9uUmVzdWx0IiwiYmFzZVNlc3Npb24iLCJoeWRyYXRlZFNlc3Npb24iLCJmYWxsYmFja1Nlc3Npb24iLCJmaW5hbFNlc3Npb24iLCJTSUdOX0lOX0VSUk9SIiwic2lnbk91dCIsIlNJR05fT1VUX1NVQ0NFU1MiLCJjb25maXJtU2lnblVwIiwiZm9yZ290UGFzc3dvcmQiLCJzdWNjZXNzIiwiRk9SR09UX1BBU1NXT1JEX1NVQ0NFU1MiLCJGT1JHT1RfUEFTU1dPUkRfRVJST1IiLCJ0aGVuIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwiZW1haWxPcHRpb25zIiwic3ViamVjdCIsInZlcmlmaWNhdGlvbkVtYWlsU3ViamVjdCIsInRlbXBsYXRlIiwidmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZSIsInRleHQiLCJ2ZXJpZmljYXRpb25FbWFpbFRleHQiLCJDT05GSVJNX1NJR05fVVBfRVJST1IiLCJyZXNldFBhc3N3b3JkIiwiUkVTRVRfUEFTU1dPUkRfU1VDQ0VTUyIsIlJFU0VUX1BBU1NXT1JEX0VSUk9SIiwidXBkYXRlUGFzc3dvcmQiLCJuZXdQYXNzd29yZCIsInVwZGF0ZVVzZXJBZGFwdGVyIiwidXBkYXRlQWRhcHRlciIsInVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9ucyIsInVwZGF0ZU9wdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLGlCQUFpQixRQUFPLDRDQUE0QztBQUM1RSxTQUFRQyxjQUFjLFFBQU8sNEJBQTRCO0FBQ3pELFNBQVFDLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxjQUFjLEVBQUVDLGNBQWMsUUFBTyxxQkFBcUI7QUFDekYsU0FBUUMsaUJBQWlCLFFBQU8sbUNBQW1DO0FBQ25FLFNBQ0VDLHFCQUFxQixFQUNyQkMseUJBQXlCLEVBQ3pCQyxjQUFjQyxxQkFBcUIsRUFDbkNDLGdCQUFnQixFQUNoQkMsWUFBWSxRQUNQLHlCQUF5QjtBQUNoQyxTQUFRQyxpQkFBaUIsUUFBTyw2QkFBNkI7QUFDN0QsU0FBUUMsa0JBQWtCLEVBQUVDLGdCQUFnQixFQUFFQyxnQkFBZ0IsUUFBTyw4QkFBOEI7QUFDbkcsU0FBUUMsd0JBQXdCLFFBQU8sc0NBQXNDO0FBUTdFLE1BQU1DLFlBQVk7QUFDbEIsTUFBTUMsNEJBQTRCO0lBQUM7SUFBVTtDQUFXO0FBQ3hELE1BQU1DLHdCQUF3QixJQUFJQyxJQUFJO0lBQ3BDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBQ0QsTUFBTUMsc0JBQXNCO0FBQzVCLE1BQU1DLHFCQUFxQixDQUFDQyxPQUMxQixDQUFDLENBQUVBLENBQUFBLFFBQVMsQ0FBQSxBQUFDQSxLQUFhQyxHQUFHLElBQUksQUFBQ0QsS0FBYUUsTUFBTSxJQUFJLEFBQUNGLEtBQWFHLFFBQVEsSUFBSSxBQUFDSCxLQUFhSSxLQUFLLEFBQUQsQ0FBQztBQUV4RyxNQUFNQywwQkFBMEIsQ0FBQ0MsWUFBMkIsQ0FBQyxDQUFDLEVBQUVDLGlCQUEwQyxDQUFDLENBQUM7SUFDMUcsTUFBTUMsV0FBV0MsT0FBT0MsT0FBTyxDQUFDSixXQUFXSyxNQUFNLENBQUMsQ0FBQ1gsTUFBK0IsQ0FBQ1ksT0FBT0MsTUFBTTtRQUM5RixJQUFHQSxVQUFVQyxhQUFhRCxVQUFVLE1BQU07WUFDeEMsT0FBT2I7UUFDVDtRQUVBLElBQUdZLFVBQVUsWUFBWTtZQUN2QixNQUFNRyxXQUFXQyxPQUFPSCxTQUFTLElBQUlJLElBQUk7WUFFekMsSUFBR0YsVUFBVTtnQkFDWGYsS0FBS2UsUUFBUSxHQUFHQTtZQUNsQjtZQUVBLE9BQU9mO1FBQ1Q7UUFFQSxJQUFHWSxVQUFVLFVBQVU7WUFDckJaLEtBQUtFLE1BQU0sR0FBR1c7WUFDZCxPQUFPYjtRQUNUO1FBRUEsTUFBTWtCLGVBQWVYLGNBQWMsQ0FBQ0ssTUFBTTtRQUUxQyxJQUFHSSxPQUFPSCxXQUFXRyxPQUFPRSxnQkFBZ0IsS0FBSztZQUMvQ2xCLElBQUksQ0FBQ1ksTUFBTSxHQUFHQztRQUNoQjtRQUVBLE9BQU9iO0lBQ1QsR0FBRyxDQUFDO0lBRUosT0FBT1E7QUFDVDtBQUVBLE1BQU1XLG9CQUFvQixPQUFPQyxNQUFxQkMsZUFBd0MsQ0FBQyxDQUFDO0lBQzlGLE1BQU1kLGlCQUFrQmEsS0FBS0UsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztJQUM5RCxPQUFPbEMsYUFBYWdDLE1BQU07UUFBQyxHQUFHYixjQUFjO1FBQUUsR0FBR2MsWUFBWTtJQUFBO0FBQy9EO0FBRUEsTUFBTUUsb0JBQW9CLENBQUNDO0lBQ3pCLElBQUdBLFdBQVcsT0FBT0EsWUFBWSxZQUFZLGFBQWNBLFNBQXFDO1FBQzlGLE9BQVEsQUFBQyxBQUFDQSxRQUFvQ0MsT0FBTyxJQUFLLENBQUM7SUFDN0Q7SUFFQSxPQUFRRCxXQUFXLE9BQU9BLFlBQVksV0FBV0EsVUFBVSxDQUFDO0FBQzlEO0FBRUEsTUFBTUUsZUFBZSxDQUFDZDtJQUNwQixNQUFNZSxVQUFVZixNQUFNSyxJQUFJO0lBQzFCLE1BQU1XLFFBQVFELFFBQVFDLEtBQUssQ0FBQztJQUM1QixPQUFPQSxRQUFRQSxLQUFLLENBQUMsRUFBRSxHQUFHO0FBQzVCO0FBRUEsTUFBTUMsb0JBQW9CLENBQUNDLFFBQWtCLEVBQUUsRUFBRUMsZ0JBQTBCcEMseUJBQXlCO0lBQ2xHLE1BQU1xQyxPQUFPLElBQUluQztJQUNqQixNQUFNb0MsWUFBWUgsTUFBTW5CLE1BQU0sQ0FBQyxDQUFDdUIsTUFBZ0J0QjtRQUM5QyxNQUFNdUIsT0FBT1QsYUFBYWQ7UUFFMUIsSUFBRyxDQUFDdUIsUUFBUXZDLHNCQUFzQndDLEdBQUcsQ0FBQ0QsU0FBU0gsS0FBS0ksR0FBRyxDQUFDeEIsUUFBUTtZQUM5RCxPQUFPc0I7UUFDVDtRQUVBRixLQUFLSyxHQUFHLENBQUN6QjtRQUNUc0IsS0FBS0ksSUFBSSxDQUFDMUI7UUFDVixPQUFPc0I7SUFDVCxHQUFHLEVBQUU7SUFFTCxJQUFHRCxVQUFVTSxNQUFNLEdBQUcsR0FBRztRQUN2QixPQUFPTjtJQUNUO0lBRUEsT0FBT0YsY0FBY3BCLE1BQU0sQ0FBQyxDQUFDdUIsTUFBZ0J0QjtRQUMzQyxNQUFNdUIsT0FBT1QsYUFBYWQ7UUFFMUIsSUFBRyxDQUFDdUIsUUFBUXZDLHNCQUFzQndDLEdBQUcsQ0FBQ0QsU0FBU0gsS0FBS0ksR0FBRyxDQUFDeEIsUUFBUTtZQUM5RCxPQUFPc0I7UUFDVDtRQUVBRixLQUFLSyxHQUFHLENBQUN6QjtRQUNUc0IsS0FBS0ksSUFBSSxDQUFDMUI7UUFDVixPQUFPc0I7SUFDVCxHQUFHLEVBQUU7QUFDUDtBQUVBLE1BQU1NLG1CQUFtQixDQUFDQztJQUN4QixNQUFNQyxTQUFTLEFBQUNELE9BQWVDLFVBQVdELE9BQWVFLFFBQVFELFVBQVUsRUFBRTtJQUM3RSxNQUFNRSxnQkFBZ0IsSUFBSS9DO0lBRTFCNkMsT0FBT0csT0FBTyxDQUFDLENBQUNDO1FBQ2QsTUFBTUMsVUFBVSxPQUFPRCxTQUFTLFdBQVdBLE9BQU9BLE1BQU1DLFdBQVc7UUFDbkUsSUFBSW5CLFFBQWdDOUIsb0JBQW9Ca0QsSUFBSSxDQUFDRDtRQUU3RCxNQUFNbkIsTUFBTztZQUNYZ0IsY0FBY1AsR0FBRyxDQUFDVCxLQUFLLENBQUMsRUFBRTtZQUMxQkEsUUFBUTlCLG9CQUFvQmtELElBQUksQ0FBQ0Q7UUFDbkM7UUFFQWpELG9CQUFvQm1ELFNBQVMsR0FBRztJQUNsQztJQUVBLE9BQU9MO0FBQ1Q7QUFFQSxNQUFNTSx3QkFBd0IsT0FDNUJDLGtCQUNBckIsT0FDQUMsZ0JBQTBCcEMseUJBQXlCO0lBRW5ELE1BQU15RCxZQUFZdkIsa0JBQWtCQyxPQUFPQztJQUUzQyxJQUFJO1FBQ0YsT0FBTyxNQUFNb0IsaUJBQWlCQztJQUNoQyxFQUFFLE9BQU1YLE9BQU87UUFDYixNQUFNRyxnQkFBZ0JKLGlCQUFpQkM7UUFFdkMsSUFBR0csY0FBY1MsSUFBSSxLQUFLLEdBQUc7WUFDM0IsTUFBTVo7UUFDUjtRQUVBLE1BQU1hLGFBQWFGLFVBQVVHLE1BQU0sQ0FBQyxDQUFDM0MsUUFBVSxDQUFDZ0MsY0FBY1IsR0FBRyxDQUFDVixhQUFhZDtRQUUvRSxJQUFHMEMsV0FBV2YsTUFBTSxLQUFLLEtBQUtlLFdBQVdmLE1BQU0sS0FBS2EsVUFBVWIsTUFBTSxFQUFFO1lBQ3BFLE1BQU1FO1FBQ1I7UUFFQSxPQUFPVSxpQkFBaUJHO0lBQzFCO0FBQ0Y7QUFrREEsTUFBTUUsdUJBQXVCLENBQUNDLE9BQWdCQztJQUM1QyxNQUFNQyxZQUFZbkYsa0JBQWtCaUY7SUFFcEMsSUFBR0MsU0FBU0UsVUFBVSxDQUFDRCxVQUFVeEQsUUFBUSxFQUFFO1FBQ3pDLE1BQU0sSUFBSTBELE1BQU07SUFDbEI7SUFFQSxPQUFPRjtBQUNUO0FBb0RBLE9BQU8sTUFBTUcsb0JBQW9CLENBQy9CMUMsTUFDQXNDO0lBRUEsTUFBTUssV0FBV2pGLGtCQUFrQnNDLE1BQU1vQyxzQkFBc0I7UUFDN0RRLFNBQVNOLFNBQVNPO1FBQ2xCQyxnQkFBZ0JSLFNBQVNTO0lBQzNCO0lBQ0EsTUFBTUMseUJBQXlCLE9BQU9sRSxTQUFTLEVBQUU7UUFDL0MsTUFBTVosbUJBQW1COEIsTUFBTTtRQUMvQixNQUFNOUIsbUJBQW1COEIsTUFBTTtRQUMvQixNQUFNOUIsbUJBQW1COEIsTUFBTTtRQUMvQixNQUFNOUIsbUJBQW1COEIsTUFBTTtRQUMvQixJQUFHbEIsUUFBUTtZQUNULE1BQU1aLG1CQUFtQjhCLE1BQU0sQ0FBQyxjQUFjLEVBQUVsQixRQUFRO1FBQzFEO0lBQ0Y7SUFFQSxNQUFNbUUsVUFBVSxPQUNkL0QsV0FDQWdFLFlBQXNCLEVBQUUsRUFDeEJDLGlCQUF1QyxDQUFDLENBQUM7UUFFekMsTUFBTSxFQUFDcEUsUUFBUSxFQUFFQyxLQUFLLEVBQUVXLFFBQVEsRUFBQyxHQUFHVDtRQUNwQyxNQUFNa0UsaUJBQWlCO1lBQ3JCeEUsTUFBTTtnQkFDSnlFLE1BQU07Z0JBQ041RCxPQUFPO29CQUNMVDtvQkFDQVc7b0JBQ0FaO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLE1BQU11RSxZQUFZLENBQUNDO1lBQ2pCLE1BQU0zRSxPQUFPMkUsTUFBTUMsT0FBT1AsV0FBVyxDQUFDO1lBQ3RDLE9BQU9qRCxLQUFLeUQsUUFBUSxDQUFDO2dCQUNuQkosTUFBTWhHLGVBQWVxRyxnQkFBZ0I7Z0JBQ3JDOUU7WUFDRjtRQUNGO1FBRUEsTUFBTStFLGNBQWNsRCxrQkFBa0J5QyxXQUFXO1lBQy9DO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1NBQ0Q7UUFFRCxJQUFJO1lBQ0YsT0FBTyxNQUFNMUYsZUFDWHdDLE1BQ0EsV0FDQTFCLFdBQ0E4RSxnQkFDQU8sYUFDQTtnQkFBQ0w7WUFBUztRQUVkLFNBQVU7WUFDUixNQUFNTjtRQUNSO0lBQ0Y7SUFFQSxNQUFNWSxTQUFTLE9BQ2IxRSxXQUNBZ0UsWUFBc0IsRUFBRSxFQUN4QkMsaUJBQXVDLENBQUMsQ0FBQztRQUV6QyxNQUFNLEVBQUNwRSxRQUFRLEVBQUVDLEtBQUssRUFBRVcsUUFBUSxFQUFDLEdBQUdUO1FBQ3BDLE1BQU1rRSxpQkFBaUI7WUFDckJTLFNBQVM7Z0JBQ1BSLE1BQU07Z0JBQ041RCxPQUFPO1lBQ1Q7WUFDQWIsTUFBTTtnQkFDSnlFLE1BQU07Z0JBQ041RCxPQUFPO29CQUNMVDtvQkFDQVc7b0JBQ0FaO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLE1BQU11RSxZQUFZLENBQUNDO1lBQ2pCLE1BQU0zRSxPQUFPMkUsTUFBTUMsT0FBT0ksVUFBVSxDQUFDO1lBQ3JDLE9BQU81RCxLQUFLeUQsUUFBUSxDQUFDO2dCQUNuQkosTUFBTWhHLGVBQWV5RyxlQUFlO2dCQUNwQ2xGO1lBQ0Y7UUFDRjtRQUVBLE1BQU0rRSxjQUFjbEQsa0JBQWtCO1lBQ3BDO1lBQ0E7WUFDQTtZQUNBO2VBQ0d5QztTQUNKO1FBRUQsSUFBSTtZQUNGLE9BQU8sTUFBTTFGLGVBQ1h3QyxNQUNBLFVBQ0ExQixXQUNBOEUsZ0JBQ0FPLGFBQ0E7Z0JBQUNMO1lBQVM7UUFFZCxFQUFFLE9BQU1qQyxPQUFPO1lBQ2JyQixLQUFLeUQsUUFBUSxDQUFDO2dCQUFDcEM7Z0JBQU9nQyxNQUFNaEcsZUFBZTBHLGFBQWE7WUFBQTtZQUN4RCxNQUFNMUM7UUFDUixTQUFVO1lBQ1IsTUFBTTJCO1FBQ1I7SUFDRjtJQUVBLE1BQU1nQixhQUFhLE9BQ2pCOUUsV0FDQWdFLFlBQXNCLEVBQUUsRUFDeEJDLGlCQUF1QyxDQUFDLENBQUM7UUFFekMsTUFBTWMsY0FBY2hGLHdCQUF3QkMsV0FBWWMsS0FBS0UsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztRQUM5RixNQUFNLEVBQ0pnRSxTQUFTLEVBQ1RDLEdBQUcsRUFDSG5GLEtBQUssRUFDTG9GLFNBQVMsRUFDVEMsTUFBTSxFQUNOQyxRQUFRLEVBQ1JDLFdBQVcsRUFDWDVFLFFBQVEsRUFDUjZFLEtBQUssRUFDTDFGLE1BQU0sRUFDTkMsUUFBUSxFQUNULEdBQUdrRjtRQUNKLE1BQU1iLGlCQUFpQjtZQUNyQnhFLE1BQU07Z0JBQ0p5RSxNQUFNO2dCQUNONUQsT0FBTztvQkFDTHlFLFdBQVdBLGFBQWFDO29CQUN4Qm5GO29CQUNBb0Y7b0JBQ0FDO29CQUNBQztvQkFDQUM7b0JBQ0E1RTtvQkFDQTZFO29CQUNBMUY7b0JBQ0FDO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLE1BQU11RSxZQUFZLENBQUNDLE9BQXVCLENBQUMsQ0FBQztZQUMxQyxNQUFNQyxRQUFTRCxNQUF3Q0M7WUFDdkQsTUFBTWlCLGFBQWFqQixPQUFPa0IsVUFBVSxDQUFDO1lBQ3JDLE1BQU1DLGNBQWNuQixPQUFPUSxjQUFjLENBQUM7WUFDMUMsTUFBTXBGLE9BQU9ELG1CQUFtQmdHLGVBQWVBLGNBQWNGO1lBRTdELElBQUcsQUFBQzdGLE1BQWNFLFVBQVUsQUFBQ0YsS0FBYUUsTUFBTSxLQUFLa0IsS0FBS0UsUUFBUSxDQUFDLHdCQUF3QjtnQkFDekZILGtCQUFrQkMsTUFBTXBCO1lBQzFCO1lBRUEsT0FBT29CLEtBQUt5RCxRQUFRLENBQUM7Z0JBQ25CSixNQUFNaEcsZUFBZXVILG1CQUFtQjtnQkFDeENoRztZQUNGO1FBQ0Y7UUFFQSxNQUFNK0UsY0FBY2xELGtCQUFrQjtZQUNwQztZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO2VBQ0d5QztTQUNKO1FBRUQsSUFBSTtZQUNGLE9BQU8sTUFBTTVGLFlBQ1gwQyxNQUNBLGNBQ0ExQixXQUNBOEUsZ0JBQ0FPLGFBQ0E7Z0JBQUNMO1lBQVM7UUFFZCxTQUFVO1lBQ1IsTUFBTU4sdUJBQXVCcEQsT0FBT2QsVUFBVTtRQUNoRDtJQUNGO0lBRUEsTUFBTStGLGNBQWMsT0FDbEJDLE1BQ0EsRUFBQ3pCLElBQUksRUFBRTVELEtBQUssRUFBMkMsRUFDdkQwRCxpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLE1BQU1DLGlCQUFpQjtZQUNyQjBCLE1BQU07Z0JBQ0p6QixNQUFNO2dCQUNONUQsT0FBT3FGO1lBQ1Q7WUFDQXpCLE1BQU07Z0JBQ0pBLE1BQU07Z0JBQ041RCxPQUFPNEQ7WUFDVDtZQUNBNUQsT0FBTztnQkFDTDRELE1BQU07Z0JBQ041RDtZQUNGO1FBQ0Y7UUFFQSxNQUFNOEQsT0FBTyxNQUFNL0YsZUFBbUN3QyxNQUFNLGVBQWUxQixXQUFXOEUsZ0JBQWdCLEVBQUU7UUFDeEcsTUFBTTJCLFlBQVksQ0FBQyxDQUFDeEIsTUFBTUMsT0FBT3FCO1FBRWpDLE1BQU03RSxLQUFLeUQsUUFBUSxDQUFDO1lBQUNzQjtZQUFXMUIsTUFBTWhHLGVBQWUySCx1QkFBdUI7UUFBQTtRQUU1RSxPQUFPRDtJQUNUO0lBRUEsTUFBTUUsU0FBUyxPQUFPbkcsUUFBZ0JxRSxpQkFBdUMsQ0FBQyxDQUFDO1FBQzdFLE1BQU1DLGlCQUFpQjtZQUNyQnRFLFFBQVE7Z0JBQ051RSxNQUFNO2dCQUNONUQsT0FBT1g7WUFDVDtRQUNGO1FBRUEsTUFBTXdFLFlBQVksQ0FBQ0MsT0FBdUIsQ0FBQyxDQUFDO1lBQzFDLE1BQU0zRSxPQUFPLEFBQUMyRSxNQUF3Q0MsT0FBT3lCLFVBQVUsQ0FBQztZQUN4RSxPQUFPakYsS0FBS3lELFFBQVEsQ0FBQztnQkFBQ0osTUFBTWhHLGVBQWU2SCxtQkFBbUI7Z0JBQUV0RztZQUFJO1FBQ3RFO1FBRUEsSUFBSTtZQUNGLE9BQU8sTUFBTXRCLFlBQVkwQyxNQUFNLFVBQVUxQixXQUFXOEUsZ0JBQWdCLEVBQUUsRUFBRTtnQkFBQ0U7WUFBUztRQUNwRixTQUFVO1lBQ1IsTUFBTU4sdUJBQXVCbEU7UUFDL0I7SUFDRjtJQUVBLE1BQU11QixVQUFVLE9BQU82QyxZQUFzQixFQUFFLEVBQUVDLGlCQUF1QyxDQUFDLENBQUMsR0FBb0JyQixzQkFDNUcsT0FBT3FEO1lBQ0wsTUFBTTVCLE9BQU8sTUFBTWhHLFNBQ2pCeUMsTUFDQSxvQkFDQTFCLFdBQ0EsQ0FBQyxHQUNENkc7WUFJRixNQUFNQyxjQUFjN0IsTUFBTUMsT0FBTzZCLG9CQUFvQixDQUFDO1lBRXRELElBQUcsQ0FBQzFHLG1CQUFtQnlHLGNBQWM7Z0JBQ25DLE1BQU16SCxzQkFBc0JxQztnQkFDNUIsTUFBTUEsS0FBS3lELFFBQVEsQ0FBQztvQkFBQ0osTUFBTWhHLGVBQWVpSSxpQkFBaUI7Z0JBQUE7Z0JBQzNELE1BQU0sSUFBSTdDLE1BQU07WUFDbEI7WUFFQSxNQUFNOEMsY0FBYyxNQUFNeEYsa0JBQWtCQyxNQUFNb0Y7WUFDbEQsTUFBTXBGLEtBQUt5RCxRQUFRLENBQUM7Z0JBQUNwRCxTQUFTa0Y7Z0JBQWFsQyxNQUFNaEcsZUFBZW1JLG1CQUFtQjtZQUFBO1lBQ25GLE1BQU1uSCx5QkFBeUIyQixNQUFNSixPQUFPLEFBQUMyRixhQUFxQkUsYUFBYTtZQUMvRSxPQUFPLE1BQU0xRixrQkFBa0JDLE1BQU9BLEtBQUtFLFFBQVEsQ0FBQyxnQkFBZ0JxRixnQkFBZ0JBO1FBQ3RGLEdBQ0FyQyxXQUNBM0U7SUFHRixNQUFNbUgsV0FBVyxPQUFPNUcsUUFBZ0JvRSxZQUFzQixFQUFFLEVBQUVDLGlCQUF1QyxDQUFDLENBQUM7UUFDekcsTUFBTXdDLGVBQWV4SCxpQkFBdUI2QixNQUFNLENBQUMsY0FBYyxFQUFFbEIsUUFBUSxFQUFFO1lBQUNBO1lBQVFvRTtRQUFTLEdBQUdDO1FBRWxHLElBQUd3QyxpQkFBaUJqRyxXQUFXO1lBQzdCLE9BQU9pRztRQUNUO1FBRUEsTUFBTXZDLGlCQUFpQjtZQUNyQnRFLFFBQVE7Z0JBQ051RSxNQUFNO2dCQUNONUQsT0FBT1g7WUFDVDtRQUNGO1FBRUEsTUFBTXdFLFlBQVksQ0FBQ0MsT0FBdUIsQ0FBQyxDQUFDO1lBQzFDLE1BQU1xQyxjQUFjLEFBQUVyQyxNQUVsQkMsT0FBT29DLGVBQWdCLENBQUM7WUFFNUIsSUFBRzlHLFdBQVdrQixLQUFLRSxRQUFRLENBQUMsd0JBQXdCO2dCQUNsREgsa0JBQWtCQyxNQUFNNEY7WUFDMUI7WUFFQSxPQUFPNUYsS0FBS3lELFFBQVEsQ0FBQztnQkFBQ0osTUFBTWhHLGVBQWV3SSxnQkFBZ0I7Z0JBQUVqSCxNQUFNZ0g7WUFBVztRQUNoRjtRQUVBLE1BQU1FLFNBQVMsTUFBTWhFLHNCQUNuQixDQUFDaUUsZ0JBQWtCeEksU0FBU3lDLE1BQU0sZUFBZTFCLFdBQVc4RSxnQkFBZ0IyQyxlQUFlO2dCQUFDekM7WUFBUyxJQUNyR0osV0FDQTNFO1FBR0YsT0FBT0gsaUJBQXVCNEIsTUFBTSxDQUFDLGNBQWMsRUFBRWxCLFFBQVEsRUFBRTtZQUFDQTtZQUFRb0U7UUFBUyxHQUFHNEMsUUFBZ0IzQztJQUN0RztJQUVBLE1BQU02QyxrQkFBa0IsT0FDdEJDLE1BQ0EvQyxZQUFzQixFQUFFLEVBQ3hCQyxpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLE1BQU1DLGlCQUFpQjtZQUNyQjZDLE1BQU07Z0JBQ0o1QyxNQUFNO2dCQUNONUQsT0FBT3dHO1lBQ1Q7UUFDRjtRQUVBLE1BQU0zQyxZQUFZLENBQUNDLE9BQXVCLENBQUMsQ0FBQztZQUMxQyxNQUFNM0UsT0FBTyxBQUFFMkUsTUFBd0NDLE9BQU93QyxtQkFBb0IsQ0FBQztZQUVuRixJQUFHLEFBQUNwSCxNQUFjRSxVQUFVLEFBQUNGLEtBQWFFLE1BQU0sS0FBS2tCLEtBQUtFLFFBQVEsQ0FBQyx3QkFBd0I7Z0JBQ3pGSCxrQkFBa0JDLE1BQU1wQjtZQUMxQjtZQUVBLE9BQU9vQixLQUFLeUQsUUFBUSxDQUFDO2dCQUNuQkosTUFBTWhHLGVBQWV1SCxtQkFBbUI7Z0JBQ3hDaEc7WUFDRjtRQUNGO1FBRUEsTUFBTStFLGNBQWNsRCxrQkFBa0I7WUFDcEM7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO2VBQ0d5QztTQUNKO1FBQ0QsTUFBTWdELGdCQUFnQnRHLE9BQU9JLEtBQUtFLFFBQVEsQ0FBQywwQkFBMEI7UUFFckUsSUFBSTtZQUNGLE9BQU8sTUFBTTVDLFlBQ1gwQyxNQUNBLG1CQUNBMUIsV0FDQThFLGdCQUNBTyxhQUNBO2dCQUFDTDtZQUFTO1FBRWQsU0FBVTtZQUNSLE1BQU1OLHVCQUF1QmtEO1FBQy9CO0lBQ0Y7SUFFQSxNQUFNQyxvQkFBb0IsT0FDeEJqRCxZQUFzQixFQUFFLEVBQ3hCQyxpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLE1BQU1HLFlBQVksQ0FBQ0MsT0FBdUIsQ0FBQyxDQUFDO1lBQzFDLE1BQU0zRSxPQUFPLEFBQUUyRSxNQUF3Q0MsT0FBTzJDLHFCQUFzQixDQUFDO1lBRXJGLElBQUcsQUFBQ3ZILE1BQWNFLFVBQVUsQUFBQ0YsS0FBYUUsTUFBTSxLQUFLa0IsS0FBS0UsUUFBUSxDQUFDLHdCQUF3QjtnQkFDekZILGtCQUFrQkMsTUFBTXBCO1lBQzFCO1lBRUEsT0FBT29CLEtBQUt5RCxRQUFRLENBQUM7Z0JBQ25CSixNQUFNaEcsZUFBZXVILG1CQUFtQjtnQkFDeENoRztZQUNGO1FBQ0Y7UUFFQSxNQUFNK0UsY0FBY2xELGtCQUFrQjtZQUNwQztZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7ZUFDR3lDO1NBQ0o7UUFDRCxNQUFNZ0QsZ0JBQWdCdEcsT0FBT0ksS0FBS0UsUUFBUSxDQUFDLDBCQUEwQjtRQUVyRSxJQUFJO1lBQ0YsT0FBTyxNQUFNNUMsWUFDWDBDLE1BQ0EscUJBQ0ExQixXQUNBLENBQUMsR0FDRHFGLGFBQ0E7Z0JBQUNMO1lBQVM7UUFFZCxTQUFVO1lBQ1IsTUFBTU4sdUJBQXVCa0Q7UUFDL0I7SUFDRjtJQUVBLE1BQU1FLGFBQWEsT0FDakJDLFFBQ0FuRCxZQUFzQixFQUFFLEVBQ3hCQyxpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLE1BQU1tRCxhQUFhMUcsT0FBT3lHLFVBQVUsSUFBSXhHLElBQUk7UUFFNUMsSUFBRyxDQUFDeUcsWUFBWTtZQUNkLE1BQU0sSUFBSTdELE1BQU07UUFDbEI7UUFFQSxNQUFNVyxpQkFBaUI7WUFDckJpRCxRQUFRO2dCQUNOaEQsTUFBTTtnQkFDTjVELE9BQU82RztZQUNUO1FBQ0Y7UUFFQSxNQUFNaEQsWUFBWSxDQUFDQyxPQUF1QixDQUFDLENBQUM7WUFDMUMsTUFBTTNFLE9BQU8sQUFBRTJFLE1BQXdDQyxPQUFPNEMsY0FBZSxDQUFDO1lBRTlFLElBQUcsQUFBQ3hILE1BQWNFLFVBQVUsQUFBQ0YsS0FBYUUsTUFBTSxLQUFLa0IsS0FBS0UsUUFBUSxDQUFDLHdCQUF3QjtnQkFDekZILGtCQUFrQkMsTUFBTXBCO1lBQzFCO1lBRUEsT0FBT29CLEtBQUt5RCxRQUFRLENBQUM7Z0JBQ25CSixNQUFNaEcsZUFBZXVILG1CQUFtQjtnQkFDeENoRztZQUNGO1FBQ0Y7UUFFQSxNQUFNK0UsY0FBY2xELGtCQUFrQjtZQUNwQztZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO2VBQ0d5QztTQUNKO1FBQ0QsTUFBTWdELGdCQUFnQnRHLE9BQU9JLEtBQUtFLFFBQVEsQ0FBQywwQkFBMEI7UUFFckUsSUFBSTtZQUNGLE9BQU8sTUFBTTVDLFlBQ1gwQyxNQUNBLGNBQ0ExQixXQUNBOEUsZ0JBQ0FPLGFBQ0E7Z0JBQUNMO1lBQVM7UUFFZCxTQUFVO1lBQ1IsTUFBTU4sdUJBQXVCa0Q7UUFDL0I7SUFDRjtJQUVBLE1BQU1wRixPQUFPLE9BQU9vQyxZQUFzQixFQUFFLEVBQUVDLGlCQUF1QyxDQUFDLENBQUM7UUFDckYsTUFBTXdDLGVBQWV4SCxpQkFBeUI2QixNQUFNLGFBQWE7WUFBQ2tEO1FBQVMsR0FBR0M7UUFFOUUsSUFBR3dDLGlCQUFpQmpHLFdBQVc7WUFDN0IsT0FBT2lHO1FBQ1Q7UUFFQSxNQUFNckMsWUFBWSxDQUFDQyxPQUF1QixDQUFDLENBQUM7WUFDMUMsTUFBTXpDLE9BQU8sQUFBQ3lDLE1BQXdDQyxPQUFPK0MsZUFBZSxFQUFFO1lBQzlFLE9BQU92RyxLQUFLeUQsUUFBUSxDQUFDO2dCQUFDM0M7Z0JBQU11QyxNQUFNaEcsZUFBZW1KLGdCQUFnQjtZQUFBO1FBQ25FO1FBRUEsTUFBTVYsU0FBUyxNQUFNaEUsc0JBQ25CLENBQUNpRSxnQkFBa0J4SSxTQUFTeUMsTUFBTSxlQUFlMUIsV0FBVyxDQUFDLEdBQUd5SCxlQUFlO2dCQUFDekM7WUFBUyxJQUN6RkosV0FDQTNFO1FBR0YsT0FBT0gsaUJBQXlCNEIsTUFBTSxhQUFhO1lBQUNrRDtRQUFTLEdBQUc0QyxRQUFrQjNDO0lBQ3BGO0lBRUEsTUFBTXNELGVBQWUsT0FDbkIxSCxXQUFtQixFQUFFLEVBQ3JCMkgsT0FBZSxDQUFDLEVBQ2hCQyxLQUFhLEVBQUUsRUFDZnpELFlBQXNCLEVBQUUsRUFDeEJDLGlCQUF1QyxDQUFDLENBQUM7UUFFekMsTUFBTXdDLGVBQWV4SCxpQkFBeUI2QixNQUFNLHFCQUFxQjtZQUFDakI7WUFBVTJIO1lBQU1DO1lBQUl6RDtRQUFTLEdBQUdDO1FBRTFHLElBQUd3QyxpQkFBaUJqRyxXQUFXO1lBQzdCLE9BQU9pRztRQUNUO1FBRUEsTUFBTXZDLGlCQUFpQjtZQUNyQnNELE1BQU07Z0JBQ0pyRCxNQUFNO2dCQUNONUQsT0FBT2lIO1lBQ1Q7WUFDQUMsSUFBSTtnQkFDRnRELE1BQU07Z0JBQ041RCxPQUFPa0g7WUFDVDtZQUNBNUgsVUFBVTtnQkFDUnNFLE1BQU07Z0JBQ041RCxPQUFPVjtZQUNUO1FBQ0Y7UUFFQSxNQUFNdUUsWUFBWSxDQUFDQyxPQUF1QixDQUFDLENBQUM7WUFDMUMsTUFBTXpDLE9BQU8sQUFBQ3lDLE1BQXdDQyxPQUFPaUQsZ0JBQWdCLEVBQUU7WUFDL0UsT0FBT3pHLEtBQUt5RCxRQUFRLENBQUM7Z0JBQUMzQztnQkFBTXVDLE1BQU1oRyxlQUFlbUosZ0JBQWdCO1lBQUE7UUFDbkU7UUFFQSxNQUFNVixTQUFTLE1BQU1oRSxzQkFDbkIsQ0FBQ2lFLGdCQUFrQnhJLFNBQVN5QyxNQUFNLGdCQUFnQjFCLFdBQVc4RSxnQkFBZ0IyQyxlQUFlO2dCQUFDekM7WUFBUyxJQUN0R0osV0FDQTNFO1FBR0YsT0FBT0gsaUJBQXlCNEIsTUFBTSxxQkFBcUI7WUFBQ2pCO1lBQVUySDtZQUFNQztZQUFJekQ7UUFBUyxHQUFHNEMsUUFBa0IzQztJQUNoSDtJQUVBLE1BQU15RCxtQkFBbUIsT0FDdkI5SCxRQUNBNEgsT0FBZSxDQUFDLEVBQ2hCQyxLQUFhLEVBQUUsRUFDZnpELFlBQXNCLEVBQUUsRUFDeEJDLGlCQUF1QyxDQUFDLENBQUMsR0FFekMsRUFBRTtJQUdKLE1BQU0wRCxrQkFBa0IsT0FDdEI5SCxVQUNBK0gsZUFDQUosT0FBZSxDQUFDLEVBQ2hCQyxLQUFhLEVBQUUsRUFDZkksZUFBeUIsRUFBRSxFQUMzQjVELGlCQUF1QyxDQUFDLENBQUMsR0FFekMsRUFBRTtJQUdKLE1BQU02RCxhQUFhLE9BQ2pCakksVUFDQWtJLFVBQ0FQLE9BQWUsQ0FBQyxFQUNoQkMsS0FBYSxFQUFFLEVBQ2ZJLGVBQXlCLEVBQUUsRUFDM0I1RCxpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLE1BQU13QyxlQUFleEgsaUJBQXlCNkIsTUFBTSxtQkFBbUI7WUFBQ2pCO1lBQVVrSTtZQUFVUDtZQUFNQztZQUFJSTtRQUFZLEdBQUc1RDtRQUVySCxJQUFHd0MsaUJBQWlCakcsV0FBVztZQUM3QixPQUFPaUc7UUFDVDtRQUVBLE1BQU12QyxpQkFBaUI7WUFDckJzRCxNQUFNO2dCQUNKckQsTUFBTTtnQkFDTjVELE9BQU9pSDtZQUNUO1lBQ0FRLE1BQU07Z0JBQ0o3RCxNQUFNO2dCQUNONUQsT0FBT3dIO1lBQ1Q7WUFDQU4sSUFBSTtnQkFDRnRELE1BQU07Z0JBQ041RCxPQUFPa0g7WUFDVDtZQUNBNUgsVUFBVTtnQkFDUnNFLE1BQU07Z0JBQ041RCxPQUFPVjtZQUNUO1FBQ0Y7UUFFQSxNQUFNdUUsWUFBWSxDQUFDQyxPQUF1QixDQUFDLENBQUM7WUFDMUMsTUFBTXpDLE9BQU8sQUFBQ3lDLE1BQXdDQyxPQUFPd0QsY0FBYyxFQUFFO1lBQzdFLE9BQU9oSCxLQUFLeUQsUUFBUSxDQUFDO2dCQUFDM0M7Z0JBQU11QyxNQUFNaEcsZUFBZW1KLGdCQUFnQjtZQUFBO1FBQ25FO1FBRUEsTUFBTVYsU0FBUyxNQUFNaEUsc0JBQ25CLENBQUNpRSxnQkFBa0J4SSxTQUFTeUMsTUFBTSxjQUFjMUIsV0FBVzhFLGdCQUFnQjJDLGVBQWU7Z0JBQUN6QztZQUFTLElBQ3BHeUQsY0FDQXhJO1FBR0YsT0FBT0gsaUJBQXlCNEIsTUFBTSxtQkFBbUI7WUFBQ2pCO1lBQVVrSTtZQUFVUDtZQUFNQztZQUFJSTtRQUFZLEdBQUdqQixRQUFrQjNDO0lBQzNIO0lBRUEsTUFBTWdFLFNBQVMsT0FBT0MsT0FBZWxFLFlBQXNCLEVBQUUsRUFBRUMsaUJBQXVDLENBQUMsQ0FBQztRQUN0RyxNQUFNd0MsZUFBZXhILGlCQUF5QjZCLE1BQU0sZUFBZTtZQUFDb0g7WUFBT2xFO1FBQVMsR0FBR0M7UUFFdkYsSUFBR3dDLGlCQUFpQmpHLFdBQVc7WUFDN0IsT0FBT2lHO1FBQ1Q7UUFFQSxNQUFNdkMsaUJBQWlCO1lBQ3JCZ0UsT0FBTztnQkFDTC9ELE1BQU07Z0JBQ041RCxPQUFPMkg7WUFDVDtRQUNGO1FBRUEsTUFBTTlELFlBQVksQ0FBQ0MsT0FBdUIsQ0FBQyxDQUFDO1lBQzFDLE1BQU16QyxPQUFPLEFBQUN5QyxNQUF3Q0MsT0FBTzJELFVBQVUsRUFBRTtZQUN6RSxPQUFPbkgsS0FBS3lELFFBQVEsQ0FBQztnQkFBQzNDO2dCQUFNdUMsTUFBTWhHLGVBQWVtSixnQkFBZ0I7WUFBQTtRQUNuRTtRQUVBLE1BQU1WLFNBQVMsTUFBTWhFLHNCQUNuQixDQUFDaUUsZ0JBQWtCeEksU0FBU3lDLE1BQU0sVUFBVTFCLFdBQVc4RSxnQkFBZ0IyQyxlQUFlO2dCQUFDekM7WUFBUyxJQUNoR0osV0FDQTNFO1FBR0YsT0FBT0gsaUJBQXlCNEIsTUFBTSxlQUFlO1lBQUNvSDtZQUFPbEU7UUFBUyxHQUFHNEMsUUFBa0IzQztJQUM3RjtJQUVBLE1BQU10RixhQUFhLElBQWVDLHNCQUFzQmtDO0lBRXhELE1BQU1xSCwyQkFBMkIsT0FBT2xFLGlCQUF1QyxDQUFDLENBQUM7UUFDL0UsTUFBTTlDLFVBQVUsTUFBTXpDLDBCQUEwQm9DO1FBQ2hELE9BQVFLLFdBQVcsQ0FBQztJQUN0QjtJQUVBLE1BQU1pSCxjQUFjLE9BQU9uRSxpQkFBdUMsQ0FBQyxDQUFDLEdBQW9Ca0UseUJBQXlCbEU7SUFFakgsTUFBTW9FLHVCQUF1QixPQUFPQyxPQUFnQjNELFNBQWtCVixpQkFBdUMsQ0FBQyxDQUFDO1FBQzdHLE1BQU0yQyxTQUFTLE1BQU1ySSxlQUFldUMsTUFBTXdILE9BQU8zRDtRQUNqRCxPQUFRaUMsUUFBUXJJLGtCQUFrQixDQUFDO0lBQ3JDO0lBRUEsTUFBTWdLLFNBQVMsT0FDYjdJLE1BQ0FpRixTQUNBVixpQkFBdUMsQ0FBQyxDQUFDO1FBRXpDLE1BQU0sRUFBQ25FLEtBQUssRUFBRXdGLEtBQUssRUFBRXpGLFFBQVEsRUFBRVksUUFBUSxFQUFDLEdBQUdmO1FBQzNDLElBQUlNO1FBQ0osSUFBSXdJO1FBRUosSUFBRzNJLFlBQVlZLFVBQVU7WUFDdkJULFlBQVk7Z0JBQ1ZTO2dCQUNBWjtZQUNGO1FBQ0YsT0FBTyxJQUFHQyxTQUFTVyxVQUFVO1lBQzNCVCxZQUFZO2dCQUNWRjtnQkFDQVc7WUFDRjtRQUNGLE9BQU8sSUFBRzZFLFNBQVM3RSxVQUFVO1lBQzNCVCxZQUFZO2dCQUNWUztnQkFDQTZFO1lBQ0Y7UUFDRixPQUFPO1lBQ0wsTUFBTSxJQUFJL0IsTUFBTTtRQUNsQjtRQUVBLE1BQU1rRixTQUFTMUosa0JBQWtCK0I7UUFDakMsTUFBTTRILG1CQUFtQkMsS0FBS0MsR0FBRyxDQUFDLEdBQUdDLE9BQU9sRSxXQUFXOEQsT0FBT0ssR0FBRyxFQUFFM0gsU0FBUzRILGNBQWM7UUFDMUYsTUFBTUMsOEJBQThCO1lBQ2xDckUsU0FBUztnQkFDUFIsTUFBTTtnQkFDTjVELE9BQU9tSTtZQUNUO1lBQ0FoSixNQUFNO2dCQUNKeUUsTUFBTTtnQkFDTjVELE9BQU9QO1lBQ1Q7UUFDRjtRQUVBLE1BQU1vRSxZQUFZLE9BQU9DLE9BQXVCLENBQUMsQ0FBQztZQUNoRCxNQUFNQyxRQUFTRCxNQUFjQztZQUM3QixNQUFNNEIsY0FBY3JILGlCQUFpQnlGLE9BQU9pRSxVQUFVLENBQUM7WUFDdkQsTUFBTVUsZ0JBQWdCLE1BQU1wSSxrQkFBa0JDLE1BQU1vRjtZQUNwRCxPQUFPO2dCQUNML0UsU0FBUzhIO2dCQUNUOUUsTUFBTWhHLGVBQWUrSyxlQUFlO1lBQ3RDO1FBQ0Y7UUFFQSxNQUFNQyxnQkFBZ0IsT0FBT2pGO1lBQzNCLE1BQU1rRixnQkFBZ0IsTUFBTTlLLGVBQzFCd0MsTUFDQSxVQUNBMUIsV0FDQThFLGdCQUNBO2dCQUFDO2dCQUFXO2dCQUFVO2dCQUFTO2dCQUFVO2FBQVcsRUFDcEQ7Z0JBQUNFO1lBQVM7WUFFWixNQUFNaUYsY0FBYyxNQUFNeEksa0JBQWtCQyxNQUFNRyxrQkFBa0JtSTtZQUVwRSxJQUFJO2dCQUNGLE1BQU1FLGtCQUFrQixNQUFNbkksUUFBUTtvQkFBQztvQkFBVTtvQkFBYTtvQkFBYztpQkFBVyxFQUFFOEM7Z0JBQ3pGLE1BQU05RSx5QkFBeUIyQixNQUFNSixPQUFPLEFBQUM0SSxpQkFBeUIvQyxhQUFhO1lBQ3JGLEVBQUUsT0FBTXBFLE9BQU87Z0JBQ2IsTUFBTW9ILGtCQUFrQixNQUFNMUksa0JBQWtCQyxNQUFNdUk7Z0JBQ3RELE1BQU12SSxLQUFLeUQsUUFBUSxDQUFDO29CQUNsQnBELFNBQVNvSTtvQkFDVHBGLE1BQU1oRyxlQUFlK0ssZUFBZTtnQkFDdEM7Z0JBQ0EsT0FBT0s7WUFDVDtZQUVBLE1BQU1DLGVBQWUsTUFBTTNJLGtCQUN6QkMsTUFDQ0EsS0FBS0UsUUFBUSxDQUFDLGdCQUFnQnFJLGdCQUFnQkE7WUFFakQsTUFBTXZJLEtBQUt5RCxRQUFRLENBQUM7Z0JBQ2xCcEQsU0FBU3FJO2dCQUNUckYsTUFBTWhHLGVBQWUrSyxlQUFlO1lBQ3RDO1lBQ0EsT0FBT007UUFDVDtRQUVBLElBQUk7WUFDRixPQUFPLE1BQU1MLGNBQWNIO1FBQzdCLEVBQUUsT0FBTTdHLE9BQU87WUFDYnJCLEtBQUt5RCxRQUFRLENBQUM7Z0JBQUNwQztnQkFBT2dDLE1BQU1oRyxlQUFlc0wsYUFBYTtZQUFBO1lBQ3hELE1BQU10SDtRQUNSLFNBQVU7WUFDUixNQUFNMkIsdUJBQXVCcEQsT0FBTyxBQUFDaEIsTUFBY0UsVUFBVTtRQUMvRDtJQUNGO0lBRUEsTUFBTThKLFVBQVUsT0FBT3pGLGlCQUF1QyxDQUFDLENBQUM7UUFDOUQsTUFBTXhGLHNCQUFzQnFDO1FBQzVCLE1BQU1BLEtBQUt5RCxRQUFRLENBQUM7WUFBQ3BELFNBQVMsQ0FBQztZQUFHZ0QsTUFBTWhHLGVBQWV3TCxnQkFBZ0I7UUFBQTtRQUN2RSxNQUFNN0Y7UUFDTixPQUFPO0lBQ1Q7SUFFQSxNQUFNOEYsZ0JBQWdCLE9BQU9oRSxNQUFjekIsTUFBeUJGLGlCQUF1QyxDQUFDLENBQUMsR0FDM0c7SUFFRixNQUFNNEYsaUJBQWlCLE9BQU9oSyxVQUFrQm9FLGlCQUF1QyxDQUFDLENBQUM7UUFDdkYsTUFBTUMsaUJBQWlCO1lBQ3JCeEUsTUFBTTtnQkFDSnlFLE1BQU07Z0JBQ041RCxPQUFPO29CQUNMVCxPQUFPRDtvQkFDUHlGLE9BQU96RjtvQkFDUEE7Z0JBQ0Y7WUFDRjtRQUNGO1FBRUEsTUFBTXVFLFlBQVksQ0FBQ0M7WUFDakIsTUFBTXlGLFVBQVUsQ0FBQyxDQUFDekYsTUFBTUMsT0FBT3VGO1lBQy9CLE9BQU8vSSxLQUFLeUQsUUFBUSxDQUFDO2dCQUNuQkosTUFBTTJGLFVBQVUzTCxlQUFlNEwsdUJBQXVCLEdBQUc1TCxlQUFlNkwscUJBQXFCO1lBQy9GO1FBQ0Y7UUFFQSxPQUFPMUwsZUFBbUN3QyxNQUFNLGtCQUFrQjFCLFdBQVc4RSxnQkFBZ0IsRUFBRSxFQUFFO1lBQUNFO1FBQVMsR0FBRzZGLElBQUksQ0FBQyxDQUFDNUY7WUFDbEgsTUFBTXlGLFVBQVUsQ0FBQyxDQUFDekYsTUFBTUMsT0FBT3VGO1lBQy9CLElBQUcsQ0FBQ0MsU0FBUztnQkFDWCxNQUFNLElBQUl2RyxNQUFNO1lBQ2xCO1lBQ0EsT0FBTztRQUNUO0lBQ0Y7SUFFQSxNQUFNMkcsd0JBQXdCLE9BQzVCcEssT0FDQXFLLGVBQXlDLENBQUMsQ0FBQyxFQUMzQ2xHLGlCQUF1QyxDQUFDLENBQUM7UUFFekMsTUFBTUMsaUJBQWlCO1lBQ3JCeEUsTUFBTTtnQkFDSnlFLE1BQU07Z0JBQ041RCxPQUFPO29CQUNMVDtvQkFDQSxHQUFJcUssYUFBYUMsT0FBTyxHQUFHO3dCQUFDQywwQkFBMEJGLGFBQWFDLE9BQU87b0JBQUEsSUFBSSxDQUFDLENBQUM7b0JBQ2hGLEdBQUlELGFBQWFHLFFBQVEsR0FBRzt3QkFBQ0MsMkJBQTJCSixhQUFhRyxRQUFRO29CQUFBLElBQUksQ0FBQyxDQUFDO29CQUNuRixHQUFJSCxhQUFhSyxJQUFJLEdBQUc7d0JBQUNDLHVCQUF1Qk4sYUFBYUssSUFBSTtvQkFBQSxJQUFJLENBQUMsQ0FBQztnQkFDekU7WUFDRjtRQUNGO1FBRUEsTUFBTXBHLFlBQVksQ0FBQ0M7WUFDakIsTUFBTXlGLFVBQVUsQ0FBQyxDQUFDekYsTUFBTUMsT0FBTzRGO1lBQy9CLE9BQU9wSixLQUFLeUQsUUFBUSxDQUFDO2dCQUNuQkosTUFBTTJGLFVBQVUzTCxlQUFlMkgsdUJBQXVCLEdBQUczSCxlQUFldU0scUJBQXFCO1lBQy9GO1FBQ0Y7UUFFQSxPQUFPcE0sZUFDTHdDLE1BQ0EseUJBQ0ExQixXQUNBOEUsZ0JBQ0EsRUFBRSxFQUNGO1lBQUNFO1FBQVMsR0FDVjZGLElBQUksQ0FBQyxDQUFDNUY7WUFDTixNQUFNeUYsVUFBVSxDQUFDLENBQUN6RixNQUFNQyxPQUFPNEY7WUFDL0IsSUFBRyxDQUFDSixTQUFTO2dCQUNYLE1BQU0sSUFBSXZHLE1BQU07WUFDbEI7WUFDQSxPQUFPO1FBQ1Q7SUFDRjtJQUVBLE1BQU1vSCxnQkFBZ0IsT0FDcEI5SyxVQUNBWSxVQUNBbUYsTUFDQXpCLE1BQ0FGLGlCQUF1QyxDQUFDLENBQUM7UUFFekMsTUFBTUMsaUJBQWlCO1lBQ3JCMEIsTUFBTTtnQkFDSnpCLE1BQU07Z0JBQ041RCxPQUFPcUY7WUFDVDtZQUNBbEcsTUFBTTtnQkFDSnlFLE1BQU07Z0JBQ041RCxPQUFPO29CQUNMLEdBQUk0RCxTQUFTLFVBQVU7d0JBQUNyRSxPQUFPRDtvQkFBUSxJQUFJO3dCQUFDeUYsT0FBT3pGO29CQUFRLENBQUM7b0JBQzVEWTtvQkFDQVo7Z0JBQ0Y7WUFDRjtRQUNGO1FBRUEsTUFBTXVFLFlBQVksQ0FBQ0M7WUFDakIsTUFBTXlGLFVBQVUsQ0FBQyxDQUFDekYsTUFBTUMsT0FBT3FHO1lBQy9CLE9BQU83SixLQUFLeUQsUUFBUSxDQUFDO2dCQUNuQkosTUFBTTJGLFVBQVUzTCxlQUFleU0sc0JBQXNCLEdBQUd6TSxlQUFlME0sb0JBQW9CO1lBQzdGO1FBQ0Y7UUFFQSxPQUFPdk0sZUFBbUN3QyxNQUFNLGlCQUFpQjFCLFdBQVc4RSxnQkFBZ0IsRUFBRSxFQUFFO1lBQUNFO1FBQVMsR0FBRzZGLElBQUksQ0FBQyxDQUFDNUY7WUFDakgsTUFBTXlGLFVBQVUsQ0FBQyxDQUFDekYsTUFBTUMsT0FBT3FHO1lBQy9CLElBQUcsQ0FBQ2IsU0FBUztnQkFDWCxNQUFNLElBQUl2RyxNQUFNO1lBQ2xCO1lBQ0EsT0FBTztRQUNUO0lBQ0Y7SUFFQSxNQUFNdUgsaUJBQWlCLE9BQU9ySyxVQUFrQnNLLGFBQXFCOUcsaUJBQXVDLENBQUMsQ0FBQyxHQUM1RztJQUdGLE9BQU87UUFDTEY7UUFDQTRCO1FBQ0FpRTtRQUNBekI7UUFDQUM7UUFDQW5CO1FBQ0FyRjtRQUNBaUk7UUFDQWxMO1FBQ0E2SDtRQUNBa0I7UUFDQUg7UUFDQUk7UUFDQUc7UUFDQXZKLGdCQUFnQjhKO1FBQ2hCdEM7UUFDQTRFO1FBQ0E3RDtRQUNBbUI7UUFDQWlDO1FBQ0EvSTtRQUNBb0g7UUFDQW1CO1FBQ0FoRjtRQUNBb0c7UUFDQWhHO1FBQ0FvQztRQUNBOEQsbUJBQW1CdkgsU0FBU3dILGFBQWE7UUFDekNDLDBCQUEwQnpILFNBQVMwSCxhQUFhO0lBQ2xEO0FBQ0YsRUFBRSJ9
|