PCM_Report/configs/600泵/config.json

188 lines
53 KiB
JSON

{
"influx": {
"url": "http://10.0.5.232:8086",
"org": "MEASCON",
"token": "_jtoxcVDIbol2Uqt_vlhidut-EO0Xo0ZXea2UC5a5Bgotk836F0xPN4NSGY1jYI_WaBKRau4RyZ-g2XSFiNdXw==",
"username": "PCM",
"password": "1842moon",
"landingUrl": "http://10.0.5.232:8086/orgs/b2542eeb72a3e614/dashboards/0f8ab8a328fe9000?lower=now%28%29+-+1h",
"bucket": "PCM",
"measurement": "PCM_Measurement"
},
"placeholders": {
"scriptTable1": {
"type": "scriptTable",
"label": "scriptTable1",
"title": "",
"value": "",
"dbQuery": "",
"chart": {}
},
"text1": {
"type": "text",
"label": "text1",
"title": "",
"value": "@current_date",
"dbQuery": "",
"chart": {}
},
"text2": {
"type": "text",
"label": "text2",
"title": "",
"value": "@process_no",
"dbQuery": "",
"chart": {}
},
"text3": {
"type": "text",
"label": "text3",
"title": "",
"value": "@part_no",
"dbQuery": "",
"chart": {}
},
"text4": {
"type": "text",
"label": "text4",
"title": "",
"value": "@executor",
"dbQuery": "",
"chart": {}
}
},
"tcpModbus": {
"ip": "10.0.5.232",
"port": 5020
},
"devices": [
{
"deviceName": "温度传感器",
"alarmRegister": 0,
"alarmType": "holding",
"thresholds": [
{
"name": "温度上限",
"register": 0,
"regType": "input",
"value": 29.0
},
{
"name": "温度下线",
"register": 1,
"regType": "input",
"value": 0.0
},
{
"name": "是否报警",
"register": 0,
"regType": "coil",
"value": 0.0
},
{
"name": "报警信息",
"register": 0,
"regType": "holding",
"value": 0.0
}
]
},
{
"deviceName": "测试开关",
"alarmRegister": 0,
"alarmType": "holding",
"thresholds": [
{
"name": "开始测试",
"register": 0,
"regType": "coil",
"value": 0.0
},
{
"name": "结束测试",
"register": 1,
"regType": "coil",
"value": 0.0
}
]
}
],
"db": {
"engine": "sqlserver",
"host": "localhost",
"port": 1433,
"database": "",
"username": "",
"password": ""
},
"experimentProcess": {
"headers": [
"实验内容",
"实验步骤",
"工况(档位)",
"输入转速",
"转速阈值"
],
"rows": [
[
"性能试验",
"10",
"3",
"981",
"20"
],
[
"性能试验",
"20",
"4",
"1906",
"10"
],
[
"性能试验",
"30",
"5",
"2096",
"10"
],
[
"耐久试验",
"40.1",
"1",
"476",
"10"
],
[
"耐久试验",
"40.1",
"2",
"731",
"10"
],
[
"耐久试验",
"40.1",
"2",
"731",
"10"
]
],
"scriptFile": "IyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQ0KIiIiDQrmtYvor5Xpg6jkvY3muKnluqborrDlvZXooajnlJ/miJDohJrmnKzvvIjluKbotJ/ovb3nirbmgIHnrZvpgInvvIkNCg0KLSDlv73nlaXkvKDlhaXnmoQgZXhwZXJpbWVudFByb2Nlc3PvvIzoh6rooYzmnoTpgKDlm7rlrprnu5PmnoTnmoTmlbDmja4NCi0g5LuOIEluZmx1eERCIOafpeivouavj+S4qua1i+ivlemDqOS9jeWcqOWQhOaXtumXtOeCueeahOeerOaXtua4qeW6puWAvA0KLSDmt7vliqAgbG9hZF9zdGF0dXMgPSAxIOeahOetm+mAieadoeS7tu+8jOehruS/neWPquWcqOecn+ato+mHh+mbhuaVsOaNruaXtuiOt+WPlua4qeW6pg0KLSDovpPlh7rmoLzlvI/kuI7lupTnlKjkuK3nmoQgc2NyaXB0VGFibGUg5Y2g5L2N56ym5YW85a65DQotIOm7mOiupOaKiiB7c2NyaXB0VGFibGUxfSDmlL7lnKgi5rWL6K+V6YOo5L2NIuaJgOWcqOeahOWNleWFg+agvA0KDQrnjq/looPlj5jph4/vvJoNCiAgICBUQUJMRV9UT0tFTiAgICAgICAgIOebruagh+WNoOS9jeespu+8jOm7mOiupCBzY3JpcHRUYWJsZTENCiAgICBUQUJMRV9TVEFSVF9ST1cgICAgIOWGmeWFpei1t+Wni+ihjOWBj+enu++8jOm7mOiupCAwDQogICAgVEFCTEVfU1RBUlRfQ09MICAgICDlhpnlhaXotbflp4vliJflgY/np7vvvIzpu5jorqQgMA0KICAgIFRBQkxFX1RJTUVfU0xPVFMgICAg6YCX5Y+35YiG6ZqU55qE5pe26Ze05Yi75bqm77yM6buY6K6kICIwLjVoLDFoLDEuNWgsMmgsMi41aCwzaCwzLjVoIg0KICAgIFRBQkxFX01PVE9SX1NQRUVEICAg55S15py66L2s6YCf5qCH562+77yM6buY6K6kICI5ODBSUE0iDQogICAgRVhQRVJJTUVOVF9TVEFSVCAgICAg5a6e6aqM5byA5aeL5pe26Ze077yISVNPIDg2MDEg5qC85byP77yM5aaCIDIwMjQtMDEtMDFUMTA6MDA6MDBa77yJDQogICAgRVhQRVJJTUVOVF9FTkQgICAgICAg5a6e6aqM57uT5p2f5pe26Ze077yISVNPIDg2MDEg5qC85byP77yJDQogICAgSU5GTFVYX1VSTCAgICAgICAgICAgSW5mbHV4REIgVVJMDQogICAgSU5GTFVYX09SRyAgICAgICAgICAgSW5mbHV4REIg57uE57uHDQogICAgSU5GTFVYX1RPS0VOICAgICAgICAgSW5mbHV4REIg5Luk54mMDQogICAgSU5GTFVYX0JVQ0tFVCAgICAgICAgSW5mbHV4REIg5qG25ZCN77yM6buY6K6kIFBDTQ0KICAgIElORkxVWF9NRUFTVVJFTUVOVCAgIEluZmx1eERCIOa1i+mHj+WQje+8jOm7mOiupCBQQ01fTWVhc3VyZW1lbnQNCiIiIg0KDQpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zDQoNCmltcG9ydCBqc29uDQppbXBvcnQgbG9nZ2luZw0KaW1wb3J0IG9zDQppbXBvcnQgc3lzDQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhDQpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBMaXN0LCBPcHRpb25hbA0KDQoNCkxPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQ0KDQoNCmRlZiBfbWFza19zZWNyZXQodmFsdWU6IE9wdGlvbmFsW3N0cl0pIC0+IHN0cjoNCiAgICAiIiLmjqnnoIHmlY/mhJ/kv6Hmga8iIiINCiAgICBpZiBub3QgdmFsdWU6DQogICAgICAgIHJldHVybiAiPGVtcHR5PiINCiAgICBpZiBsZW4odmFsdWUpIDw9IDg6DQogICAgICAgIHJldHVybiAiKiIgKiBsZW4odmFsdWUpDQogICAgcmV0dXJuIHZhbHVlWzo0XSArICIqIiAqIChsZW4odmFsdWUpIC0gOCkgKyB2YWx1ZVstNDpdDQoNCg0KZGVmIF9zZXR1cF9sb2dnaW5nKCkgLT4gTm9uZToNCiAgICAiIiLorr7nva7ml6Xlv5ciIiINCiAgICBsb2dfbGV2ZWxfc3RyID0gb3MuZW52aXJvbi5nZXQoIlRBQkxFX0xPR19MRVZFTCIsICJERUJVRyIpLnVwcGVyKCkNCiAgICBsb2dfbGV2ZWwgPSBnZXRhdHRyKGxvZ2dpbmcsIGxvZ19sZXZlbF9zdHIsIGxvZ2dpbmcuREVCVUcpDQogICAgDQogICAgIyDphY3nva7moLnml6Xlv5forrDlvZXlmagNCiAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKA0KICAgICAgICBsZXZlbD1sb2dfbGV2ZWwsDQogICAgICAgIGZvcm1hdD0nJShhc2N0aW1lKXMgWyUobGV2ZWxuYW1lKXNdICUobmFtZSlzOiAlKG1lc3NhZ2UpcycsDQogICAgICAgIGhhbmRsZXJzPVsNCiAgICAgICAgICAgIGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3RkZXJyKQ0KICAgICAgICBdDQogICAgKQ0KICAgIA0KICAgICMg5aaC5p6c5oyH5a6a5LqG5pel5b+X5paH5Lu277yM5re75Yqg5paH5Lu25aSE55CG5ZmoDQogICAgbG9nX2ZpbGUgPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfTE9HX0ZJTEUiLCAiIikuc3RyaXAoKQ0KICAgIGlmIGxvZ19maWxlOg0KICAgICAgICB0cnk6DQogICAgICAgICAgICBmaWxlX2hhbmRsZXIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGxvZ19maWxlLCBlbmNvZGluZz0ndXRmLTgnKQ0KICAgICAgICAgICAgZmlsZV9oYW5kbGVyLnNldExldmVsKGxvZ19sZXZlbCkNCiAgICAgICAgICAgIGZpbGVfaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoDQogICAgICAgICAgICAgICAgJyUoYXNjdGltZSlzIFslKGxldmVsbmFtZSlzXSAlKG5hbWUpczogJShtZXNzYWdlKXMnDQogICAgICAgICAgICApKQ0KICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoKS5hZGRIYW5kbGVyKGZpbGVfaGFuZGxlcikNCiAgICAgICAgICAgIExPR0dFUi5pbmZvKCLml6Xlv5fmlofku7blt7LphY3nva46ICVzIiwgbG9nX2ZpbGUpDQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToNCiAgICAgICAgICAgIExPR0dFUi53YXJuaW5nKCLphY3nva7ml6Xlv5fmlofku7blpLHotKU6ICVzIiwgZSkNCg0KDQpkZWYgX2dldF9pbmZsdXhfY29uZmlnKCkgLT4gRGljdFtzdHIsIHN0cl06DQogICAgIiIi6I635Y+WSW5mbHV4RELphY3nva4iIiINCiAgICBjb25maWcgPSB7DQogICAgICAgICd1cmwnOiBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX1VSTCIsICIiKS5zdHJpcCgpLA0KICAgICAgICAnb3JnJzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9PUkciLCAiIikuc3RyaXAoKSwNCiAgICAgICAgJ3Rva2VuJzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9UT0tFTiIsICIiKS5zdHJpcCgpLA0KICAgICAgICAnYnVja2V0Jzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9CVUNLRVQiLCAiUENNIikuc3RyaXAoKSwNCiAgICAgICAgJ21lYXN1cmVtZW50Jzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9NRUFTVVJFTUVOVCIsICJQQ01fTWVhc3VyZW1lbnQiKS5zdHJpcCgpLA0KICAgIH0NCiAgICANCiAgICBMT0dHRVIuZGVidWcoDQogICAgICAgICJJbmZsdXhEQumFjee9rjogdXJsPSVzIG9yZz0lcyB0b2tlbj0lcyBidWNrZXQ9JXMgbWVhc3VyZW1lbnQ9JXMiLA0KICAgICAgICBjb25maWdbJ3VybCddIG9yICI8ZW1wdHk+IiwNCiAgICAgICAgY29uZmlnWydvcmcnXSBvciAiPGVtcHR5PiIsDQogICAgICAgIF9tYXNrX3NlY3JldChjb25maWdbJ3Rva2VuJ10pLA0KICAgICAgICBjb25maWdbJ2J1Y2tldCddLA0KICAgICAgICBjb25maWdbJ21lYXN1cmVtZW50J10sDQogICAgKQ0KICAgIA0KICAgIHJldHVybiBjb25maWcNCg0KDQpkZWYgX3BhcnNlX2V4cGVyaW1lbnRfdGltZXMoKSAtPiB0dXBsZVtPcHRpb25hbFtkYXRldGltZV0sIE9wdGlvbmFsW2RhdGV0aW1lXV06DQogICAgIiIi6Kej5p6Q5a6e6aqM5pe26Ze0IiIiDQogICAgc3RhcnRfc3RyID0gb3MuZW52aXJvbi5nZXQoIkVYUEVSSU1FTlRfU1RBUlQiLCAiIikuc3RyaXAoKQ0KICAgIGVuZF9zdHIgPSBvcy5lbnZpcm9uLmdldCgiRVhQRVJJTUVOVF9FTkQiLCAiIikuc3RyaXAoKQ0KICAgIA0KICAgIHN0YXJ0X3RpbWU6IE9wdGlvbmFsW2RhdGV0aW1lXSA9IE5vbmUNCiAgICBlbmRfdGltZTogT3B0aW9uYWxbZGF0ZXRpbWVdID0gTm9uZQ0KICAgIA0KICAgIGlmIHN0YXJ0X3N0cjoNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgZm9yIGZtdCBpbiBbIiVZLSVtLSVkVCVIOiVNOiVTWiIsICIlWS0lbS0lZFQlSDolTTolUyV6Il06DQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lID0gZGF0ZXRpbWUuc3RycHRpbWUoc3RhcnRfc3RyLCBmbXQpDQogICAgICAgICAgICAgICAgICAgIGlmIHN0YXJ0X3RpbWUudHppbmZvIGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgICAgICAgICAgIyDovazmjaLkuLrmnKzlnLDml7bpl7TlubbljrvpmaTml7bljLrkv6Hmga8NCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSBzdGFydF90aW1lLmFzdGltZXpvbmUodHo9Tm9uZSkucmVwbGFjZSh0emluZm89Tm9uZSkNCiAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KICAgICAgICAgICAgcHJpbnQoZiJXYXJuaW5nOiBGYWlsZWQgdG8gcGFyc2UgRVhQRVJJTUVOVF9TVEFSVCAne3N0YXJ0X3N0cn0nOiB7ZX0iLCBmaWxlPXN5cy5zdGRlcnIpDQogICAgDQogICAgaWYgZW5kX3N0cjoNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgZm9yIGZtdCBpbiBbIiVZLSVtLSVkVCVIOiVNOiVTWiIsICIlWS0lbS0lZFQlSDolTTolUyV6Il06DQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAgICAgICBlbmRfdGltZSA9IGRhdGV0aW1lLnN0cnB0aW1lKGVuZF9zdHIsIGZtdCkNCiAgICAgICAgICAgICAgICAgICAgaWYgZW5kX3RpbWUudHppbmZvIGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgICAgICAgICAgIyDovazmjaLkuLrmnKzlnLDml7bpl7TlubbljrvpmaTml7bljLrkv6Hmga8NCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF90aW1lID0gZW5kX3RpbWUuYXN0aW1lem9uZSh0ej1Ob25lKS5yZXBsYWNlKHR6aW5mbz1Ob25lKQ0KICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgICAgICBwcmludChmIldhcm5pbmc6IEZhaWxlZCB0byBwYXJzZSBFWFBFUklNRU5UX0VORCAne2VuZF9zdHJ9Jzoge2V9IiwgZmlsZT1zeXMuc3RkZXJyKQ0KICAgIA0KICAgIHJldHVybiBzdGFydF90aW1lLCBlbmRfdGltZQ0KDQoNCmRlZiBfcGFyc2VfdGltZV9zbG90KHNsb3Rfc3RyOiBzdHIpIC0+IGZsb2F0Og0KICAgICIiIuino+aekOaXtumXtOanveWtl+espuS4suS4uuWwj+aXtuaVsCIiIg0KICAgIGlmIG5vdCBzbG90X3N0cjoNCiAgICAgICAgcmV0dXJuIDAuMA0KICAgIA0KICAgIHNsb3Rfc3RyID0gc2xvdF9zdHIuc3RyaXAoKS5sb3dlcigpDQogICAgDQogICAgaWYgc2xvdF9zdHIuZW5kc3dpdGgoJ2gnKToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHNsb3Rfc3RyWzotMV0pDQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICAgICAgICAgcGFzcw0KICAgIA0KICAgIHRyeToNCiAgICAgICAgcmV0dXJuIGZsb2F0KHNsb3Rfc3RyKQ0KICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICAgICBwYXNzDQogICAgDQogICAgcmV0dXJuIDAuMA0KDQoNCmRlZiBfdGltZV9zbG90cygpIC0+IExpc3Rbc3RyXToNCiAgICByYXcgPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfVElNRV9TTE9UUyIsICIiKS5zdHJpcCgpDQogICAgaWYgbm90IHJhdzoNCiAgICAgICAgIyDmoLnmja7lm77niYfvvIzml7bpl7TliLvluqbmmK/vvJowLjVoLCAxaCwgMS41aCwgMmgsIDIuNWgsIDNoLCAzLjVo77yIN+WIl++8iQ0KICAgICAgICByZXR1cm4gWyIwLjVoIiwgIjFoIiwgIjEuNWgiLCAiMmgiLCAiMi41aCIsICIzaCIsICIzLjVoIl0NCiAgICBzbG90cyA9IFtzbG90LnN0cmlwKCkgZm9yIHNsb3QgaW4gcmF3LnNwbGl0KCIsIildDQogICAgcmV0dXJuIFtzbG90IGZvciBzbG90IGluIHNsb3RzIGlmIHNsb3RdDQoNCg0KZGVmIF9kZWZhdWx0X3NlY3Rpb25zKCkgLT4gTGlzdFtEaWN0W3N0ciwgQW55XV06DQogICAgIyBuYW1lIC0+IHJvd3MgdW5kZXJuZWF0aO+8iGVudHJpZXPvvIkNCiAgICAjIOavj+S4qiBlbnRyeSDlr7nlupTkuIDkuKrmtYvor5Xpg6jkvY3vvIzpnIDopoHmmKDlsITliLAgSW5mbHV4REIg55qEIGZpZWxkIOaIliB0YWcNCiAgICByZXR1cm4gWw0KICAgICAgICB7Im5hbWUiOiAi5Li76L205om/IiwgImVudHJpZXMiOiBbDQogICAgICAgICAgICB7ImxhYmVsIjogIiMxIiwgImZpZWxkIjogIuS4u+i9tOaJvyMxIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLkuLvovbTmib8jMSJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjMiIsICJmaWVsZCI6ICLkuLvovbTmib8jMiIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Li76L205om/IzIifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzMiLCAiZmllbGQiOiAi5Li76L205om/IzMiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuS4u+i9tOaJvyMzIn0sDQogICAgICAgICAgICB7ImxhYmVsIjogIiM0IiwgImZpZWxkIjogIuS4u+i9tOaJvyM0IiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLkuLvovbTmib8jNCJ9LA0KICAgICAgICBdfSwNCiAgICAgICAgeyJuYW1lIjogIuWNgeWtl+WktCIsICJlbnRyaWVzIjogWw0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjMSIsICJmaWVsZCI6ICLljYHlrZflpLQjMSIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Y2B5a2X5aS0IzEifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzIiLCAiZmllbGQiOiAi5Y2B5a2X5aS0IzIiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuWNgeWtl+WktCMyIn0sDQogICAgICAgICAgICB7ImxhYmVsIjogIiMzIiwgImZpZWxkIjogIuWNgeWtl+WktCMzIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLljYHlrZflpLQjMyJ9LA0KICAgICAgICBdfSwNCiAgICAgICAgeyJuYW1lIjogIuWHj+mAn+euseWwj+i9tOaJvyIsICJlbnRyaWVzIjogWw0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjMe+8iOi+k+WFpeazleWFsOerr++8iSIsICJmaWVsZCI6ICLlh4/pgJ/nrrHlsI/ovbTmib8xIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLlh4/pgJ/nrrHlsI/ovbTmib8jMSJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjMiIsICJmaWVsZCI6ICLlh4/pgJ/nrrHlsI/ovbTmib8jMiIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5YeP6YCf566x5bCP6L205om/IzIifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLlh4/pgJ/nrrHlpKfovbTmib8iLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzPvvIjlpKfnq6/nm5bnq6/vvIkiLCAiZmllbGQiOiAi5YeP6YCf566x5aSn6L205om/IzMiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuWHj+mAn+euseWkp+i9tOaJvyMzIn0sDQogICAgICAgICAgICB7ImxhYmVsIjogIiM0IiwgImZpZWxkIjogIuWHj+mAn+euseWkp+i9tOaJvyM0IiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLlh4/pgJ/nrrHlpKfovbTmib8jNCJ9LA0KICAgICAgICBdfSwNCiAgICAgICAgeyJuYW1lIjogIua2pua7keayuea4qSIsICJlbnRyaWVzIjogWw0KICAgICAgICAgICAgeyJsYWJlbCI6ICIiLCAiZmllbGQiOiAibWVhbiIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAi5ram5ruR5rK55ripIn0sICJyZXN1bHRfa2V5IjogIua2pua7keayuea4qSJ9LA0KICAgICAgICBdfSwNCiAgICAgICAgeyJuYW1lIjogIua2pua7keayueWOiyIsICJlbnRyaWVzIjogWw0KICAgICAgICAgICAgeyJsYWJlbCI6ICIoUHNpKSIsICJmaWVsZCI6ICJtZWFuIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICLmtqbmu5HmsrnljosifSwgInJlc3VsdF9rZXkiOiAi5ram5ruR5rK55Y6LIn0sDQogICAgICAgIF19LA0KICAgIF0NCg0KZGVmIF9xdWVyeV9sb2FkX3N0YXR1c190aW1lbGluZSgNCiAgICBzdGFydF90aW1lOiBkYXRldGltZSwNCiAgICBlbmRfdGltZTogZGF0ZXRpbWUsDQogICAgaW5mbHV4X3VybDogc3RyLA0KICAgIGluZmx1eF9vcmc6IHN0ciwNCiAgICBpbmZsdXhfdG9rZW46IHN0ciwNCiAgICBpbmZsdXhfYnVja2V0OiBzdHIsDQogICAgaW5mbHV4X21lYXN1cmVtZW50OiBzdHIsDQopIC0+IExpc3RbRGljdFtzdHIsIEFueV1dOg0KICAgICIiIuafpeivouaVtOS4quWunumqjOacn+mXtOeahGxvYWRfc3RhdHVz5pe26Ze057q/5pWw5o2uIiIiDQogICAgdHJ5Og0KICAgICAgICBmcm9tIGluZmx1eGRiX2NsaWVudCBpbXBvcnQgSW5mbHV4REJDbGllbnQNCiAgICAgICAgaW1wb3J0IHBhbmRhcyBhcyBwZA0KICAgICAgICBpbXBvcnQgd2FybmluZ3MNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQuY2xpZW50Lndhcm5pbmdzIGltcG9ydCBNaXNzaW5nUGl2b3RGdW5jdGlvbg0KICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICAgICAgTE9HR0VSLndhcm5pbmcoIkluZmx1eERCIGNsaWVudCBub3QgYXZhaWxhYmxlLCBza2lwIGxvYWRfc3RhdHVzIHRpbWVsaW5lIHF1ZXJ5IikNCiAgICAgICAgcmV0dXJuIFtdDQoNCiAgICB0cnk6DQogICAgICAgIGNsaWVudCA9IEluZmx1eERCQ2xpZW50KHVybD1pbmZsdXhfdXJsLCBvcmc9aW5mbHV4X29yZywgdG9rZW49aW5mbHV4X3Rva2VuKQ0KICAgICAgICBxdWVyeV9hcGkgPSBjbGllbnQucXVlcnlfYXBpKCkNCg0KICAgICAgICBzdGFydF9yZmMgPSBzdGFydF90aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KICAgICAgICBlbmRfcmZjID0gZW5kX3RpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicpDQoNCiAgICAgICAgIyDmn6Xor6Jsb2FkX3N0YXR1c+Wtl+auteeahOaJgOacieaVsOaNrueCue+8iOWcqEJyZWFrZXLmlbDmja7nsbvlnovkuK3vvIkNCiAgICAgICAgZmx1eCA9IGYnJycNCmZyb20oYnVja2V0OiAie2luZmx1eF9idWNrZXR9IikNCiAgfD4gcmFuZ2Uoc3RhcnQ6IHtzdGFydF9yZmN9LCBzdG9wOiB7ZW5kX3JmY30pDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9tZWFzdXJlbWVudCJdID09ICJ7aW5mbHV4X21lYXN1cmVtZW50fSIpDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbImRhdGFfdHlwZSJdID09ICJCcmVha2VyIikNCiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsiX2ZpZWxkIl0gPT0gImxvYWRfc3RhdHVzIikNCiAgfD4gc29ydChjb2x1bW5zOiBbIl90aW1lIl0pDQogIHw+IHlpZWxkKG5hbWU6ICJsb2FkX3N0YXR1c190aW1lbGluZSIpDQonJycuc3RyaXAoKQ0KDQogICAgICAgIExPR0dFUi5kZWJ1ZygiTG9hZCBzdGF0dXMgdGltZWxpbmUgcXVlcnk6XG4lcyIsIGZsdXgpDQoNCiAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOg0KICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBNaXNzaW5nUGl2b3RGdW5jdGlvbikNCiAgICAgICAgICAgIGZyYW1lcyA9IHF1ZXJ5X2FwaS5xdWVyeV9kYXRhX2ZyYW1lKGZsdXgpDQogICAgICAgIA0KICAgICAgICBpZiBpc2luc3RhbmNlKGZyYW1lcywgbGlzdCk6DQogICAgICAgICAgICBkZiA9IHBkLmNvbmNhdChmcmFtZXMsIGlnbm9yZV9pbmRleD1UcnVlKSBpZiBmcmFtZXMgZWxzZSBwZC5EYXRhRnJhbWUoKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgZGYgPSBmcmFtZXMNCg0KICAgICAgICBpZiBkZi5lbXB0eSBvciAnX3ZhbHVlJyBub3QgaW4gZGYuY29sdW1ucyBvciAnX3RpbWUnIG5vdCBpbiBkZi5jb2x1bW5zOg0KICAgICAgICAgICAgTE9HR0VSLndhcm5pbmcoIk5vIGxvYWRfc3RhdHVzIHRpbWVsaW5lIGRhdGEgZm91bmQiKQ0KICAgICAgICAgICAgcmV0dXJuIFtdDQoNCiAgICAgICAgIyDovazmjaLkuLrml7bpl7Tnur/mlbDmja7vvIznoa7kv53ml7bljLrkuIDoh7TmgKcNCiAgICAgICAgdGltZWxpbmUgPSBbXQ0KICAgICAgICBmb3IgXywgcm93IGluIGRmLml0ZXJyb3dzKCk6DQogICAgICAgICAgICB0aW1lX29iaiA9IHBkLnRvX2RhdGV0aW1lKHJvd1snX3RpbWUnXSkNCiAgICAgICAgICAgICMg6L2s5o2i5Li65pys5Zyw5pe26Ze077yM5Y676Zmk5pe25Yy65L+h5oGv77yM5LiOc3RhcnRfdGltZS9lbmRfdGltZeS/neaMgeS4gOiHtA0KICAgICAgICAgICAgaWYgaGFzYXR0cih0aW1lX29iaiwgJ3R6JykgYW5kIHRpbWVfb2JqLnR6IGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgICMg5a+55LqOcGFuZGFzIFRpbWVzdGFtcO+8jOWFiOi9rOaNouS4uuacrOWcsOaXtuWMuuWGjei9rOS4ulB5dGhvbiBkYXRldGltZQ0KICAgICAgICAgICAgICAgIHRpbWVfb2JqID0gdGltZV9vYmoudHpfY29udmVydChOb25lKS50b19weWRhdGV0aW1lKCkNCiAgICAgICAgICAgIGVsaWYgaGFzYXR0cih0aW1lX29iaiwgJ3RvX3B5ZGF0ZXRpbWUnKToNCiAgICAgICAgICAgICAgICAjIOi9rOaNouS4ulB5dGhvbiBkYXRldGltZeWvueixoQ0KICAgICAgICAgICAgICAgIHRpbWVfb2JqID0gdGltZV9vYmoudG9fcHlkYXRldGltZSgpDQogICAgICAgICAgICANCiAgICAgICAgICAgICMg56Gu5L+d5rKh5pyJ5pe25Yy65L+h5oGvDQogICAgICAgICAgICBpZiBoYXNhdHRyKHRpbWVfb2JqLCAndHppbmZvJykgYW5kIHRpbWVfb2JqLnR6aW5mbyBpcyBub3QgTm9uZToNCiAgICAgICAgICAgICAgICB0aW1lX29iaiA9IHRpbWVfb2JqLnJlcGxhY2UodHppbmZvPU5vbmUpDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICB0aW1lbGluZS5hcHBlbmQoew0KICAgICAgICAgICAgICAgICd0aW1lJzogdGltZV9vYmosDQogICAgICAgICAgICAgICAgJ2xvYWRfc3RhdHVzJzogZmxvYXQocm93WydfdmFsdWUnXSkNCiAgICAgICAgICAgIH0pDQoNCiAgICAgICAgTE9HR0VSLmluZm8oIkxvYWQgc3RhdHVzIHRpbWVsaW5lOiAlZCBkYXRhIHBvaW50cyBmcm9tICVzIHRvICVzIiwgDQogICAgICAgICAgICAgICAgICAgbGVuKHRpbWVsaW5lKSwgc3RhcnRfdGltZSwgZW5kX3RpbWUpDQogICAgICAgIA0KICAgICAgICAjIOiwg+ivle+8muajgOafpeaXtumXtOWvueixoeexu+Weiw0KICAgICAgICBpZiB0aW1lbGluZToNCiAgICAgICAgICAgIGZpcnN0X3RpbWUgPSB0aW1lbGluZVswXVsndGltZSddDQogICAgICAgICAgICBMT0dHRVIuZGVidWcoIlRpbWVsaW5lIGZpcnN0IHRpbWU6ICVzICh0eXBlOiAlcywgdHppbmZvOiAlcykiLCANCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X3RpbWUsIHR5cGUoZmlyc3RfdGltZSksIGdldGF0dHIoZmlyc3RfdGltZSwgJ3R6aW5mbycsIE5vbmUpKQ0KICAgICAgICBMT0dHRVIuZGVidWcoInN0YXJ0X3RpbWU6ICVzICh0eXBlOiAlcywgdHppbmZvOiAlcykiLCANCiAgICAgICAgICAgICAgICAgICAgc3RhcnRfdGltZSwgdHlwZShzdGFydF90aW1lKSwgZ2V0YXR0cihzdGFydF90aW1lLCAndHppbmZvJywgTm9uZSkpDQogICAgICAgIExPR0dFUi5kZWJ1ZygiZW5kX3RpbWU6ICVzICh0eXBlOiAlcywgdHppbmZvOiAlcykiLCANCiAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWUsIHR5cGUoZW5kX3RpbWUpLCBnZXRhdHRyKGVuZF90aW1lLCAndHppbmZvJywgTm9uZSkpDQogICAgICAgIA0KICAgICAgICByZXR1cm4gdGltZWxpbmUNCg0KICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToNCiAgICAgICAgTE9HR0VSLmVycm9yKCJFcnJvciBxdWVyeWluZyBsb2FkX3N0YXR1cyB0aW1lbGluZTogJXMiLCBlKQ0KICAgICAgICByZXR1cm4gW10NCiAgICBmaW5hbGx5Og0KICAgICAgICB0cnk6DQogICAgICAgICAgICBjbGllbnQuY2xvc2UoKQ0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uOg0KICAgICAgICAgICAgcGFzcw0KDQoNCmRlZiBfY2FsY3VsYXRlX2VmZmVjdGl2ZV90aW1lX3BvaW50cygNCiAgICBzdGFydF90aW1lOiBkYXRldGltZSwNCiAgICBlbmRfdGltZTogZGF0ZXRpbWUsDQogICAgdGltZV9zbG90czogTGlzdFtzdHJdLA0KICAgIGluZmx1eF9jb25maWc6IERpY3Rbc3RyLCBzdHJdDQopIC0+IERpY3Rbc3RyLCBPcHRpb25hbFtkYXRldGltZV1dOg0KICAgICIiIuiuoeeul+WfuuS6juacieaViOi/kOihjOaXtumXtOe0r+iuoeeahOecn+WunuaXtumXtOeCuSIiIg0KICAgIA0KICAgICMgMS4g6I635Y+WbG9hZF9zdGF0dXPml7bpl7Tnur8NCiAgICB0aW1lbGluZSA9IF9xdWVyeV9sb2FkX3N0YXR1c190aW1lbGluZSgNCiAgICAgICAgc3RhcnRfdGltZSwgZW5kX3RpbWUsDQogICAgICAgIGluZmx1eF9jb25maWdbJ3VybCddLCBpbmZsdXhfY29uZmlnWydvcmcnXSwgaW5mbHV4X2NvbmZpZ1sndG9rZW4nXSwNCiAgICAgICAgaW5mbHV4X2NvbmZpZ1snYnVja2V0J10sIGluZmx1eF9jb25maWdbJ21lYXN1cmVtZW50J10NCiAgICApDQogICAgDQogICAgaWYgbm90IHRpbWVsaW5lOg0KICAgICAgICBMT0dHRVIud2FybmluZygiTm8gbG9hZF9zdGF0dXMgdGltZWxpbmUgZGF0YSwgZmFsbGJhY2sgdG8gb3JpZ2luYWwgdGltZSBjYWxjdWxhdGlvbiIpDQogICAgICAgICMg5Zue6YCA5Yiw5Y6f5aeL5pe26Ze06K6h566XDQogICAgICAgIHJlc3VsdCA9IHt9DQogICAgICAgIGZvciBzbG90X3N0ciBpbiB0aW1lX3Nsb3RzOg0KICAgICAgICAgICAgc2xvdF9ob3VycyA9IF9wYXJzZV90aW1lX3Nsb3Qoc2xvdF9zdHIpDQogICAgICAgICAgICByZXN1bHRbc2xvdF9zdHJdID0gc3RhcnRfdGltZSArIHRpbWVkZWx0YShob3Vycz1zbG90X2hvdXJzKQ0KICAgICAgICByZXR1cm4gcmVzdWx0DQogICAgDQogICAgIyAyLiDorqHnrpfmnInmlYjov5DooYzml7bpl7TmrrUNCiAgICBlZmZlY3RpdmVfcGVyaW9kcyA9IFtdDQogICAgY3VycmVudF9wZXJpb2Rfc3RhcnQgPSBOb25lDQogICAgDQogICAgZm9yIGksIHBvaW50IGluIGVudW1lcmF0ZSh0aW1lbGluZSk6DQogICAgICAgIGlmIHBvaW50Wydsb2FkX3N0YXR1cyddID09IDEuMDoNCiAgICAgICAgICAgIGlmIGN1cnJlbnRfcGVyaW9kX3N0YXJ0IGlzIE5vbmU6DQogICAgICAgICAgICAgICAgY3VycmVudF9wZXJpb2Rfc3RhcnQgPSBwb2ludFsndGltZSddDQogICAgICAgIGVsc2U6ICAjIGxvYWRfc3RhdHVzICE9IDEuMA0KICAgICAgICAgICAgaWYgY3VycmVudF9wZXJpb2Rfc3RhcnQgaXMgbm90IE5vbmU6DQogICAgICAgICAgICAgICAgZWZmZWN0aXZlX3BlcmlvZHMuYXBwZW5kKHsNCiAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0JzogY3VycmVudF9wZXJpb2Rfc3RhcnQsDQogICAgICAgICAgICAgICAgICAgICdlbmQnOiBwb2ludFsndGltZSddLA0KICAgICAgICAgICAgICAgICAgICAnZHVyYXRpb25faG91cnMnOiAocG9pbnRbJ3RpbWUnXSAtIGN1cnJlbnRfcGVyaW9kX3N0YXJ0KS50b3RhbF9zZWNvbmRzKCkgLyAzNjAwLjANCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIGN1cnJlbnRfcGVyaW9kX3N0YXJ0ID0gTm9uZQ0KICAgIA0KICAgICMg5aSE55CG5pyA5ZCO5LiA5Liq5ZGo5pyf77yI5aaC5p6c5a6e6aqM57uT5p2f5pe25LuN5Zyo6L+Q6KGM77yJDQogICAgaWYgY3VycmVudF9wZXJpb2Rfc3RhcnQgaXMgbm90IE5vbmU6DQogICAgICAgIGVmZmVjdGl2ZV9wZXJpb2RzLmFwcGVuZCh7DQogICAgICAgICAgICAnc3RhcnQnOiBjdXJyZW50X3BlcmlvZF9zdGFydCwNCiAgICAgICAgICAgICdlbmQnOiBlbmRfdGltZSwNCiAgICAgICAgICAgICdkdXJhdGlvbl9ob3Vycyc6IChlbmRfdGltZSAtIGN1cnJlbnRfcGVyaW9kX3N0YXJ0KS50b3RhbF9zZWNvbmRzKCkgLyAzNjAwLjANCiAgICAgICAgfSkNCiAgICANCiAgICB0b3RhbF9lZmZlY3RpdmVfaG91cnMgPSBzdW0ocGVyaW9kWydkdXJhdGlvbl9ob3VycyddIGZvciBwZXJpb2QgaW4gZWZmZWN0aXZlX3BlcmlvZHMpDQogICAgTE9HR0VSLmluZm8oIkVmZmVjdGl2ZSBydW5uaW5nIHBlcmlvZHM6ICVkIHBlcmlvZHMsIHRvdGFsICUuM2YgaG91cnMiLCANCiAgICAgICAgICAgICAgIGxlbihlZmZlY3RpdmVfcGVyaW9kcyksIHRvdGFsX2VmZmVjdGl2ZV9ob3VycykNCiAgICANCiAgICBmb3IgcGVyaW9kIGluIGVmZmVjdGl2ZV9wZXJpb2RzOg0KICAgICAgICBMT0dHRVIuZGVidWcoIkVmZmVjdGl2ZSBwZXJpb2Q6ICVzIOKGkiAlcyAoJS4zZiBob3VycykiLA0KICAgICAgICAgICAgICAgICAgICBwZXJpb2RbJ3N0YXJ0J10uc3RyZnRpbWUoJyVIOiVNOiVTJyksDQogICAgICAgICAgICAgICAgICAgIHBlcmlvZFsnZW5kJ10uc3RyZnRpbWUoJyVIOiVNOiVTJyksDQogICAgICAgICAgICAgICAgICAgIHBlcmlvZFsnZHVyYXRpb25faG91cnMnXSkNCiAgICANCiAgICAjIDMuIOiuoeeul+avj+S4quaXtumXtOanveWvueW6lOeahOecn+WunuaXtumXtOeCuQ0KICAgIGVmZmVjdGl2ZV90aW1lX3BvaW50cyA9IHt9DQogICAgDQogICAgZm9yIHNsb3Rfc3RyIGluIHRpbWVfc2xvdHM6DQogICAgICAgIHRhcmdldF9lZmZlY3RpdmVfaG91cnMgPSBfcGFyc2VfdGltZV9zbG90KHNsb3Rfc3RyKQ0KICAgICAgICANCiAgICAgICAgaWYgdGFyZ2V0X2VmZmVjdGl2ZV9ob3VycyA8PSAwOg0KICAgICAgICAgICAgZWZmZWN0aXZlX3RpbWVfcG9pbnRzW3Nsb3Rfc3RyXSA9IE5vbmUNCiAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgIA0KICAgICAgICBpZiB0YXJnZXRfZWZmZWN0aXZlX2hvdXJzID4gdG90YWxfZWZmZWN0aXZlX2hvdXJzOg0KICAgICAgICAgICAgTE9HR0VSLndhcm5pbmcoIlRhcmdldCBlZmZlY3RpdmUgdGltZSAlLjNmaCBleGNlZWRzIHRvdGFsIGVmZmVjdGl2ZSB0aW1lICUuM2ZoIGZvciBzbG90ICVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2VmZmVjdGl2ZV9ob3VycywgdG90YWxfZWZmZWN0aXZlX2hvdXJzLCBzbG90X3N0cikNCiAgICAgICAgICAgIGVmZmVjdGl2ZV90aW1lX3BvaW50c1tzbG90X3N0cl0gPSBOb25lDQogICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICANCiAgICAgICAgIyDlnKjmnInmlYjml7bpl7TmrrXkuK3mn6Xmib7ntK/orqHov5DooYx0YXJnZXRfZWZmZWN0aXZlX2hvdXJz5bCP5pe255qE5pe26Ze054K5DQogICAgICAgIGN1bXVsYXRpdmVfaG91cnMgPSAwLjANCiAgICAgICAgdGFyZ2V0X3RpbWVfcG9pbnQgPSBOb25lDQogICAgICAgIA0KICAgICAgICBmb3IgcGVyaW9kIGluIGVmZmVjdGl2ZV9wZXJpb2RzOg0KICAgICAgICAgICAgcGVyaW9kX2R1cmF0aW9uID0gcGVyaW9kWydkdXJhdGlvbl9ob3VycyddDQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmIGN1bXVsYXRpdmVfaG91cnMgKyBwZXJpb2RfZHVyYXRpb24gPj0gdGFyZ2V0X2VmZmVjdGl2ZV9ob3VyczoNCiAgICAgICAgICAgICAgICAjIOebruagh+aXtumXtOeCueWcqOi/meS4quWRqOacn+WGhQ0KICAgICAgICAgICAgICAgIHJlbWFpbmluZ19ob3VycyA9IHRhcmdldF9lZmZlY3RpdmVfaG91cnMgLSBjdW11bGF0aXZlX2hvdXJzDQogICAgICAgICAgICAgICAgdGFyZ2V0X3RpbWVfcG9pbnQgPSBwZXJpb2RbJ3N0YXJ0J10gKyB0aW1lZGVsdGEoaG91cnM9cmVtYWluaW5nX2hvdXJzKQ0KICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIGN1bXVsYXRpdmVfaG91cnMgKz0gcGVyaW9kX2R1cmF0aW9uDQogICAgICAgIA0KICAgICAgICBlZmZlY3RpdmVfdGltZV9wb2ludHNbc2xvdF9zdHJdID0gdGFyZ2V0X3RpbWVfcG9pbnQNCiAgICAgICAgDQogICAgICAgIGlmIHRhcmdldF90aW1lX3BvaW50Og0KICAgICAgICAgICAgTE9HR0VSLmluZm8oIlNsb3QgJXM6IGVmZmVjdGl2ZSAlLjNmaCDihpIgYWN0dWFsIHRpbWUgJXMiLA0KICAgICAgICAgICAgICAgICAgICAgICBzbG90X3N0ciwgdGFyZ2V0X2VmZmVjdGl2ZV9ob3VycywgdGFyZ2V0X3RpbWVfcG9pbnQuc3RyZnRpbWUoJyVIOiVNOiVTJykpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBMT0dHRVIud2FybmluZygiQ291bGQgbm90IGNhbGN1bGF0ZSBlZmZlY3RpdmUgdGltZSBwb2ludCBmb3Igc2xvdCAlcyIsIHNsb3Rfc3RyKQ0KICAgIA0KICAgIHJldHVybiBlZmZlY3RpdmVfdGltZV9wb2ludHMNCg0KDQpkZWYgX3F1ZXJ5X2luZmx1eGRiX3JhbmdlX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgZmllbGRfbmFtZTogc3RyLA0KICAgIHN0YXJ0X3RpbWU6IGRhdGV0aW1lLA0KICAgIGVuZF90aW1lOiBkYXRldGltZSwNCiAgICBpbmZsdXhfdXJsOiBzdHIsDQogICAgaW5mbHV4X29yZzogc3RyLA0KICAgIGluZmx1eF90b2tlbjogc3RyLA0KICAgIGluZmx1eF9idWNrZXQ6IHN0ciwNCiAgICBpbmZsdXhfbWVhc3VyZW1lbnQ6IHN0ciwNCiAgICBmaWx0ZXJzOiBPcHRpb25hbFtEaWN0W3N0ciwgc3RyXV0gPSBOb25lLA0KKSAtPiBPcHRpb25hbFtmbG9hdF06DQogICAgIiIi5p+l6K+iIEluZmx1eERCIOiOt+WPluaMh+WumuWtl+auteWcqOaXtumXtOiMg+WbtOWGheeahOW5s+Wdh+WAvO+8iOS7heW9kyBsb2FkX3N0YXR1cyA9IDEg5pe277yJIiIiDQogICAgdHJ5Og0KICAgICAgICBmcm9tIGluZmx1eGRiX2NsaWVudCBpbXBvcnQgSW5mbHV4REJDbGllbnQNCiAgICAgICAgaW1wb3J0IHBhbmRhcyBhcyBwZA0KICAgICAgICBpbXBvcnQgd2FybmluZ3MNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQuY2xpZW50Lndhcm5pbmdzIGltcG9ydCBNaXNzaW5nUGl2b3RGdW5jdGlvbg0KICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICAgICAgTE9HR0VSLndhcm5pbmcoIkluZmx1eERCIGNsaWVudCBub3QgYXZhaWxhYmxlLCBza2lwIHF1ZXJ5IGZvciBmaWVsZD0lcyIsIGZpZWxkX25hbWUpDQogICAgICAgIHJldHVybiBOb25lDQoNCiAgICB0cnk6DQogICAgICAgIGNsaWVudCA9IEluZmx1eERCQ2xpZW50KHVybD1pbmZsdXhfdXJsLCBvcmc9aW5mbHV4X29yZywgdG9rZW49aW5mbHV4X3Rva2VuKQ0KICAgICAgICBxdWVyeV9hcGkgPSBjbGllbnQucXVlcnlfYXBpKCkNCg0KICAgICAgICBzdGFydF9yZmMgPSBzdGFydF90aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KICAgICAgICBlbmRfcmZjID0gZW5kX3RpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicpDQoNCiAgICAgICAgIyDmnoTlu7rov4fmu6TmnaHku7YNCiAgICAgICAgdGFnX2ZpbHRlcnMgPSAiIg0KICAgICAgICBpZiBmaWx0ZXJzOg0KICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZmlsdGVycy5pdGVtcygpOg0KICAgICAgICAgICAgICAgIHRhZ19maWx0ZXJzICs9IGYnXG4gIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIntrZXl9Il0gPT0gInt2YWx1ZX0iKScNCg0KICAgICAgICAjIOWvueS6jueOr+Wig+a4qeW6pu+8jOWPluWFqOmDqOmdnjDmlbDmja7nmoTlnYflgLzvvJvlhbbku5blrZfmrrXku43pnIBsb2FkX3N0YXR1cz0x562b6YCJDQogICAgICAgIGlmIGZpZWxkX25hbWUgPT0gIueOr+Wig+a4qeW6piI6DQogICAgICAgICAgICBmbHV4ID0gZicnJw0KZnJvbShidWNrZXQ6ICJ7aW5mbHV4X2J1Y2tldH0iKQ0KICB8PiByYW5nZShzdGFydDoge3N0YXJ0X3JmY30sIHN0b3A6IHtlbmRfcmZjfSkNCiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsiX21lYXN1cmVtZW50Il0gPT0gIntpbmZsdXhfbWVhc3VyZW1lbnR9IikNCiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsiX2ZpZWxkIl0gPT0gIntmaWVsZF9uYW1lfSIpDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl92YWx1ZSJdICE9IDAuMCl7dGFnX2ZpbHRlcnN9DQogIHw+IG1lYW4oKQ0KICB8PiB5aWVsZChuYW1lOiAibWVhbl9ub25femVybyIpDQonJycuc3RyaXAoKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgZmx1eCA9IGYnJycNCmZyb20oYnVja2V0OiAie2luZmx1eF9idWNrZXR9IikNCiAgfD4gcmFuZ2Uoc3RhcnQ6IHtzdGFydF9yZmN9LCBzdG9wOiB7ZW5kX3JmY30pDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9tZWFzdXJlbWVudCJdID09ICJ7aW5mbHV4X21lYXN1cmVtZW50fSIpDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9maWVsZCJdID09ICJ7ZmllbGRfbmFtZX0iKXt0YWdfZmlsdGVyc30NCiAgfD4gbWVhbigpDQogIHw+IHlpZWxkKG5hbWU6ICJtZWFuX3RlbXBlcmF0dXJlX2RhdGEiKQ0KJycnLnN0cmlwKCkNCg0KICAgICAgICBMT0dHRVIuZGVidWcoIkZsdXjmn6Xor6Lor63lj6UgKHJhbmdlKTpcbiVzIiwgZmx1eCkNCg0KICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6DQogICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIE1pc3NpbmdQaXZvdEZ1bmN0aW9uKQ0KICAgICAgICAgICAgZnJhbWVzID0gcXVlcnlfYXBpLnF1ZXJ5X2RhdGFfZnJhbWUoZmx1eCkNCiAgICAgICAgDQogICAgICAgIGlmIGlzaW5zdGFuY2UoZnJhbWVzLCBsaXN0KToNCiAgICAgICAgICAgIGRmID0gcGQuY29uY2F0KGZyYW1lcywgaWdub3JlX2luZGV4PVRydWUpIGlmIGZyYW1lcyBlbHNlIHBkLkRhdGFGcmFtZSgpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBkZiA9IGZyYW1lcw0KDQogICAgICAgIGlmIGRmLmVtcHR5IG9yICdfdmFsdWUnIG5vdCBpbiBkZi5jb2x1bW5zOg0KICAgICAgICAgICAgaWYgZmllbGRfbmFtZSA9PSAi546v5aKD5rip5bqmIjoNCiAgICAgICAgICAgICAgICBMT0dHRVIuZGVidWcoIk5vIHZhbGlkIHJhbmdlIGRhdGEgZm91bmQgZm9yIGZpZWxkPSVzIChub24temVybyBkYXRhKSIsIGZpZWxkX25hbWUpDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygiTm8gdmFsaWQgcmFuZ2UgZGF0YSBmb3VuZCBmb3IgZmllbGQ9JXMiLCBmaWVsZF9uYW1lKQ0KICAgICAgICAgICAgcmV0dXJuIE5vbmUNCiAgICAgICAgICAgIA0KICAgICAgICBtZWFuX3ZhbHVlID0gZGZbJ192YWx1ZSddLmlsb2NbMF0NCiAgICAgICAgaWYgcGQuaXNuYShtZWFuX3ZhbHVlKToNCiAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygiTWVhbiB2YWx1ZSBpcyBOYU4gZm9yIGZpZWxkPSVzIiwgZmllbGRfbmFtZSkNCiAgICAgICAgICAgIHJldHVybiBOb25lDQoNCiAgICAgICAgdmFsdWUgPSBmbG9hdChtZWFuX3ZhbHVlKQ0KICAgICAgICBpZiBmaWVsZF9uYW1lID09ICLnjq/looPmuKnluqYiOg0KICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCJGaWVsZD0lcyByYW5nZV9tZWFuX3ZhbHVlPSUuM2YgKG5vbi16ZXJvIGRhdGEpIiwgZmllbGRfbmFtZSwgdmFsdWUpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBMT0dHRVIuZGVidWcoIkZpZWxkPSVzIHJhbmdlX21lYW5fdmFsdWU9JS4zZiIsIGZpZWxkX25hbWUsIHZhbHVlKQ0KICAgICAgICByZXR1cm4gdmFsdWUNCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgIExPR0dFUi5lcnJvcigiRXJyb3IgcXVlcnlpbmcgSW5mbHV4REIgcmFuZ2UgZm9yIGZpZWxkPSVzOiAlcyIsIGZpZWxkX25hbWUsIGUpDQogICAgICAgIHJldHVybiBOb25lDQogICAgZmluYWxseToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgY2xpZW50LmNsb3NlKCkNCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoNCiAgICAgICAgICAgIHBhc3MNCg0KDQpkZWYgX3F1ZXJ5X2luZmx1eGRiX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgZmllbGRfbmFtZTogc3RyLA0KICAgIHRhcmdldF90aW1lOiBkYXRldGltZSwNCiAgICBpbmZsdXhfdXJsOiBzdHIsDQogICAgaW5mbHV4X29yZzogc3RyLA0KICAgIGluZmx1eF90b2tlbjogc3RyLA0KICAgIGluZmx1eF9idWNrZXQ6IHN0ciwNCiAgICBpbmZsdXhfbWVhc3VyZW1lbnQ6IHN0ciwNCiAgICBmaWx0ZXJzOiBPcHRpb25hbFtEaWN0W3N0ciwgc3RyXV0gPSBOb25lLA0KKSAtPiBPcHRpb25hbFtmbG9hdF06DQogICAgIiIi5p+l6K+iIEluZmx1eERCIOiOt+WPluaMh+WumuWtl+auteWcqOaMh+WumuaXtumXtOeCueeahOeerOaXtuWAvO+8iOS7heW9kyBsb2FkX3N0YXR1cyA9IDEg5pe277yJIiIiDQogICAgdHJ5Og0KICAgICAgICBmcm9tIGluZmx1eGRiX2NsaWVudCBpbXBvcnQgSW5mbHV4REJDbGllbnQNCiAgICAgICAgaW1wb3J0IHBhbmRhcyBhcyBwZA0KICAgICAgICBpbXBvcnQgd2FybmluZ3MNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQuY2xpZW50Lndhcm5pbmdzIGltcG9ydCBNaXNzaW5nUGl2b3RGdW5jdGlvbg0KICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICAgICAgTE9HR0VSLndhcm5pbmcoIkluZmx1eERCIGNsaWVudCBub3QgYXZhaWxhYmxlLCBza2lwIHF1ZXJ5IGZvciBmaWVsZD0lcyIsIGZpZWxkX25hbWUpDQogICAgICAgIHJldHVybiBOb25lDQoNCiAgICB0cnk6DQogICAgICAgIGNsaWVudCA9IEluZmx1eERCQ2xpZW50KHVybD1pbmZsdXhfdXJsLCBvcmc9aW5mbHV4X29yZywgdG9rZW49aW5mbHV4X3Rva2VuKQ0KICAgICAgICBxdWVyeV9hcGkgPSBjbGllbnQucXVlcnlfYXBpKCkNCg0KICAgICAgICBMT0dHRVIuZGVidWcoDQogICAgICAgICAgICAiUXVlcnlpbmcgZmllbGQ9JXMgbWVhc3VyZW1lbnQ9JXMgdGFyZ2V0X3RpbWU9JXMgZmlsdGVycz0lcyAod2l0aCBsb2FkX3N0YXR1cz0xKSIsDQogICAgICAgICAgICBmaWVsZF9uYW1lLA0KICAgICAgICAgICAgaW5mbHV4X21lYXN1cmVtZW50LA0KICAgICAgICAgICAgdGFyZ2V0X3RpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicpLA0KICAgICAgICAgICAgZmlsdGVycyBvciB7fSwNCiAgICAgICAgKQ0KDQogICAgICAgICMg5p+l6K+i6YC76L6R77ya5p+l6K+i55uu5qCH5pe26Ze054K56ZmE6L+R55qE5pWw5o2u77yM5L2G5Y+q6KaBIGxvYWRfc3RhdHVzID0gMSDnmoTmlbDmja4NCiAgICAgICAgIyDkvb/nlKjkuIDkuKrml7bpl7Tnqpflj6PmnaXmn6Xmib7mnIDmjqXov5HnmoTmnInmlYjmlbDmja7ngrkNCiAgICAgICAgd2luZG93X21pbnV0ZXMgPSAxMCAgIyDliY3lkI4xMOWIhumSn+eahOeql+WPow0KICAgICAgICANCiAgICAgICAgcXVlcnlfc3RhcnQgPSB0YXJnZXRfdGltZSAtIHRpbWVkZWx0YShtaW51dGVzPXdpbmRvd19taW51dGVzKQ0KICAgICAgICBxdWVyeV9lbmQgPSB0YXJnZXRfdGltZSArIHRpbWVkZWx0YShtaW51dGVzPXdpbmRvd19taW51dGVzKQ0KICAgICAgICANCiAgICAgICAgcXVlcnlfc3RhcnRfcmZjID0gcXVlcnlfc3RhcnQuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicpDQogICAgICAgIHF1ZXJ5X2VuZF9yZmMgPSBxdWVyeV9lbmQuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicpDQoNCiAgICAgICAgIyDmnoTlu7rov4fmu6TmnaHku7YNCiAgICAgICAgdGFnX2ZpbHRlcnMgPSAiIg0KICAgICAgICBpZiBmaWx0ZXJzOg0KICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZmlsdGVycy5pdGVtcygpOg0KICAgICAgICAgICAgICAgIHRhZ19maWx0ZXJzICs9IGYnXG4gIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIntrZXl9Il0gPT0gInt2YWx1ZX0iKScNCg0KICAgICAgICAjIOafpeivoua4qeW6puaVsOaNru+8iOS4jemcgOimgWxvYWRfc3RhdHVz562b6YCJ77yM5Zug5Li65bey57uP5Z+65LqO5pyJ5pWI5pe26Ze054K55p+l6K+i77yJDQogICAgICAgIGZsdXggPSBmJycnDQpmcm9tKGJ1Y2tldDogIntpbmZsdXhfYnVja2V0fSIpDQogIHw+IHJhbmdlKHN0YXJ0OiB7cXVlcnlfc3RhcnRfcmZjfSwgc3RvcDoge3F1ZXJ5X2VuZF9yZmN9KQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfbWVhc3VyZW1lbnQiXSA9PSAie2luZmx1eF9tZWFzdXJlbWVudH0iKQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfZmllbGQiXSA9PSAie2ZpZWxkX25hbWV9Iil7dGFnX2ZpbHRlcnN9DQogIHw+IHNvcnQoY29sdW1uczogWyJfdGltZSJdKQ0KICB8PiBsYXN0KCkNCiAgfD4geWllbGQobmFtZTogImluc3RhbnRhbmVvdXNfYXRfZWZmZWN0aXZlX3RpbWUiKQ0KJycnLnN0cmlwKCkNCg0KICAgICAgICBMT0dHRVIuZGVidWcoIkZsdXjmn6Xor6Lor63lj6U6XG4lcyIsIGZsdXgpDQoNCiAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOg0KICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBNaXNzaW5nUGl2b3RGdW5jdGlvbikNCiAgICAgICAgICAgIGZyYW1lcyA9IHF1ZXJ5X2FwaS5xdWVyeV9kYXRhX2ZyYW1lKGZsdXgpDQogICAgICAgIA0KICAgICAgICBpZiBpc2luc3RhbmNlKGZyYW1lcywgbGlzdCk6DQogICAgICAgICAgICBkZiA9IHBkLmNvbmNhdChmcmFtZXMsIGlnbm9yZV9pbmRleD1UcnVlKSBpZiBmcmFtZXMgZWxzZSBwZC5EYXRhRnJhbWUoKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgZGYgPSBmcmFtZXMNCg0KICAgICAgICAjIOiOt+WPlueerOaXtuWAvO+8iOacgOi/keeahOS4gOS4quacieaViOaVsOaNrueCue+8iQ0KICAgICAgICBpZiBkZi5lbXB0eSBvciAnX3ZhbHVlJyBub3QgaW4gZGYuY29sdW1uczoNCiAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygiTm8gdmFsaWQgZGF0YSBmb3VuZCBmb3IgZmllbGQ9JXMgYXQgZWZmZWN0aXZlIHRpbWUgcG9pbnQiLCBmaWVsZF9uYW1lKQ0KICAgICAgICAgICAgcmV0dXJuIE5vbmUNCiAgICAgICAgICAgIA0KICAgICAgICAjIOWPluesrOS4gOihjOeahOWAvO+8iOWboOS4uuafpeivouW3sue7j+aOkuW6j+W5tuWPluS6hmxhc3QoKe+8iQ0KICAgICAgICBpbnN0YW50X3ZhbHVlID0gZGZbJ192YWx1ZSddLmlsb2NbMF0NCiAgICAgICAgaWYgcGQuaXNuYShpbnN0YW50X3ZhbHVlKToNCiAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygiSW5zdGFudGFuZW91cyB2YWx1ZSBpcyBOYU4gZm9yIGZpZWxkPSVzIiwgZmllbGRfbmFtZSkNCiAgICAgICAgICAgIHJldHVybiBOb25lDQoNCiAgICAgICAgdmFsdWUgPSBmbG9hdChpbnN0YW50X3ZhbHVlKQ0KICAgICAgICANCiAgICAgICAgIyDlpoLmnpzmnInml7bpl7Tkv6Hmga/vvIzorrDlvZXlrp7pmYXnmoTmlbDmja7ml7bpl7TngrkNCiAgICAgICAgaWYgJ190aW1lJyBpbiBkZi5jb2x1bW5zOg0KICAgICAgICAgICAgYWN0dWFsX3RpbWUgPSBkZlsnX3RpbWUnXS5pbG9jWzBdDQogICAgICAgICAgICBMT0dHRVIuZGVidWcoIkZpZWxkPSVzIGluc3RhbnRhbmVvdXNfdmFsdWU9JS4zZiBhY3R1YWxfdGltZT0lcyAoYXQgZWZmZWN0aXZlIHRpbWUpIiwgDQogICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lLCB2YWx1ZSwgYWN0dWFsX3RpbWUpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBMT0dHRVIuZGVidWcoIkZpZWxkPSVzIGluc3RhbnRhbmVvdXNfdmFsdWU9JS4zZiAoYXQgZWZmZWN0aXZlIHRpbWUpIiwgZmllbGRfbmFtZSwgdmFsdWUpDQogICAgICAgICAgICANCiAgICAgICAgcmV0dXJuIHZhbHVlDQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KICAgICAgICBMT0dHRVIuZXJyb3IoIkVycm9yIHF1ZXJ5aW5nIEluZmx1eERCIGZvciBmaWVsZD0lczogJXMiLCBmaWVsZF9uYW1lLCBlKQ0KICAgICAgICByZXR1cm4gTm9uZQ0KICAgIGZpbmFsbHk6DQogICAgICAgIHRyeToNCiAgICAgICAgICAgIGNsaWVudC5jbG9zZSgpDQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246DQogICAgICAgICAgICBwYXNzDQoNCg0KZGVmIF9sb2FkX3RlbXBlcmF0dXJlX2RhdGFfd2l0aF9sb2FkX3N0YXR1cygNCiAgICB0aW1lX3Nsb3RzOiBMaXN0W3N0cl0sDQogICAgc2VjdGlvbnM6IExpc3RbRGljdFtzdHIsIEFueV1dLA0KICAgIHN0YXJ0X3RpbWU6IE9wdGlvbmFsW2RhdGV0aW1lXSwNCiAgICBlbmRfdGltZTogT3B0aW9uYWxbZGF0ZXRpbWVdLA0KKSAtPiBEaWN0W3N0ciwgRGljdFtzdHIsIGZsb2F0XV06DQogICAgIiIi5LuOIEluZmx1eERCIOafpeivouaJgOaciea1i+ivlemDqOS9jeWcqOWQhOaXtumXtOeCueeahOeerOaXtua4qeW6puWAvO+8iOS7heW9kyBsb2FkX3N0YXR1cyA9IDEg5pe277yJIiIiDQogICAgaWYgbm90IHN0YXJ0X3RpbWUgb3Igbm90IGVuZF90aW1lOg0KICAgICAgICBMT0dHRVIuaW5mbygiU2tpcCBkYXRhIHF1ZXJ5OiBtaXNzaW5nIHN0YXJ0L2VuZCAoJXMsICVzKSIsIHN0YXJ0X3RpbWUsIGVuZF90aW1lKQ0KICAgICAgICByZXR1cm4ge30NCiAgICANCiAgICBpbmZsdXhfY29uZmlnID0gX2dldF9pbmZsdXhfY29uZmlnKCkNCiAgICANCiAgICBpZiBub3QgYWxsKFtpbmZsdXhfY29uZmlnWyd1cmwnXSwgaW5mbHV4X2NvbmZpZ1snb3JnJ10sIGluZmx1eF9jb25maWdbJ3Rva2VuJ10sIA0KICAgICAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ2J1Y2tldCddLCBpbmZsdXhfY29uZmlnWydtZWFzdXJlbWVudCddXSk6DQogICAgICAgIExPR0dFUi53YXJuaW5nKA0KICAgICAgICAgICAgIlNraXAgZGF0YSBxdWVyeTogbWlzc2luZyBJbmZsdXggY29uZmlnIHVybD0lcyBidWNrZXQ9JXMgbWVhc3VyZW1lbnQ9JXMiLA0KICAgICAgICAgICAgaW5mbHV4X2NvbmZpZ1sndXJsJ10gb3IgIjxlbXB0eT4iLA0KICAgICAgICAgICAgaW5mbHV4X2NvbmZpZ1snYnVja2V0J10gb3IgIjxlbXB0eT4iLA0KICAgICAgICAgICAgaW5mbHV4X2NvbmZpZ1snbWVhc3VyZW1lbnQnXSBvciAiPGVtcHR5PiIsDQogICAgICAgICkNCiAgICAgICAgcmV0dXJuIHt9DQogICAgDQogICAgIyDorqHnrpfmgLvml7bplb/vvIjlsI/ml7bvvIkNCiAgICB0b3RhbF9kdXJhdGlvbiA9IChlbmRfdGltZSAtIHN0YXJ0X3RpbWUpLnRvdGFsX3NlY29uZHMoKSAvIDM2MDAuMA0KICAgIExPR0dFUi5pbmZvKA0KICAgICAgICAiRmV0Y2ggaW5zdGFudGFuZW91cyB0ZW1wZXJhdHVyZSBkYXRhIChsb2FkX3N0YXR1cz0xKSB3aW5kb3c9JXPihpIlcyB0b3RhbF9ob3Vycz0lLjNmIHRpbWVfcG9pbnRzPSVzIiwNCiAgICAgICAgc3RhcnRfdGltZS5pc29mb3JtYXQoKSwNCiAgICAgICAgZW5kX3RpbWUuaXNvZm9ybWF0KCksDQogICAgICAgIHRvdGFsX2R1cmF0aW9uLA0KICAgICAgICAiLCIuam9pbih0aW1lX3Nsb3RzKSwNCiAgICApDQogICAgDQogICAgIyDmlLbpm4bmiYDmnInpnIDopoHmn6Xor6LnmoTlrZfmrrUNCiAgICBxdWVyeV90YXJnZXRzOiBMaXN0W3R1cGxlW3N0ciwgRGljdFtzdHIsIEFueV1dXSA9IFtdDQogICAgZm9yIHNlY3Rpb24gaW4gc2VjdGlvbnM6DQogICAgICAgIGVudHJpZXMgPSBzZWN0aW9uLmdldCgiZW50cmllcyIpIG9yIFtdDQogICAgICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzOg0KICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbnRyeSwgZGljdCk6DQogICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9IGVudHJ5LmdldCgiZmllbGQiLCAiIikNCiAgICAgICAgICAgICAgICBpZiBmaWVsZF9uYW1lOg0KICAgICAgICAgICAgICAgICAgICBxdWVyeV90YXJnZXRzLmFwcGVuZCgoZmllbGRfbmFtZSwgZW50cnkpKQ0KDQogICAgaWYgbm90IHF1ZXJ5X3RhcmdldHM6DQogICAgICAgIHJldHVybiB7fQ0KICAgIA0KICAgICMg6K6h566X5Z+65LqO5pyJ5pWI6L+Q6KGM5pe26Ze057Sv6K6h55qE55yf5a6e5pe26Ze054K5DQogICAgTE9HR0VSLmluZm8oIj09PSDlvIDlp4vorqHnrpfmnInmlYjml7bpl7TngrkgPT09IikNCiAgICBlZmZlY3RpdmVfdGltZV9wb2ludHMgPSBfY2FsY3VsYXRlX2VmZmVjdGl2ZV90aW1lX3BvaW50cygNCiAgICAgICAgc3RhcnRfdGltZSwgZW5kX3RpbWUsIHRpbWVfc2xvdHMsIGluZmx1eF9jb25maWcNCiAgICApDQogICAgDQogICAgIyDkuLrmr4/kuKrmnInmlYjml7bpl7Tngrnmn6Xor6LmuKnluqbmlbDmja4NCiAgICB0ZW1wZXJhdHVyZV9kYXRhOiBEaWN0W3N0ciwgRGljdFtzdHIsIGZsb2F0XV0gPSB7fQ0KICAgIA0KICAgIGZvciBpZHgsIHNsb3Rfc3RyIGluIGVudW1lcmF0ZSh0aW1lX3Nsb3RzKToNCiAgICAgICAgdGFyZ2V0X3RpbWVfcG9pbnQgPSBlZmZlY3RpdmVfdGltZV9wb2ludHMuZ2V0KHNsb3Rfc3RyKQ0KICAgICAgICANCiAgICAgICAgaWYgdGFyZ2V0X3RpbWVfcG9pbnQgaXMgTm9uZToNCiAgICAgICAgICAgIExPR0dFUi53YXJuaW5nKCJObyBlZmZlY3RpdmUgdGltZSBwb2ludCBjYWxjdWxhdGVkIGZvciBzbG90ICVzLCBza2lwcGluZyIsIHNsb3Rfc3RyKQ0KICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgDQogICAgICAgIExPR0dFUi5kZWJ1ZygiUHJvY2Vzc2luZyBzbG90ICVzIGF0IGVmZmVjdGl2ZSB0aW1lIHBvaW50ICVzIiwgDQogICAgICAgICAgICAgICAgICAgIHNsb3Rfc3RyLCB0YXJnZXRfdGltZV9wb2ludC5zdHJmdGltZSgnJVktJW0tJWQgJUg6JU06JVMnKSkNCiAgICAgICAgDQogICAgICAgIGZvciBmaWVsZF9uYW1lLCBlbnRyeSBpbiBxdWVyeV90YXJnZXRzOg0KICAgICAgICAgICAgcmVzdWx0X2tleSA9IGVudHJ5LmdldCgicmVzdWx0X2tleSIpIG9yIGZpZWxkX25hbWUNCiAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfa2V5Og0KICAgICAgICAgICAgICAgIHJlc3VsdF9rZXkgPSBmaWVsZF9uYW1lDQogICAgICAgICAgICBlbnRyeV9maWx0ZXJzID0gZW50cnkuZ2V0KCJmaWx0ZXJzIikgaWYgaXNpbnN0YW5jZShlbnRyeSwgZGljdCkgZWxzZSBOb25lDQogICAgICAgICAgICBpZiByZXN1bHRfa2V5IG5vdCBpbiB0ZW1wZXJhdHVyZV9kYXRhOg0KICAgICAgICAgICAgICAgIHRlbXBlcmF0dXJlX2RhdGFbcmVzdWx0X2tleV0gPSB7fQ0KDQogICAgICAgICAgICAjIOS9v+eUqOe0ouW8leS9nOS4umtlee+8jOWboOS4uuWPr+iDveaciemHjeWkjeeahOaXtumXtOWIu+W6pg0KICAgICAgICAgICAgc2xvdF9rZXkgPSBmIntpZHh9X3tzbG90X3N0cn0iICAjIOS9v+eUqOe0ouW8lSvml7bpl7TliLvluqbkvZzkuLrllK/kuIBrZXkNCg0KICAgICAgICAgICAgIyDmn6Xor6Lnnqzml7blgLzvvIjlnKjmnInmlYjml7bpl7TngrnvvIkNCiAgICAgICAgICAgIHZhbHVlID0gX3F1ZXJ5X2luZmx1eGRiX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgICAgICAgICAgICAgZmllbGRfbmFtZSwNCiAgICAgICAgICAgICAgICB0YXJnZXRfdGltZV9wb2ludCwNCiAgICAgICAgICAgICAgICBpbmZsdXhfY29uZmlnWyd1cmwnXSwNCiAgICAgICAgICAgICAgICBpbmZsdXhfY29uZmlnWydvcmcnXSwNCiAgICAgICAgICAgICAgICBpbmZsdXhfY29uZmlnWyd0b2tlbiddLA0KICAgICAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ2J1Y2tldCddLA0KICAgICAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ21lYXN1cmVtZW50J10sDQogICAgICAgICAgICAgICAgZmlsdGVycz1lbnRyeV9maWx0ZXJzIGlmIGVudHJ5X2ZpbHRlcnMgZWxzZSBOb25lLA0KICAgICAgICAgICAgKQ0KDQogICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToNCiAgICAgICAgICAgICAgICB0ZW1wZXJhdHVyZV9kYXRhW3Jlc3VsdF9rZXldW3Nsb3Rfa2V5XSA9IHZhbHVlDQogICAgICAgICAgICAgICAgTE9HR0VSLmRlYnVnKA0KICAgICAgICAgICAgICAgICAgICAiU2xvdD0lcyBmaWVsZD0lcyB2YWx1ZT0lLjNmIGF0IGVmZmVjdGl2ZV90aW1lPSVzIiwNCiAgICAgICAgICAgICAgICAgICAgc2xvdF9rZXksDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdF9rZXksDQogICAgICAgICAgICAgICAgICAgIHZhbHVlLA0KICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdGltZV9wb2ludC5zdHJmdGltZSgnJUg6JU06JVMnKQ0KICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgTE9HR0VSLmRlYnVnKA0KICAgICAgICAgICAgICAgICAgICAiU2xvdD0lcyBmaWVsZD0lcyBub19kYXRhIGF0IGVmZmVjdGl2ZV90aW1lPSVzIiwNCiAgICAgICAgICAgICAgICAgICAgc2xvdF9rZXksDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdF9rZXksDQogICAgICAgICAgICAgICAgICAgIHRhcmdldF90aW1lX3BvaW50LnN0cmZ0aW1lKCclSDolTTolUycpDQogICAgICAgICAgICAgICAgKQ0KDQogICAgcmV0dXJuIHRlbXBlcmF0dXJlX2RhdGENCg0KDQpkZWYgX2J1aWxkX2NlbGxzX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgdGltZV9zbG90czogTGlzdFtzdHJdLA0KICAgIHNlY3Rpb25zOiBMaXN0W0RpY3Rbc3RyLCBBbnldXSwNCiAgICBtb3Rvcl9zcGVlZDogc3RyLA0KICAgIHN0YXJ0X3RpbWU6IE9wdGlvbmFsW2RhdGV0aW1lXSwNCiAgICBlbmRfdGltZTogT3B0aW9uYWxbZGF0ZXRpbWVdLA0KICAgIHRlbXBlcmF0dXJlX2RhdGE6IERpY3Rbc3RyLCBEaWN0W3N0ciwgZmxvYXRdXSwNCiAgICB1c2VfZGVmYXVsdHM6IGJvb2wgPSBGYWxzZSwNCikgLT4gTGlzdFtEaWN0W3N0ciwgQW55XV06DQogICAgIiIi5p6E5bu65Y2V5YWD5qC85pWw5o2u77yI5Z+65LqOIGxvYWRfc3RhdHVzID0gMSDnmoTmnInmlYjmlbDmja7vvIktIOS4juWOn+Wni+iEmuacrOe7k+aehOWujOWFqOS4gOiHtCIiIg0KICAgIGNlbGxzOiBMaXN0W0RpY3Rbc3RyLCBBbnldXSA9IFtdDQoNCiAgICBkZWYgYWRkX2NlbGwocm93OiBpbnQsIGNvbDogaW50LCB2YWx1ZTogc3RyID0gIiIsIHJvd3NwYW46IGludCA9IDEsIGNvbHNwYW46IGludCA9IDEpIC0+IE5vbmU6DQogICAgICAgIHBheWxvYWQ6IERpY3Rbc3RyLCBBbnldID0geyJyb3ciOiByb3csICJjb2wiOiBjb2wsICJ2YWx1ZSI6IHZhbHVlfQ0KICAgICAgICBpZiByb3dzcGFuID4gMToNCiAgICAgICAgICAgIHBheWxvYWRbInJvd3NwYW4iXSA9IHJvd3NwYW4NCiAgICAgICAgaWYgY29sc3BhbiA+IDE6DQogICAgICAgICAgICBwYXlsb2FkWyJjb2xzcGFuIl0gPSBjb2xzcGFuDQogICAgICAgIGNlbGxzLmFwcGVuZChwYXlsb2FkKQ0KDQogICAgIyDmqKHmnb/lt6bkvqfmoIfpopjliJflt7Lnu4/ljrvpmaTvvIzov5nph4zku4XnlJ/miJDnuq/mlbDmja7ljLrvvIzku44gKDAsMCkg5byA5aeL5aGr5YWl5pWw5YC844CCDQogICAgIyBjdXJyZW50X3JvdyDlr7nlupTmqKHmnb/kuK3nmoTlrp7pmYXmlbDmja7ooYzntKLlvJXjgIINCiAgICBjdXJyZW50X3JvdyA9IDANCiAgICBmb3Igc2VjdGlvbiBpbiBzZWN0aW9uczoNCiAgICAgICAgZW50cmllcyA9IHNlY3Rpb24uZ2V0KCJlbnRyaWVzIikgb3IgW10NCiAgICAgICAgaWYgbm90IGVudHJpZXM6DQogICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAjIOavj+S4qua1i+ivlemDqOS9jeWtkOmhueWvueW6lOaooeadv+S4reeahOS4gOihjA0KICAgICAgICBmb3IgZW50cnkgaW4gZW50cmllczoNCiAgICAgICAgICAgICMg5pSv5oyB5paw5qC85byP77yI5bimIGZpZWxkIOaYoOWwhO+8ieWSjOaXp+agvOW8j++8iOe6r+Wtl+espuS4su+8iQ0KICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbnRyeSwgZGljdCk6DQogICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9IGVudHJ5LmdldCgiZmllbGQiLCAiIikNCiAgICAgICAgICAgICAgICBlbnRyeV9maWx0ZXJzID0gZW50cnkuZ2V0KCJmaWx0ZXJzIikNCiAgICAgICAgICAgICAgICBlbnRyeV9rZXkgPSBlbnRyeS5nZXQoInJlc3VsdF9rZXkiKSBvciBmaWVsZF9uYW1lDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAiIg0KICAgICAgICAgICAgICAgIGVudHJ5X2ZpbHRlcnMgPSBOb25lDQogICAgICAgICAgICAgICAgZW50cnlfa2V5ID0gIiINCg0KICAgICAgICAgICAgIyDku4XovpPlh7rmlbDlgLzliJfvvJrliJfntKLlvJXnm7TmjqXlr7nlupTml7bpl7TmrrUNCiAgICAgICAgICAgICMg5by65Yi25aGr5YWF5omA5pyJ5YiX77yM5LyY5YWI5L2/55So5p+l6K+i5pWw5o2u77yM5ZCm5YiZ5L2/55So6buY6K6k5YC8DQogICAgICAgICAgICBpZiBmaWVsZF9uYW1lOg0KICAgICAgICAgICAgICAgIHRhcmdldF9rZXkgPSBlbnRyeV9rZXkgb3IgZmllbGRfbmFtZQ0KDQogICAgICAgICAgICAgICAgIyDpgY3ljobmiYDmnInml7bpl7TmrrXliJfvvIznoa7kv53mr4/kuIDliJfpg73mnInmlbDmja4NCiAgICAgICAgICAgICAgICBmb3IgY29sX2lkeCwgc2xvdCBpbiBlbnVtZXJhdGUodGltZV9zbG90cyk6DQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTm9uZQ0KDQogICAgICAgICAgICAgICAgICAgICMg5LyY5YWI5L2/55So5p+l6K+i5Yiw55qE5pWw5o2uDQogICAgICAgICAgICAgICAgICAgIGlmIHRlbXBlcmF0dXJlX2RhdGE6DQogICAgICAgICAgICAgICAgICAgICAgICBzbG90X2RhdGEgPSB0ZW1wZXJhdHVyZV9kYXRhLmdldCh0YXJnZXRfa2V5LCB7fSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNsb3RfZGF0YToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90X2tleSA9IGYie2NvbF9pZHh9X3tzbG90fSINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNsb3RfZGF0YS5nZXQoc2xvdF9rZXkpDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZSBhbmQgdXNlX2RlZmF1bHRzOg0KICAgICAgICAgICAgICAgICAgICAgICAgIyDkvb/nlKjln7rnoYDpu5jorqTlgLwgKyDml7bpl7TmrrXlgY/np7vvvIjmr4/kuKrml7bpl7TmrrXlop7liqAwLjHluqbvvIkNCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfYmFzZV92YWx1ZSA9IDI1LjAgICMg566A5YyW55qE6buY6K6k5YC8DQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lX29mZnNldCA9IGNvbF9pZHggKiAwLjENCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdF9iYXNlX3ZhbHVlICsgdGltZV9vZmZzZXQNCg0KICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfc3RyID0gIiINCiAgICAgICAgICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICAgICAgICAgICMg5qC85byP5YyW5Li65a2X56ym5Liy77yI5L+d55WZMeS9jeWwj+aVsO+8iQ0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfc3RyID0gZiJ7dmFsdWU6LjFmfSINCg0KICAgICAgICAgICAgICAgICAgICBhZGRfY2VsbChjdXJyZW50X3JvdywgY29sX2lkeCwgdmFsdWVfc3RyKQ0KICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICAjIOWmguaenOayoeacieWtl+auteWQje+8jOWhq+WFheepuuWtl+espuS4sg0KICAgICAgICAgICAgICAgIGZvciBjb2xfaWR4IGluIHJhbmdlKGxlbih0aW1lX3Nsb3RzKSk6DQogICAgICAgICAgICAgICAgICAgIGFkZF9jZWxsKGN1cnJlbnRfcm93LCBjb2xfaWR4LCAiIikNCiAgICAgICAgICAgIGN1cnJlbnRfcm93ICs9IDENCg0KICAgIHJldHVybiBjZWxscw0KDQoNCmRlZiBidWlsZF90ZW1wZXJhdHVyZV90YWJsZV93aXRoX2xvYWRfc3RhdHVzKF86IERpY3Rbc3RyLCBBbnldKSAtPiBEaWN0W3N0ciwgQW55XToNCiAgICAiIiLmnoTlu7rmuKnluqbooajmoLzmlbDmja7vvIjku4Xkvb/nlKggbG9hZF9zdGF0dXMgPSAxIOeahOacieaViOaVsOaNru+8iSIiIg0KICAgIF9zZXR1cF9sb2dnaW5nKCkNCiAgICANCiAgICB0b2tlbiA9IG9zLmVudmlyb24uZ2V0KCJUQUJMRV9UT0tFTiIsICJzY3JpcHRUYWJsZTEiKQ0KICAgIHJvd19vZmZzZXQgPSBpbnQob3MuZW52aXJvbi5nZXQoIlRBQkxFX1NUQVJUX1JPVyIsICIwIikgb3IgMCkNCiAgICBjb2xfb2Zmc2V0ID0gaW50KG9zLmVudmlyb24uZ2V0KCJUQUJMRV9TVEFSVF9DT0wiLCAiMCIpIG9yIDApDQogICAgbW90b3Jfc3BlZWQgPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfTU9UT1JfU1BFRUQiLCAiOTgwUlBNIikNCiAgICANCiAgICAjIOino+aekOWunumqjOaXtumXtOiMg+WbtA0KICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lID0gX3BhcnNlX2V4cGVyaW1lbnRfdGltZXMoKQ0KICAgIA0KICAgIHRpbWVfc2xvdHMgPSBfdGltZV9zbG90cygpDQogICAgc2VjdGlvbnMgPSBfZGVmYXVsdF9zZWN0aW9ucygpDQogICAgDQogICAgIyDmn6Xor6LmuKnluqbmlbDmja7vvIjku4XlvZMgbG9hZF9zdGF0dXMgPSAxIOaXtu+8iQ0KICAgIHRlbXBlcmF0dXJlX2RhdGEgPSBfbG9hZF90ZW1wZXJhdHVyZV9kYXRhX3dpdGhfbG9hZF9zdGF0dXModGltZV9zbG90cywgc2VjdGlvbnMsIHN0YXJ0X3RpbWUsIGVuZF90aW1lKQ0KICAgIA0KICAgICMg5aeL57uI56aB5q2i6buY6K6k5pWw5o2u77yM5L+d6K+B5p+l6K+i5LiN5Yiw5YC85pe25L+d5oyB56m655m9DQogICAgdXNlX2RlZmF1bHRzID0gRmFsc2UNCiAgICANCiAgICBjZWxscyA9IF9idWlsZF9jZWxsc193aXRoX2xvYWRfc3RhdHVzKA0KICAgICAgICB0aW1lX3Nsb3RzLCANCiAgICAgICAgc2VjdGlvbnMsIA0KICAgICAgICBtb3Rvcl9zcGVlZCwgDQogICAgICAgIHN0YXJ0X3RpbWUsIA0KICAgICAgICBlbmRfdGltZSwgDQogICAgICAgIHRlbXBlcmF0dXJlX2RhdGEsDQogICAgICAgIHVzZV9kZWZhdWx0cz11c2VfZGVmYXVsdHMNCiAgICApDQogICAgDQogICAgIyDlupTnlKjooYzlgY/np7sNCiAgICBmb3IgY2VsbCBpbiBjZWxsczoNCiAgICAgICAgY2VsbFsicm93Il0gKz0gNA0KICAgIA0KICAgICMg5re75Yqg5a6e6aqM5pe26Ze05L+h5oGv77yI5LiO5Y6f5aeL6ISa5pys5a6M5YWo5LiA6Ie055qE6YC76L6R77yJDQogICAgc3RhcnRfdGltZV9yb3cgPSAxDQogICAgc3RhcnRfdGltZV92YWx1ZV9jb2wgPSAxDQogICAgZW5kX3RpbWVfdmFsdWVfY29sID0gMw0KICAgIA0KICAgICMg6I635Y+W5Y6f5aeL5pe26Ze05a2X56ym5Liy6L+b6KGM5aSE55CG77yI5LiO5Y6f5aeL6ISa5pys5L+d5oyB5LiA6Ie077yJDQogICAgc3RhcnRfc3RyID0gb3MuZW52aXJvbi5nZXQoIkVYUEVSSU1FTlRfU1RBUlQiLCAiIikuc3RyaXAoKQ0KICAgIGlmIHN0YXJ0X3N0ciBhbmQgc3RhcnRfdGltZToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgIyDkvb/nlKjkuI7ljp/lp4vohJrmnKznm7jlkIznmoTml7bpl7TlpITnkIbpgLvovpENCiAgICAgICAgICAgIHV0Y19hd2FyZV9kdCA9IGRhdGV0aW1lLnN0cnB0aW1lKHN0YXJ0X3N0ciwgIiVZLSVtLSVkVCVIOiVNOiVTJXoiKQ0KICAgICAgICAgICAgbG9jYWxfZHQxID0gdXRjX2F3YXJlX2R0LmFzdGltZXpvbmUodHo9Tm9uZSkNCiAgICAgICAgICAgIGxvY2FsX2R0MiA9IHV0Y19hd2FyZV9kdC5hc3RpbWV6b25lKHR6PU5vbmUpICsgdGltZWRlbHRhKGhvdXJzPTMuNSkNCiAgICAgICAgICAgIHN0YXJ0X3RpbWVfdmFsdWUgPSBsb2NhbF9kdDEuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIikNCiAgICAgICAgICAgIGVuZF90aW1lX3ZhbHVlID0gbG9jYWxfZHQyLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpDQogICAgICAgICAgICBjZWxscy5hcHBlbmQoeyJyb3ciOiBzdGFydF90aW1lX3JvdywgImNvbCI6IHN0YXJ0X3RpbWVfdmFsdWVfY29sLCAidmFsdWUiOiBzdGFydF90aW1lX3ZhbHVlfSkNCiAgICAgICAgICAgIGNlbGxzLmFwcGVuZCh7InJvdyI6IHN0YXJ0X3RpbWVfcm93LCAiY29sIjogZW5kX3RpbWVfdmFsdWVfY29sLCAidmFsdWUiOiBlbmRfdGltZV92YWx1ZX0pDQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToNCiAgICAgICAgICAgIExPR0dFUi53YXJuaW5nKCJGYWlsZWQgdG8gcHJvY2VzcyBleHBlcmltZW50IHRpbWUgc3RyaW5nczogJXMiLCBlKQ0KICAgIA0KICAgICMg5p+l6K+i546v5aKD5rip5bqm77yI5LiO5Y6f5aeL6ISa5pys5a6M5YWo5LiA6Ie055qE6YC76L6R77yJDQogICAgaW5mbHV4X3VybCA9IG9zLmVudmlyb24uZ2V0KCJJTkZMVVhfVVJMIiwgIiIpLnN0cmlwKCkNCiAgICBpbmZsdXhfb3JnID0gb3MuZW52aXJvbi5nZXQoIklORkxVWF9PUkciLCAiIikuc3RyaXAoKQ0KICAgIGluZmx1eF90b2tlbiA9IG9zLmVudmlyb24uZ2V0KCJJTkZMVVhfVE9LRU4iLCAiIikuc3RyaXAoKQ0KICAgIGluZmx1eF9idWNrZXQgPSBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX0JVQ0tFVCIsICJQQ00iKS5zdHJpcCgpDQogICAgaW5mbHV4X21lYXN1cmVtZW50ID0gb3MuZW52aXJvbi5nZXQoIklORkxVWF9NRUFTVVJFTUVOVCIsICJQQ01fTWVhc3VyZW1lbnQiKS5zdHJpcCgpDQogICAgDQogICAgaWYgc3RhcnRfdGltZSBhbmQgZW5kX3RpbWU6DQogICAgICAgICMg5a+55LqO546v5aKD5rip5bqm77yM5L2/55So5pe26Ze06IyD5Zu05p+l6K+i77yI5LiO5Y6f5aeL6ISa5pys6YC76L6R5LiA6Ie077yJDQogICAgICAgIHZhbHVlID0gX3F1ZXJ5X2luZmx1eGRiX3JhbmdlX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgICAgICAgICAi546v5aKD5rip5bqmIiwNCiAgICAgICAgICAgIHN0YXJ0X3RpbWUsDQogICAgICAgICAgICBlbmRfdGltZSwNCiAgICAgICAgICAgIGluZmx1eF91cmwsDQogICAgICAgICAgICBpbmZsdXhfb3JnLA0KICAgICAgICAgICAgaW5mbHV4X3Rva2VuLA0KICAgICAgICAgICAgaW5mbHV4X2J1Y2tldCwNCiAgICAgICAgICAgIGluZmx1eF9tZWFzdXJlbWVudCwNCiAgICAgICAgICAgIGZpbHRlcnM9eyJkYXRhX3R5cGUiOiAiTFNEQVEifSwNCiAgICAgICAgKQ0KICAgICAgICAjIOehruS/nXZhbHVl5LiN5pivTm9uZe+8jOmBv+WFjVdvcmQgQ09N5pON5L2c5byC5bi477yI5LiO5Y6f5aeL6ISa5pys5LiA6Ie077yJDQogICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgY2VsbHMuYXBwZW5kKHsicm93IjogMCwgImNvbCI6IDEsICJ2YWx1ZSI6IGYie3ZhbHVlOi4xZn0ifSkNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGNlbGxzLmFwcGVuZCh7InJvdyI6IDAsICJjb2wiOiAxLCAidmFsdWUiOiAiIn0pDQogICAgDQogICAgTE9HR0VSLmluZm8oDQogICAgICAgICJUZW1wZXJhdHVyZSB0YWJsZSBidWlsdCB3aXRoIGxvYWRfc3RhdHVzPTEgZmlsdGVyOiB0b2tlbj0lcyBjZWxscz0lZCB0aW1lX3Nsb3RzPSVzIiwNCiAgICAgICAgdG9rZW4sDQogICAgICAgIGxlbihjZWxscyksDQogICAgICAgICIsIi5qb2luKHRpbWVfc2xvdHMpLA0KICAgICkNCiAgICANCiAgICByZXR1cm4gew0KICAgICAgICAidG9rZW4iOiB0b2tlbiwNCiAgICAgICAgInN0YXJ0Um93Ijogcm93X29mZnNldCwNCiAgICAgICAgInN0YXJ0Q29sIjogY29sX29mZnNldCwNCiAgICAgICAgImNlbGxzIjogY2VsbHMsDQogICAgfQ0KDQoNCmRlZiBfbG9hZF9wYXlsb2FkKCkgLT4gRGljdFtzdHIsIEFueV06DQogICAgIiIi5LuO5qCH5YeG6L6T5YWl5oiW546v5aKD5Y+Y6YeP5Yqg6L29cGF5bG9hZOaVsOaNriIiIg0KICAgIHRyeToNCiAgICAgICAgIyDlsJ3or5Xku47moIflh4bovpPlhaXor7vlj5ZKU09ODQogICAgICAgIHRyeToNCiAgICAgICAgICAgIGltcG9ydCBzZWxlY3QNCiAgICAgICAgICAgIGlmIHNlbGVjdC5zZWxlY3QoW3N5cy5zdGRpbl0sIFtdLCBbXSwgMC4wKVswXToNCiAgICAgICAgICAgICAgICBwYXlsb2FkX3N0ciA9IHN5cy5zdGRpbi5yZWFkKCkuc3RyaXAoKQ0KICAgICAgICAgICAgICAgIGlmIHBheWxvYWRfc3RyOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhwYXlsb2FkX3N0cikNCiAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOg0KICAgICAgICAgICAgIyBXaW5kb3dz5LiKc2VsZWN05Y+v6IO95LiN5Y+v55So77yM5bCd6K+V55u05o6l6K+75Y+WDQogICAgICAgICAgICBpbXBvcnQgbXN2Y3J0DQogICAgICAgICAgICBpZiBtc3ZjcnQua2JoaXQoKToNCiAgICAgICAgICAgICAgICBwYXlsb2FkX3N0ciA9IHN5cy5zdGRpbi5yZWFkKCkuc3RyaXAoKQ0KICAgICAgICAgICAgICAgIGlmIHBheWxvYWRfc3RyOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhwYXlsb2FkX3N0cikNCiAgICBleGNlcHQgRXhjZXB0aW9uOg0KICAgICAgICBwYXNzDQogICAgDQogICAgIyDlpoLmnpzmsqHmnInmoIflh4bovpPlhaXvvIzov5Tlm57nqbrlrZflhbgNCiAgICByZXR1cm4ge30NCg0KDQpkZWYgX2xvZ19lbnZpcm9ubWVudF92YXJpYWJsZXMoKSAtPiBOb25lOg0KICAgICIiIuiusOW9leebuOWFs+eOr+Wig+WPmOmHjyIiIg0KICAgIGVudl92YXJzID0gWw0KICAgICAgICAiVEFCTEVfVE9LRU4iLCAiVEFCTEVfU1RBUlRfUk9XIiwgIlRBQkxFX1NUQVJUX0NPTCIsICJUQUJMRV9USU1FX1NMT1RTIiwgIlRBQkxFX01PVE9SX1NQRUVEIiwNCiAgICAgICAgIkVYUEVSSU1FTlRfU1RBUlQiLCAiRVhQRVJJTUVOVF9FTkQiLA0KICAgICAgICAiSU5GTFVYX1VSTCIsICJJTkZMVVhfT1JHIiwgIklORkxVWF9UT0tFTiIsICJJTkZMVVhfQlVDS0VUIiwgIklORkxVWF9NRUFTVVJFTUVOVCINCiAgICBdDQogICAgDQogICAgZm9yIHZhciBpbiBlbnZfdmFyczoNCiAgICAgICAgdmFsdWUgPSBvcy5lbnZpcm9uLmdldCh2YXIsICIiKQ0KICAgICAgICBpZiAiVE9LRU4iIGluIHZhciBhbmQgdmFsdWU6DQogICAgICAgICAgICB2YWx1ZSA9IF9tYXNrX3NlY3JldCh2YWx1ZSkNCiAgICAgICAgTE9HR0VSLmRlYnVnKCJFTlYgJXM9JXMiLCB2YXIsIHZhbHVlIG9yICI8ZW1wdHk+IikNCg0KDQpkZWYgbWFpbigpIC0+IGludDoNCiAgICB0cnk6DQogICAgICAgIHRyeToNCiAgICAgICAgICAgIGlmIG5vdCBsb2dnaW5nLmdldExvZ2dlcigpLmhhbmRsZXJzOg0KICAgICAgICAgICAgICAgIGxvZ19sZXZlbF9uYW1lID0gb3MuZW52aXJvbi5nZXQoIlRBQkxFX0xPR19MRVZFTCIsICJERUJVRyIpLnN0cmlwKCkgb3IgIkRFQlVHIg0KICAgICAgICAgICAgICAgIGxvZ19sZXZlbCA9IGdldGF0dHIobG9nZ2luZywgbG9nX2xldmVsX25hbWUudXBwZXIoKSwgbG9nZ2luZy5ERUJVRykNCiAgICAgICAgICAgICAgICBsb2dfZmlsZV9yYXcgPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfTE9HX0ZJTEUiLCAidGVzdC5sb2ciKS5zdHJpcCgpIG9yICJ0ZXN0LmxvZyINCiAgICAgICAgICAgICAgICBsb2dfZmlsZSA9IG9zLnBhdGguYWJzcGF0aChsb2dfZmlsZV9yYXcpDQoNCiAgICAgICAgICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKA0KICAgICAgICAgICAgICAgICAgICBsZXZlbD1sb2dfbGV2ZWwsDQogICAgICAgICAgICAgICAgICAgIGZvcm1hdD0iJShhc2N0aW1lKXMgWyUobGV2ZWxuYW1lKXNdICUobmFtZSlzOiAlKG1lc3NhZ2UpcyIsDQogICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPVsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuRmlsZUhhbmRsZXIobG9nX2ZpbGUsIGVuY29kaW5nPSJ1dGYtOCIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRlcnIpLA0KICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICBMT0dHRVIuaW5mbygiTG9nZ2luZyBpbml0aWFsaXplZCAtPiBmaWxlPSVzIGxldmVsPSVzIiwgbG9nX2ZpbGUsIGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKGxvZ19sZXZlbCkpDQogICAgICAgICAgICAgICAgX2xvZ19lbnZpcm9ubWVudF92YXJpYWJsZXMoKQ0KICAgICAgICAgICAgc3lzLnN0ZG91dC5yZWNvbmZpZ3VyZShlbmNvZGluZz0idXRmLTgiKSAgIyB0eXBlOiBpZ25vcmVbYXR0ci1kZWZpbmVkXQ0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uOg0KICAgICAgICAgICAgcGFzcw0KICAgICAgICANCiAgICAgICAgcGF5bG9hZCA9IF9sb2FkX3BheWxvYWQoKQ0KICAgICAgICB0YWJsZV9zcGVjID0gYnVpbGRfdGVtcGVyYXR1cmVfdGFibGVfd2l0aF9sb2FkX3N0YXR1cyhwYXlsb2FkKQ0KICAgICAgICByZXN1bHQgPSB7InRhYmxlcyI6IFt0YWJsZV9zcGVjXX0NCiAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhyZXN1bHQsIGVuc3VyZV9hc2NpaT1GYWxzZSkpDQogICAgICAgIHJldHVybiAwDQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6DQogICAgICAgIHByaW50KGYiZXJyb3I6IHtleGN9IiwgZmlsZT1zeXMuc3RkZXJyKQ0KICAgICAgICByZXR1cm4gMQ0KDQoNCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6DQogICAgc3lzLmV4aXQobWFpbigpKQ0K",
"scriptName": "table.py",
"remark": "PCM性能测试实验"
},
"configService": {
"host": "10.0.5.232",
"port": 5000,
"configPath": "config-1.2-debug.yaml"
},
"globalParameters": {
"parameters": {
"work_order_no": "W2001150.001-01:10",
"process_no": "W2001150.001-01:10",
"part_no": "P67-13-103",
"executor": "朱吉生",
"current_date": "2025-12-03"
}
}
}