-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathfunction.yaml
128 lines (128 loc) · 24.7 KB
/
function.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
kind: job
metadata:
name: model-monitoring-batch
tag: ''
hash: 0a07259a35b487d80169a53e31ce0c62dc288c2c
project: ''
categories:
- monitoring
spec:
command: ''
args: []
image: mlrun/mlrun
env: []
default_handler: handler
entry_points:
compute:
name: compute
doc: ''
parameters:
- name: self
default: ''
- name: capping
default: null
- name: kld_scaling
default: 0.0001
outputs:
- default: ''
type: float
lineno: 64
dict_to_histogram:
name: dict_to_histogram
doc: ''
parameters:
- name: self
default: ''
- name: histogram_dict
default: ''
outputs:
- default: ''
lineno: 112
compute_metrics_over_df:
name: compute_metrics_over_df
doc: ''
parameters:
- name: self
default: ''
- name: base_histogram
default: ''
- name: latest_histogram
default: ''
outputs:
- default: ''
lineno: 129
compute_drift_from_histograms:
name: compute_drift_from_histograms
doc: ''
parameters:
- name: self
default: ''
- name: feature_stats
default: ''
- name: current_stats
default: ''
outputs:
- default: ''
lineno: 140
post_init:
name: post_init
doc: ''
parameters:
- name: self
default: ''
outputs:
- default: ''
lineno: 283
run:
name: run
doc: ''
parameters:
- name: self
default: ''
outputs:
- default: ''
lineno: 295
check_for_drift:
name: check_for_drift
doc: ''
parameters:
- name: self
default: ''
- name: drift_result
default: ''
- name: endpoint
default: ''
outputs:
- default: ''
lineno: 421
get_last_created_dir:
name: get_last_created_dir
doc: ''
parameters:
- name: fs
default: ''
- name: endpoint_dir
default: ''
outputs:
- default: ''
lineno: 447
handler:
name: handler
doc: ''
parameters:
- name: context
type: MLClientCtx
default: ''
outputs:
- default: ''
lineno: 453
description: ''
build:
functionSourceCode: aW1wb3J0IGpzb24KaW1wb3J0IG9zCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CmZyb20gZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcwpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwsIExpc3QsIERpY3QKCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgcGFuZGFzIGFzIHBkCmltcG9ydCB2M2lvCmZyb20gbWxydW4gaW1wb3J0IGdldF9ydW5fZGIKZnJvbSBtbHJ1biBpbXBvcnQgc3RvcmVfbWFuYWdlcgpmcm9tIG1scnVuLmRhdGFfdHlwZXMuaW5mZXIgaW1wb3J0IERGRGF0YUluZmVyLCBJbmZlck9wdGlvbnMKZnJvbSBtbHJ1bi5ydW4gaW1wb3J0IE1MQ2xpZW50Q3R4CmZyb20gbWxydW4udXRpbHMgaW1wb3J0IGxvZ2dlciwgY29uZmlnCmZyb20gbWxydW4udXRpbHMubW9kZWxfbW9uaXRvcmluZyBpbXBvcnQgRW5kcG9pbnRUeXBlLCBwYXJzZV9tb2RlbF9lbmRwb2ludF9zdG9yZV9wcmVmaXgKZnJvbSBtbHJ1bi51dGlscy52M2lvX2NsaWVudHMgaW1wb3J0IGdldF92M2lvX2NsaWVudCwgZ2V0X2ZyYW1lc19jbGllbnQKZnJvbSBza2xlYXJuLnByZXByb2Nlc3NpbmcgaW1wb3J0IEtCaW5zRGlzY3JldGl6ZXIKClRJTUVfRk9STUFUID0gIiVZLSVtLSVkICVIOiVNOiVTLiVmJXoiCgoKQGRhdGFjbGFzcwpjbGFzcyBUb3RhbFZhcmlhbmNlRGlzdGFuY2U6CiAgICAiIiIKICAgIFByb3ZpZGVzIGEgc3ltbWV0cmljIGRyaWZ0IGRpc3RhbmNlIGJldHdlZW4gdHdvIHBlcmlvZHMgdCBhbmQgdQogICAgWiAtIHZlY3RvciBvZiByYW5kb20gdmFyaWFibGVzCiAgICBQdCAtIFByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBvdmVyIHRpbWUgc3BhbiB0CiAgICAiIiIKCiAgICBkaXN0cmliX3Q6IG5wLm5kYXJyYXkKICAgIGRpc3RyaWJfdTogbnAubmRhcnJheQoKICAgIGRlZiBjb21wdXRlKHNlbGYpIC0+IGZsb2F0OgogICAgICAgIHJldHVybiBucC5zdW0obnAuYWJzKHNlbGYuZGlzdHJpYl90IC0gc2VsZi5kaXN0cmliX3UpKSAvIDIKCgpAZGF0YWNsYXNzCmNsYXNzIEhlbGxpbmdlckRpc3RhbmNlOgogICAgIiIiCiAgICBIZWxsaW5nZXIgZGlzdGFuY2UgaXMgYW4gZiBkaXZlcmdlbmNlIG1lYXN1cmUsIHNpbWlsYXIgdG8gdGhlIEt1bGxiYWNrLUxlaWJsZXIgKEtMKSBkaXZlcmdlbmNlLgogICAgSG93ZXZlciwgdW5saWtlIEtMIERpdmVyZ2VuY2UgdGhlIEhlbGxpbmdlciBkaXZlcmdlbmNlIGlzIHN5bW1ldHJpYyBhbmQgYm91bmRlZCBvdmVyIGEgcHJvYmFiaWxpdHkgc3BhY2UuCiAgICAiIiIKCiAgICBkaXN0cmliX3Q6IG5wLm5kYXJyYXkKICAgIGRpc3RyaWJfdTogbnAubmRhcnJheQoKICAgIGRlZiBjb21wdXRlKHNlbGYpIC0+IGZsb2F0OgogICAgICAgIHJldHVybiBucC5zcXJ0KAogICAgICAgICAgICAwLjUgKiAoKG5wLnNxcnQoc2VsZi5kaXN0cmliX3UpIC0gbnAuc3FydChzZWxmLmRpc3RyaWJfdCkpICoqIDIpLnN1bSgpCiAgICAgICAgKQoKCkBkYXRhY2xhc3MKY2xhc3MgS3VsbGJhY2tMZWlibGVyRGl2ZXJnZW5jZToKICAgICIiIgogICAgS0wgRGl2ZXJnZW5jZSAob3IgcmVsYXRpdmUgZW50cm9weSkgaXMgYSBtZWFzdXJlIG9mIGhvdyBvbmUgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIGRpZmZlcnMgZnJvbSBhbm90aGVyLgogICAgSXQgaXMgYW4gYXN5bW1ldHJpYyBtZWFzdXJlICh0aHVzIGl0J3Mgbm90IGEgbWV0cmljKSBhbmQgaXQgZG9lc24ndCBzYXRpc2Z5IHRoZSB0cmlhbmdsZSBpbmVxdWFsaXR5LgogICAgS0wgRGl2ZXJnZW5jZSBvZiAwLCBpbmRpY2F0ZXMgdHdvIGlkZW50aWNhbCBkaXN0cmlidXRpb25zLgogICAgIiIiCgogICAgZGlzdHJpYl90OiBucC5uZGFycmF5CiAgICBkaXN0cmliX3U6IG5wLm5kYXJyYXkKCiAgICBkZWYgY29tcHV0ZShzZWxmLCBjYXBwaW5nPU5vbmUsIGtsZF9zY2FsaW5nPTAuMDAwMSkgLT4gZmxvYXQ6CiAgICAgICAgdF91ID0gbnAuc3VtKAogICAgICAgICAgICBucC53aGVyZSgKICAgICAgICAgICAgICAgIHNlbGYuZGlzdHJpYl90ICE9IDAsCiAgICAgICAgICAgICAgICAoc2VsZi5kaXN0cmliX3QpCiAgICAgICAgICAgICAgICAqIG5wLmxvZygKICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3RyaWJfdAogICAgICAgICAgICAgICAgICAgIC8gbnAud2hlcmUoc2VsZi5kaXN0cmliX3UgIT0gMCwgc2VsZi5kaXN0cmliX3UsIGtsZF9zY2FsaW5nKQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICkKICAgICAgICApCiAgICAgICAgdV90ID0gbnAuc3VtKAogICAgICAgICAgICBucC53aGVyZSgKICAgICAgICAgICAgICAgIHNlbGYuZGlzdHJpYl91ICE9IDAsCiAgICAgICAgICAgICAgICAoc2VsZi5kaXN0cmliX3UpCiAgICAgICAgICAgICAgICAqIG5wLmxvZygKICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3RyaWJfdQogICAgICAgICAgICAgICAgICAgIC8gbnAud2hlcmUoc2VsZi5kaXN0cmliX3QgIT0gMCwgc2VsZi5kaXN0cmliX3QsIGtsZF9zY2FsaW5nKQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICkKICAgICAgICApCiAgICAgICAgcmVzdWx0ID0gdF91ICsgdV90CiAgICAgICAgaWYgY2FwcGluZzoKICAgICAgICAgICAgcmV0dXJuIGNhcHBpbmcgaWYgcmVzdWx0ID09IGZsb2F0KCJpbmYiKSBlbHNlIHJlc3VsdAogICAgICAgIHJldHVybiByZXN1bHQKCgpjbGFzcyBWaXJ0dWFsRHJpZnQ6CiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwKICAgICAgICBwcmVkaWN0aW9uX2NvbDogT3B0aW9uYWxbc3RyXSA9IE5vbmUsCiAgICAgICAgbGFiZWxfY29sOiBPcHRpb25hbFtzdHJdID0gTm9uZSwKICAgICAgICBmZWF0dXJlX3dlaWdodHM6IE9wdGlvbmFsW0xpc3RbZmxvYXRdXSA9IE5vbmUsCiAgICAgICAgaW5mX2NhcHBpbmc6IE9wdGlvbmFsW2Zsb2F0XSA9IDEwLAogICAgKToKICAgICAgICBzZWxmLnByZWRpY3Rpb25fY29sID0gcHJlZGljdGlvbl9jb2wKICAgICAgICBzZWxmLmxhYmVsX2NvbCA9IGxhYmVsX2NvbAogICAgICAgIHNlbGYuZmVhdHVyZV93ZWlnaHRzID0gZmVhdHVyZV93ZWlnaHRzCiAgICAgICAgc2VsZi5jYXBwaW5nID0gaW5mX2NhcHBpbmcKICAgICAgICBzZWxmLmRpc2NyZXRpemVyczogRGljdFtzdHIsIEtCaW5zRGlzY3JldGl6ZXJdID0ge30KICAgICAgICBzZWxmLm1ldHJpY3MgPSB7CiAgICAgICAgICAgICJ0dmQiOiBUb3RhbFZhcmlhbmNlRGlzdGFuY2UsCiAgICAgICAgICAgICJoZWxsaW5nZXIiOiBIZWxsaW5nZXJEaXN0YW5jZSwKICAgICAgICAgICAgImtsZCI6IEt1bGxiYWNrTGVpYmxlckRpdmVyZ2VuY2UsCiAgICAgICAgfQoKICAgIGRlZiBkaWN0X3RvX2hpc3RvZ3JhbShzZWxmLCBoaXN0b2dyYW1fZGljdCk6CiAgICAgICAgaGlzdG9ncmFtcyA9IHt9CiAgICAgICAgZm9yIGZlYXR1cmUsIHN0YXRzIGluIGhpc3RvZ3JhbV9kaWN0Lml0ZW1zKCk6CiAgICAgICAgICAgIGhpc3RvZ3JhbXNbZmVhdHVyZV0gPSBzdGF0c1siaGlzdCJdWzBdCgogICAgICAgICMgR2V0IGZlYXR1cmVzIHZhbHVlIGNvdW50cwogICAgICAgIGhpc3RvZ3JhbXMgPSBwZC5jb25jYXQoCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIHBkLkRhdGFGcmFtZShkYXRhPWhpc3QsIGNvbHVtbnM9W2ZlYXR1cmVdKQogICAgICAgICAgICAgICAgZm9yIGZlYXR1cmUsIGhpc3QgaW4gaGlzdG9ncmFtcy5pdGVtcygpCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGF4aXM9MSwKICAgICAgICApCiAgICAgICAgIyBUbyBEaXN0cmlidXRpb24KICAgICAgICBoaXN0b2dyYW1zID0gaGlzdG9ncmFtcyAvIGhpc3RvZ3JhbXMuc3VtKCkKICAgICAgICByZXR1cm4gaGlzdG9ncmFtcwoKICAgIGRlZiBjb21wdXRlX21ldHJpY3Nfb3Zlcl9kZihzZWxmLCBiYXNlX2hpc3RvZ3JhbSwgbGF0ZXN0X2hpc3RvZ3JhbSk6CiAgICAgICAgZHJpZnRfbWVhc3VyZXMgPSB7fQogICAgICAgIGZvciBtZXRyaWNfbmFtZSwgbWV0cmljIGluIHNlbGYubWV0cmljcy5pdGVtcygpOgogICAgICAgICAgICBkcmlmdF9tZWFzdXJlc1ttZXRyaWNfbmFtZV0gPSB7CiAgICAgICAgICAgICAgICBmZWF0dXJlOiBtZXRyaWMoCiAgICAgICAgICAgICAgICAgICAgYmFzZV9oaXN0b2dyYW0ubG9jWzosIGZlYXR1cmVdLCBsYXRlc3RfaGlzdG9ncmFtLmxvY1s6LCBmZWF0dXJlXQogICAgICAgICAgICAgICAgKS5jb21wdXRlKCkKICAgICAgICAgICAgICAgIGZvciBmZWF0dXJlIGluIGJhc2VfaGlzdG9ncmFtCiAgICAgICAgICAgIH0KICAgICAgICByZXR1cm4gZHJpZnRfbWVhc3VyZXMKCiAgICBkZWYgY29tcHV0ZV9kcmlmdF9mcm9tX2hpc3RvZ3JhbXMoc2VsZiwgZmVhdHVyZV9zdGF0cywgY3VycmVudF9zdGF0cyk6CiAgICAgICAgIyBQcm9jZXNzIGhpc3RvZ3JhbSBkaWN0aW9uYXJpZXMgdG8gRGF0YWZyYW1lIG9mIHRoZSBoaXN0b2dyYW1zCiAgICAgICAgIyB3aXRoIEZlYXR1cmUgaGlzdG9ncmFtIGFzIGNvbHMKICAgICAgICBiYXNlX2hpc3RvZ3JhbSA9IHNlbGYuZGljdF90b19oaXN0b2dyYW0oZmVhdHVyZV9zdGF0cykKICAgICAgICBsYXRlc3RfaGlzdG9ncmFtID0gc2VsZi5kaWN0X3RvX2hpc3RvZ3JhbShjdXJyZW50X3N0YXRzKQoKICAgICAgICAjIFZlcmlmeSBhbGwgdGhlIGZlYXR1cmVzIGV4aXN0IGJldHdlZW4gZGF0YXNldHMKICAgICAgICBiYXNlX2ZlYXR1cmVzID0gc2V0KGJhc2VfaGlzdG9ncmFtLmNvbHVtbnMpCiAgICAgICAgbGF0ZXN0X2ZlYXR1cmVzID0gc2V0KGxhdGVzdF9oaXN0b2dyYW0uY29sdW1ucykKCiAgICAgICAgZmVhdHVyZXNfY29tbW9uID0gbGlzdChiYXNlX2ZlYXR1cmVzLmludGVyc2VjdGlvbihsYXRlc3RfZmVhdHVyZXMpKQogICAgICAgIGZlYXR1cmVfZGlmZmVyZW5jZSA9IGxpc3QoYmFzZV9mZWF0dXJlcyBeIGxhdGVzdF9mZWF0dXJlcykKCiAgICAgICAgaWYgbm90IGZlYXR1cmVzX2NvbW1vbjoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgIGYiTm8gY29tbW9uIGZlYXR1cmVzIGZvdW5kOiB7YmFzZV9mZWF0dXJlc30gPD4ge2xhdGVzdF9mZWF0dXJlc30iCiAgICAgICAgICAgICkKCiAgICAgICAgYmFzZV9oaXN0b2dyYW0gPSBiYXNlX2hpc3RvZ3JhbS5kcm9wKAogICAgICAgICAgICBmZWF0dXJlX2RpZmZlcmVuY2UsIGF4aXM9MSwgZXJyb3JzPSJpZ25vcmUiCiAgICAgICAgKQogICAgICAgIGxhdGVzdF9oaXN0b2dyYW0gPSBsYXRlc3RfaGlzdG9ncmFtLmRyb3AoCiAgICAgICAgICAgIGZlYXR1cmVfZGlmZmVyZW5jZSwgYXhpcz0xLCBlcnJvcnM9Imlnbm9yZSIKICAgICAgICApCgogICAgICAgICMgQ29tcHV0ZSB0aGUgZHJpZnQgcGVyIGZlYXR1cmUKICAgICAgICBmZWF0dXJlc19kcmlmdF9tZWFzdXJlcyA9IHNlbGYuY29tcHV0ZV9tZXRyaWNzX292ZXJfZGYoCiAgICAgICAgICAgIGJhc2VfaGlzdG9ncmFtLmxvY1s6LCBmZWF0dXJlc19jb21tb25dLAogICAgICAgICAgICBsYXRlc3RfaGlzdG9ncmFtLmxvY1s6LCBmZWF0dXJlc19jb21tb25dLAogICAgICAgICkKCiAgICAgICAgIyBDb21wdXRlIHRvdGFsIGRyaWZ0IG1lYXN1cmVzIGZvciBmZWF0dXJlcwogICAgICAgIGZvciBtZXRyaWNfbmFtZSBpbiBzZWxmLm1ldHJpY3Mua2V5cygpOgogICAgICAgICAgICBmZWF0dXJlX3ZhbHVlcyA9IGxpc3QoZmVhdHVyZXNfZHJpZnRfbWVhc3VyZXNbbWV0cmljX25hbWVdLnZhbHVlcygpKQogICAgICAgICAgICBmZWF0dXJlc19kcmlmdF9tZWFzdXJlc1ttZXRyaWNfbmFtZV1bInRvdGFsX3N1bSJdID0gbnAuc3VtKGZlYXR1cmVfdmFsdWVzKQogICAgICAgICAgICBmZWF0dXJlc19kcmlmdF9tZWFzdXJlc1ttZXRyaWNfbmFtZV1bInRvdGFsX21lYW4iXSA9IG5wLm1lYW4oZmVhdHVyZV92YWx1ZXMpCgogICAgICAgICAgICAjIEFkZCB3ZWlnaHRlZCBtZWFuIGJ5IGdpdmVuIGZlYXR1cmUgd2VpZ2h0cyBpZiBwcm92aWRlZAogICAgICAgICAgICBpZiBzZWxmLmZlYXR1cmVfd2VpZ2h0czoKICAgICAgICAgICAgICAgIGZlYXR1cmVzX2RyaWZ0X21lYXN1cmVzW21ldHJpY19uYW1lXVsidG90YWxfd2VpZ2h0ZWRfbWVhbiJdID0gbnAuZG90KAogICAgICAgICAgICAgICAgICAgIGZlYXR1cmVfdmFsdWVzLCBzZWxmLmZlYXR1cmVfd2VpZ2h0cwogICAgICAgICAgICAgICAgKQoKICAgICAgICBkcmlmdF9yZXN1bHQgPSBkZWZhdWx0ZGljdChkaWN0KQoKICAgICAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlc19jb21tb246CiAgICAgICAgICAgIGZvciBtZXRyaWMsIHZhbHVlcyBpbiBmZWF0dXJlc19kcmlmdF9tZWFzdXJlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgZHJpZnRfcmVzdWx0W2ZlYXR1cmVdW21ldHJpY10gPSB2YWx1ZXNbZmVhdHVyZV0KICAgICAgICAgICAgICAgIHN1bSA9IGZlYXR1cmVzX2RyaWZ0X21lYXN1cmVzW21ldHJpY11bInRvdGFsX3N1bSJdCiAgICAgICAgICAgICAgICBtZWFuID0gZmVhdHVyZXNfZHJpZnRfbWVhc3VyZXNbbWV0cmljXVsidG90YWxfbWVhbiJdCiAgICAgICAgICAgICAgICBkcmlmdF9yZXN1bHRbZiJ7bWV0cmljfV9zdW0iXSA9IHN1bQogICAgICAgICAgICAgICAgZHJpZnRfcmVzdWx0W2Yie21ldHJpY31fbWVhbiJdID0gbWVhbgogICAgICAgICAgICAgICAgaWYgc2VsZi5mZWF0dXJlX3dlaWdodHM6CiAgICAgICAgICAgICAgICAgICAgbWV0cmljX21lYXN1cmUgPSBmZWF0dXJlc19kcmlmdF9tZWFzdXJlc1ttZXRyaWNdCiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ZWRfbWVhbiA9IG1ldHJpY19tZWFzdXJlWyJ0b3RhbF93ZWlnaHRlZF9tZWFuIl0KICAgICAgICAgICAgICAgICAgICBkcmlmdF9yZXN1bHRbZiJ7bWV0cmljfV93ZWlnaHRlZF9tZWFuIl0gPSB3ZWlnaHRlZF9tZWFuCgogICAgICAgIGlmIHNlbGYubGFiZWxfY29sOgogICAgICAgICAgICBsYWJlbF9kcmlmdF9tZWFzdXJlcyA9IHNlbGYuY29tcHV0ZV9tZXRyaWNzX292ZXJfZGYoCiAgICAgICAgICAgICAgICBiYXNlX2hpc3RvZ3JhbS5sb2NbOiwgc2VsZi5sYWJlbF9jb2xdLAogICAgICAgICAgICAgICAgbGF0ZXN0X2hpc3RvZ3JhbS5sb2NbOiwgc2VsZi5sYWJlbF9jb2xdLAogICAgICAgICAgICApCiAgICAgICAgICAgIGZvciBtZXRyaWMsIHZhbHVlcyBpbiBsYWJlbF9kcmlmdF9tZWFzdXJlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgZHJpZnRfcmVzdWx0W3NlbGYubGFiZWxfY29sXVttZXRyaWNdID0gdmFsdWVzW21ldHJpY10KCiAgICAgICAgaWYgc2VsZi5wcmVkaWN0aW9uX2NvbDoKICAgICAgICAgICAgcHJlZGljdGlvbl9kcmlmdF9tZWFzdXJlcyA9IHNlbGYuY29tcHV0ZV9tZXRyaWNzX292ZXJfZGYoCiAgICAgICAgICAgICAgICBiYXNlX2hpc3RvZ3JhbS5sb2NbOiwgc2VsZi5wcmVkaWN0aW9uX2NvbF0sCiAgICAgICAgICAgICAgICBsYXRlc3RfaGlzdG9ncmFtLmxvY1s6LCBzZWxmLnByZWRpY3Rpb25fY29sXSwKICAgICAgICAgICAgKQogICAgICAgICAgICBmb3IgbWV0cmljLCB2YWx1ZXMgaW4gcHJlZGljdGlvbl9kcmlmdF9tZWFzdXJlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgZHJpZnRfcmVzdWx0W3NlbGYucHJlZGljdGlvbl9jb2xdW21ldHJpY10gPSB2YWx1ZXNbbWV0cmljXQoKICAgICAgICByZXR1cm4gZHJpZnRfcmVzdWx0CgoKY2xhc3MgQmF0Y2hQcm9jZXNzb3I6CiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwKICAgICAgICBjb250ZXh0OiBNTENsaWVudEN0eCwKICAgICAgICBwcm9qZWN0OiBzdHIsCiAgICAgICAgbW9kZWxfbW9uaXRvcmluZ19hY2Nlc3Nfa2V5OiBzdHIsCiAgICAgICAgdjNpb19hY2Nlc3Nfa2V5OiBzdHIsCiAgICApOgogICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICBzZWxmLnByb2plY3QgPSBwcm9qZWN0CgogICAgICAgIHNlbGYudjNpb19hY2Nlc3Nfa2V5ID0gdjNpb19hY2Nlc3Nfa2V5CiAgICAgICAgc2VsZi5tb2RlbF9tb25pdG9yaW5nX2FjY2Vzc19rZXkgPSAoCiAgICAgICAgICAgICAgICBtb2RlbF9tb25pdG9yaW5nX2FjY2Vzc19rZXkgb3IgdjNpb19hY2Nlc3Nfa2V5CiAgICAgICAgKQoKICAgICAgICBzZWxmLnZpcnR1YWxfZHJpZnQgPSBWaXJ0dWFsRHJpZnQoaW5mX2NhcHBpbmc9MTApCgogICAgICAgIHRlbXBsYXRlID0gY29uZmlnLm1vZGVsX2VuZHBvaW50X21vbml0b3Jpbmcuc3RvcmVfcHJlZml4ZXMuZGVmYXVsdAoKICAgICAgICBrdl9wYXRoID0gdGVtcGxhdGUuZm9ybWF0KHByb2plY3Q9c2VsZi5wcm9qZWN0LCBraW5kPSJlbmRwb2ludHMiKQogICAgICAgIF8sIHNlbGYua3ZfY29udGFpbmVyLCBzZWxmLmt2X3BhdGggPSBwYXJzZV9tb2RlbF9lbmRwb2ludF9zdG9yZV9wcmVmaXgoa3ZfcGF0aCkKCiAgICAgICAgdHNkYl9wYXRoID0gdGVtcGxhdGUuZm9ybWF0KHByb2plY3Q9cHJvamVjdCwga2luZD0iZXZlbnRzIikKICAgICAgICBfLCBzZWxmLnRzZGJfY29udGFpbmVyLCBzZWxmLnRzZGJfcGF0aCA9IHBhcnNlX21vZGVsX2VuZHBvaW50X3N0b3JlX3ByZWZpeCgKICAgICAgICAgICAgdHNkYl9wYXRoCiAgICAgICAgKQoKICAgICAgICBzdHJlYW1fcGF0aCA9IHRlbXBsYXRlLmZvcm1hdChwcm9qZWN0PXNlbGYucHJvamVjdCwga2luZD0ibG9nX3N0cmVhbSIpCiAgICAgICAgXywgc2VsZi5zdHJlYW1fY29udGFpbmVyLCBzZWxmLnN0cmVhbV9wYXRoID0gcGFyc2VfbW9kZWxfZW5kcG9pbnRfc3RvcmVfcHJlZml4KAogICAgICAgICAgICBzdHJlYW1fcGF0aAogICAgICAgICkKCiAgICAgICAgc2VsZi5wYXJxdWV0X3BhdGggPSBjb25maWcubW9kZWxfZW5kcG9pbnRfbW9uaXRvcmluZy5zdG9yZV9wcmVmaXhlcy51c2VyX3NwYWNlLmZvcm1hdCgKICAgICAgICAgICAgcHJvamVjdD1wcm9qZWN0LCBraW5kPSJwYXJxdWV0IgogICAgICAgICkKCiAgICAgICAgbG9nZ2VyLmluZm8oCiAgICAgICAgICAgICJJbml0aWFsaXppbmcgQmF0Y2hQcm9jZXNzb3IiLAogICAgICAgICAgICBwcm9qZWN0PXByb2plY3QsCiAgICAgICAgICAgIG1vZGVsX21vbml0b3JpbmdfYWNjZXNzX2tleV9pbml0YWxpemVkPWJvb2wobW9kZWxfbW9uaXRvcmluZ19hY2Nlc3Nfa2V5KSwKICAgICAgICAgICAgdjNpb19hY2Nlc3Nfa2V5X2luaXRpYWxpemVkPWJvb2wodjNpb19hY2Nlc3Nfa2V5KSwKICAgICAgICAgICAgcGFycXVldF9wYXRoPXNlbGYucGFycXVldF9wYXRoLAogICAgICAgICAgICBrdl9jb250YWluZXI9c2VsZi5rdl9jb250YWluZXIsCiAgICAgICAgICAgIGt2X3BhdGg9c2VsZi5rdl9wYXRoLAogICAgICAgICAgICB0c2RiX2NvbnRhaW5lcj1zZWxmLnRzZGJfY29udGFpbmVyLAogICAgICAgICAgICB0c2RiX3BhdGg9c2VsZi50c2RiX3BhdGgsCiAgICAgICAgICAgIHN0cmVhbV9jb250YWluZXI9c2VsZi5zdHJlYW1fY29udGFpbmVyLAogICAgICAgICAgICBzdHJlYW1fcGF0aD1zZWxmLnN0cmVhbV9wYXRoLAogICAgICAgICkKCiAgICAgICAgc2VsZi5kZWZhdWx0X3Bvc3NpYmxlX2RyaWZ0X3RocmVzaG9sZCA9ICgKICAgICAgICAgICAgY29uZmlnLm1vZGVsX2VuZHBvaW50X21vbml0b3JpbmcuZHJpZnRfdGhyZXNob2xkcy5kZWZhdWx0LnBvc3NpYmxlX2RyaWZ0CiAgICAgICAgKQogICAgICAgIHNlbGYuZGVmYXVsdF9kcmlmdF9kZXRlY3RlZF90aHJlc2hvbGQgPSAoCiAgICAgICAgICAgIGNvbmZpZy5tb2RlbF9lbmRwb2ludF9tb25pdG9yaW5nLmRyaWZ0X3RocmVzaG9sZHMuZGVmYXVsdC5kcmlmdF9kZXRlY3RlZAogICAgICAgICkKCiAgICAgICAgc2VsZi5kYiA9IGdldF9ydW5fZGIoKQogICAgICAgIHNlbGYudjNpbyA9IGdldF92M2lvX2NsaWVudChhY2Nlc3Nfa2V5PXNlbGYudjNpb19hY2Nlc3Nfa2V5KQogICAgICAgIHNlbGYuZnJhbWVzID0gZ2V0X2ZyYW1lc19jbGllbnQoCiAgICAgICAgICAgIGFkZHJlc3M9Y29uZmlnLnYzaW9fZnJhbWVzZCwKICAgICAgICAgICAgY29udGFpbmVyPXNlbGYudHNkYl9jb250YWluZXIsCiAgICAgICAgICAgIHRva2VuPXNlbGYudjNpb19hY2Nlc3Nfa2V5LAogICAgICAgICkKICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IE5vbmUKCiAgICBkZWYgcG9zdF9pbml0KHNlbGYpOgogICAgICAgIHJlc3BvbnNlID0gc2VsZi52M2lvLmNyZWF0ZV9zdHJlYW0oCiAgICAgICAgICAgIGNvbnRhaW5lcj1zZWxmLnN0cmVhbV9jb250YWluZXIsCiAgICAgICAgICAgIHBhdGg9c2VsZi5zdHJlYW1fcGF0aCwKICAgICAgICAgICAgc2hhcmRfY291bnQ9MSwKICAgICAgICAgICAgcmFpc2VfZm9yX3N0YXR1cz12M2lvLmRhdGFwbGFuZS5SYWlzZUZvclN0YXR1cy5uZXZlciwKICAgICAgICAgICAgYWNjZXNzX2tleT1zZWxmLnYzaW9fYWNjZXNzX2tleSwKICAgICAgICApCgogICAgICAgIGlmIG5vdCAocmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gNDAwIGFuZCAiUmVzb3VyY2VJblVzZSIgaW4gc3RyKHJlc3BvbnNlLmJvZHkpKToKICAgICAgICAgICAgcmVzcG9uc2UucmFpc2VfZm9yX3N0YXR1cyhbNDA5LCAyMDQsIDQwM10pCgogICAgZGVmIHJ1bihzZWxmKToKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBlbmRwb2ludHMgPSBzZWxmLmRiLmxpc3RfbW9kZWxfZW5kcG9pbnRzKHNlbGYucHJvamVjdCkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIGxpc3QgZW5kcG9pbnRzIiwgZXhjPWUpCiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBhY3RpdmVfZW5kcG9pbnRzID0gc2V0KCkKICAgICAgICBmb3IgZW5kcG9pbnQgaW4gZW5kcG9pbnRzLmVuZHBvaW50czoKICAgICAgICAgICAgaWYgZW5kcG9pbnQuc3BlYy5hY3RpdmU6CiAgICAgICAgICAgICAgICBhY3RpdmVfZW5kcG9pbnRzLmFkZChlbmRwb2ludC5tZXRhZGF0YS51aWQpCgogICAgICAgIHN0b3JlLCBzdWIgPSBzdG9yZV9tYW5hZ2VyLmdldF9vcl9jcmVhdGVfc3RvcmUoc2VsZi5wYXJxdWV0X3BhdGgpCiAgICAgICAgcHJlZml4ID0gc2VsZi5wYXJxdWV0X3BhdGgucmVwbGFjZShzdWIsICIiKQogICAgICAgIGZzID0gc3RvcmUuZ2V0X2ZpbGVzeXN0ZW0oc2lsZW50PUZhbHNlKQoKICAgICAgICBpZiBub3QgZnMuZXhpc3RzKHN1Yik6CiAgICAgICAgICAgIGxvZ2dlci53YXJuKAogICAgICAgICAgICAgICAgZiJ7c3VifSBkb2VzIG5vdCBleGlzdCIKICAgICAgICAgICAgKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgZm9yIGVuZHBvaW50X2RpciBpbiBmcy5scyhzdWIpOgogICAgICAgICAgICBlbmRwb2ludF9pZCA9IGVuZHBvaW50X2RpclsibmFtZSJdLnNwbGl0KCI9IilbLTFdCiAgICAgICAgICAgIGlmIGVuZHBvaW50X2lkIG5vdCBpbiBhY3RpdmVfZW5kcG9pbnRzOgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGxhc3RfeWVhciA9IHNlbGYuZ2V0X2xhc3RfY3JlYXRlZF9kaXIoZnMsIGVuZHBvaW50X2RpcikKICAgICAgICAgICAgICAgIGxhc3RfbW9udGggPSBzZWxmLmdldF9sYXN0X2NyZWF0ZWRfZGlyKGZzLCBsYXN0X3llYXIpCiAgICAgICAgICAgICAgICBsYXN0X2RheSA9IHNlbGYuZ2V0X2xhc3RfY3JlYXRlZF9kaXIoZnMsIGxhc3RfbW9udGgpCiAgICAgICAgICAgICAgICBsYXN0X2hvdXIgPSBzZWxmLmdldF9sYXN0X2NyZWF0ZWRfZGlyKGZzLCBsYXN0X2RheSkKCiAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBmIntwcmVmaXh9e2xhc3RfaG91clsnbmFtZSddfSIKCiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhmIk5vdyBwcm9jZXNzaW5nIHtmdWxsX3BhdGh9IikKCiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHNlbGYuZGIuZ2V0X21vZGVsX2VuZHBvaW50KAogICAgICAgICAgICAgICAgICAgIHByb2plY3Q9c2VsZi5wcm9qZWN0LCBlbmRwb2ludF9pZD1lbmRwb2ludF9pZAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgIGlmIGVuZHBvaW50LnN0YXR1cy5lbmRwb2ludF90eXBlID09IEVuZHBvaW50VHlwZS5ST1VURVI6CiAgICAgICAgICAgICAgICAgICAgIyBlbmRwb2ludC5zdGF0dXMuZmVhdHVyZV9zdGF0cyBpcyBOb25lCiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oZiJ7ZW5kcG9pbnRfaWR9IGlzIHJvdXRlciBza2lwcGluZyIpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICBkZiA9IHBkLnJlYWRfcGFycXVldChmdWxsX3BhdGgpCiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBkZlsidGltZXN0YW1wIl0uaWxvY1stMV0KCiAgICAgICAgICAgICAgICBuYW1lZF9mZWF0dXJlc19kZiA9IGxpc3QoZGZbIm5hbWVkX2ZlYXR1cmVzIl0pCiAgICAgICAgICAgICAgICBuYW1lZF9mZWF0dXJlc19kZiA9IHBkLkRhdGFGcmFtZShuYW1lZF9mZWF0dXJlc19kZikKCiAgICAgICAgICAgICAgICBjdXJyZW50X3N0YXRzID0gREZEYXRhSW5mZXIuZ2V0X3N0YXRzKAogICAgICAgICAgICAgICAgICAgIGRmPW5hbWVkX2ZlYXR1cmVzX2RmLCBvcHRpb25zPUluZmVyT3B0aW9ucy5IaXN0b2dyYW0KICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICBkcmlmdF9yZXN1bHQgPSBzZWxmLnZpcnR1YWxfZHJpZnQuY29tcHV0ZV9kcmlmdF9mcm9tX2hpc3RvZ3JhbXMoCiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9zdGF0cz1lbmRwb2ludC5zdGF0dXMuZmVhdHVyZV9zdGF0cywKICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3N0YXRzPWN1cnJlbnRfc3RhdHMsCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkRyaWZ0IHJlc3VsdCIsIGRyaWZ0X3Jlc3VsdD1kcmlmdF9yZXN1bHQpCgogICAgICAgICAgICAgICAgZHJpZnRfc3RhdHVzLCBkcmlmdF9tZWFzdXJlID0gc2VsZi5jaGVja19mb3JfZHJpZnQoCiAgICAgICAgICAgICAgICAgICAgZHJpZnRfcmVzdWx0PWRyaWZ0X3Jlc3VsdCwgZW5kcG9pbnQ9ZW5kcG9pbnQKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygKICAgICAgICAgICAgICAgICAgICAiRHJpZnQgc3RhdHVzIiwKICAgICAgICAgICAgICAgICAgICBlbmRwb2ludF9pZD1lbmRwb2ludF9pZCwKICAgICAgICAgICAgICAgICAgICBkcmlmdF9zdGF0dXM9ZHJpZnRfc3RhdHVzLAogICAgICAgICAgICAgICAgICAgIGRyaWZ0X21lYXN1cmU9ZHJpZnRfbWVhc3VyZSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICBpZiBkcmlmdF9zdGF0dXMgPT0gIlBPU1NJQkxFX0RSSUZUIiBvciBkcmlmdF9zdGF0dXMgPT0gIkRSSUZUX0RFVEVDVEVEIjoKICAgICAgICAgICAgICAgICAgICBzZWxmLnYzaW8uc3RyZWFtLnB1dF9yZWNvcmRzKAogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9c2VsZi5zdHJlYW1fY29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1fcGF0aD1zZWxmLnN0cmVhbV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzPVsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YSI6IGpzb24uZHVtcHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmRwb2ludF9pZCI6IGVuZHBvaW50X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRyaWZ0X3N0YXR1cyI6IGRyaWZ0X3N0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkcmlmdF9tZWFzdXJlIjogZHJpZnRfbWVhc3VyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkcmlmdF9wZXJfZmVhdHVyZSI6IHsqKmRyaWZ0X3Jlc3VsdH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgIHNlbGYudjNpby5rdi51cGRhdGUoCiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPXNlbGYua3ZfY29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgIHRhYmxlX3BhdGg9c2VsZi5rdl9wYXRoLAogICAgICAgICAgICAgICAgICAgIGtleT1lbmRwb2ludF9pZCwKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzPXsKICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnRfc3RhdHMiOiBqc29uLmR1bXBzKGN1cnJlbnRfc3RhdHMpLAogICAgICAgICAgICAgICAgICAgICAgICAiZHJpZnRfbWVhc3VyZXMiOiBqc29uLmR1bXBzKGRyaWZ0X3Jlc3VsdCksCiAgICAgICAgICAgICAgICAgICAgICAgICJkcmlmdF9zdGF0dXMiOiBkcmlmdF9zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICB0c2RiX2RyaWZ0X21lYXN1cmVzID0gewogICAgICAgICAgICAgICAgICAgICJlbmRwb2ludF9pZCI6IGVuZHBvaW50X2lkLAogICAgICAgICAgICAgICAgICAgICJ0aW1lc3RhbXAiOiBwZC50b19kYXRldGltZSh0aW1lc3RhbXAsIGZvcm1hdD1USU1FX0ZPUk1BVCksCiAgICAgICAgICAgICAgICAgICAgInJlY29yZF90eXBlIjogImRyaWZ0X21lYXN1cmVzIiwKICAgICAgICAgICAgICAgICAgICAidHZkX21lYW4iOiBkcmlmdF9yZXN1bHRbInR2ZF9tZWFuIl0sCiAgICAgICAgICAgICAgICAgICAgImtsZF9tZWFuIjogZHJpZnRfcmVzdWx0WyJrbGRfbWVhbiJdLAogICAgICAgICAgICAgICAgICAgICJoZWxsaW5nZXJfbWVhbiI6IGRyaWZ0X3Jlc3VsdFsiaGVsbGluZ2VyX21lYW4iXSwKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzZWxmLmZyYW1lcy53cml0ZSgKICAgICAgICAgICAgICAgICAgICBiYWNrZW5kPSJ0c2RiIiwKICAgICAgICAgICAgICAgICAgICB0YWJsZT1zZWxmLnRzZGJfcGF0aCwKICAgICAgICAgICAgICAgICAgICBkZnM9cGQuRGF0YUZyYW1lLmZyb21fZGljdChbdHNkYl9kcmlmdF9tZWFzdXJlc10pLAogICAgICAgICAgICAgICAgICAgIGluZGV4X2NvbHM9WyJ0aW1lc3RhbXAiLCAiZW5kcG9pbnRfaWQiLCAicmVjb3JkX3R5cGUiXSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhmIkRvbmUgdXBkYXRpbmcgZHJpZnQgbWVhc3VyZXMge2Z1bGxfcGF0aH0iKQoKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGYiRXhjZXB0aW9uIGZvciBlbmRwb2ludCB7ZW5kcG9pbnRfaWR9IikKICAgICAgICAgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gZQoKICAgIGRlZiBjaGVja19mb3JfZHJpZnQoc2VsZiwgZHJpZnRfcmVzdWx0LCBlbmRwb2ludCk6CiAgICAgICAgdHZkX21lYW4gPSBkcmlmdF9yZXN1bHQuZ2V0KCJ0dmRfbWVhbiIpCiAgICAgICAgaGVsbGluZ2VyX21lYW4gPSBkcmlmdF9yZXN1bHQuZ2V0KCJoZWxsaW5nZXJfbWVhbiIpCgogICAgICAgIGRyaWZ0X21lYW4gPSAwLjAKICAgICAgICBpZiB0dmRfbWVhbiBhbmQgaGVsbGluZ2VyX21lYW46CiAgICAgICAgICAgIGRyaWZ0X21lYW4gPSAodHZkX21lYW4gKyBoZWxsaW5nZXJfbWVhbikgLyAyCgogICAgICAgIG1vbml0b3JfY29uZmlndXJhdGlvbiA9IGVuZHBvaW50LnNwZWMubW9uaXRvcl9jb25maWd1cmF0aW9uIG9yIHt9CgogICAgICAgIHBvc3NpYmxlX2RyaWZ0ID0gbW9uaXRvcl9jb25maWd1cmF0aW9uLmdldCgKICAgICAgICAgICAgInBvc3NpYmxlX2RyaWZ0Iiwgc2VsZi5kZWZhdWx0X3Bvc3NpYmxlX2RyaWZ0X3RocmVzaG9sZAogICAgICAgICkKICAgICAgICBkcmlmdF9kZXRlY3RlZCA9IG1vbml0b3JfY29uZmlndXJhdGlvbi5nZXQoCiAgICAgICAgICAgICJwb3NzaWJsZV9kcmlmdCIsIHNlbGYuZGVmYXVsdF9kcmlmdF9kZXRlY3RlZF90aHJlc2hvbGQKICAgICAgICApCgogICAgICAgIGRyaWZ0X3N0YXR1cyA9ICJOT19EUklGVCIKICAgICAgICBpZiBkcmlmdF9tZWFuID49IGRyaWZ0X2RldGVjdGVkOgogICAgICAgICAgICBkcmlmdF9zdGF0dXMgPSAiRFJJRlRfREVURUNURUQiCiAgICAgICAgZWxpZiBkcmlmdF9tZWFuID49IHBvc3NpYmxlX2RyaWZ0OgogICAgICAgICAgICBkcmlmdF9zdGF0dXMgPSAiUE9TU0lCTEVfRFJJRlQiCgogICAgICAgIHJldHVybiBkcmlmdF9zdGF0dXMsIGRyaWZ0X21lYW4KCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZ2V0X2xhc3RfY3JlYXRlZF9kaXIoZnMsIGVuZHBvaW50X2Rpcik6CiAgICAgICAgZGlycyA9IGZzLmxzKGVuZHBvaW50X2RpclsibmFtZSJdKQogICAgICAgIGxhc3RfZGlyID0gc29ydGVkKGRpcnMsIGtleT1sYW1iZGEgazoga1sibmFtZSJdLnNwbGl0KCI9IilbLTFdKVstMV0KICAgICAgICByZXR1cm4gbGFzdF9kaXIKCgpkZWYgaGFuZGxlcihjb250ZXh0OiBNTENsaWVudEN0eCk6CiAgICBiYXRjaF9wcm9jZXNzb3IgPSBCYXRjaFByb2Nlc3NvcigKICAgICAgICBjb250ZXh0PWNvbnRleHQsCiAgICAgICAgcHJvamVjdD1jb250ZXh0LnByb2plY3QsCiAgICAgICAgbW9kZWxfbW9uaXRvcmluZ19hY2Nlc3Nfa2V5PW9zLmVudmlyb24uZ2V0KCJNT0RFTF9NT05JVE9SSU5HX0FDQ0VTU19LRVkiKSwKICAgICAgICB2M2lvX2FjY2Vzc19rZXk9b3MuZW52aXJvbi5nZXQoIlYzSU9fQUNDRVNTX0tFWSIpLAogICAgKQogICAgYmF0Y2hfcHJvY2Vzc29yLnBvc3RfaW5pdCgpCiAgICBiYXRjaF9wcm9jZXNzb3IucnVuKCkKICAgIGlmIGJhdGNoX3Byb2Nlc3Nvci5leGNlcHRpb246CiAgICAgICAgcmFpc2UgYmF0Y2hfcHJvY2Vzc29yLmV4Y2VwdGlvbgo=
commands: []
code_origin: https://github.com/katyakats/functions.git#c5315901af56bce3f113041ad540591ee86ac00a:/Users/katyak/work/functions/model_monitoring_batch/model_monitoring_batch.py
origin_filename: /Users/katyak/work/functions/model_monitoring_batch/model_monitoring_batch.py
disable_auto_mount: false
priority_class_name: ''
affinity: null
verbose: false